I am attempting to use Fnichol's Chef User recipe with Vagrant to automatically create a specific user account when I run vagrant up. Because I setup this user for nearly every project that I work on, I'd like to store the user data in a data bag that I am loading from a JSON file that I can re-use on multiple projects.
This is what my Vagrantfile currently looks like: http://pastebin.com/b0riZZCz
It fails with the error:
[2014-01-20T16:09:39+00:00] ERROR: could not find recipe ben for cookbook user
I have created a data bag called "users" and inside that data bag I've created a data bag item named "ben" from the following JSON:
{
"id": "ben",
"comment": "Ben Harold",
"groups": ["admin", "www-data"],
"ssh_keys": ["...longtextstring..."],
"ssh_keygen": false
}
I'm attempting to follow the usage instructions at http://fnichol.github.io/chef-user/ to:
ben from the data bag usersIt appears to me that the Chef provisioning syntax from within a Vagrantfile is considerably different than the syntax that is presented in most of the available documentation. For example:
"Simply include
recipe[user]in yourrun_listand theuser_accountresource will be available."
I'm confused as to the definition of run_list, as well as the recipe[user] syntax. From the Vagrant documentation, it seems that my run_list is everything in this block:
config.vm.provision :chef_solo do |chef|
chef.add_recipe "apt"
...etc...
end
However, I've also found references to chef.run_list being defined within that block, although I have not been able to find any documentation specifically referring to chef.run_list.
Is the run_list simply the code within the config.vm.provision :chef_solo do |chef| block, or is it something else?
Where is the documentation for chef.run_list? I'm not looking for the documentation on the Chef site. The syntax seems completely different to me.
I've been messing with this for several hours. I've tried a bunch of stuff that does not work. I am able to import the Chef User recipe, but I haven't been able to figure out how to tell Chef to run the user recipe against the data bag item "ben".
How do I get Chef to run the user recipe with the data bag item "ben"? Or am I doing it completely wrong?
Answer 1
No, run_list is actually just an array of strings, that represent recipes/roles that should be run on Vagrant Machine. And add_recipe adds new recipes into this list. Like that:
config.vm.provision :chef_solo do |chef|
[...]
chef.add_recipe 'cookbook::recipe' #now run_list has it in
chef.add_role 'myrole' #now run_list has a role too
#adding more recipes from ENV variable, just as example
chef.run_list += ENV['CHEF_RUN_LIST'].split ',' if ENV.has_key? 'CHEF_RUN_LIST'
[...]
end
Answer 2
You are editing Vagrantfile, so documentation is on Vagrant site
Answer 3
You need to tell Vagrant where are your cookbooks, data bags and roles.
config.vm.provision :chef_solo do |chef|
[...]
chef.cookbooks_path = 'cookbooks' #paths are relative to Vagrantfile location
chef.roles_path = 'roles'
chef.data_bags_path = 'data_bags'
[...]
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With