in scripts/generate-go-crd-clients/general_types.go [44:175]
func (g *GeneralTypes) Generate() {
g.WriteHeader()
g.Print("package %s", g.Version.Name)
g.Print("import (\n")
g.Print("\"github.com/GoogleCloudPlatform/k8s-config-connector/pkg/clients/generated/apis/k8s/v1alpha1\"")
g.Print("metav1 \"k8s.io/apimachinery/pkg/apis/meta/v1\"")
g.Print(")")
for _, structName := range sortedKeys(g.SpecNestedStructs) {
fields := g.SpecNestedStructs[structName]
g.Print("type %s struct {", structName)
for i, f := range fields {
if i != 0 {
g.Print("")
}
g.structField(f)
}
g.Print("}")
g.Print("")
}
g.Print("type %sSpec struct {", g.Name)
for i, f := range g.SpecFields {
if i != 0 {
g.Print("")
}
g.structField(f)
}
g.Print("}")
g.Print("")
for _, structName := range sortedKeys(g.StatusNestedStructs) {
fields := g.StatusNestedStructs[structName]
g.Print("type %s struct {", structName)
for i, f := range fields {
if i != 0 {
g.Print("")
}
g.structField(f)
}
g.Print("}")
g.Print("")
}
g.Print("type %sStatus struct {", g.Name)
g.Print("\t/* Conditions represent the latest available observations of the")
g.Print("\t %s's current state. */", g.Name)
g.Print("Conditions []v1alpha1.Condition `json:\"conditions,omitempty\"`")
for i, f := range g.StatusFields {
if i != 0 {
g.Print("")
}
g.structField(f)
}
g.Print("}")
g.Print("// +genclient")
g.Print("// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object")
g.Print("// +kubebuilder:resource:categories=%s,shortName=%s",
strings.Join(g.CRD.Spec.Names.Categories, ";"),
strings.Join(g.CRD.Spec.Names.ShortNames, ";"))
if g.Version.Subresources != nil {
if g.Version.Subresources.Status != nil {
g.Print("// +kubebuilder:subresource:status")
}
}
// Output labels for kubebuilder
{
labels := make(map[string]string)
for k, v := range g.CRD.Labels {
labels[k] = v
}
var labelStrings []string
for k, v := range labels {
labelStrings = append(labelStrings, fmt.Sprintf("%q", k+"="+v))
}
sort.Strings(labelStrings)
if len(labelStrings) != 0 {
g.Print("// +kubebuilder:metadata:labels=" + strings.Join(labelStrings, ";"))
}
}
// Output additionalPrinterColumns for kubebuilder
if additionalPrinterColumns := g.Version.AdditionalPrinterColumns; len(additionalPrinterColumns) != 0 {
for _, c := range additionalPrinterColumns {
spec := fmt.Sprintf("name=%q,JSONPath=%q", c.Name, c.JSONPath)
if c.Type != "" {
spec += fmt.Sprintf(",type=%q", c.Type)
}
if c.Format != "" {
spec += fmt.Sprintf(",format=%q", c.Format)
}
if c.Priority != 0 {
spec += fmt.Sprintf(",priority=%d", c.Priority)
}
if c.Description != "" {
spec += fmt.Sprintf(",description=%q", c.Description)
}
g.Print("// +kubebuilder:printcolumn:" + spec)
}
}
g.Print("")
g.Print("// %s is the Schema for the %s API", g.Name, g.Service)
g.Print("// +k8s:openapi-gen=true")
g.Print("type %s struct {", g.Name)
g.Print(" metav1.TypeMeta `json:\",inline\"`")
g.Print(" metav1.ObjectMeta `json:\"metadata,omitempty\"`")
g.Print("")
g.Print(" Spec %sSpec `json:\"spec,omitempty\"`", g.Name)
g.Print(" Status %sStatus `json:\"status,omitempty\"`", g.Name)
g.Print("}")
g.Print(" // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object")
g.Print("")
g.Print(" // %sList contains a list of %s", g.Name, g.Name)
g.Print(" type %sList struct {", g.Name)
g.Print(" metav1.TypeMeta `json:\",inline\"`")
g.Print(" metav1.ListMeta `json:\"metadata,omitempty\"`")
g.Print(" Items []%s `json:\"items\"`", g.Name)
g.Print(" }")
g.Print(" func init() {")
g.Print(" SchemeBuilder.Register(&%s{}, &%sList{})", g.Name, g.Name)
g.Print(" }")
}