compile 및 converge 단계에 걸친 Chef 프록시 설정
하나의 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] = previous임시 값은 이 평범한 리소스가 무언가를 내려받기 전에 이미 사라집니다.
- Compile: 최상위 Ruby가 값을 저장하고, 임시 프록시를 설정하고,
remote_file를 선언한 뒤 값을 되돌립니다. - Converge: 리소스는 그 시점에 사용 가능한 구성으로 동작을 수행합니다.
적절한 내부 제외 목록을 갖춘 안정적인 클라이언트 프록시를 쓰면 이 타이밍 문제를 피할 수 있습니다. 셸 와일드카드 규칙을 가정하지 말고 설치된 클라이언트의 문서화된 제외 구문을 사용하세요. 허용된 공용 경로에서 공용 아티팩트를 개별적으로 내려받을 때 Chef 클라이언트에 구성되었거나 보관된 프록시 계정이 없다면 HTTP 프록시 목록의 항목이 안정적인 HTTP 엔드포인트를 제공할 수 있습니다. 내부 제외 목록은 그대로 유지하세요. 주소를 고르는 일은 compile과 converge가 그것을 소비하는 시점을 바꾸지 않습니다.
한 작업에 특별한 경로가 필요하다면 그 구성 변경과 실행을 같은 범위에 두세요. 적절한 unified-mode 동작을 가진 사용자 정의 리소스가 한 가지 선택지이지만 Chef::Config는 전역으로 남습니다. 내려받기가 실패했을 때와 파일이 이미 최신일 때 모두 값을 되돌리세요. 갱신 알림은 무조건 실행되지 않으며, 예외가 발생한 뒤에는 이후의 정리 리소스가 아예 실행되지 않을 수 있습니다.
lazy source 속성은 그 속성의 평가를 늦출 뿐, 주변의 Ruby 대입을 늦추지 않습니다. 내려받기가 바로 그 시점에 속한다면 compile 시점의 리소스 실행은 별도로 지원되는 선택지입니다. 이는 의존성과 알림의 타이밍도 바꿉니다. 선언 순서가 격리를 제공한다고 기대하지 말고, HTTP 클라이언트가 프록시 설정을 언제 소비하는지에 따라 선택하세요.