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

Тимчасове значення зникає ще до того, як цей звичайний ресурс щось завантажить:

  1. Compile: Ruby верхнього рівня зберігає значення, задає тимчасовий проксі, оголошує remote_file і відновлює значення.
  2. Converge: ресурс виконує свою дію з конфігурацією, доступною на той момент.

Стабільний клієнтський проксі з відповідними внутрішніми винятками дає змогу уникнути цієї проблеми з таймінгом. Використовуйте задокументований синтаксис винятків встановленого клієнта, а не припускайте правила shell wildcard. Для самостійного завантаження публічного артефакту дозволеним публічним маршрутом запис зі списку HTTP-проксі може надати стабільну кінцеву точку HTTP, якщо в клієнта Chef немає налаштованого чи збереженого облікового запису проксі. Зберігайте його внутрішні винятки; вибір адреси не змінює того, коли compile і converge його використовують.

Якщо одній операції потрібен особливий маршрут, помістіть зміну її конфігурації та виконання в одну область. Власний ресурс із належною поведінкою unified-mode — один із варіантів, але Chef::Config залишається глобальним. Відновлюйте його, коли завантаження не вдається і коли файл уже актуальний. Повідомлення про оновлення не запускається безумовно, а пізніший ресурс очищення може ніколи не виконатися після винятку.

Властивість lazy source відкладає обчислення цієї властивості, а не навколишні присвоєння Ruby. Виконання ресурсів під час compile — окремий підтримуваний варіант, коли завантаження має відбуватися саме тоді; він також змінює таймінг залежностей і повідомлень. Обирайте за тим, коли HTTP-клієнт використовує своє налаштування проксі, а не сподівайтеся, що порядок оголошень дасть ізоляцію.

Схожі статті