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.
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 with YAML.safe_load. This will result in deep_merge! properly merging the keys.
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.