Fix --var variables merging into config file variables #97
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Context
Note: Run with ruby 2.5.3
We're planning to have a series of configuration files (shot.yaml, shot-prod.yaml, etc.) and then override some values at deploy time using the
--var
option.So trying this out with:
What we would expect is that the
tag
value gets updated tofinalfinalv4
while other values stay the sameHowever what we get is:
Issue
This seems to be a bug caused by a discrepancy in between the outputs of
YAML.safe_load
andvariables_hash
YAML outputs a hash of string keys
variables_hash
outputs a hash with symbol keysWhich means in
Config.variables
when it runsdeep_merge!
we get:When finally passed to
RecursiveOpenStruct
, it'll read from either the string or symbol version (typically the latter it seems like) which means it drops the values from the other.Fix
This PR forces
variables_hash
to use string keys so the keys match withYAML.safe_load
. This will result indeep_merge!
properly merging the keys.