chef-soloをCapistranoから実行する
Chefistrano
https://github.com/kohkimakimoto/chefistrano
Capistanoとchef-soloを組み合わせたツールを作ってみました。ざっくりインストール手順と使い方など。
RubyをRVMでインストール
SSL証明書を更新
# cd /etc/pki/tls/certs # cp -p ca-bundle.crt ca-bundle.crt.bak # curl http://curl.haxx.se/ca/cacert.pem -o ca-bundle.crt
rvmをインストール
# bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
rvmグループにrvmを使うユーザ(root)を追加
# vim /etc/group ----------------------- rvm:x:500:root ----------------------- # source /etc/profile.d/rvm.sh
Rubyのインストール
依存パッケージを調査
# rvm requirements
上記コマンドでRubyインストールに必要なパッケージが表示されるのでyumで入れる
# yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel
Rubyをインストールする
# rvm install 1.9.2 ※1.9.3はchefがエラーになるので1.9.2を使用
デフォルトで使用するRubyを1.9.2に設定
# rvm use 1.9.2 --default # ruby -v
Capistranoのインストール
# gem install capistrano # gem install capistrano_colors # cap -V
Chefのインストール
# gem install chef --no-rdoc --no-ri # chef-client -v
管理用ユーザの設定
鍵認証、ノンパスで管理対象サーバにSSHログインできるようにしておく。sudoできるようにしておく。この説明ではchefistranoというユーザを作って設定しておきます。
# visudo chefistrano ALL=(ALL) NOPASSWD: ALL # Defaults requiretty # コメントアウトする
chefistranoをダウンロード
https://github.com/kohkimakimoto/chefistrano
を適当なディレクトリにダウンロードする。
chefのcookbookやroleを用意する
chefistrano/chef-repo
がchefのリポジトリディレクトリになるのでcookbookやroleの定義などをこの配下に作ります。詳細はchefの公式サイトなどを参考に。
config.rbを修正する
chefistrano/config.rbがメインの設定ファイルなのでこの中を適宜修正してください。
ポイントは:chef_run_listsというcapistranoの変数。ここでCapistranoのroleとChefのrun_listを関連付けます。例えば
set :chef_run_lists, { :dev => ['role[dev]'] } server '127.0.0.1', :dev
のように定義すると127.0.0.1のローカルサーバでchef-soloのrole[dev]を実行できるようなります。
コマンドを実行
前述のconfig.rbの設定からchefというネームスペースでCapistranoのタスクを動的生成してます。chefistranoのディレクトリで
# cap chef:dev
のようにコマンドを実行。Capistranoのrole単位でchefの実行ができます。
内部動作について
Chefの定義情報があるchef-repoディレクトリをchapistranoで管理対象サーバ上にrsyncしてからchef-soloを実行するようになっています。ここに記述したのはざっくりした解説なので、実際に使うかたはあわせてChefとCapistranoのドキュメントを読むなどお願いします。
※すごく参考にさせていただいた記事。ほとんどこれと同じことをしています。