Назад | Перейти на главную страницу

«Разовое» использование http_proxy в ресурсе Chef remote_file

У меня есть вариант использования, когда большинство моих ресурсов remote_file и ресурсов yum загружают файлы непосредственно с внутреннего сервера. Однако существует необходимость загрузить один или два файла с remote_file, которые находятся за пределами нашего брандмауэра и которые должны проходить через прокси-сервер HTTP. Если я установлю параметр http_proxy в /etc/chef/client.rb, это отрицательно скажется на способности рецепта загружать yum и другие файлы из внутренних ресурсов. Есть ли способ заставить ресурс remote_file загрузить удаленный URL-адрес через прокси-сервер без установки значения http_proxy в /etc/chef/client.rb?

В моем примере кода ниже я загружаю пакет redmine с rubyforge.org, который требует, чтобы мои серверы проходили через корпоративный прокси. Я придумал ruby_block до и после ресурса remote_file, который устанавливает http_proxy и "отключает" его. Я ищу более чистый способ сделать это.

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

Вы можете попробовать установить: http_proxy в рецепте непосредственно перед удаленным_файлом (и сбросить его после), например:

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

Установите no_proxy в вашем client.rb так ... чтобы исключить все ваши внутренние адреса из использования прокси.

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