[chef] Fwd: Re: Node attribute merge issue


Chronological Thread 
  • From: Tom < >
  • To:
  • Subject: [chef] Fwd: Re: Node attribute merge issue
  • Date: Wed, 5 Feb 2014 13:56:53 +0000

Thanks George.

Just the pointer I needed.

Before I wrote this mail I was running the merge as:
---
envdata.each do |k,v|
  node.override.k = v
end
---
and I changed that to node.override['k'] as I wrote out. Interpolating k properly with node.override[k]notation now works.

As an aside, I am aware that Environments have arrived for chef-solo in V11, but I am still on V10 until I make the effort to upgrade. I know they will offer me exactly what I am trying to achieve, and properly.

Thank you very much for your help.

Tom



On 5 February 2014 12:26, George Miranda < " target="_blank"> > wrote:
Hi Tom,

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:

1) 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.

2) 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.

HTH,
-g



On Wed, Feb 5, 2014 at 12:54 PM, Tom < " target="_blank"> > wrote:
Hi,

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:

------
envdata = data_bag_item("databag", "env-json-file")

envdata.each do |k,v|
  node.override['k'] = v
end
--------

where my data bag is like this:
------
 
{
  "id": "env-json-file",
  "cookbook_name": {
    "memcache": {
      "servers": [
        "server1:11211",
        "server2:11211"
        ]
      }
    }
}
-------

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?

Thanks,

Tom




--





Archive powered by MHonArc 2.6.16.

§