diff --git a/generator/generator.go b/generator/generator.go index 4ed33b26..f23c8b11 100644 --- a/generator/generator.go +++ b/generator/generator.go @@ -195,6 +195,38 @@ func generateController(external bool, outputDir string, schema *types.Schema, s }) } +func generateScheme(external bool, outputDir string, version *types.APIVersion, schemas []*types.Schema) error { + filePath := strings.ToLower("zz_generated_scheme.go") + output, err := os.Create(path.Join(outputDir, filePath)) + if err != nil { + return err + } + defer output.Close() + + typeTemplate, err := template.New("scheme.template"). + Funcs(funcs()). + Parse(strings.Replace(schemeTemplate, "%BACK%", "`", -1)) + if err != nil { + return err + } + + names := []string{} + for _, schema := range schemas { + if !external { + names = append(names, schema.CodeName) + } + if schema.CanList() { + names = append(names, schema.CodeName+"List") + } + } + + return typeTemplate.Execute(output, map[string]interface{}{ + "version": version, + "schemas": schemas, + "names": names, + }) +} + func generateK8sClient(outputDir string, version *types.APIVersion, schemas []*types.Schema) error { filePath := strings.ToLower("zz_generated_k8s_client.go") output, err := os.Create(path.Join(outputDir, filePath)) @@ -270,6 +302,10 @@ func GenerateControllerForTypes(version *types.APIVersion, k8sOutputPackage stri return err } + if err := generateScheme(true, k8sDir, version, controllers); err != nil { + return err + } + return gofmt(baseDir, k8sOutputPackage) } @@ -318,7 +354,13 @@ func Generate(schemas *types.Schemas, cattleOutputPackage, k8sOutputPackage stri return err } - generateK8sClient(k8sDir, &controllers[0].Version, controllers) + if err := generateK8sClient(k8sDir, &controllers[0].Version, controllers); err != nil { + return err + } + + if err := generateScheme(false, k8sDir, &controllers[0].Version, controllers); err != nil { + return err + } } if err := gofmt(baseDir, k8sOutputPackage); err != nil { @@ -382,9 +424,9 @@ func deepCopyGen(workDir, pkg string) error { HeaderText: []byte{}, GeneratorFunc: func(c *generator.Context) []generator.Generator { return []generator.Generator{ - &noInitGenerator{ - generators.NewGenDeepCopy(arguments.OutputFileBaseName, pkg, nil, true, true), - }, + //&noInitGenerator{ + generators.NewGenDeepCopy(arguments.OutputFileBaseName, pkg, nil, true, true), + //}, } }, FilterFunc: func(c *generator.Context, t *gengotypes.Type) bool { diff --git a/generator/scheme_template.go b/generator/scheme_template.go new file mode 100644 index 00000000..0ef19048 --- /dev/null +++ b/generator/scheme_template.go @@ -0,0 +1,42 @@ +package generator + +var schemeTemplate = `package {{.version.Version}} + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +const ( + GroupName = "{{.version.Group}}" + Version = "{{.version.Version}}" +) + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: Version} + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) schema.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + // TODO this gets cleaned up when the types are fixed + scheme.AddKnownTypes(SchemeGroupVersion, + {{range .names}} + &{{.}}{},{{end}} + ) + return nil +} +`