【问题标题】:How to run chef without chef server (chef solo/chef zero)如何在没有厨师服务器的情况下运行厨师(厨师单人/厨师零)
【发布时间】:2014-09-26 23:21:06
【问题描述】:

我有一组用于配置 Web 和 SQL 服务器的说明书,它们目前用于我们的持续部署管道。我希望开发人员能够使用相同的说明书来设置他们的本地开发环境,而无需向厨师服务器注册每台开发机器。似乎可以使用厨师零来完成此操作,但是我在开始使用它时遇到了一些麻烦。

我有一个 chef-repo 文件夹,里面有我的食谱,我正在关注 steps in this article

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 时,它似乎无法找到我的食谱。

这是我得到的错误:

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"

我做错了什么?

【问题讨论】:

    标签: windows chef-infra chef-solo chef-windows


    【解决方案1】:

    出了什么问题是你的conf指定了

    cookbook_path [
      "C:\Temp\chef-repo\cookbooks"
    ]
    

    在加载knife.rb 时可能会被ruby 解释为C:Tempchef-repocookbooks\ 替换为/ 或将它们加倍\\

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

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

    为精确而编辑:

    始终使用正斜杠,这样可以避免错误,并且在复制命令等需要时,厨师会用正确转义的反斜杠替换它们。

    您将使用反斜杠的唯一地方是具有heredoc 语法的批处理资源,并且您可能无论如何都必须转义它们(不确定是否需要转义)

    【讨论】:

    • 啊,太简单了!谢谢。
    【解决方案2】:

    这并不能完全回答您的问题...我通过让开发人员使用处于“vagrant”厨师环境中的 vagrant vm 解决了这个问题,它与 dev/qa/prod 的 run_list(s) 非常匹配有一些小例外的环境。就厨师服务器而言,每个节点都具有相同的节点名称,因此不必注册每台机器。

    【讨论】:

    • 感谢您的建议。无论如何都要考虑一些事情,但真的希望有一个无服务器解决方案,以便厨师食谱可以作为构建 drop 的一部分与其他构建工件一起交付,并作为部署的一部分执行。
    最近更新 更多