diff --git a/pkg/generator/generator.go b/pkg/generator/generator.go index cf69334bf5..4bd9aaa63e 100644 --- a/pkg/generator/generator.go +++ b/pkg/generator/generator.go @@ -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), @@ -187,11 +185,7 @@ func renderCmdFiles(cmdProjectDir, repoPath, apiVersion, kind string) error { Kind: kind, } - if err := renderFile(buf, "cmd//main.go", mainTmpl, td); err != nil { - return err - } - - return writeFileAndPrint(filepath.Join(cmdProjectDir, main), buf.Bytes(), defaultFileMode) + return renderWriteFile(filepath.Join(cmdProjectDir, main), "cmd//main.go", mainTmpl, td) } func (g *Generator) renderConfig() error { @@ -213,34 +207,23 @@ 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), @@ -248,35 +231,24 @@ func renderDeployFiles(deployDir, projectName, apiVersion, kind string) error { 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/*" @@ -290,22 +262,17 @@ 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), @@ -313,16 +280,12 @@ func RenderOlmCatalog(c *Config, image, version string) error { 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), @@ -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 { @@ -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, @@ -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 { @@ -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, @@ -444,45 +392,32 @@ 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///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///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///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///register.go", apiRegisterTmpl, arTd); err != nil { return err } - buf = &bytes.Buffer{} atTd := tmplData{ Kind: kind, Version: version, } - if err := renderFile(buf, "apis///types.go", apiTypesTmpl, atTd); err != nil { - return err - } - return writeFileAndPrint(filepath.Join(apiDir, types), buf.Bytes(), defaultFileMode) + return renderWriteFile(filepath.Join(apiDir, types), "apis///types.go", apiTypesTmpl, atTd) } func renderStubFiles(stubDir, repoPath, kind, apiDirName, version string) error { - buf := &bytes.Buffer{} td := tmplData{ OperatorSDKImport: sdkImport, RepoPath: repoPath, @@ -490,10 +425,7 @@ func renderStubFiles(stubDir, repoPath, kind, apiDirName, version string) error 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 { @@ -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 @@ -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 +}