Chefのプロキシ設定
Chef 10.16.2時点の話。
Chefのプロキシ設定は複数箇所あってそれぞれ利用される場面が異なる。知っている範囲で以下の3種類。
- package
- remote_file
- knife cookbook upload
package
packageリソースで実際に実行されるパッケージマネージャ(yumとか)が使うプロキシ設定はTarget Node上のOSで定義されたhttp_proxy環境変数になる。
これはChefに関係なく以下のような感じ。
export http_proxy=http://USER:PASSWORD@HOST:PORT export https_proxy=$http_proxy
remote_file
remote_fileリソースは特定のコマンドを経由するのではなくてRubyのコードとして実装されている? Chefで実行される部分なのでChefのプロキシ設定が見られる。client.rbとかsolo.rbに書く。
http_proxy http://HOST:PORT http_proxy_user USER http_proxy_pass PASSWORD https_proxy http://HOST:PORT https_proxy_user USER https_proxy_pass PASSWORD no_proxy "192.168.*"
knife cookbook upload
CookbookをアップロードするChef Serverにアクセスするときにプロキシが必要な場合。Hosted Chefとか使っていると必要だったりする。これはknife.rbに書く。
require 'rest-client' RestClient.proxy = "http://USER:PASSWORD@HOST:PORT"
参考: http://tickets.opscode.com/browse/CHEF-2232
まとめ
http_proxy環境変数さえ定義されていれば他の設定に伝搬するようにした。knife.rbとかclient.rbとかsolo.rbとかに書いたら良いと思う。
if ENV["http_proxy"] require 'rest-client' RestClient.proxy = ENV["http_proxy"] require 'uri' proxy_env = URI.parse(ENV["http_proxy"]) proxy_user, proxy_pass = proxy_env.userinfo.split(":") http_proxy "http://#{proxy_env.host}:#{proxy_env.port}" https_proxy "http://#{proxy_env.host}:#{proxy_env.port}" http_proxy_user proxy_user http_proxy_pass proxy_pass https_proxy_user proxy_user https_proxy_pass proxy_pass no_proxy "192.168.*" end