Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions pkg/generator/apis_tmpls.go → pkg/generator/api_tmpls.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package generator

// apisDocTmpl is the template for apis/../doc.go
const apisDocTmpl = `// +k8s:deepcopy-gen=package
// apiDocTmpl is the template for apis/../doc.go
const apiDocTmpl = `// +k8s:deepcopy-gen=package
// +groupName={{.GroupName}}
package {{.Version}}
`

// apisRegisterTmpl is the template for apis/../register.go
const apisRegisterTmpl = `package {{.Version}}
// apiRegisterTmpl is the template for apis/../register.go
const apiRegisterTmpl = `package {{.Version}}

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -38,7 +38,8 @@ func addKnownTypes(scheme *runtime.Scheme) error {
}
`

const apisTypesTmpl = `package {{.Version}}
// apiTypesTmpl is the template for apis/../types.go
const apiTypesTmpl = `package {{.Version}}

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down
10 changes: 5 additions & 5 deletions pkg/generator/gen_apis_doc.go → pkg/generator/gen_api_doc.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@ import (
"text/template"
)

// Doc contains all the customized data needed to generate apis/../doc.go for a new operator
// Doc contains all the customized data needed to generate apis/<version>/doc.go for a new operator
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just curious but is the comment supposed to be apis/<apiDirName>/<version>/doc.go since the example generated file is at pkg/apis/play/v1alpha1/doc.go.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@hasbro17 good catch! will fix this in a new pr.

// when pairing with apisDocTmpl template.
type Doc struct {
GroupName string
Version string
}

// renderApisDoc generates the apis/../doc.go file.
func renderApisDoc(w io.Writer, groupName, version string) error {
t := template.New("apis/../doc.go")
t, err := t.Parse(apisDocTmpl)
// renderAPIDocFile generates the apis/<version>/doc.go file.
func renderAPIDocFile(w io.Writer, groupName, version string) error {
t := template.New("apis/<version>/doc.go")
t, err := t.Parse(apiDocTmpl)
if err != nil {
return err
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

const pluralSuffix = "s"

// Register contains all the customized data needed to generate apis/../register.go
// Register contains all the customized data needed to generate apis/<version>/register.go
// for a new operator when pairing with apisDocTmpl template.
type Register struct {
GroupName string
Expand All @@ -17,10 +17,10 @@ type Register struct {
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)
// renderAPIRegisterFile generates the apis/<version>/register.go file.
func renderAPIRegisterFile(w io.Writer, kind, groupName, version string) error {
t := template.New("apis/<version>/register.go")
t, err := t.Parse(apiRegisterTmpl)
if err != nil {
return err
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@ import (
"text/template"
)

// Types contains all the customized data needed to generate apis/../types.go
// Types contains all the customized data needed to generate apis/<version>/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)
// renderAPITypesFile generates the apis/<version>/types.go file.
func renderAPITypesFile(w io.Writer, kind, version string) error {
t := template.New("apis/<version>/types.go")
t, err := t.Parse(apiTypesTmpl)
if err != nil {
return err
}
Expand Down
64 changes: 49 additions & 15 deletions pkg/generator/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import (
)

const (
defaultFileMode = 0750
defaultDirFileMode = 0750
defaultFileMode = 0644
// dirs
cmdDir = "cmd"
deployDir = "deploy"
Expand All @@ -22,8 +23,11 @@ const (
stubDir = pkgDir + "/stub"

// files
main = "main.go"
handler = "handler.go"
main = "main.go"
handler = "handler.go"
doc = "doc.go"
register = "register.go"
types = "types.go"
)

type Generator struct {
Expand Down Expand Up @@ -83,65 +87,95 @@ func (g *Generator) pullDep() error {

func (g *Generator) renderCmd() error {
cpDir := filepath.Join(g.projectName, cmdDir, g.projectName)
if err := os.MkdirAll(cpDir, defaultFileMode); err != nil {
if err := os.MkdirAll(cpDir, defaultDirFileMode); err != nil {
return err
}

buf := &bytes.Buffer{}
if err := renderMain(buf, g.repoPath, version(g.apiVersion), apiDirName(g.apiVersion), g.kind, toPlural(g.kind)); err != nil {
return err
}
return ioutil.WriteFile(filepath.Join(cpDir, main), buf.Bytes(), 0644)
return ioutil.WriteFile(filepath.Join(cpDir, main), buf.Bytes(), defaultFileMode)
}

func toPlural(kind string) string {
return kind + "Plural"
}

func (g *Generator) renderConfig() error {
if err := os.MkdirAll(filepath.Join(g.projectName, configDir), defaultFileMode); err != nil {
if err := os.MkdirAll(filepath.Join(g.projectName, configDir), defaultDirFileMode); err != nil {
return err
}
// TODO render files.
return nil
}

func (g *Generator) renderDeploy() error {
if err := os.MkdirAll(filepath.Join(g.projectName, deployDir), defaultFileMode); err != nil {
if err := os.MkdirAll(filepath.Join(g.projectName, deployDir), defaultDirFileMode); err != nil {
return err
}
// TODO render files.
return nil
}

func (g *Generator) renderTmp() error {
if err := os.MkdirAll(filepath.Join(g.projectName, buildDir), defaultFileMode); err != nil {
if err := os.MkdirAll(filepath.Join(g.projectName, buildDir), defaultDirFileMode); err != nil {
return err
}
if err := os.MkdirAll(filepath.Join(g.projectName, codegenDir), defaultFileMode); err != nil {
if err := os.MkdirAll(filepath.Join(g.projectName, codegenDir), defaultDirFileMode); err != nil {
return err
}
// TODO render files.
return nil
}

func (g *Generator) renderPkg() error {
if err := os.MkdirAll(filepath.Join(g.projectName, apisDir, apiDirName(g.apiVersion), version(g.apiVersion)), defaultFileMode); err != nil {
v := version(g.apiVersion)
apiDir := filepath.Join(g.projectName, apisDir, apiDirName(g.apiVersion), v)
if err := os.MkdirAll(apiDir, defaultDirFileMode); err != nil {
return err
}
if err := renderAPIFiles(apiDir, groupName(g.apiVersion), v, g.kind); err != nil {
return err
}

sDir := filepath.Join(g.projectName, stubDir)
if err := os.MkdirAll(sDir, defaultFileMode); err != nil {
if err := os.MkdirAll(sDir, defaultDirFileMode); err != nil {
return err
}
return renderStubFiles(sDir)
}

func renderAPIFiles(apiDir, groupName, version, kind string) error {
buf := &bytes.Buffer{}
if err := renderHandler(buf); err != nil {
if err := renderAPIDocFile(buf, groupName, version); err != nil {
return err
}
if err := ioutil.WriteFile(filepath.Join(sDir, handler), buf.Bytes(), 0644); err != nil {
if err := ioutil.WriteFile(filepath.Join(apiDir, doc), buf.Bytes(), defaultFileMode); err != nil {
return err
}
// TODO render files.
return nil

buf = &bytes.Buffer{}
if err := renderAPIRegisterFile(buf, kind, groupName, version); err != nil {
return err
}
if err := ioutil.WriteFile(filepath.Join(apiDir, register), buf.Bytes(), defaultFileMode); err != nil {
return err
}

buf = &bytes.Buffer{}
if err := renderAPITypesFile(buf, kind, version); err != nil {
return err
}
return ioutil.WriteFile(filepath.Join(apiDir, types), buf.Bytes(), defaultFileMode)
}

func renderStubFiles(stubDir string) error {
buf := &bytes.Buffer{}
if err := renderHandler(buf); err != nil {
return err
}
return ioutil.WriteFile(filepath.Join(stubDir, handler), buf.Bytes(), defaultFileMode)
}

// version extracts the VERSION from the given apiVersion ($GROUP_NAME/$VERSION).
Expand Down