Is it possible to specify attribute values in Chef Solo's JSON? I have a solo.json with a run list and I would like to specify the attributes there. The Chef documentation seems to indicate it should be possible for me to do something like:
{
"hostname": {
"test": "value2"
},
"default_attributes": {
"hostname": {
"test": "value3"
}
},
"override_attributes": {
"hostname": {
"test": "value4"
}
},
"default": {
"hostname": {
"test": "value5"
}
},
"run_list": [
"recipe[hostname::default]"
]
}
However, whenever I try to access the value in my recipe:
p node['hostname']['test']
I just get the value defined in attributes/default.rb, and if I do not define it there, I get a nil value back.
Is there a way to reference these values?
The only level of attributes you can store in the node data is
normal
, everything else is reset at the start of the converge and rebuilt from roles, environments, and cookbooks. You want something like looks like this:I tried using the above example for setting attributes in a JSON file for chef-solo, and the
"normal": {...}
block was completely ignored. The run list was read, but attributes never seem to work.My command is:
My JSON file:
During the converges, Chef went straight back to the default values inside of
attributes/default.rb
. Are the JSON values being entered correctly? So far, my only workaround has been to create a new recipe for each"git_branch":
attribute I want tested with chef-solo, and adding that updated run-list to a different JSON file. Essentially, copying an entire recipe to change a singlenode.normal['my_cookbook']['git_branch']
value. Needless to say, this shouldn't be a solution.Using Chef 14.0.202
Follow up:
Not setting the attribute precedence level inside the JSON file with Chef Solo works. The JSON should look similar to this:
Not including the
"normal": {...}
or"default_attributes": {...}
, etc, will pass attributes for chef-solo to use.