- From: Mike <
>
- To: "
" <
>
- Subject: [chef] Re: accessing environment attributes in cookbooks
- Date: Wed, 26 Dec 2012 11:00:04 -0500
Hi Steven,
You've placed your debugging code in the attributes/default.rb file,
this gets evaluated at compile time.
Have you tried placing the same debugging code in the
recipes/default.rb (or somewhere like that) where the debugging
statement will show what the value of an attribute is at the execution
phase?
-Mike
On Wed, Dec 26, 2012 at 2:11 AM, Steven Lehrburger
<
>
wrote:
>
Hi,
>
>
I'm new to Chef and am trying to migrate my existing infrastructure. Sorry
>
if this is explained in the docs or elsewhere, but I've not been able to
>
find it.
>
>
I have two Chef environments, dev and prod, and want to specify file paths
>
in a cookbook that have a different parent directory based on the
>
environment. When I try to access the environment attribute in my cookbook,
>
however, all I get is 'nil'.
>
>
For example, in my "dev" environment's JSON file, I have
>
>
...
>
"default_attributes": {
>
"my_attr": "/my/path"
>
},
>
...
>
>
>
And I can verify my_attr is defined in
>
https://manage.opscode.com/environments/dev. If I do a `knife node show
>
dev_all` it shows the proper environment, role, run list, and recipe. In
>
that recipe's attributes/default.rb, I have:
>
>
Chef::Log.info('---------------')
>
Chef::Log.info(node.chef_environment)
>
Chef::Log.info(node[:my_attr])
>
Chef::Log.info(Chef::Environment.load(node.chef_environment).default_attributes['my_attr'])
>
Chef::Log.info('---------------')
>
>
>
When I run a vagrant provision, it prints:
>
>
$ rvmsudo vagrant provision
>
[default] Running provisioner: Vagrant::Provisioners::ChefClient...
>
[default] Creating folder to hold client key...
>
[default] Uploading chef client validation key...
>
[default] Generating chef JSON and uploading...
>
[default] Running chef-client...
>
stdin: is not a tty
>
[2012-12-26T06:52:26+00:00] INFO: *** Chef 10.16.2 ***
>
[2012-12-26T06:52:27+00:00] INFO: Run List is [role[web]]
>
[2012-12-26T06:52:27+00:00] INFO: Run List expands to [vine_web]
>
[2012-12-26T06:52:28+00:00] INFO: Starting Chef Run for dev_all
>
[2012-12-26T06:52:28+00:00] INFO: Running start handlers
>
[2012-12-26T06:52:28+00:00] INFO: Start handlers complete.
>
[2012-12-26T06:52:29+00:00] INFO: Loading cookbooks [build-essential, nginx,
>
ohai, vine_web]
>
[2012-12-26T06:52:29+00:00] INFO: ---------------
>
[2012-12-26T06:52:29+00:00] INFO: dev
>
[2012-12-26T06:52:29+00:00] INFO: nil
>
[2012-12-26T06:52:29+00:00] INFO: /my/path
>
[2012-12-26T06:52:29+00:00] INFO: ---------------
>
[2012-12-26T06:52:31+00:00] INFO: Chef Run complete in 3.026496384 seconds
>
[2012-12-26T06:52:31+00:00] INFO: Running report handlers
>
[2012-12-26T06:52:31+00:00] INFO: Report handlers complete
>
>
>
I'm confused because my node defintiely has the right environment, and the
>
environment definitely has the right attribute, but the attribute hasn't
>
been assigned to the node by the time my cookbook runs.
>
>
Is this the expected behavior, perhaps due to the order in which things
>
happen? If no, what have I done wrong?
>
>
>
Is my workaround the right thing to be doing? It took quite a bit of
>
googling before I stumbled into the Chef docs and thought to try that. If
>
yes, is there somewhere in the docs I can make a note of this?
>
>
>
Thanks in advance, and happy holidays!
>
>
/~s
Archive powered by MHonArc 2.6.16.