Настройки прокси в Chef на этапах compile и converge
Учитывайте компиляцию рецепта и выполнение ресурса, когда меняете глобальный прокси для одного действия remote_file.
previous = Chef::Config[:http_proxy]
Chef::Config[:http_proxy] = 'http://proxy.example.net:8080'
remote_file '/var/tmp/package.zip' do
source 'https://downloads.example.net/package.zip'
end
Chef::Config[:http_proxy] = previousВременное значение исчезает ещё до того, как этот обычный ресурс что-либо скачает:
- Compile: Ruby верхнего уровня сохраняет значение, задаёт временный прокси, объявляет
remote_fileи восстанавливает значение. - Converge: ресурс выполняет своё действие с конфигурацией, доступной на тот момент.
Стабильный клиентский прокси с подходящими внутренними исключениями позволяет избежать этой проблемы с таймингом. Используйте документированный синтаксис исключений установленного клиента, а не предполагайте правила shell wildcard. Для самостоятельной загрузки публичного артефакта по разрешённому публичному маршруту запись из списка HTTP-прокси может дать стабильную конечную точку HTTP, если у клиента Chef нет настроенной или сохранённой учётной записи прокси. Сохраняйте его внутренние исключения; выбор адреса не меняет того, когда compile и converge его используют.
Если одной операции нужен особый маршрут, поместите изменение её конфигурации и выполнение в одну область. Собственный ресурс с подходящим поведением unified-mode — один из вариантов, но Chef::Config остаётся глобальным. Восстанавливайте его, когда загрузка завершается неудачно и когда файл уже актуален. Уведомление об обновлении не срабатывает безусловно, а более поздний ресурс очистки может никогда не выполниться после исключения.
Свойство lazy source откладывает вычисление этого свойства, а не окружающие присваивания Ruby. Выполнение ресурсов во время compile — отдельный поддерживаемый вариант, когда загрузка должна происходить именно тогда; он также меняет тайминг зависимостей и уведомлений. Выбирайте по тому, когда HTTP-клиент использует свою настройку прокси, а не рассчитывайте, что порядок объявлений даст изоляцию.