I am using chef-solo and I am trying to use data bags as a way of
controlling some external environment data.
My workflow dictates that all cookbooks are stored in one git repository
and I tag production releases.
To remove sensitive and changeable env data from this repository, I have
moved certain attributes into data bags and at run time I am loading those
data bags from a directory in the solo config file.
I am trying to merge the data bag attributes into node attributes in a
recipe doing the following:
I would expect node[‘cookbook_name’][‘memcache’][‘servers’] to have become
the above array, but I am still finding the default attribute from the
cookbook to be the value used.
Have I missed something fundamental in how attributes are merged,
especially if they are several layers deep in a Hash?
Your understanding of how attributes are merged should indeed work. In
your pasted code, it looks like you're not interpolating the value of 'k',
which would be why it's not working.
Two things:
Recommended best practice when setting node attributes is to stick to
using defaults and let merge order do the rest. You could set default
attributes once you're using the value of k and that should also work. It
leaves you with plenty of remaining options if you later find yourself
needing to then override these values elsewhere.
chef-solo now support environments. So you could use the built-in
mechanisms for this rather than reinventing them by setting your
environment data in a location outside of this repo and pointing to it by
setting 'environment_path' in your solo config file.
I am using chef-solo and I am trying to use data bags as a way of
controlling some external environment data.
My workflow dictates that all cookbooks are stored in one git repository
and I tag production releases.
To remove sensitive and changeable env data from this repository, I have
moved certain attributes into data bags and at run time I am loading those
data bags from a directory in the solo config file.
I am trying to merge the data bag attributes into node attributes in a
recipe doing the following:
I would expect node['cookbook_name']['memcache']['servers'] to have become
the above array, but I am still finding the default attribute from the
cookbook to be the value used.
Have I missed something fundamental in how attributes are merged,
especially if they are several layers deep in a Hash?