1
0
mirror of https://github.com/rancher/norman.git synced 2025-09-25 14:46:57 +00:00

Generate scheme objects

This commit is contained in:
Darren Shepherd
2017-12-16 01:22:23 -07:00
parent 227e9f7ca0
commit 4044cb0141
2 changed files with 88 additions and 4 deletions

View File

@@ -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 { func generateK8sClient(outputDir string, version *types.APIVersion, schemas []*types.Schema) error {
filePath := strings.ToLower("zz_generated_k8s_client.go") filePath := strings.ToLower("zz_generated_k8s_client.go")
output, err := os.Create(path.Join(outputDir, filePath)) output, err := os.Create(path.Join(outputDir, filePath))
@@ -270,6 +302,10 @@ func GenerateControllerForTypes(version *types.APIVersion, k8sOutputPackage stri
return err return err
} }
if err := generateScheme(true, k8sDir, version, controllers); err != nil {
return err
}
return gofmt(baseDir, k8sOutputPackage) return gofmt(baseDir, k8sOutputPackage)
} }
@@ -318,7 +354,13 @@ func Generate(schemas *types.Schemas, cattleOutputPackage, k8sOutputPackage stri
return err 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 { if err := gofmt(baseDir, k8sOutputPackage); err != nil {
@@ -382,9 +424,9 @@ func deepCopyGen(workDir, pkg string) error {
HeaderText: []byte{}, HeaderText: []byte{},
GeneratorFunc: func(c *generator.Context) []generator.Generator { GeneratorFunc: func(c *generator.Context) []generator.Generator {
return []generator.Generator{ return []generator.Generator{
&noInitGenerator{ //&noInitGenerator{
generators.NewGenDeepCopy(arguments.OutputFileBaseName, pkg, nil, true, true), generators.NewGenDeepCopy(arguments.OutputFileBaseName, pkg, nil, true, true),
}, //},
} }
}, },
FilterFunc: func(c *generator.Context, t *gengotypes.Type) bool { FilterFunc: func(c *generator.Context, t *gengotypes.Type) bool {

View File

@@ -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
}
`