Chef-soloでプロキシ設定の切り替え
- OS は Windows 7 SP1, Windows Server 2008 R2
- Chef は Fast Start Guide for Windows - Chef - Opscode Open Source Wiki からダウンロード => chef-client-11.4.0-1.windows.msi
- Chef リポジトリは ここ
今までサーバー設定なんかは Fabric でいろいろやってきたわけなんですが、 Trac をホストしてた Windows サーバーのリプレースをする必要がでてきたので、最近注目してた Chef でいろいろやってみました。
が、 Ruby 初心者にはいろいろ難しく、なんといってもあまり Windows 向けではないので、結構よく詰まります。なので備忘録を兼ねてちょっとずつメモしていく予定。
Chef-solo の場合、 solo.rb という設定ファイルにツール設定をしていくんだけども、大抵はファイルキャッシュとクックブックの場所を設定するだけでいい。
# solo.rb # -*- encoding: utf-8 -*- file_cache_path File.join(Dir.pwd, 'cache') cookbook_path File.join(Dir.pwd, 'cookbooks')
普段はこれで問題ないんだけども、職場などプロキシ環境下にいるときは設定を追加しないといけない。
# solo.rb # -*- encoding: utf-8 -*- file_cache_path File.join(Dir.pwd, 'cache') cookbook_path File.join(Dir.pwd, 'cookbooks') http_proxy "http://path/to/proxy:8080" https_proxy proxy "http://path/to/proxy:8080"
別のマシンをセットアップするならともかく、1台のマシンをセットアップするのに別の設定ファイルを用意するのはなんか違う、ということで自動的にプロキシの設定ありなしを判断するようにしてみたのがこれ。
# -*- encoding: utf-8 -*- file_cache_path File.join(Dir.pwd, 'cache') cookbook_path File.join(Dir.pwd, 'cookbooks') require('win32/registry') key = 'Software\Microsoft\Windows\CurrentVersion\Internet Settings' reg = Win32::Registry::HKEY_CURRENT_USER.open(key) if reg["ProxyEnable"] == 1 proxy = "http://" + reg["ProxyServer"] http_proxy proxy https_proxy proxy ENV['http_proxy'] = proxy end
単純にIEなどで使われるインターネット接続設定をレジストリから取得してるだけ。環境変数ENVに[http_proxy]をセットしてるのは、ほかのツールなどで使われることを想定するため。これでどこでも開発が進められますね。