From 139e59eeb26d92a8f2ed93400c7917623ad5fcdf Mon Sep 17 00:00:00 2001 From: fanmin shi Date: Wed, 21 Feb 2018 16:30:53 -0800 Subject: [PATCH] pkg/generator: auto-gen for apis/../types.go --- pkg/generator/apis_tmpls.go | 33 +++++++++++++++++++++++++++++++++ pkg/generator/gen_apis_types.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 pkg/generator/gen_apis_types.go diff --git a/pkg/generator/apis_tmpls.go b/pkg/generator/apis_tmpls.go index 88ffb46510..2074f3c0d4 100644 --- a/pkg/generator/apis_tmpls.go +++ b/pkg/generator/apis_tmpls.go @@ -37,3 +37,36 @@ func addKnownTypes(scheme *runtime.Scheme) error { return nil } ` + +const apisTypesTmpl = `package {{.Version}} + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type {{.Kind}}List struct { + metav1.TypeMeta ` + "`" + `json:",inline"` + "`\n" + + ` metav1.ListMeta ` + "`" + `json:"metadata"` + "`\n" + + ` Items []{{.Kind}} ` + "`" + `json:"items"` + "`\n" + + `}` + "\n" + + ` +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +type {{.Kind}} struct { + metav1.TypeMeta ` + "`" + `json:",inline"` + "`\n" + + ` metav1.ObjectMeta ` + "`" + `json:"metadata"` + "`\n" + + ` Spec {{.Kind}}Spec ` + "`" + `json:"spec"` + "`\n" + + ` Status {{.Kind}}Status ` + "`" + `json:"status,omitempty"` + "`\n" + + `}` + "\n" + + ` +type {{.Kind}}Spec struct { + Replica int32 ` + "`" + `json:"replica,omitempty"` + "`\n" + + ` // Fills me ` + "\n" + + `}` + "\n" + + ` +type {{.Kind}}Status struct { + // Fills me +} +` diff --git a/pkg/generator/gen_apis_types.go b/pkg/generator/gen_apis_types.go new file mode 100644 index 0000000000..7c268a742e --- /dev/null +++ b/pkg/generator/gen_apis_types.go @@ -0,0 +1,28 @@ +package generator + +import ( + "io" + "text/template" +) + +// Types contains all the customized data needed to generate apis/../types.go +// for a new operator when pairing with apisTypesTmpl template. +type Types struct { + Version string + Kind string +} + +// renderApisTypes generates the apis/../types.go file. +func renderApisTypes(w io.Writer, kind, version string) error { + t := template.New("apis/../types.go") + t, err := t.Parse(apisTypesTmpl) + if err != nil { + return err + } + + types := Types{ + Version: version, + Kind: kind, + } + return t.Execute(w, types) +}