在 chef-client.rb 中设置属性

在 chef-client.rb 中设置属性

我有一个用例,其中 chef 配方需要使用“remote_file”来获取虚拟文件,并且获取需要通过 HTTP 代理进行。这不起作用,因为 chef-client 不使用系统代理设置...它从/etc/chef/chef-client.rb

那么,如何将代理设置(或一般设置)放入chef-client.rb客户端的文件中?

理想情况下,我希望它发生在客户端引导时,但我不知道如何通过破解代码来做到这一点。

另一种可能性是,我可以创建一个更新chef-client.rb文件的配方。但我觉得这有点危险。这意味着您需要运行 chef-client 两次才能正常工作,假设第一次运行中缺少代理设置导致运行最终失败。

有想法该怎么解决这个吗?

答案1

仅供参考:默认配置文件是/etc/chef/client.rb,您需要传递-c /etc/chef/chef-client.rb才能使用该文件。

要设置Chef 的 http 代理配置设置knife bootstrap,您可以使用命令行选项设置要使用的代理--bootstrap-proxy URL。或者,您可以在中添加它knife.rb

knife[:bootstrap_proxy] = "https://proxy.example.com"

将“ https://proxy.example.com”值替换为您的代理服务器 URL。

这将自动将http_proxyhttps_proxy行添加到/etc/chef/client.rb文件中。或者,您可以创建一个定制引导模板在客户端配置部分使用这些配置值。如下所示(从 ubuntu10.04-gems.erb 修改):

(
cat <<'EOP'
http_proxy "http://proxy.example.com" # replace with your URL
<%= config_content %>
EOP
) > /etc/chef/client.rb

答案2

当我尝试让 Chef 单独在防火墙后面运行时遇到了这个问题。

可以在http_proxyChef 客户端中使用相同的设置client.rbsolo.rb

所以厨师单独行动将会是这样的

solo.rb 如下所示

cookbook_path File.expand_path("../cookbooks", __FILE__)
json_attribs File.expand_path("../node.json", __FILE__)

# HTTP for environment behind firewall
# http://docs.opscode.com/config.html
# solo.rb and client.rb can use the same http_proxy settings
http_proxy "http://proxy.company.com:3128"
# http_proxy_user "username"
# http_proxy_pass "password"

厨师运行 => chef-solo -c solo.rb -j node.json -l debug`

有用! ;-)

答案3

所以我遇到了同样的问题,并且无法获得正常工作的提示,因为它似乎无法以这种特定方式工作+缺乏文档样本。

最后我选择编辑的chef-full.erb是 bootstrap 默认模板,用于生成client.rb

要获取正确的文件,请运行以下命令:

$ gem contents chef | grep bootstrap | grep full
/home/henryt/.rvm/gems/ruby-1.9.3-p547/gems/chef-11.16.4/lib/chef/knife/bootstrap/chef-full.erb

然后vimchef-full.erb文件并在此处的文档ohai :disabled_plugins中添加行client.rbcat > /etc/chef/client.rb <<'EOP'

Ohai::Config[:disabled_plugins] = [:Passwd]

我的补丁文件:

--- ~me/.rvm/gems/ruby-1.9.3-p547/gems/chef-11.16.4/lib/chef/knife/bootstrap/chef-full.erb.orig
   2016-07-22 00:53:33.689961205 -0700
+++ ~me/.rvm/gems/ruby-1.9.3-p547/gems/chef-11.16.4/lib/chef/knife/bootstrap/chef-full.erb
2016-07-22 00:44:21.253493396 -0700
@@ -64,6 +64,7 @@

cat > /etc/chef/client.rb <<'EOP'
<%= config_content %>
+Ohai::Config[:disabled_plugins] = [:Passwd]
EOP

cat > /etc/chef/first-boot.json <<'EOP'

现在,每次我引导一台机器时,client.rb都会使用该行生成ohai :disabled_plugins文件,而我不需要自定义client.rb文件。

相关内容