Set ConfigFile to parse compose files with bake

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax
2021-07-30 17:56:40 +02:00
parent 0363b676bc
commit 9aa8f09f14
8 changed files with 79 additions and 29 deletions

View File

@ -217,16 +217,35 @@ func Load(configDetails types.ConfigDetails, options ...func(*Options)) (*types.
func parseConfig(b []byte, opts *Options) (map[string]interface{}, error) {
if !opts.SkipInterpolation {
substitute, err := opts.Interpolate.Substitute(string(b), template.Mapping(opts.Interpolate.LookupValue))
withoutComments, err := removeYamlComments(b)
if err != nil {
return nil, err
}
b = []byte(substitute)
substituted, err := opts.Interpolate.Substitute(string(withoutComments), template.Mapping(opts.Interpolate.LookupValue))
if err != nil {
return nil, err
}
b = []byte(substituted)
}
return ParseYAML(b)
}
// removeYamlComments drop all comments from the yaml file, so we don't try to apply string substitutions on irrelevant places
func removeYamlComments(b []byte) ([]byte, error) {
var cfg interface{}
err := yaml.Unmarshal(b, &cfg)
if err != nil {
return nil, err
}
b, err = yaml.Marshal(cfg)
if err != nil {
return nil, err
}
return b, nil
}
func groupXFieldsIntoExtensions(dict map[string]interface{}) map[string]interface{} {
extras := map[string]interface{}{}
for key, value := range dict {

View File

@ -20,6 +20,8 @@ import (
"fmt"
"regexp"
"strings"
"github.com/sirupsen/logrus"
)
var delimiter = "\\$"
@ -61,7 +63,7 @@ type Mapping func(string) (string, bool)
// the substitution and an error.
type SubstituteFunc func(string, Mapping) (string, bool, error)
// SubstituteWith subsitute variables in the string with their values.
// SubstituteWith substitute variables in the string with their values.
// It accepts additional substitute function.
func SubstituteWith(template string, mapping Mapping, pattern *regexp.Regexp, subsFuncs ...SubstituteFunc) (string, error) {
var err error
@ -97,7 +99,10 @@ func SubstituteWith(template string, mapping Mapping, pattern *regexp.Regexp, su
return value
}
value, _ := mapping(substitution)
value, ok := mapping(substitution)
if !ok {
logrus.Warnf("The %q variable is not set. Defaulting to a blank string.", substitution)
}
return value
})

View File

@ -20,7 +20,6 @@ import (
"encoding/json"
"github.com/mitchellh/mapstructure"
"github.com/sirupsen/logrus"
)
// ConfigDetails are the details about a group of ConfigFiles
@ -34,9 +33,6 @@ type ConfigDetails struct {
// LookupEnv provides a lookup function for environment variables
func (cd ConfigDetails) LookupEnv(key string) (string, bool) {
v, ok := cd.Environment[key]
if !ok {
logrus.Warnf("The %s variable is not set. Defaulting to a blank string.", key)
}
return v, ok
}