Chef-Proxy-Einstellungen über Compile- und Converge-Phasen hinweg
Berücksichtigen Sie Rezept-Kompilierung und Ressourcenausführung, wenn Sie einen globalen Proxy für eine einzelne remote_file-Aktion ändern.
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] = previousDer temporäre Wert ist verschwunden, bevor diese gewöhnliche Ressource irgendetwas herunterlädt:
- Compile: Ruby auf oberster Ebene speichert den Wert, setzt den temporären Proxy, deklariert
remote_fileund stellt den Wert wieder her. - Converge: Die Ressource führt ihre Aktion mit der dann verfügbaren Konfiguration aus.
Ein stabiler Client-Proxy mit passenden internen Ausnahmen vermeidet dieses Timing-Problem. Verwenden Sie die dokumentierte Ausnahmesyntax des installierten Clients, statt Shell-Wildcard-Regeln anzunehmen. Für einen unabhängigen Download eines öffentlichen Artefakts über eine erlaubte öffentliche Route kann ein Eintrag aus einer HTTP-Proxy-Liste den stabilen HTTP-Endpunkt liefern, wenn der Chef-Client kein konfiguriertes oder hinterlegtes Proxy-Konto hat. Behalten Sie dessen interne Ausnahmen bei; die Wahl einer Adresse ändert nicht, wann Compile und Converge sie nutzen.
Wenn ein Vorgang eine besondere Route braucht, legen Sie seine Konfigurationsänderung und seine Ausführung in denselben Bereich. Eine benutzerdefinierte Ressource mit passendem Unified-Mode-Verhalten ist eine Option, aber Chef::Config bleibt global. Stellen Sie es wieder her, wenn der Download fehlschlägt und wenn die Datei bereits aktuell ist. Eine Update-Benachrichtigung läuft nicht bedingungslos, und eine spätere Aufräumressource läuft nach einer Ausnahme möglicherweise nie.
Eine Lazy-Source-Eigenschaft verzögert die Auswertung dieser Eigenschaft, nicht die umgebenden Ruby-Zuweisungen. Die Ausführung von Ressourcen zur Compile-Zeit ist eine separate unterstützte Wahl, wenn der Download genau dann hingehört; sie ändert auch Abhängigkeits- und Benachrichtigungs-Timing. Entscheiden Sie danach, wann der HTTP-Client seine Proxy-Einstellung nutzt, statt zu erwarten, dass die Deklarationsreihenfolge Isolation bietet.