Skip to content

Commit

Permalink
Fixes extra newline from confs
Browse files Browse the repository at this point in the history
As we are using templates to dynamicaly create confs on conditions,
Often extra newlines are getting added in confs, we should remove them.
  • Loading branch information
auniyal61 committed Sep 13, 2024
1 parent 174296c commit b5023a9
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 0 deletions.
52 changes: 52 additions & 0 deletions modules/common/util/template_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,48 @@ type Template struct {
ConfigOptions map[string]interface{} // map of parameters as input data to render the templates
SkipSetOwner bool // skip setting ownership on the associated configmap
Version string // optional version string to separate templates inside the InstanceType/Type directory. E.g. placementapi/config/18.0
PostProcessCleanup bool // optional boolean parameter to remove extra new lines from service confs, by default set to false
}

// This function removes extra space and new-lines from conf data
func removeSubsequentNewLines(rawConf string) string {
lines := strings.Split(rawConf, "\n")
var result []string
var prevLineWasBlank bool

for _, line := range lines {
trimmedLine := strings.TrimSpace(line)

if trimmedLine == "" {
prevLineWasBlank = true
// if current line is blank, no need to add it in result
} else {
if strings.HasPrefix(trimmedLine, "[") && strings.HasSuffix(trimmedLine, "]") {
// section-header
if len(result) > 0 && !prevLineWasBlank {
result = append(result, "")
}
var sectionHeaderLine string
if len(result) > 0 {
// new section-hearder
sectionHeaderLine = "\n" + line
} else {
sectionHeaderLine = line
}
result = append(result, sectionHeaderLine)
} else {
// secion-body
result = append(result, line)
}
// reset flag
prevLineWasBlank = false
}
}

// add an extra line at EOF
result = append(result, "")

return strings.Join(result, "\n")
}

// GetTemplatesPath get path to templates, either running local or deployed as container
Expand Down Expand Up @@ -135,6 +177,7 @@ func ExecuteTemplate(templateFile string, data interface{}) (string, error) {
if err != nil {
return "", err
}

return renderedTemplate, nil
}

Expand Down Expand Up @@ -244,5 +287,14 @@ func GetTemplateData(t Template) (map[string]string, error) {
data[filename] = renderedTemplate
}

if t.PostProcessCleanup {
for filename, content := range data {
if strings.HasSuffix(filename, ".conf") {
// as of now, only clean for confs
data[filename] = removeSubsequentNewLines(content)
}
}
}

return data, nil
}
5 changes: 5 additions & 0 deletions modules/common/util/template_util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ func TestGetAllTemplates(t *testing.T) {
tmplType: TemplateTypeConfig,
version: "",
want: []string{
filepath.Join(path.Dir(filename), templatePath, "testservice", "config", "bar.conf"),
filepath.Join(path.Dir(filename), templatePath, "testservice", "config", "config.json"),
filepath.Join(path.Dir(filename), templatePath, "testservice", "config", "foo.conf"),
},
Expand Down Expand Up @@ -136,8 +137,10 @@ func TestGetTemplateData(t *testing.T) {
"Upper": "BAR",
},
AdditionalTemplate: map[string]string{},
PostProcessCleanup: true,
},
want: map[string]string{
"bar.conf": "[DEFAULT]\nstate_path = /var/lib/nova\ndebug=true\ncompute_driver = libvirt.LibvirtDriver\n\n[oslo_concurrency]\nlock_path = /var/lib/nova/tmp\n",
"config.json": "{\n \"command\": \"/usr/sbin/httpd -DFOREGROUND\",\n}\n",
"foo.conf": "username = foo\ncount = 1\nadd = 3\nlower = bar\n",
},
Expand Down Expand Up @@ -173,11 +176,13 @@ func TestGetTemplateData(t *testing.T) {
"Message": "some common func",
},
AdditionalTemplate: map[string]string{"common.sh": "/common/common.sh"},
PostProcessCleanup: true,
},
want: map[string]string{
"config.json": "{\n \"command\": \"/usr/sbin/httpd -DFOREGROUND\",\n}\n",
"foo.conf": "username = foo\ncount = 1\nadd = 3\nlower = bar\n",
"common.sh": "#!/bin/bash\nset -e\n\nfunction common_func {\n echo some common func\n}\n",
"bar.conf": "[DEFAULT]\nstate_path = /var/lib/nova\ndebug=true\ncompute_driver = libvirt.LibvirtDriver\n\n[oslo_concurrency]\nlock_path = /var/lib/nova/tmp\n",
},
error: false,
},
Expand Down
11 changes: 11 additions & 0 deletions modules/common/util/testdata/templates/testservice/config/bar.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[DEFAULT]
state_path = /var/lib/nova


debug=true

compute_driver = libvirt.LibvirtDriver


[oslo_concurrency]
lock_path = /var/lib/nova/tmp

0 comments on commit b5023a9

Please sign in to comment.