pars
pars

Reputation: 439

Cannot use chef provisioning in vagrant

I created a basic vagrant box and config provisioning as below

config.vm.provision :chef_solo do |chef|
    chef.add_recipe "apache2"
    chef.json = { :apache => { :default_site_enabled => true } }
end

I also add cookbook to my project

git submodule add https://github.com/svanzoest-cookbooks/apache2/ cookbooks/apache2

But when I run vagrant provision, I get this

==> default: [2015-03-26T14:55:52+00:00] INFO: Forking chef instance     to converge...
==> default: [2015-03-26T14:55:52+00:00] INFO: *** Chef 12.1.2 ***
==> default: [2015-03-26T14:55:52+00:00] INFO: Chef-client pid: 1130
==> default: [2015-03-26T14:55:54+00:00] INFO: Setting the run_list to ["recipe[apache2]"] from CLI options
==> default: [2015-03-26T14:55:54+00:00] INFO: Run List is [recipe[apache2]]
==> default: [2015-03-26T14:55:54+00:00] INFO: Run List expands to [apache2]
==> default: [2015-03-26T14:55:54+00:00] INFO: Starting Chef Run for precise32
==> default: [2015-03-26T14:55:54+00:00] INFO: Running start handlers
==> default: [2015-03-26T14:55:54+00:00] INFO: Start handlers   complete.
==> default: [2015-03-26T14:55:54+00:00] ERROR: Running exception  handlers
==> default: [2015-03-26T14:55:54+00:00] ERROR: Exception handlers complete
==> default: [2015-03-26T14:55:54+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
==> default: [2015-03-26T14:55:54+00:00] ERROR: Cookbook iptables not found. If you're loading iptables from another cookbook, make sure you configure the dependency in your metadata
==> default: [2015-03-26T14:55:54+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

Maybe iptables cookbook is required, so I add it. And then I get this message

==> default: [2015-03-26T14:58:32+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
==> default: [2015-03-26T14:58:32+00:00] ERROR: Cookbook logrotate not found. If you're loading logrotate from another cookbook, make sure you configure the dependency in your 
==> default: [2015-03-26T14:58:32+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

logrotate cookbook is required? Why does it continuously require cookbook? What is metadata here? Can anyone help me?

Upvotes: 1

Views: 279

Answers (1)

Holger Just
Holger Just

Reputation: 55758

Cookbooks can have dependencies to other cookbooks. This allows them to rely on functionality provided by these other cookbooks.

In your case, your apache2 cookbook depends on the iptables and the logrotate cookbooks. You can check this in each cookbook's metadata.rb file. In case of your apache2 cookbook, you can find the metadata.rb file on GitHub.

Note that cookbooks can also have recursive dependencies, i.e. they can have further dependencies which must all be fulfilled. Because if this, it is often recommended to manage your cookbooks with a tool like Berkshelf or Librarian which can download all cookbook dependencies automatically and consistent.

Upvotes: 1

Related Questions