Vagrant & Chef - Cookbook *** not found

2019-03-05 22:58发布

I am trying to set up a simple development VM using vagrant and Chef as a provisioner. I am able to install chef using shell provisioner but it seems to me that the folder with chef recipes does not get mounted to the VM. It keeps complaining that cookbook *** not found. Here is my vagrant file and output I am getting

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant::Config.run do |config|
  # This strange method defines the name of the Vagrant Machine
  config.vm.define "SubscriptionAPI" do |foobar|
  end

  # Every Vagrant virtual environment requires a box to build off of.
  config.vm.box = "chef/centos-6.5"

  # The url from where the 'config.vm.box' box will be fetched if it
  # doesn't already exist on the user's system.
  # config.vm.box_url = "http://puppet-vagrant-boxes.puppetlabs.com/centos-65-x64-virtualbox-nocm.box"

  # Boot with a GUI so you can see the screen. (Default is headless)
  # config.vm.boot_mode = :gui

  # Assign this VM to a host-only network IP, allowing you to access it
  # via the IP. Host-only networks can talk to the host machine as well as
  # any other machines on the same network, but cannot be accessed (through this
  # network interface) by any external networks.
  config.vm.network :hostonly, "192.168.99.101"

  # Assign this VM to a bridged network, allowing you to connect directly to a
  # network using the host's network device. This makes the VM appear as another
  # physical device on your network.
  # config.vm.network :bridged

  # Forward a port from the guest to the host, which allows for outside
  # computers to access the VM, whereas host only networking does not.
  config.vm.forward_port 80, 8080
  config.vm.forward_port 443, 44343

  # Share an additional folder to the guest VM. The first argument is
  # an identifier, the second is the path on the guest to mount the
  # folder, and the third is the path on the host to the actual folder.
  # config.vm.share_folder "www", "/www", "../www"

  # Make sure the chef is intalled to the VM
  config.vm.provision "shell", path: "provisioning/utils/tools/install_chef.bash"

  # Enable provisioning with chef solo, specifying a cookbooks path, roles
  # path, and data_bags path (all relative to this Vagrantfile), and adding 
  # some recipes and/or roles.
  #
  config.vm.provision :chef_solo do |chef|
    chef.roles_path = "provisioning/chef/roles"
    chef.cookbooks_path = "provisioning/chef/cookbooks"
    chef.add_role "vagrant-test-box"

  #  chef.cookbooks_path = "provisioning/chef/cookbooks"
  #  chef.add_recipe "httpd"
  #  chef.roles_path = "chef/roles"
  #  chef.data_bags_path = "chef/databags"
  #  chef.add_role "devbox"
  #
  #   # You may also specify custom JSON attributes:
  #   chef.json = { :mysql_password => "foo" }
  end

  config.vm.host_name = "subscriptionapi"

end

The output

==> SubscriptionAPI: Thank you for installing Chef!
==> SubscriptionAPI: Running provisioner: chef_solo...
Generating chef JSON and uploading...
==> SubscriptionAPI: Running chef-solo...
==> SubscriptionAPI: [2014-12-24T12:20:04+00:00] INFO: Forking chef instance to converge...
==> SubscriptionAPI: [2014-12-24T12:20:04+00:00] INFO: *** Chef 12.0.3 ***
==> SubscriptionAPI: [2014-12-24T12:20:04+00:00] INFO: Chef-client pid: 3442
==> SubscriptionAPI: [2014-12-24T12:20:08+00:00] INFO: Setting the run_list to ["role[vagrant-test-box]"] from CLI options
==> SubscriptionAPI: [2014-12-24T12:20:08+00:00] INFO: Run List is [role[vagrant-test-box]]
==> SubscriptionAPI: [2014-12-24T12:20:08+00:00] INFO: Run List expands to [httpd]
==> SubscriptionAPI: [2014-12-24T12:20:08+00:00] INFO: Starting Chef Run for subscriptionapi
==> SubscriptionAPI: [2014-12-24T12:20:08+00:00] INFO: Running start handlers
==> SubscriptionAPI: [2014-12-24T12:20:08+00:00] INFO: Start handlers complete.
==> SubscriptionAPI: [2014-12-24T12:20:08+00:00] ERROR: Running exception handlers
==> SubscriptionAPI: [2014-12-24T12:20:08+00:00] ERROR: Exception handlers complete
==> SubscriptionAPI: [2014-12-24T12:20:08+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
==> SubscriptionAPI: [2014-12-24T12:20:09+00:00] ERROR: Cookbook httpd not found. If you're loading httpd from another cookbook, make sure you configure the dependency in your metadata
==> SubscriptionAPI: [2014-12-24T12:20:09+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.

provisioning/chef/roles/vagrant-test-box.rb

# Name of the role should match the name of the file
name "vagrant-test-box"

# Run list function we mentioned earlier
run_list(
    "recipe[httpd]"
)

provisioning/chef/cookbooks/httpd/recipes/default.rb

package("httpd")

It's been forever I am trying to fix the issue by digging the Internet and checking different sorts of permissions over and over again - and still no luck

1条回答
Animai°情兽
2楼-- · 2019-03-05 23:28

I found the problem. It was vagrant-berkshelf plugin causing the issue. Uninstalling it made everything work flawlessly

查看更多
登录 后发表回答