我有一套用于configurationweb和SQL服务器的菜谱,它们目前在我们的持续部署pipe道中使用。 我希望开发人员能够使用相同的食谱来build立他们的本地开发环境,而不用在厨师服务器上注册每个开发机器。 看来,厨师零可以用来完成这一点,但我有一些麻烦开始。
我有一个与我的食谱的厨师回购文件夹,我正在按照这篇文章中的步骤 。
PS C:\Temp\chef-repo> tree . Folder PATH listing Volume serial number is 3E77-463C C:\TEMP\CHEF-REPO └───cookbooks └───test └───recipes PS C:\Temp\chef-repo> cat .\cookbooks\test\recipes\default.rb file "C:\Temp\test.log" do content 'HELLO WORLD' end
但是,当我运行chef-client -z -o test
时,似乎无法find我的食谱。
这是我得到的错误:
Starting Chef Client, version 11.16.0 [2014-09-25T10:17:37-05:00] WARN: Run List override has been provided. [2014-09-25T10:17:37-05:00] WARN: Original Run List: [] [2014-09-25T10:17:37-05:00] WARN: Overridden Run List: [recipe[test]] resolving cookbooks for run list: ["test"] ================================================================================ Error Resolving Cookbooks for Run List: ================================================================================ Missing Cookbooks: ------------------ No such cookbook: test Expanded Run List: ------------------ * test Running handlers: [2014-09-25T10:17:37-05:00] ERROR: Running exception handlers Running handlers complete [2014-09-25T10:17:37-05:00] ERROR: Exception handlers complete [2014-09-25T10:17:37-05:00] FATAL: Stacktrace dumped to C:/Users/username/.chef/local-mode-cache/cache/chef-stacktrace.out Chef Client failed. 0 resources updated in 25.375311 seconds [2014-09-25T10:17:38-05:00] FATAL: Net::HTTPServerException: 412 "Precondition Failed "
我从C:\Temp\chef-repo
运行这个命令,这是我的厨师库文件夹的根目录。 我也尝试修改我的%USERPROFILE%\.chef\knife.rb
以包含以下设置:
cookbook_path [ "C:\Temp\chef-repo\cookbooks" ] local_mode true node_name "Chef.example.com"
我究竟做错了什么?
什么是错误的是你的conf指定
cookbook_path [ "C:\Temp\chef-repo\cookbooks" ]
这可能会被解释为C:Tempchef-repocookbooks
by ruby when loading the knife.rb替换\
by /
或者加倍\\
knife.rb是一个ruby文件,并被解析为ruby代码。
与许多编程语言一样,“ \
用于转义下一个字符。
编辑精确度:
总是使用正斜杠,你将会避免错误,厨师会在复制命令等需要的时候用正确逃脱的反斜杠替换它们。
唯一的地方你将使用反斜杠将是一个批处理资源heredoc语法,也许你将不得不逃避它们(不确定的逃避需要)
这并不能完全回答你的问题。我通过让开发者使用一个在“流浪”厨师环境中的流浪vm来解决这个问题,这个流浪vm与dev / qa / prod环境的run_list紧密匹配小例外。 就主厨服务器而言,每个人都有相同的节点名称,因此不得不注册每台机器。