Frage "Einmalige" Verwendung von http_proxy in einer Chef-Remote-Datei-Ressource


Ich habe einen Anwendungsfall, bei dem die meisten meiner Ressourcen remote_file und yum Dateien direkt von einem internen Server herunterladen. Es ist jedoch notwendig, eine oder zwei Dateien mit remote_file herunterzuladen, die sich außerhalb unserer Firewall befinden und über einen HTTP-Proxy gehen müssen. Wenn ich die Einstellung http_proxy in /etc/chef/client.rb festlege, wirkt sich dies nachteilig auf die Fähigkeit des Rezepts aus, yum und andere Dateien von internen Ressourcen herunterzuladen. Gibt es eine Möglichkeit, über eine remote_file-Ressource eine Remote-URL über einen Proxy herunterzuladen, ohne den http_proxy-Wert in /etc/chef/client.rb festzulegen?

In meinem Beispielcode unten lade ich ein Redmine-Bundle von rubyforge.org herunter, bei dem meine Server einen Corporate Proxy durchlaufen müssen. Ich kam mit einem ruby_block vor und nach der Ressource remote_file, die den http_proxy und "unsets" setzt. Ich suche nach einem saubereren Weg, dies zu tun.

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

5
2018-04-12 07:38


Ursprung




Antworten:


Sie könnten versuchen, Folgendes zu setzen: http_proxy im Rezept unmittelbar vor der remote_file (und danach wieder aufheben), so:

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

0
2017-07-09 14:48





Setzen Sie no_proxy in Ihrem client.rb so, um alle Ihre internen Adressen von der Verwendung von Proxy auszuschließen.

no_proxy "chef-server,*.my.dom,192.168.*,10.*"

0
2017-08-20 21:05



Ich denke, das ist nicht möglich. Net::HTTP.Proxy bietet nicht so etwas an no_proxy. - onknows