Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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?

share|improve this question
    
Are you looking to have only one remote_file use the HTTP proxy, or is it okay to have all the recipes use that proxy? –  natacado Jan 26 '12 at 7:46
add comment

2 Answers

up vote 5 down vote accepted
+100

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
share|improve this answer
    
Never had a chance... :-D –  gWaldo Jan 30 '12 at 3:36
    
Ah ... I see. Thanks. –  Stephen C Feb 1 '12 at 10:44
add comment

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! ;-)

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.