開発環境を Vagrant + chef-zero で作成しようと思ったが、
chef-solo の時よりつまづきポイントが多かったので
"入門以前" ということで手順を作成しました。
前提
- Mac で行う
- Vagrant がインストールされている
事前準備
- ChefDK をインストール
$ curl -L https://www.chef.io/chef/install.sh | sudo bash -s -- -P chefdk
- knife-zero をインストール
$ sudo chef gem install knife-zero chef-zero --no-ri --no-rdoc
- 環境変数 EDITOR を設定しておく
$ vi ~/.zshrc # 使っているシェルに合わせて適宜変更
export "EDITOR=emacs" # 好きなエディタで設定
Vagrant設定
- 任意の作業ディレクトリに移動
$ cd ~/Vagrant
- プロジェクト名とVagrant Box名を変数に入れておきます
$ PROJECT_NAME=development
$ BOX_NAME=centos/7
- 今回の作業ディレクトリを作成してそこに移動しておく
$ mkdir ${PROJECT_NAME}
$ cd ${PROJECT_NAME}
- Vagrantfile作成
$ vagrant init ${BOX_NAME}
$ vi Vagrantfile
- network設定をコメントアウト
Vagrantfile
# config.vm.network "private_network", ip: "xxx.xxx.xxx.xxx"
↓
config.vm.network "private_network", ip: "xxx.xxx.xxx.xxx"
- Vagrantを起動
$ vagrant up --provider virtualbox
- SSH設定を .ssh/config に記載しておく
$ vagrant ssh-config --host ${BOX_NAME} >> ~/.ssh/config
knife-zero で chef を設定
- knife.rb を作成
$ mkdir chef-repo
$ cd chef-repo
$ vi knife.rb
knife.rb
local_mode true
chef_repo_path File.expand_path('../', __FILE__)
knife[:use_sudo] = true
knife[:automatic_attribute_whitelist] = %w[
os
os_version
hostname
ipaddress
roles
recipes
platform
platform_version
cloud
cloud_v2
chef_packages
]
- ノードを登録
$ chef exec knife zero bootstrap ${BOX_NAME} --node-name ${PROJECT_NAME}
- ノードリストを表示
$ chef exec knife node list
- ノードの詳細を確認
$ chef exec knife node show ${PROJECT_NAME}
- ノード設定ファイルを作成
$ vi nodes/${PROJECT_NAME}.json
- normal 配下に FQDN設定 を付け足す
${PROJECT_NAME}.json
# 変更前
"normal": {
"knife_zero": {
"host": "{ホスト名}"
},
# 変更後
"normal": {
"knife_zero": {
"host": "{ホスト名}"
},
"fqdn": "{ホスト名}", # <<<<< {ホスト名}は ${BOX_NAME} と同じ
- 共通cookbookを作成(今回は common という名称で作成)
$ chef exec knife cookbook create common
- レシピに net-tools を設定
$ vi cookbooks/common/recipes/default.rb
cookbooks/common/recipes/default.rb
package "net-tools" do
action :install
end
- ノードに対する run_list に common を設定
$ chef exec knife node run_list add ${PROJECT_NAME} common
- knife zero converge を実行
$ chef exec knife zero converge "name:${PROJECT_NAME}"
動作確認
- VagrantにSSHログイン
$ ssh ${BOX_NAME}
# または
$ vagrant ssh
- ifconfig を実行
$ sudo ifconfig
- ifconfig が実行できれば net-tools がインストールされている
これで、あとは開発環境用にレシピをもりもり書いて行けば大丈夫そうです。