17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Chef実践入門 第2章

Posted at

備忘録として使ったコマンドやハマったことなどメモしていきます。
本の方ではVagrantでCentOS 6.5をインストールしていますが、自分の環境では6.4をインストールしているので多少違いがあるかもしれません。
手元のマシンはMacOSです。

ChefSoloについて

ChefSoloはオープンソースて提供されているChefのスタンドアロン版。
ChefServerを使用しない場合はこちらを使う。


2.4 Chefを動かしてみる

  • インストーラでChefをインストールする
curl -L https://www.opscode.com/chef/install.sh | sudo bash
  • cookbookを作成する
sudo knife cookbook create hello -o /var/chef/cookbooks
cd /var/chef/cookbooks
sudo vim /hello/recipes/default.rb
  • "Hello chef!"と出力するレシピを書く
vim recipes/default.rb
ruby"var/chef/cookbooks/hello/recipes/default.rb"
 #
 # Cookbook Name:: hello
 # Recipe:: default
 #
 # Copyright 2014, YOUR_COMPANY_NAME
 #
 # All rights reserved - Do Not Redistribute
 #
 #
 log "Hello Chef!!"
  • レシピを実行
    • -o オプションで実行するレシピを指定
chef-solo -o hello

2.5 パッケージをインストールする

"dstat"というモニタリングツールをインストールします。
先ほどと同じく、

sudo knife cookbook create dstat -o /var/chef/cookbooks
ruby"var/chef/cookbooks/dstat/recipes/default.rb"
package "dstat" do 
  action :install
end 
sudo chef-solo -o hello,dstat
  • rpmでインストール確認
rpm  -q dstat
> dstat-0.7.0-1.el6.noarch

2.6 knife-soloでchef-soloをリモート実行する

Vmをログアウトして手元の環境に戻ります。

knife-soloはChefをChefSolo環境で利用するためのツール。
手元で作ったクックブックをリモートのサーバーに転送してchef-soloを実行するといったことができるようになる。
berkshelfはクックブックの依存関係を管理するツール。

gem install knife-solo
gem install berkshelf
  • knife-soloでリポジトリを作る

Vagrantファイルの置いてあるディレクトリにて実行します。

pwd
> /Users/yuto/Work/vagrant/centos
knife solo init.
$ tree
.
├── Berksfile
├── Vagrantfile
├── cookbooks
├── data_bags
├── environments
├── nodes
├── roles
└── site-cookbooks
  • knifeを使ってリモートでVMにChefSoloをインストールする
knife solo bootstrap centos
  • 先ほどと同じようにdstatのクックブックを作る
knife cookbook create dstat -o site-cookbooks
vim site-cookbooks/dstat/recipes/default.rb

Nodeオブジェクト

ノード(Chefで管理するサーバ)の状態を記述する設定ファイル。

  • dstatレシピを追記しておく
json"nodes/centos.json"
{
  "run_list": [
    "recipe[dstat]"
  ],
  "automatic": {
    "ipaddress": "centos"
  }
}

Nodeオブジェクトに追記することで、2.5のときは実行するレシピを指定していたのが不要になりました。

  • プロビジョニング
knife solo cook centos

2.7 ChefSoloでApache,MySQLをセットアップする

knife cookbook create apache -o site-cookbooks
knife cookbook create mysql -o site-cookbooks
tree
└── site-cookbooks
    ├── apache
    │   ├── CHANGELOG.md
    │   ├── README.md
    │   ├── attributes
    │   ├── definitions
    │   ├── files
    │   │   └── default
    │   ├── libraries
    │   ├── metadata.rb
    │   ├── providers
    │   ├── recipes
    │   │   └── default.rb
    │   ├── resources
    │   └── templates
    │       └── default
    ├── dstat
    │   ├─ (省略)
    │
    └── mysql
        ├── CHANGELOG.md
        ├── README.md
        ├── attributes
        ├── definitions
        ├── files
        │   └── default
        ├── libraries
        ├── metadata.rb
        ├── providers
        ├── recipes
        │   └── default.rb
        ├── resources
        └── templates
            └── default
  • Nodeオブジェクトを編集する
json"nodes/centos.json"
{
  "run_list": [
    "recipe[dstat]",
    "recipe[apache]",
    "recipe[mysql]"
  ],
  "automatic": {
    "ipaddress": "centos"
  }
}
  • レシピを書く
ruby"site-cookbooks/apache/recipes/default.rb"
package "httpd" do
  action :install
end

service "httpd" do
  action [:enable, :start]
end
ruby"site-cookbooks/mysql/recipes/default.rb"
package "mysql-server" do
  action :install
end

service "mysqld" do
  action [:enable, :start]
end
  • レシピを適用
knife solo cook centos

Apacheの設定ファイルをChefで扱う

  • httpd.confの設定ファイルをVMからコピーしてくる
# VM側で実行
cp /etc/httpd/conf/httpd.conf /vagrant/site-cookbooks/apache/templates/default/httpd.conf.erb
  • ServerNameを変えてみる
erb"site-cookbooks/apache/templates/default/httpd.conf.erb"
ServerName centos-chef:80
  • apacheのレシピにて、templates以下のhttpd.conf.erbを読むように以下を追記
    • テンプレートを/etc/httpd/conf/httpd.conf 以下に配置
    • owner,groupはrootで、パーミッションは644で
    • notifiesはテンプレートの配置が終わったらhttpdのサービスをリロードしろ、という設定
ruby"site-cookbooks/apache/recipes/default.rb"
template "httpd.conf" do
  path "/etc/httpd/conf/httpd.conf"
  owner "root"
  group "root"
  mode 0644
  notifies :reload, "service[httpd]"
end
  • 実行する
knife solo cook centos
  • VMを一度削除する
vagrant destroy -f

2.8 Chefリポジトリの扱い

*これまで作成したレシピをGitで管理します

git init 
git add .
git commit -m "first commit"
17
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?