Skip to content
Merged
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
176 changes: 47 additions & 129 deletions pkg/generator/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,8 +176,6 @@ func (g *Generator) renderCmd() error {
}

func renderCmdFiles(cmdProjectDir, repoPath, apiVersion, kind string) error {
buf := &bytes.Buffer{}

td := tmplData{
OperatorSDKImport: sdkImport,
StubImport: filepath.Join(repoPath, stubDir),
Expand All @@ -187,11 +185,7 @@ func renderCmdFiles(cmdProjectDir, repoPath, apiVersion, kind string) error {
Kind: kind,
}

if err := renderFile(buf, "cmd/<projectName>/main.go", mainTmpl, td); err != nil {
return err
}

return writeFileAndPrint(filepath.Join(cmdProjectDir, main), buf.Bytes(), defaultFileMode)
return renderWriteFile(filepath.Join(cmdProjectDir, main), "cmd/<projectName>/main.go", mainTmpl, td)
}

func (g *Generator) renderConfig() error {
Expand All @@ -213,70 +207,48 @@ func (g *Generator) renderDeploy() error {
}

func renderRBAC(deployDir, projectName, groupName string) error {
buf := &bytes.Buffer{}

td := tmplData{
ProjectName: projectName,
GroupName: groupName,
}

if err := renderFile(buf, rbacTmplName, rbacYamlTmpl, td); err != nil {
return err
}

return writeFileAndPrint(filepath.Join(deployDir, rbacYaml), buf.Bytes(), defaultFileMode)
return renderWriteFile(filepath.Join(deployDir, rbacYaml), rbacTmplName, rbacYamlTmpl, td)
}

func renderDeployFiles(deployDir, projectName, apiVersion, kind string) error {
buf := &bytes.Buffer{}
rbacTd := tmplData{
ProjectName: projectName,
GroupName: groupName(apiVersion),
}
if err := renderFile(buf, rbacTmplName, rbacYamlTmpl, rbacTd); err != nil {
return err
}
if err := writeFileAndPrint(filepath.Join(deployDir, rbacYaml), buf.Bytes(), defaultFileMode); err != nil {
if err := renderWriteFile(filepath.Join(deployDir, rbacYaml), rbacTmplName, rbacYamlTmpl, rbacTd); err != nil {
return err
}

buf = &bytes.Buffer{}
crdTd := tmplData{
Kind: kind,
KindSingular: strings.ToLower(kind),
KindPlural: toPlural(strings.ToLower(kind)),
GroupName: groupName(apiVersion),
Version: version(apiVersion),
}
if err := renderFile(buf, crdTmplName, crdYamlTmpl, crdTd); err != nil {
return err
}
if err := writeFileAndPrint(filepath.Join(deployDir, crdYaml), buf.Bytes(), defaultFileMode); err != nil {
if err := renderWriteFile(filepath.Join(deployDir, crdYaml), crdTmplName, crdYamlTmpl, crdTd); err != nil {
return err
}

buf = &bytes.Buffer{}
crTd := tmplData{
APIVersion: apiVersion,
Kind: kind,
}
if err := renderFile(buf, crTmplName, crYamlTmpl, crTd); err != nil {
return err
}
return writeFileAndPrint(filepath.Join(deployDir, crYaml), buf.Bytes(), defaultFileMode)
return renderWriteFile(filepath.Join(deployDir, crYaml), crTmplName, crYamlTmpl, crTd)
}

// RenderOperatorYaml generates "deploy/operator.yaml"
func RenderOperatorYaml(c *Config, image string) error {
buf := &bytes.Buffer{}
td := tmplData{
ProjectName: c.ProjectName,
Image: image,
}
if err := renderFile(buf, operatorTmplName, operatorYamlTmpl, td); err != nil {
return err
}
return ioutil.WriteFile(operatorYaml, buf.Bytes(), defaultFileMode)
return renderWriteFile(operatorYaml, operatorTmplName, operatorYamlTmpl, td)
}

// RenderOlmCatalog generates catalog manifests "deploy/olm-catalog/*"
Expand All @@ -290,39 +262,30 @@ func RenderOlmCatalog(c *Config, image, version string) error {
olmDir := filepath.Join(repoPath, olmCatalogDir)

// deploy/olm-catalog/package.yaml
buf := &bytes.Buffer{}
cpTd := tmplData{
PackageName: strings.ToLower(c.Kind),
ChannelName: packageChannel,
CurrentCSV: getCSVName(strings.ToLower(c.Kind), version),
}
if err := renderFile(buf, catalogPackageYaml, catalogPackageTmpl, cpTd); err != nil {
return err
}
path := filepath.Join(olmDir, catalogPackageYaml)
if err := ioutil.WriteFile(path, buf.Bytes(), defaultFileMode); err != nil {
if err := renderWriteFile(path, catalogPackageYaml, catalogPackageTmpl, cpTd); err != nil {
return err
}

// deploy/olm-catalog/crd.yaml
buf = &bytes.Buffer{}
ccrdTd := tmplData{
Kind: c.Kind,
KindSingular: strings.ToLower(c.Kind),
KindPlural: toPlural(strings.ToLower(c.Kind)),
GroupName: groupName(c.APIVersion),
Version: version,
}
if err := renderFile(buf, catalogCRDTmplName, crdTmpl, ccrdTd); err != nil {
return err
}
path = filepath.Join(olmDir, crdYaml)
if err := ioutil.WriteFile(path, buf.Bytes(), defaultFileMode); err != nil {
if err := renderWriteFile(path, catalogCRDTmplName, crdTmpl, ccrdTd); err != nil {
return err
}

// deploy/olm-catalog/csv.yaml
buf = &bytes.Buffer{}
ccsvTd := tmplData{
Kind: c.Kind,
KindSingular: strings.ToLower(c.Kind),
Expand All @@ -334,11 +297,8 @@ func RenderOlmCatalog(c *Config, image, version string) error {
CatalogVersion: version,
ProjectName: c.ProjectName,
}
if err := renderFile(buf, catalogCSVYaml, catalogCSVTmpl, ccsvTd); err != nil {
return err
}
path = filepath.Join(olmDir, catalogCSVYaml)
return ioutil.WriteFile(path, buf.Bytes(), defaultFileMode)
return renderWriteFile(path, catalogCSVYaml, catalogCSVTmpl, ccsvTd)
}

func getCSVName(name, version string) string {
Expand All @@ -356,22 +316,15 @@ func (g *Generator) renderTmp() error {
}

func (g *Generator) renderVersion() error {
buf := &bytes.Buffer{}

td := tmplData{
VersionNumber: "0.0.1",
}

if err := renderFile(buf, "version/version.go", versionTmpl, td); err != nil {
return err
}

return writeFileAndPrint(filepath.Join(g.projectName, versionDir, versionfile), buf.Bytes(), defaultFileMode)
return renderWriteFile(filepath.Join(g.projectName, versionDir, versionfile), "version/version.go", versionTmpl, td)
}

func renderBuildFiles(buildDir, repoPath, projectName string) error {
buf := &bytes.Buffer{}

bTd := tmplData{
ProjectName: projectName,
RepoPath: repoPath,
Expand All @@ -392,14 +345,13 @@ func renderBuildFiles(buildDir, repoPath, projectName string) error {
return err
}

buf = &bytes.Buffer{}
dTd := tmplData{
ProjectName: projectName,
}
if err := renderFile(buf, "tmp/build/Dockerfile", dockerFileTmpl, dTd); err != nil {
return err
}
return writeFileAndPrint(filepath.Join(buildDir, dockerfile), buf.Bytes(), defaultFileMode)
return renderWriteFile(filepath.Join(buildDir, dockerfile), "tmp/build/Dockerfile", dockerFileTmpl, dTd)
}

func renderDockerBuildFile(w io.Writer) error {
Expand All @@ -408,18 +360,14 @@ func renderDockerBuildFile(w io.Writer) error {
}

func renderCodegenFiles(codegenDir, repoPath, apiDirName, version, projectName string) error {
buf := &bytes.Buffer{}
bTd := tmplData{
ProjectName: projectName,
}
if err := renderFile(buf, "codegen/boilerplate.go.txt", boilerplateTmpl, bTd); err != nil {
return err
}
if err := writeFileAndPrint(filepath.Join(codegenDir, boilerplate), buf.Bytes(), defaultFileMode); err != nil {
if err := renderWriteFile(filepath.Join(codegenDir, boilerplate), "codegen/boilerplate.go.txt", boilerplateTmpl, bTd); err != nil {
return err
}

buf = &bytes.Buffer{}
buf := &bytes.Buffer{}
ugTd := tmplData{
RepoPath: repoPath,
APIDirName: apiDirName,
Expand All @@ -444,56 +392,40 @@ func (g *Generator) renderPkg() error {
}

func renderAPIFiles(apiDir, groupName, version, kind string) error {
buf := &bytes.Buffer{}
adTd := tmplData{
GroupName: groupName,
Version: version,
}
if err := renderFile(buf, "apis/<apiDirName>/<version>/doc.go", apiDocTmpl, adTd); err != nil {
return err
}
if err := writeFileAndPrint(filepath.Join(apiDir, doc), buf.Bytes(), defaultFileMode); err != nil {
if err := renderWriteFile(filepath.Join(apiDir, doc), "apis/<apiDirName>/<version>/doc.go", apiDocTmpl, adTd); err != nil {
return err
}

buf = &bytes.Buffer{}
arTd := tmplData{
Kind: kind,
KindPlural: toPlural(strings.ToLower(kind)),
GroupName: groupName,
Version: version,
}
if err := renderFile(buf, "apis/<apiDirName>/<version>/register.go", apiRegisterTmpl, arTd); err != nil {
return err
}
if err := writeFileAndPrint(filepath.Join(apiDir, register), buf.Bytes(), defaultFileMode); err != nil {
if err := renderWriteFile(filepath.Join(apiDir, register), "apis/<apiDirName>/<version>/register.go", apiRegisterTmpl, arTd); err != nil {
return err
}

buf = &bytes.Buffer{}
atTd := tmplData{
Kind: kind,
Version: version,
}
if err := renderFile(buf, "apis/<apiDirName>/<version>/types.go", apiTypesTmpl, atTd); err != nil {
return err
}
return writeFileAndPrint(filepath.Join(apiDir, types), buf.Bytes(), defaultFileMode)
return renderWriteFile(filepath.Join(apiDir, types), "apis/<apiDirName>/<version>/types.go", apiTypesTmpl, atTd)
}

func renderStubFiles(stubDir, repoPath, kind, apiDirName, version string) error {
buf := &bytes.Buffer{}
td := tmplData{
OperatorSDKImport: sdkImport,
RepoPath: repoPath,
Kind: kind,
APIDirName: apiDirName,
Version: version,
}
if err := renderFile(buf, "stub/handler.go", handlerTmpl, td); err != nil {
return err
}
return writeFileAndPrint(filepath.Join(stubDir, handler), buf.Bytes(), defaultFileMode)
return renderWriteFile(filepath.Join(stubDir, handler), "stub/handler.go", handlerTmpl, td)
}

type tmplData struct {
Expand Down Expand Up @@ -533,52 +465,23 @@ type tmplData struct {

// Creates all the necesary directories for the generated files
func (g *Generator) generateDirStructure() error {
if err := os.MkdirAll(g.projectName, defaultDirFileMode); err != nil {
return err
dirsToCreate := []string{
g.projectName,
filepath.Join(g.projectName, cmdDir, g.projectName),
filepath.Join(g.projectName, configDir),
filepath.Join(g.projectName, deployDir),
filepath.Join(g.projectName, olmCatalogDir),
filepath.Join(g.projectName, buildDir),
filepath.Join(g.projectName, codegenDir),
filepath.Join(g.projectName, versionDir),
filepath.Join(g.projectName, apisDir, apiDirName(g.apiVersion), version(g.apiVersion)),
filepath.Join(g.projectName, stubDir),
}

cpDir := filepath.Join(g.projectName, cmdDir, g.projectName)
if err := os.MkdirAll(cpDir, defaultDirFileMode); err != nil {
return err
}

cp := filepath.Join(g.projectName, configDir)
if err := os.MkdirAll(cp, defaultDirFileMode); err != nil {
return err
}

dp := filepath.Join(g.projectName, deployDir)
if err := os.MkdirAll(dp, defaultDirFileMode); err != nil {
return err
}

op := filepath.Join(g.projectName, olmCatalogDir)
if err := os.MkdirAll(op, defaultDirFileMode); err != nil {
return err
}

bDir := filepath.Join(g.projectName, buildDir)
if err := os.MkdirAll(bDir, defaultDirFileMode); err != nil {
return err
}
cDir := filepath.Join(g.projectName, codegenDir)
if err := os.MkdirAll(cDir, defaultDirFileMode); err != nil {
return err
}

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

v := version(g.apiVersion)
adn := apiDirName(g.apiVersion)
apiDir := filepath.Join(g.projectName, apisDir, adn, v)
if err := os.MkdirAll(apiDir, defaultDirFileMode); err != nil {
return err
}
sDir := filepath.Join(g.projectName, stubDir)
if err := os.MkdirAll(sDir, defaultDirFileMode); err != nil {
return err
for _, dir := range dirsToCreate {
if err := os.MkdirAll(dir, defaultDirFileMode); err != nil {
return err
}
}

return nil
Expand Down Expand Up @@ -623,3 +526,18 @@ func writeFileAndPrint(filePath string, data []byte, fileMode os.FileMode) error
fmt.Printf("Create %v \n", filePath)
return nil
}

// Combines steps of creating buffer, writing to buffer, and writing buffer to file in one call
func renderWriteFile(filePath string, fileLoc string, fileTmpl string, info tmplData) error {
buf := &bytes.Buffer{}

if err := renderFile(buf, fileLoc, fileTmpl, info); err != nil {
return err
}

if err := writeFileAndPrint(filePath, buf.Bytes(), defaultFileMode); err != nil {
return err
}

return nil
}