Proxyinnstillinger i Chef på tvers av compile- og converge-fasene
Ta høyde for oppskriftskompilering og ressurskjøring når du endrer en global proxy for én remote_file-handling.
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] = previousDen midlertidige verdien er borte før denne vanlige ressursen laster ned noe som helst:
- Compile: Ruby på øverste nivå lagrer verdien, setter den midlertidige proxyen, erklærer
remote_fileog gjenoppretter verdien. - Converge: ressursen utfører handlingen sin med konfigurasjonen som er tilgjengelig da.
En stabil klientproxy med passende interne unntak unngår dette timingproblemet. Bruk den installerte klientens dokumenterte unntakssyntaks i stedet for å anta shell-wildcardregler. For en uavhengig nedlasting av et offentlig artefakt på en tillatt offentlig rute kan en oppføring fra en HTTP-proxyliste gi det stabile HTTP-endepunktet når Chef-klienten ikke har en konfigurert eller beholdt proxykonto. Behold de interne unntakene; valg av adresse endrer ikke når compile og converge forbruker den.
Hvis én operasjon trenger en spesiell rute, legg konfigurasjonsendringen og kjøringen i samme omfang. En egendefinert ressurs med passende unified-mode-atferd er ett alternativ, men Chef::Config forblir global. Gjenopprett den når nedlastingen mislykkes og når filen allerede er oppdatert. Et oppdateringsvarsel kjøres ikke ubetinget, og en senere opprydningsressurs kjører kanskje aldri etter et unntak.
En lazy source-egenskap utsetter evalueringen av den egenskapen, ikke de omkringliggende Ruby-tildelingene. Kjøring av ressurser på compile-tid er et eget støttet valg når det er da nedlastingen hører hjemme; det endrer også timingen for avhengigheter og varsler. Velg etter når HTTP-klienten forbruker proxyinnstillingen sin, i stedet for å forvente at deklarasjonsrekkefølgen gir isolasjon.