mirror of
https://github.com/foomo/squadron.git
synced 2025-10-16 12:35:42 +00:00
feat: replace - in template vars
This commit is contained in:
parent
0379838651
commit
edad11ed7e
27
template.go
27
template.go
@ -3,7 +3,6 @@ package squadron
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
b64 "encoding/base64"
|
b64 "encoding/base64"
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
@ -13,6 +12,7 @@ import (
|
|||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
"github.com/miracl/conflate"
|
"github.com/miracl/conflate"
|
||||||
|
"github.com/pkg/errors"
|
||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ func executeSquadronTemplate(text string, c *Configuration, tv TemplateVars) err
|
|||||||
// execute without errors to get existing values
|
// execute without errors to get existing values
|
||||||
out, err := executeFileTemplate(text, tv, false)
|
out, err := executeFileTemplate(text, tv, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return errors.Wrap(err, "failed to execute initial file template")
|
||||||
}
|
}
|
||||||
var vars map[string]interface{}
|
var vars map[string]interface{}
|
||||||
if err := yaml.Unmarshal(out, &vars); err != nil {
|
if err := yaml.Unmarshal(out, &vars); err != nil {
|
||||||
@ -96,14 +96,16 @@ func executeSquadronTemplate(text string, c *Configuration, tv TemplateVars) err
|
|||||||
}
|
}
|
||||||
// execute again with loaded template vars
|
// execute again with loaded template vars
|
||||||
if value, ok := vars["global"]; ok {
|
if value, ok := vars["global"]; ok {
|
||||||
|
replace(value)
|
||||||
tv.add("Global", value)
|
tv.add("Global", value)
|
||||||
}
|
}
|
||||||
if value, ok := vars["squadron"]; ok {
|
if value, ok := vars["squadron"]; ok {
|
||||||
|
replace(value)
|
||||||
tv.add("Squadron", value)
|
tv.add("Squadron", value)
|
||||||
}
|
}
|
||||||
out, err = executeFileTemplate(text, tv, true)
|
out, err = executeFileTemplate(text, tv, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return errors.Wrap(err, "failed to execute second file template")
|
||||||
}
|
}
|
||||||
if err := yaml.Unmarshal(out, &c); err != nil {
|
if err := yaml.Unmarshal(out, &c); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -111,20 +113,31 @@ func executeSquadronTemplate(text string, c *Configuration, tv TemplateVars) err
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func replace(in interface{}) {
|
||||||
|
if value, ok := in.(map[string]interface{}); ok {
|
||||||
|
for k, v := range value {
|
||||||
|
if strings.Contains(k, "-") {
|
||||||
|
value[strings.Replace(k, "-", "_", -1)] = v
|
||||||
|
delete(value, k)
|
||||||
|
}
|
||||||
|
replace(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func mergeSquadronFiles(files []string, c *Configuration, tv TemplateVars) error {
|
func mergeSquadronFiles(files []string, c *Configuration, tv TemplateVars) error {
|
||||||
// step 1: merge 'valid' yaml files
|
// step 1: merge 'valid' yaml files
|
||||||
mergedFiles, err := conflate.FromFiles(files...)
|
mergedFiles, err := conflate.FromFiles(files...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return errors.Wrap(err, "failed to conflate files")
|
||||||
}
|
}
|
||||||
var data interface{}
|
var data interface{}
|
||||||
if err := mergedFiles.Unmarshal(&data); err != nil {
|
if err := mergedFiles.Unmarshal(&data); err != nil {
|
||||||
return err
|
return errors.Wrap(err, "failed to unmarshal data")
|
||||||
}
|
}
|
||||||
|
|
||||||
mergedBytes, err := mergedFiles.MarshalYAML()
|
mergedBytes, err := mergedFiles.MarshalYAML()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return errors.Wrap(err, "failed to marshal yaml")
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO print out YAML on debug
|
// TODO print out YAML on debug
|
||||||
|
|||||||
13
testdata/config-template/squadron.yaml
vendored
13
testdata/config-template/squadron.yaml
vendored
@ -22,3 +22,16 @@ squadron:
|
|||||||
base64: <% base64 "1234567890" %>
|
base64: <% base64 "1234567890" %>
|
||||||
values: |
|
values: |
|
||||||
<% file "testdata/config-template/values.yaml" | indent 8 %>
|
<% file "testdata/config-template/values.yaml" | indent 8 %>
|
||||||
|
frontend-admin:
|
||||||
|
chart:
|
||||||
|
name: mychart
|
||||||
|
version: 0.1.0
|
||||||
|
repository: http://helm.mycompany.com/repository
|
||||||
|
builds:
|
||||||
|
default:
|
||||||
|
tag: latest
|
||||||
|
image: docker.mycompany.com/mycomapny/frontend-admin
|
||||||
|
values:
|
||||||
|
image:
|
||||||
|
tag: <% .Squadron.frontend_admin.builds.default.tag %>
|
||||||
|
repository: <% .Squadron.frontend_admin.builds.default.image %>
|
||||||
|
|||||||
13
testdata/config-template/squadron.yaml.snapshot
vendored
13
testdata/config-template/squadron.yaml.snapshot
vendored
@ -23,3 +23,16 @@ squadron:
|
|||||||
bar:
|
bar:
|
||||||
- foo
|
- foo
|
||||||
- bar
|
- bar
|
||||||
|
frontend-admin:
|
||||||
|
chart:
|
||||||
|
name: mychart
|
||||||
|
repository: http://helm.mycompany.com/repository
|
||||||
|
version: 0.1.0
|
||||||
|
builds:
|
||||||
|
default:
|
||||||
|
image: docker.mycompany.com/mycomapny/frontend-admin
|
||||||
|
tag: latest
|
||||||
|
values:
|
||||||
|
image:
|
||||||
|
repository: docker.mycompany.com/mycomapny/frontend-admin
|
||||||
|
tag: latest
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user