Vagrantで仮想サーバーを立ち上げ
Vagrantの初期化
$ vagrant init <Box名>
Vagrantfileが作成される
SSHの設定
$ vagrant ssh-config --host <ホスト名> >> ~/.ssh/config
vagrant ssh-configコマンドでssh config向けの設定が出力されるので、それを~/.ssh/configにリダイレクト
それにより、ssh <ホスト名>でログインできるようになる
仮想サーバーのネットワーク設定
Vagrant.configure(VAGRANT_API_VERSION) do |config|
config.vm.network "private_network", ip: "192.168.33.10"
end
プライベートネットワークを記述することにより、192.168.33.10で接続できるようになる
Vagrantの起動
$ vagrant up
knife-soloでchef-soloをリモート実行
knife-soloを使うことでホストOSでクックブックを作成してリモートサーバーに転送しchef soloコマンドを実行する一連の作業を自動化できる
knife-soloのインストール
$ gem install knife-solo
インストールされるもの
・Chef
・knifeコマンド
Berkshelfのインストール
knife-soloは、他のgemのインストール有無によってデフォルトのオプションが変化するので、事前にBerkshelfのインストールも行う
$ gem install berkshelf
Berkshelfは、クックブックの依存関係を管理するもの
(Gemfileのようなもの)
knife-soloリポジトリを作る
$ knife solo init .
このコマンドによりローカル側にChefに必要な各種ファイルとディレクトリが展開される
ホストOSからゲストOSにChef Soloをインストールする
$ knife solo prepare <ホスト名 or IPアドレス>
ホストOSからゲストOSでchef soloコマンドを実行
$ knife solo cook <ホスト名 or IPアドレス>
(補足)ホストOSからChef soloのインストールと実行を同時に行う
$ knife solo bootstrap <ホスト名 or IPアドレス>
クックブックの作成
knifeコマンドでクックブックの作成
$ knife cookbook create <クックブック名> -o site-cookbooks
自作のクックブックはsite-cookbooksに置く
レシピの編集
package "dstat" do
action :install
end
Nodeオブジェクトでサーバーの状態を記述
Nodeオブジェクトは任意のノードの状態を記述するためのJSON形式の設定ファイル
knife solo prepare(knife solo bootstrap)の際にnodesディレクトリに<ホスト名.json>という名前で作成されている
Nodeオブジェクトに設定を記述
{
"run_list":[
"recipe[dstat]"
]
}
上記の例はノード(ホスト名)にdstatのレシピが適用されるという状態を定義している
(注)このrun_listへの追加をせずにchef soloコマンドを実行するとレシピが実行されないので忘れないようにする必要がある
ホストOSからゲストOSでchef soloコマンドを実行
$ knife solo cook <ホスト名 or IPアドレス>
これによりレシピがノード(ホスト名)に適用される
実際にはrsyncでローカルからリモートにクックブックが転送され、SSH経由でsudo付きでchef soloコマンドが実行されている
参考
Chef実践入門2章