如何在没有Chef服务器的情况下运行Chef(Chef Solo / Chef Zero)

4
我有一套为web和SQL服务器配置的食谱书,目前在我们的持续部署流程中使用。我希望开发人员能够使用相同的食谱书来设置他们的本地开发环境,而不需要向Chef服务器注册每个开发机器。似乎可以使用Chef Zero来实现这一点,但是我在开始使用它时遇到了一些问题。
我有一个chef-repo文件夹,其中包含我的食谱书,我正在按照这篇文章中的步骤进行操作。
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时,似乎无法找到我的cookbooks。

这是我收到的错误信息:

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目录下运行该命令,该目录是我的chef存储库文件夹的根目录。我还尝试修改%USERPROFILE%\.chef\knife.rb文件,包含以下设置:

cookbook_path [
  "C:\Temp\chef-repo\cookbooks"
]
local_mode true
node_name "Chef.example.com"

我做错了什么?

2个回答

4
出现问题的原因是你的配置文件有误。
cookbook_path [
  "C:\Temp\chef-repo\cookbooks"
]

当加载knife.rb文件时,ruby可能会将其解释为,请将\替换为/或双斜杠\\

knife.rb是一个Ruby文件,被解析为Ruby代码。

与许多编程语言一样,\用于转义下一个字符。

编辑以提高准确性:

始终使用正斜杠,您将避免错误,并且Chef会在需要复制命令等时将其替换为正确转义的反斜杠。

唯一需要使用反斜杠的地方可能是批处理资源和heredoc语法,也许您仍然需要转义它们(不确定是否需要转义)


啊,太简单了!谢谢你。 - Mike Robinet

2

这并不完全回答了你的问题...我是通过让开发者使用一个vagrant虚拟机来解决这个问题的,该虚拟机在“vagrant” chef环境中,与dev/qa/prod环境的运行列表非常相似,只有一些小的例外。每个虚拟机的节点名称都与chef服务器相同,因此避免了注册每台机器的步骤。


感谢您的建议。这个想法值得考虑,但我们真的希望能够提供无服务器解决方案,以便将 Chef 配方作为构建发布的一部分交付,并在部署过程中执行。 - Mike Robinet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接