我正在做厨师的第一个食谱。 我创build了一个简单的食谱(default.rb):
apt_repository "mariadb-repo" do uri "http://tedeco.fi.upm.es/mirror/mariadb/repo/10.1/ubuntu" distribution "trusty" components ["main"] arch "amd64" keyserver "keyserver.ubuntu.com" key "CBCB082A" end
我在metadata.rb的末尾添加了“depends'apt'”。 如果我运行:
Starting Chef Client, version 12.5.1 resolving cookbooks for run list: ["common"] ================================================================================ Error Resolving Cookbooks for Run List: ================================================================================ Missing Cookbooks: ------------------ No such cookbook: apt Expanded Run List: ------------------ * common Running handlers: [2016-01-28T13:07:17+00:00] ERROR: Running exception handlers Running handlers complete [2016-01-28T13:07:17+00:00] ERROR: Exception handlers complete Chef Client failed. 0 resources updated in 01 seconds [2016-01-28T13:07:17+00:00] FATAL: Stacktrace dumped to /home/vagrant/.chef/local-mode-cache/cache/chef-stacktrace.out [2016-01-28T13:07:17+00:00] ERROR: 412 "Precondition Failed" [2016-01-28T13:07:17+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
好的,所以我添加到我的Berksfile:
source 'https://supermarket.chef.io' cookbook 'apt' metadata
然后尝试安装apt cookbook到几个位置:
$ berks install # installs to ~/.berkshelf/cookbooks/ $ berks vendor --except=common berks-cookbooks/
我注意到的第一件事是第二个命令将apt和我共同的食谱打包到我指定的目录(甚至是传递–except = common)。 没关系:如果我现在尝试运行:
$ sudo chef-client --local-mode --runlist 'recipe[common]'
从我的食谱(我叫common)目录和从berks-cookbooks目录。 两者都没有工作,上面的错误仍然存在。 我也试着在我的食谱目录下面的client.rb:
cookbook_path = "./berks-cookbooks" chef_repo_path = "#{cookbook_path}"
还有一些这些变化…
我错过了什么? 在本地模式下,如何正确地满足厨师客户端的依赖关系?
什么是满足这种依赖的方式?
'''编辑1''':没有sudo运行不起作用。
在本地模式的厨师客户端读取knife.rb作为其configuration文件,而不是client.rb 。 在工作站上使用它,比如在厨师提供的东西上时,这是有道理的,但是当您尝试在生产环境中使用本地模式时,这可能是非常意外的。
通常使用本地模式,您应该使用berks vendor来处理导出。 不要从cookbook(s)文件夹运行chef-client ,而是运行/root/local_mode_repo或类似的命令,运行berks vendor /root/local_mode_repo/cookbooks 。 然后你可以在该文件夹中运行chef-client --local-mode 。 回购中的特定文件夹名称(如roles/和cookbooks/通常是不可configuration的。