Setting properties in chef-client.rb
I have a use-case where a chef recipe needs to use 'remote_file' to fetch a file on a virtual, and the fetch needs to be do through an HTTP proxy. This is not working because chef-client doesn't use the system proxy settings ... it gets its proxy settings from the /etc/chef/chef-client.rb
So how do I get proxy settings (or settings in general) into the chef-client.rb
file on a client?
Ideally, I'd like it to happen at client bootstrap time, but I can't see how to do that short of hacking the code.
The other possibility is that I could create a recipe that updates the chef-client.rb
file. But that strikes me as a bit dangerous. And it means that you need to run chef-client twice before it works, assuming that the missing proxy setting in the first run causes the run to ultimately fail.
Any ideas on how to fix this?
Fyi: The default config file is /etc/chef/client.rb
, you would need to pass -c /etc/chef/chef-client.rb
to use that file.
To set theChef configuration settings for http proxy, you can set the proxy to use with knife bootstrap
with the command-line option --bootstrap-proxy URL
. Or, you can add this in in your knife.rb
.
knife[:bootstrap_proxy] = "https://proxy.example.com"
Replace the "https://proxy.example.com
" value with your proxy server URL.
This will add the http_proxy
and https_proxy
lines to the /etc/chef/client.rb
file automatically. Alternatively, you can create a customized bootstrap template with these configuration values in the client config section. Something like this (modified from ubuntu10.04-gems.erb):
(
cat <<'EOP'
http_proxy "http://proxy.example.com" # replace with your URL
<%= config_content %>
EOP
) > /etc/chef/client.rb
Came across this question when I try to get a Chef solo run behind firewall work.
The same http_proxy
settings for chef client client.rb
can be used in solo.rb
So the chef solo run will be like this
solo.rb looks like below
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"
The chef run => chef-solo -c solo.rb -j node.json -l debug`
It works! ;-)