VMの自動構成にはChef(とその仲間達)を使うといいみたいです。
chef関連の情報はググると色々でてきますが、chef自体の変化が激しいようなので情報錯綜気味です。
公式もあてにならなかったりします。
Chefツール群
よくわからないツール・コンポーネントがたくさん。
- ChefDK
-
- インフラをコードで書こうってコンセプトの自動構成ツール。コードのまとまりをcookbookと呼ぶらしい
- berkshelf
- cookbookのライブラリを管理するツール
- knife
- chefの管理コマンド
- Vagrant Plugin
vagrant-omnibus
- VMにchefをセットアップしてくれるvagrantプラグイン
- vagrant-berkshelf
- “Berkshelf integration to the Chef provisioners”だそうで、なんかvagrantでいい感じにBerkshelf使えるようにしてくれるみたいです。(理解不足)
いらないっぽい。
-
- chefレポジトリの雛形作るときに使用します。他にもいろいろ便利なツールらしいです。knifeのプラグイン
- bundler
- ruby-gem のライブラリ構成管理ツール
その他
それぞれインストールします。
Chef + berkshelf
berkshelfのページによりますと、Chef-DKをインストールすればよさそうです。
Chef-DKのMAC OS Xからdmgをダウンロードしてpkgでインストール。
pkg後にも色々設定が必要なようです。
|
|
rubyを指定のものにしとかないといけないようですが、なんかイケてないような気がします。
|
|
knife solo
|
|
“knife solo”コマンドが無いみたいなこと言われたら、ターミナル再起動で動くこともあるみたいです。
vagrantプラグイン
|
|
bundler
すでにインストール済みな場合が多いかも。
|
|
VMの作成
前回作成したVMだとchefがすでに入ってて、動作検証には向かない気がするので、新たなboxからVMを作成します。
いちばんメジャーっぽいchef/centos-6.5を使用します。
|
|
VMにchefとネットワーク設定
Vagrantfileに
config.omnibus.chef_version = :latest
と
config.vm.network
を追加します。
```bash Mac ~/vagrant/testvm$ cat Vagrantfile
-- mode: ruby --
vi: set ft=ruby :
Vagrant.configure(2) do |config| config.vm.box = “chef/centos-6.5” config.omnibus.chef_version = :latest # Create a private network, which allows host-only access to the machine # # using a specific IP. config.vm.network “private_network”, ip: “192.168.33.10”
end
1 2 3 4 5 6 7 8 9 10 11 |
#### sshのconfig設定
vagrant sshでなくてsshからお手軽にアクセスできるよう設定します。
```bash
#~/.ssh/config設定
Mac ~/vagrant/testvm$ vagrant ssh-config --host testvm >> ~/.ssh/config
#スカッとアクセスできるようになります
Mac ~/vagrant/testvm$ ssh testvm
Last login: from 10.0.2.2
[vagrant@localhost ~]$ |
1 2 3 |
後でcookするときにrsyncが必要になります。なんか本末転倒のようきがするけどyumでインストールします。
```bash |
Mac ~/vagrant/testvm$ ssh testvm [vagrant@localhost ~]$ sudo yum install rsync
1 2 3 4 |
### chefレポジトリ作成
```bash
Mac ~/vagrant/testvm$ knife solo init chef-repo |
1 2 3 4 5 6 7 8 9 |
### テスト用cookbookを作る
#### テスト用cookbook
helloという名前のcookbookを作ります。
独自のcookbookはsite-cookbooksに作るお作法みたいです。
```bash |
Mac ~/vagrant/testvm$ cd chef-repo/ Mac ~/vagrant/testvm/chef-repo$ knife cookbook create hello -o site-cookbooks/ Mac ~/vagrant/testvm/chef-repo$ vim site-cookbooks/hello/recipes/default.rb Mac ~/vagrant/testvm/chef-repo$ cat site-cookbooks/hello/recipes/default.rb log “hello world”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#### node定義
cookbookを作ったら、node定義を作らなきゃいけないようです。なんか面倒っすね。
run_listの書き方とかよくわからんし。
```bash
#node定義作成
Mac ~/vagrant/testvm/chef-repo$ knife node create testvm -e vim -z
Mac ~/vagrant/testvm/chef-repo$ knife node list -z
testvm
Mac ~/vagrant/testvm/chef-repo$ ls nodes/
testvm.json
Mac ~/vagrant/testvm/chef-repo$ cat nodes/testvm.json
{
"name": "testvm",
"run_list": [
"recipe[hello]"
]
} |
1 2 3 4 5 |
#### cookbook適用
cookbookをnodeに適用します
```bash |
Mac ~/vagrant/testvm/chef-repo$ knife solo cook testvm nodes/testvm.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
### Berkshelfでcookbook
Berkshelfのパッケージをセットアップするcookbookを作ります。
とは言っても、”knife solo init chef-repo”でつくられるBerksfileを編集してcookすればOKみたい。
```bash
#Berksfile編集
Mac ~/vagrant/testvm/chef-repo$ vim Berksfile
Mac ~/vagrant/testvm/chef-repo$ cat Berksfile
#site :opscode #もう古いらしい
source "https://supermarket.chef.io"
#metadata #これあるとエラーが出るので無しで
cookbook 'nodejs'
cookbook 'mongodb' |
1 2 3 |
#### node定義編集
```bash |
Mac ~/vagrant/testvm/chef-repo$ vim nodes/testvm.json Mac ~/vagrant/testvm/chef-repo$ cat nodes/testvm.json { “name”: “testvm”, “run_list”: [ “recipe[hello]“, “recipe[nodejs]“, “recipe[mongodb]” ] }
1 2 3 4 |
#### レシピゲット and 適用
```bash
Mac ~/vagrant/testvm/chef-repo$ knife solo cook testvm nodes/testvm.json |
1 2 3 4 5 6 7 |
これだけでcookbooksフォルダが作られて、各種cookbookが持ってこられます。
なぜBerksfile編集するだけで上手い事いくのか?
よくわからんですけどchef/knife.rb に定義済みだからだと思われます。
```bash |
Mac ~/vagrant/testvm/chef-repo$ cat .chef/knife.rb cookbook_path [“cookbooks”, “site-cookbooks”] node_path “nodes” role_path “roles” environment_path “environments” data_bag_path “data_bags” #encrypted_data_bag_secret “data_bag_key”
knife[:berkshelf_path] = “cookbooks”
1 2 3 4 5 6 |
うまくいくとインストールされます。
```bash
Mac ~/vagrant/testvm$ ssh testvm
[vagrant@localhost ~]$ node -v
v0.10.33 |
1 2 3 4 5 6 7 8 9 |
### まとめ
明らかに理解不足です。
つーか、情報が古かったり纏まってなかったりして、けっこうハマりポイントが多いとおもいます。
わかっちゃえば、な〜んだって事でも、なかなか正解がわからない感じです。
ただ、vagrantで気軽に仮想環境を作ったり壊したりできるので思い切っていろいろ試せるのはいいですね。 |