Chef-solo找不到Vagrant和Windows的食谱

时间:2015-02-11 00:29:37

标签: vagrant chef

我正在尝试使用厨师'iis'食谱和流浪汉来管理Windows Web服务器。

当我尝试运行chef-solo时,会抛出错误,指出找不到食谱。

错误消息:

sowens-MBP:vagrant-windows sowen$ vagrant provision
==> default: Running provisioner: chef_solo...
==> default: Vagrant does not support detecting whether Chef is installed
==> default: for the guest OS running in the machine. Vagrant will assume it is
==> default: installed and attempt to continue.
Generating chef JSON and uploading...
==> default: Running chef-solo...
==> default: [2015-02-10T16:18:24-08:00] INFO: *** Chef 12.0.3 ***
==> default: [2015-02-10T16:18:24-08:00] INFO: Chef-client pid: 2508
==> default: [2015-02-10T16:18:30-08:00] INFO: Setting the run_list to ["recipe[example-webserver2012]"] from CLI options
==> default:
==> default: [2015-02-10T16:18:30-08:00] INFO: Run List is [recipe[example-webserver2012]]
==> default: [2015-02-10T16:18:30-08:00] INFO: Run List expands to [example-webserver2012]
==> default: [2015-02-10T16:18:30-08:00] INFO: Starting Chef Run for vagrant-2012-r2.nv.com
==> default: [2015-02-10T16:18:30-08:00] INFO: Running start handlers
==> default: [2015-02-10T16:18:30-08:00] INFO: Start handlers complete.
==> default: [2015-02-10T16:18:30-08:00] ERROR: Running exception handlers
==> default:
==> default: [2015-02-10T16:18:30-08:00] ERROR: Exception handlers complete
==> default: [2015-02-10T16:18:30-08:00] FATAL: Stacktrace dumped to C:/var/chef/cache/chef-stacktrace.out
==> default: [2015-02-10T16:18:30-08:00] FATAL: Chef::Exceptions::CookbookNotFound: Cookbook iis not found. If you're loading iis from another cookbook, make sure you configure the dependency in your metadata
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.

Vagrantfile:

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

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(2) do |config|
  config.vm.box = "lmayorga1980/windows-2012r2"
  config.vm.communicator = "winrm"
  config.vm.network "forwarded_port", host: 3389, guest: 3389
  config.vm.provider "virtualbox" do |v|
    v.cpus = 2
    v.memory = 2048
  end

  # Provisioning
  config.vm.provision "chef_solo" do |chef|
    # chef.cookbooks_path = ['C:\vagrant']
    chef.add_recipe "example-webserver2012"
  end
end

Berksfile

source "https://supermarket.chef.io"

metadata

cookbook 'iis'

metadata.rb

name 'foobar'
...
depends 'iis'

配方/ default.rb

iis_site 'Default Web Site' do
  action [:stop, :delete]
end

整个目录结构如下所示: 该食谱是用berks cookbook example-webserver2012创建的。 有2个流浪文件,我正在使用顶级文件。

$ tree vagrant-windows/
vagrant-windows/
├── Vagrantfile
└── cookbooks
    └── example-webserver2012
        ├── Berksfile
        ├── Berksfile.lock
        ├── CHANGELOG.md
        ├── Gemfile
        ├── Gemfile.lock
        ├── LICENSE
        ├── README.md
        ├── Thorfile
        ├── Vagrantfile
        ├── attributes
        ├── chefignore
        ├── files
        │   └── default
        ├── libraries
        ├── metadata.rb
        ├── providers
        ├── recipes
        │   └── default.rb
        ├── resources
        ├── templates
        │   └── default
        └── test
            └── integration

为什么找不到食谱'iis'?

1 个答案:

答案 0 :(得分:0)

找不到ISS食谱的原因是因为你的包装食谱example-webserver2012声明了对Berkshelf的IIS食谱的依赖。不幸的是,Vagrant与Chef solo provisioner不知道如何解决开箱即用的Berkshelf依赖项。你有几个选择。

  • 使用berks vendor创建一个包含所有已解析食谱的文件夹,并将Vagrantfile指向该文件夹。
  • 运行vagrant provision时,使用vagrant berkshelf插件执行berkshelf依赖项解析。

从工作流预测中我发现vagrant berkshelf插件非常有用。

P.S。在Berksfile中,您不需要声明对IIS食谱的依赖性,因为Berksfile中的metadata.rb行,将从metadata获取依赖关系。