ignore empty top-level config keys when vetting fix
This commit is contained in:
parent
a5e29e68da
commit
dde6805ee8
|
@ -84,12 +84,21 @@ func (c *ValidateCommand) Run(args []string) int {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if any of the configuration is fixable
|
// Check if any of the configuration is fixable
|
||||||
var templateData map[string]interface{}
|
var rawTemplateData map[string]interface{}
|
||||||
json.Unmarshal(tpl.RawContents, &templateData)
|
|
||||||
input := make(map[string]interface{})
|
input := make(map[string]interface{})
|
||||||
for k, v := range templateData {
|
templateData := make(map[string]interface{})
|
||||||
input[k] = v
|
json.Unmarshal(tpl.RawContents, &rawTemplateData)
|
||||||
|
for k, v := range rawTemplateData {
|
||||||
|
if vals, ok := v.([]interface{}); ok {
|
||||||
|
if len(vals) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
templateData[strings.ToLower(k)] = v
|
||||||
|
input[strings.ToLower(k)] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fix rawTemplateData into input
|
||||||
for _, name := range fix.FixerOrder {
|
for _, name := range fix.FixerOrder {
|
||||||
var err error
|
var err error
|
||||||
fixer, ok := fix.Fixers[name]
|
fixer, ok := fix.Fixers[name]
|
||||||
|
@ -98,7 +107,7 @@ func (c *ValidateCommand) Run(args []string) int {
|
||||||
}
|
}
|
||||||
input, err = fixer.Fix(input)
|
input, err = fixer.Fix(input)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Error fixing: %s", err))
|
c.Ui.Error(fmt.Sprintf("Error checking against fixers: %s", err))
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -113,10 +122,12 @@ func (c *ValidateCommand) Run(args []string) int {
|
||||||
delete(input, k)
|
delete(input, k)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Guaranteed to be valid json, so we can ignore errors
|
// marshal/unmarshal to make comparable to templateData
|
||||||
var fixedData map[string]interface{}
|
var fixedData map[string]interface{}
|
||||||
|
// Guaranteed to be valid json, so we can ignore errors
|
||||||
j, _ := json.Marshal(input)
|
j, _ := json.Marshal(input)
|
||||||
json.Unmarshal(j, &fixedData)
|
json.Unmarshal(j, &fixedData)
|
||||||
|
|
||||||
if diff := cmp.Diff(templateData, fixedData); diff != "" {
|
if diff := cmp.Diff(templateData, fixedData); diff != "" {
|
||||||
c.Ui.Say("[warning] Fixable configuration found.")
|
c.Ui.Say("[warning] Fixable configuration found.")
|
||||||
c.Ui.Say("You may need to run `packer fix` to get your build to run")
|
c.Ui.Say("You may need to run `packer fix` to get your build to run")
|
||||||
|
|
Loading…
Reference in New Issue