diff --git a/pkg/generator/apis_tmpls.go b/pkg/generator/apis_tmpls.go index 86a1ed8fe3..88ffb46510 100644 --- a/pkg/generator/apis_tmpls.go +++ b/pkg/generator/apis_tmpls.go @@ -5,3 +5,35 @@ const apisDocTmpl = `// +k8s:deepcopy-gen=package // +groupName={{.GroupName}} package {{.Version}} ` + +// apisRegisterTmpl is the template for apis/../register.go +const apisRegisterTmpl = `package {{.Version}} + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +const ( + version = "{{.Version}}" + groupName = "{{.GroupName}}" +) + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToSchemes + // SchemeGroupVersion is the group version used to register these objects. + SchemeGroupVersion = schema.GroupVersion{Group: groupName, Version: version} +) + +// addKnownTypes adds the set of types defined in this package to the supplied scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &{{.Kind}}{}, + &{{.Kind}}List{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} +` diff --git a/pkg/generator/gen_apis_register.go b/pkg/generator/gen_apis_register.go new file mode 100644 index 0000000000..b6c3c9fb83 --- /dev/null +++ b/pkg/generator/gen_apis_register.go @@ -0,0 +1,37 @@ +package generator + +import ( + "io" + "strings" + "text/template" +) + +const pluralSuffix = "s" + +// Register contains all the customized data needed to generate apis/../register.go +// for a new operator when pairing with apisDocTmpl template. +type Register struct { + GroupName string + Version string + Kind string + KindPlural string +} + +// renderApisDoc generates the apis/../doc.go file. +func renderApisRegister(w io.Writer, kind, groupName, version string) error { + t := template.New("apis/../register.go") + t, err := t.Parse(apisRegisterTmpl) + if err != nil { + return err + } + + d := Register{ + GroupName: groupName, + Version: version, + Kind: kind, + // TODO: adding "s" to make a word plural is too native + // and is wrong for many special nouns. Make this better. + KindPlural: strings.ToLower(kind) + pluralSuffix, + } + return t.Execute(w, d) +}