我正在尝试使用厨师'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'?
答案 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
获取依赖关系。