我有一个用例,其中 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_proxy
和https_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_proxy
Chef 客户端中使用相同的设置client.rb
solo.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
然后vim
该chef-full.erb
文件并在此处的文档ohai :disabled_plugins
中添加行client.rb
(cat > /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
文件。