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

Det tillfälliga värdet är borta innan den här vanliga resursen hämtar något alls:

  1. Compile: Ruby på översta nivån sparar värdet, ställer in den tillfälliga proxyn, deklarerar remote_file och återställer värdet.
  2. Converge: resursen utför sin åtgärd med den konfiguration som finns tillgänglig då.

En stabil klientproxy med lämpliga interna undantag undviker det här timingproblemet. Använd den installerade klientens dokumenterade undantagssyntax i stället för att anta shell-wildcardregler. För en oberoende nedladdning av en offentlig artefakt på en tillåten offentlig väg kan en post från en HTTP-proxylista ge den stabila HTTP-slutpunkten när Chef-klienten inte har något konfigurerat eller sparat proxykonto. Behåll dess interna undantag; valet av adress ändrar inte när compile och converge förbrukar den.

Om en åtgärd behöver en särskild väg, lägg dess konfigurationsändring och körning inom samma omfång. En anpassad resurs med lämpligt unified-mode-beteende är ett alternativ, men Chef::Config förblir global. Återställ den när nedladdningen misslyckas och när filen redan är uppdaterad. En uppdateringsavisering körs inte ovillkorligt, och en senare städresurs körs kanske aldrig efter ett undantag.

En lazy source-egenskap skjuter upp utvärderingen av den egenskapen, inte de omgivande Ruby-tilldelningarna. Att köra resurser vid compile-tid är ett separat stött val när nedladdningen hör hemma där; det ändrar också tidsstyrningen för beroenden och aviseringar. Välj efter när HTTP-klienten förbrukar sin proxyinställning, i stället för att förvänta dig att deklarationsordningen ger isolering.

Relaterade artiklar