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:
@@ -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 {
|
||||||
|
42
generator/scheme_template.go
Normal file
42
generator/scheme_template.go
Normal 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
|
||||||
|
}
|
||||||
|
`
|
Reference in New Issue
Block a user