はじめての Chef Solo ということで、 Chef Solo を サーバ上で直接実行する方法 と リモートで実行する方法 でwgetをインストールしてみます。
準備
- Vagrantで仮想サーバを起動しておく。
Chef Soloをサーバ上で直接実行する場合
Vagrantで用意した仮想サーバにログインする
$ vagrant ssh-config --host vagrant-node1 >> ~/.ssh/config
$ ssh vagrant-node1
Chefをインストールする
Chef SoloはChef本体をインストールすると一緒にインストールされます。
$ curl -L https://www.opscode.com/chef/install.sh | sudo bash
インストールできているか確認する
$ chef-solo -v Chef: 11.16.2
クックブックを作成する
wgetというクックブックを作成する。
$ sudo knife cookbook create wget -o /var/chef/cookbooks
レシピを編集する
# /var/chef/cookbooks/wget/recipes/default.rb package 'wget' do action :install end
Chef soloを実行する
$ sudo chef-solo -o wget
$ which wget
/usr/bin/wget
wgetがインストールできました。
Chef Soloをリモート実行する場合
knife-soloをインストールする
$ gem install knife-solo
バージョン
$ gem list chef (11.16.2) knife-solo (0.4.2)
リポジトリを作成する
$ knife solo init my-chef
Creating kitchen...
Creating knife.rb in kitchen...
Creating cupboards...
FATAL: Cannot find sub command for: 'solo init my-chef' Available subcommands: (for details, knife SUB-COMMAND --help)
が出た場合は以下のページを参考に。
FATAL: Cannot find sub command for: "solo init ." · Issue #257 · matschaffer/knife-solo · GitHub
Chef Soloのインストール
$ cd my-chef
$ knife solo prepare vagrant-node1
これで他のサーバ(vagrant-node1)に対してリモートでChef soloのインストールができました。
クックブックを作成する
自作のクックブックはsite-cookbooksに置きます。
$ knife cookbook create wget -o site-cookbooks ** Creating cookbook wget ** Creating README for cookbook: wget ** Creating CHANGELOG for cookbook: wget ** Creating metadata for cookbook: wget
レシピを編集する
# site-cookbooks/wget/recipes/default.rb package 'wget' do action :install end
Nodeオブジェクトファイルを作成する
# nodes/vagrant-node1.json { "run_list": [ "recipe[wget]" // 追加 ], "automatic": { "ipaddress": "vagrant-node1" } }
Chef Soloを実行
$ knife solo cook vagrant-node1
確認する
$ ssh vagrant-node1
$ which wget
/usr/bin/wget
仮想サーバでwgetがインストールされていることが確認できました。