Configurações de proxy do Chef entre as fases compile e converge
Considere a compilação da receita e a execução do recurso ao alterar um proxy global para uma ação 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] = previousO valor temporário já desapareceu antes de este recurso comum transferir qualquer coisa:
- Compile: o Ruby de nível superior guarda o valor, define o proxy temporário, declara
remote_filee restaura o valor. - Converge: o recurso executa a sua ação com a configuração disponível nesse momento.
Um proxy de cliente estável com exclusões internas adequadas evita este problema de temporização. Utilize a sintaxe de exclusão documentada do cliente instalado em vez de presumir regras de wildcard da shell. Para uma transferência independente de um artefacto público por uma rota pública permitida, uma entrada da lista de proxies HTTP pode fornecer o endpoint HTTP estável quando o cliente Chef não tem qualquer conta de proxy configurada ou retida. Mantenha as suas exclusões internas; escolher um endereço não altera quando compile e converge o consomem.
Se uma operação precisar de uma rota especial, coloque a alteração de configuração e a execução no mesmo âmbito. Um recurso personalizado com comportamento unified-mode adequado é uma opção, mas Chef::Config continua global. Restaure-o quando a transferência falhar e quando o ficheiro já estiver atualizado. Uma notificação de atualização não corre incondicionalmente, e um recurso de limpeza posterior pode nunca correr após uma exceção.
Uma propriedade lazy source adia a avaliação dessa propriedade, não as atribuições Ruby em volta. A execução de recursos em tempo de compile é uma opção suportada à parte quando é então que a transferência pertence; também altera a temporização das dependências e notificações. Escolha conforme o momento em que o cliente HTTP consome a sua definição de proxy, em vez de esperar que a ordem de declaração proporcione isolamento.