uso “one-off” de http_proxy em um recurso Chef remote_file

5

Eu tenho um caso de uso em que a maioria dos meus recursos do remote_file e os recursos do yum baixam arquivos diretamente de um servidor interno. No entanto, é necessário fazer o download de um ou dois arquivos com remote_file que estão fora do nosso firewall e que devem passar por um proxy HTTP. Se eu definir a configuração http_proxy em /etc/chef/client.rb, isso afetará negativamente a capacidade da receita de baixar o yum e outros arquivos de recursos internos. Existe uma maneira de ter um recurso remote_file baixar uma URL remota por meio de um proxy sem definir o valor http_proxy em /etc/chef/client.rb?

No meu código de exemplo, abaixo, estou baixando um pacote do redmine do rubyforge.org, que requer que meus servidores passem por um proxy corporativo. Eu criei um ruby_block antes e depois do recurso remote_file que define o http_proxy e o "desconfigura". Estou procurando uma maneira mais limpa de fazer isso.

ruby_block "setenv-http_proxy" do
    block do
        Chef::Config.http_proxy = node['redmine']['http_proxy']
        ENV['http_proxy'] = node['redmine']['http_proxy']
        ENV['HTTP_PROXY'] = node['redmine']['http_proxy']
    end
    action node['redmine']['rubyforge_use_proxy'] ? :create : :nothing
    notifies :create_if_missing, "remote_file[redmine-bundle.zip]", :immediately
end

remote_file "redmine-bundle.zip" do
    path "#{Dir.tmpdir}/redmine-#{attrs['version']}-bundle.zip"
    source attrs['download_url']
    mode "0644"
    action :create_if_missing
    notifies :decompress, "zipp[redmine-bundle.zip]", :immediately
    notifies :create, "ruby_block[unsetenv-http_proxy]", :immediately
end

ruby_block "unsetenv-http_proxy" do
    block do
        Chef::Config.http_proxy = nil
        ENV['http_proxy'] = nil
        ENV['HTTP_PROXY'] = nil
    end
    action node['redmine']['rubyforge_use_proxy'] ? :create : :nothing
end
    
por user169200 12.04.2013 / 09:38

2 respostas

0

Você pode tentar configurar: http_proxy na receita imediatamente antes do remote_file (e depois desmarcá-lo), assim:

save_http_proxy = Chef::Config[:http_proxy]
Chef::Config[:http_proxy] = "http://someproxyserver.com:8080"

remote_file "redmine-bundle.zip" do
    path "#{Dir.tmpdir}/redmine-#{attrs['version']}-bundle.zip"
    source attrs['download_url']
    mode "0644"
    action :create_if_missing
    notifies :decompress, "zipp[redmine-bundle.zip]", :immediately
    notifies :create, "ruby_block[unsetenv-http_proxy]", :immediately
end

Chef::Config[:http_proxy] = save_http_proxy
    
por 09.07.2014 / 16:48
0

Defina no_proxy no seu client.rb assim ... para excluir todos os seus endereços internos do uso de proxy.

no_proxy "chef-server,*.my.dom,192.168.*,10.*"
    
por 20.08.2014 / 23:05

Tags