この記事の内容
windows から chef を試せる環境を作ろうとしたけど挫折したので、 windows > vm(workstation) > vm(node) の流れでなんとか windows から chef をさわれるようにした
FAQ
Q. どうしてとなりに転がってる mac book でやらなかったの?
A. どうしても windows でやりたかった。
Q. もうちょっと頑張ったら windows から直接動かせたんじゃない?
A. 多分動かせたと思うけど、ssh を入れたり rsync を入れたり、それが既存の環境に影響を与えないように考慮したりって考えながらやってたときに、ふと、冪等性
がキーワードの chef を動かそうっていうのにそれを動かす環境自体が複雑ってのはどうなの?って思ったのです。
目指したもの
- vagrant とvirtual box の環境だけ整えればどの windows でも chef が試せるようにする
目指したchef 利用時の流れ
- Windows で chef の recipe を書く(guest との共有フォルダで作業)
- Windows から chef が使えるように設定された VM に ssh
- VM(workstation) 上で
knife solo cook hoge
- VM(node) に色々適用される
今回のおおまかな作業の流れ
- HostOS(windows) に必要なソフトをインストール
- GuestOS(workstation), GuestOS(node) を建てる
- GuestOS(workstation) から chef を実行できる環境を構築する
- GuestOS(workstation) から GuestOS(node) に
knife solo
ができることを確認する - その状態で GuestOS(workstation) を Box化(vagrant package)する
- 新しく作成された box から GuestOS(node) に
knife solo
ができることを確認する
以下、実際の作業手順
フォルダとかは適宜自分の環境に合わせて読み替えてください
%homepath% とか何回もでてくるのはなんとなく冪等性を意識してみたかったからです!
HostOS(windows) での作業
前準備. 必要なソフトのインストール
- Vagrant のインストール
- 今回はv1.3.5 を利用
- VartualBox のインストール
- 最新版だと自分の環境 (windows7 64bit) でうまく動かなかったので今回は4.2.18 を利用
Vagrant による仮想環境構築
-
box を追加(ubuntu 13.04)
vagrant box add Ubuntu1304 http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-amd64-vagrant-disk1.box
-
作業用のフォルダ作成
-
mkdir "%homedrive%%homepath%\vm\chef_lessons\vagrantWork"
- knife solo を実行するVM. vagrantWork
-
mkdir "%homedrive%%homepath%\vm\chef_lessons\vagrantNode"
- chef で色々いじられるVM. vagrantNode
-
-
インスタンスのネットワークアドレスを同一ネットワークになるように設定する
- work station 側
cd /d "%homedrive%%homepath%\vm\chef_lessons\vagrantWork"
vagrant init Ubuntu1304
-
vagrantfile
をエディタで開く -
config.vm.network
を編集する。今回は下記の設定を利用- config.vm.network :private_network, ip: "192.168.33.10"
- node 側
cd /d "%homedrive%%homepath%\vm\chef_lessons\vagrantNode"
vagrant init Ubuntu1304
-
vagrantfile
をエディタで開く -
config.vm.network
を編集する。今回は下記の設定を利用- config.vm.network :private_network, ip: "192.168.33.20"
- work station 側
-
box を立ち上げる
cd /d "%homedrive%%homepath%\vm\chef_lessons\vagrantWork"
vagrant up
cd /d "%homedrive%%homepath%\vm\chef_lessons\vagrantNode"
vagrant up
-
vagrantWork から vagrantNode にssh接続する際に利用する鍵を共有フォルダに置く。
copy "%homedrive%%homepath%\.vagrant.d\insecure_private_key" "%homedrive%%homepath%\vm\chef_lessons\vagrantWork\"
ssh での接続確認
-
ssh クライアントのダウンロード
- 今回は rlogin を利用
-
vagrantWork へのログイン
cd /d "%homedrive%%homepath%\vm\chef_lessons\vagrantWork"
- (
vagrant ssh-config
で設定を確認) - 大抵は下記の設定でログインできるはず。できなかったらできるまでぐぐる。
- host: 192.168.33.10
- User: vagrant
- Pass: vagrant
- Port 22
- IdentityFile %homedrive%%homepath%.vagrant.d\insecure_private_key
GuestOS(vagrantWork) での作業
chef の利用環境構築
-
chef, knife-solo のインストール及び初期設定
curl -L https://www.opscode.com/chef/install.sh | sudo bash
-
sudo apt-get install ruby-dev
sudo apt-get install make
sudo gem install knife-solo --no-ri --no-rdoc
-
knife configure
- 問い合わせは enter 連打でOK
-
insecure_private_key を ~/.ssh/ ヘ移動しパーミッションを 600 へ変更
mv /vagrant/insecure_private_key ~/.ssh/
chmod 600 ~/.ssh/insecure_private_key
-
knife-solo がやりやすいように、ssh の設定を行う. (vagrantNode へのssh 接続を ~/.ssh/config に追記)
echo \
'Host node
HostName 192.168.33.20
User vagrant
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile ~/.ssh/insecure_private_key
IdentitiesOnly yes
LogLevel FATAL' \
>> ~/.ssh/config
chef による node の設定! やっとデース!長かったネー!
-
chef の準備. リポジトリの作成 から node のchef 対応化まで
mkdir /vagrant/chef_lessons && cd /vagrant/chef_lessons
knife solo init chef-repo
cd chef-repo
knife solo prepare node
-
hello world! による確認
knife cookbook create hello -o site-cookbooks/
echo 'log "Hello world Nanodesu!"' >> site-cookbooks/hello/recipes/default.rb
echo '{"run_list":["recipe[hello]"]}' > nodes/node.json
knife solo cook node
chef の設定が終わった状態の GuestOS(vagrantWork) を base box 化
GuestOS(vagrantWork) での 作業
- ネットワークインターフェース名とMACアドレスのマッピングを無効にする
sudo ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules
HostOS(windows) での 作業
- base box の作成
cd /d "%homedrive%%homepath%\vm\chef_lessons\vagrantWork"
vagrant halt
-
vagrant package --base vagrantWork_default_1383987529
- --base 以降は実際に動いているVMの名前に置き換える
- box の登録
vagrant box add Ubuntu1304WithChef package.box
新しく作成したBOXの確認
-
HostOS(Windows) での作業
mkdir "%homedrive%%homepath%\vm\chef_lessons\vagrantWork2"
cd /d "%homedrive%%homepath%\vm\chef_lessons\vagrantWork2"
xcopy /E "%homedrive%%homepath%\vm\chef_lessons\vagrantWork\chef_lessons" "%homedrive%%homepath%\vm\chef_lessons\vagrantWork2\chef_lessons\"
vagrant init Ubuntu1304WithChef
-
vagrantfile
をエディタで開き編集する- config.vm.network :private_network, ip: "192.168.33.11"
vagrant up
-
ssh 立ち上げたBOXに接続
-
GuestOS(vagrantWork2) での作業
cd /vagrant/chef_lessons/chef-repo/
knife solo cook node
-
実行できた?
- できた!
- おつかれさまでした!
- できない!
- ぐぐれ!
- できた!
感想
windows がメインの職場なんかでも、 hey. chef が使いたいならこのbox を使いなヨー って言えていいんじゃないかなと思いました。
参考
- Chef入門
- その他多くのHP
おまけ
Q. guestOS(vagrantWork) の ssh 設定がハードコーディングされね?
A. 簡単なうまい方法がみつからなかったからあきらめたのです!
Q. ・・・vagrant とvirtual box の環境だけっていってなかった? これ 標準でついてない ssh クライアントも使ってるよね?
A. 目指す、とはいったけれど、それ以外は使わないとはいっていないのです!