はじめてのChef Solo

はじめての Chef Solo ということで、 Chef Solo サーバ上で直接実行する方法 リモートで実行する方法 でwgetをインストールしてみます。

準備

  • Vagrantで仮想サーバを起動しておく。

はじめてのVagrant - kzy52's blog

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がインストールされていることが確認できました。