Fix some indentation behavio + add indent flag

This commit is contained in:
2022-02-16 10:56:21 +01:00
parent a4834a0661
commit 0d1a6f8c82
7 changed files with 27 additions and 12 deletions

View File

@@ -11,7 +11,7 @@ func BuildConfigMap(c interface{}, kind, servicename, name, templatesDir string)
fname := filepath.Join(templatesDir, servicename+"."+name+"."+kind+".yaml") fname := filepath.Join(templatesDir, servicename+"."+name+"."+kind+".yaml")
fp, _ := os.Create(fname) fp, _ := os.Create(fname)
enc := yaml.NewEncoder(fp) enc := yaml.NewEncoder(fp)
enc.SetIndent(2) enc.SetIndent(IndentSize)
enc.Encode(c) enc.Encode(c)
fp.Close() fp.Close()
} }

View File

@@ -16,22 +16,25 @@ func BuildDeployment(deployment *helm.Deployment, name, templatesDir string) {
fp, _ := os.Create(fname) fp, _ := os.Create(fname)
buffer := bytes.NewBuffer(nil) buffer := bytes.NewBuffer(nil)
enc := yaml.NewEncoder(buffer) enc := yaml.NewEncoder(buffer)
enc.SetIndent(2) enc.SetIndent(IndentSize)
enc.Encode(deployment) enc.Encode(deployment)
_content := string(buffer.Bytes()) _content := string(buffer.Bytes())
content := strings.Split(string(_content), "\n") content := strings.Split(string(_content), "\n")
dataname := "" dataname := ""
component := deployment.Spec.Selector["matchLabels"].(map[string]string)[helm.K+"/component"] component := deployment.Spec.Selector["matchLabels"].(map[string]string)[helm.K+"/component"]
n := 0 // will be count of lines only on "persistentVolumeClaim" line, to indent "else" and "end" at the right place
for _, line := range content { for _, line := range content {
if strings.Contains(line, "name:") { if strings.Contains(line, "name:") {
dataname = strings.Split(line, ":")[1] dataname = strings.Split(line, ":")[1]
dataname = strings.TrimSpace(dataname) dataname = strings.TrimSpace(dataname)
} else if strings.Contains(line, "persistentVolumeClaim") { } else if strings.Contains(line, "persistentVolumeClaim") {
line = " {{- if .Values." + component + ".persistence." + dataname + ".enabled }}\n" + line n = CountSpaces(line)
line = strings.Repeat(" ", n) + "{{- if .Values." + component + ".persistence." + dataname + ".enabled }}\n" + line
} else if strings.Contains(line, "claimName") { } else if strings.Contains(line, "claimName") {
line += "\n {{ else }}" spaces := strings.Repeat(" ", n)
line += "\n emptyDir: {}" line += "\n" + spaces + "{{ else }}"
line += "\n {{- end }}" line += "\n" + spaces + "emptyDir: {}"
line += "\n" + spaces + "{{- end }}"
} }
fp.WriteString(line + "\n") fp.WriteString(line + "\n")
} }

View File

@@ -27,7 +27,7 @@ func BuildIngress(ingress *helm.Ingress, name, templatesDir string) {
buffer := bytes.NewBuffer(nil) buffer := bytes.NewBuffer(nil)
fname := filepath.Join(templatesDir, name+"."+kind+".yaml") fname := filepath.Join(templatesDir, name+"."+kind+".yaml")
enc := yaml.NewEncoder(buffer) enc := yaml.NewEncoder(buffer)
enc.SetIndent(2) enc.SetIndent(IndentSize)
buffer.WriteString("{{- if .Values." + name + ".ingress.enabled -}}\n") buffer.WriteString("{{- if .Values." + name + ".ingress.enabled -}}\n")
enc.Encode(ingress) enc.Encode(ingress)
buffer.WriteString("{{- end -}}") buffer.WriteString("{{- end -}}")

View File

@@ -17,7 +17,7 @@ func BuildService(service *helm.Service, name, templatesDir string) {
fname := filepath.Join(templatesDir, name+suffix+"."+kind+".yaml") fname := filepath.Join(templatesDir, name+suffix+"."+kind+".yaml")
fp, _ := os.Create(fname) fp, _ := os.Create(fname)
enc := yaml.NewEncoder(fp) enc := yaml.NewEncoder(fp)
enc.SetIndent(2) enc.SetIndent(IndentSize)
enc.Encode(service) enc.Encode(service)
fp.Close() fp.Close()
} }

View File

@@ -15,7 +15,7 @@ func BuildStorage(storage *helm.Storage, name, templatesDir string) {
volname := storage.K8sBase.Metadata.Labels[helm.K+"/pvc-name"] volname := storage.K8sBase.Metadata.Labels[helm.K+"/pvc-name"]
fp.WriteString("{{ if .Values." + name + ".persistence." + volname + ".enabled }}\n") fp.WriteString("{{ if .Values." + name + ".persistence." + volname + ".enabled }}\n")
enc := yaml.NewEncoder(fp) enc := yaml.NewEncoder(fp)
enc.SetIndent(2) enc.SetIndent(IndentSize)
enc.Encode(storage) enc.Encode(storage)
fp.WriteString("{{- end -}}") fp.WriteString("{{- end -}}")
} }

View File

@@ -1,6 +1,9 @@
package writers package writers
// CountSpaces returns the number of spaces from the begining of the line // IndentSize set the indentation size for yaml output.
var IndentSize = 2
// CountSpaces returns the number of spaces from the begining of the line.
func CountSpaces(line string) int { func CountSpaces(line string) int {
var spaces int var spaces int
for _, char := range line { for _, char := range line {

13
main.go
View File

@@ -2,7 +2,9 @@ package main
import ( import (
"katenary/cmd" "katenary/cmd"
"katenary/generator/writers"
"katenary/helm" "katenary/helm"
"strconv"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@@ -50,16 +52,21 @@ func main() {
Short: "Convert docker-compose to helm chart", Short: "Convert docker-compose to helm chart",
Long: "Convert docker-compose to helm chart. The resulting helm chart will be in the current directory/" + Long: "Convert docker-compose to helm chart. The resulting helm chart will be in the current directory/" +
cmd.ChartsDir + "/" + cmd.AppName + cmd.ChartsDir + "/" + cmd.AppName +
".\nThe appversion will be produced that waty:\n" + ".\nThe appversion will be generated that way:\n" +
"- from git version or tag\n" + "- if it's in a git project, it takes git version or tag\n" +
"- if it's not defined, so the version will be get from the --apVersion flag \n" + "- if it's not defined, so the version will be get from the --apVersion flag \n" +
"- if it's not defined, so the 0.0.1 version is used", "- if it's not defined, so the 0.0.1 version is used",
Run: func(c *cobra.Command, args []string) { Run: func(c *cobra.Command, args []string) {
force := c.Flag("force").Changed force := c.Flag("force").Changed
// TODO: is there a way to get typed values from cobra?
appversion := c.Flag("app-version").Value.String() appversion := c.Flag("app-version").Value.String()
composeFile := c.Flag("compose-file").Value.String() composeFile := c.Flag("compose-file").Value.String()
appName := c.Flag("app-name").Value.String() appName := c.Flag("app-name").Value.String()
chartDir := c.Flag("output-dir").Value.String() chartDir := c.Flag("output-dir").Value.String()
indentation, err := strconv.Atoi(c.Flag("indent-size").Value.String())
if err != nil {
writers.IndentSize = indentation
}
cmd.Convert(composeFile, appversion, appName, chartDir, force) cmd.Convert(composeFile, appversion, appName, chartDir, force)
}, },
} }
@@ -73,6 +80,8 @@ func main() {
"app-name", "n", cmd.AppName, "Application name") "app-name", "n", cmd.AppName, "Application name")
convertCmd.Flags().StringP( convertCmd.Flags().StringP(
"output-dir", "o", cmd.ChartsDir, "Chart directory") "output-dir", "o", cmd.ChartsDir, "Chart directory")
convertCmd.Flags().IntP(
"indent-size", "i", 2, "Set the indent size of the YAML files")
// show possible labels to set in docker-compose file // show possible labels to set in docker-compose file
showLabelsCmd := &cobra.Command{ showLabelsCmd := &cobra.Command{