У меня есть вариант использования, когда большинство моих ресурсов 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.*"