クックブックを作成してノードに適用する。- その２


## 関連記事

* [Chefを使ってより効率的にサーバを管理しよう。まずは用語から](http://qiita.com/park-jh/items/9e2e358d2e82a7736cf7)
* [Berkshelfを使って外部クックブックをノードに適用する。](http://qiita.com/park-jh/items/751464a4cc6d8abcd6fd)
* [クックブックを作成してノードに適用する。- その１](http://qiita.com/park-jh/items/8d641809850b5930d39c)
* クックブックを作成してノードに適用する。- その２
* [ChefでCentOS 6.7 + rbenv + ruby 2.3.0の環境を構築する。](http://qiita.com/park-jh/items/f249a18793899f2eb4bf)
* [ChefでCentOS 6.7 + Vim 7.4 + luaを設置する。](http://qiita.com/park-jh/items/371d179d5e71618a1f14)
* [ChefでVimプラグインマネージャーNeoBundleを設置する。](http://qiita.com/park-jh/items/ec09e40f9b4aaf9fedfd)
* [Chefのレシピをデバッグしてみよう。](http://qiita.com/park-jh/items/96a076e167327a6a5a39)
* [ChefでCentOS 6.7 + nginxを設置する。- 外部クックブック](http://qiita.com/park-jh/items/3013c49494e524fced31)
* [ChefでCentOS 6.7 + nginxを設置する。- カスタムクックブック](http://qiita.com/park-jh/items/43451cea21ee1724c24b)
* [ChefでCentOS 6.7 + nodejs + npmを設置する。](http://qiita.com/park-jh/items/96089e7e1c97b0fe3a6c)
* [ChefでVimプラグインマネージャーvim-plugを設置する。](http://qiita.com/park-jh/items/ba27ad412ce9926fd94d)
* [ohaiのカスタムプラグインを作ってみよう。](http://qiita.com/park-jh/items/34be55abb7c63b36cddb)
* [Chef SoloからChef Zeroへ](http://qiita.com/park-jh/items/44c249c9de768c53b423)
* [Chefでnginx + php(php-fpm) + mariadb + wordpressを設置する。](http://qiita.com/park-jh/items/7515e47dddc38257a454)

## クックブックの生成

* デフォルトではcookbooksの配下に生成されるので、-o オプションを付けてsite-cookbooksの配下に生成する。
* ここではyumをupdateするクックブックとmariadbを設置するクックブックを生成してノードに適用する。

### yumをupdateする

* 雛形生成

```sh
  % bin/knife cookbook create yum-update -o site-cookbooks
```

* レシピを作成
  - execute：コマンドを実行する。

```sh
  % vi site-cookbooks/yum-update/recipes/default.rb

  execute 'yum-update' do
    user 'root'
    command 'yum -y update'
    action :run
  end
```

* run_list（実行一覧）にレシピを追加する。

```sh
  % bin/knife node run_list add dev 'recipe[yum-update]' -z
```

* ノードに適用

```sh
  % bin/knife solo cook dev
```

### mariadbを設置する

* 雛形生成

```sh
  % bin/knife cookbook create mariadb -o site-cookbooks
```

* レシピを作成
  - cookbook_file：クックブック中のfilesディレクトリからノードの指定されたパスにファイルを配置する。
  - package：パッケージ（CentOSならyum）を管理する。 
  - service：サービス（デーモン）を管理する。

```sh
  % vi site-cookbooks/mariadb/recipes/default.rb

  cookbook_file '/etc/yum.repos.d/MariaDB.repo' do
    owner 'root'
    group 'root'
    mode '0644'
  end

  %w(MariaDB-server MariaDB-client MariaDB-devel).each do |pkg|
    package pkg do
      action :install
    end
  end

  service 'mysql' do
    action [:enable, :start]
  end
```

* mariadbのリポジトリ設定ファイルを作成する。

```sh
  % vi site-cookbooks/mariadb/files/default/MariaDB.repo

  # MariaDB 10.1 CentOS repository list - created 2016-02-21 00:19 UTC
  # http://mariadb.org/mariadb/repositories/
  [mariadb]
  name = MariaDB
  baseurl = http://yum.mariadb.org/10.1/centos6-amd64
  gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
  gpgcheck=1
```

* run_list（実行一覧）にレシピを追加する。

```sh
  % bin/knife node run_list add dev 'recipe[mariadb]' -z

  dev:
    run_list:
      recipe[yum-epel]
      recipe[yum-update]
      recipe[mariadb]
```

* ノードに適用
  - 設置手順は前回のsandboxモードでmariadbを設置したときと同様。

```sh
  % bin/knife solo cook dev

  Running Chef on dev...
  Checking Chef version...
  Installing Berkshelf cookbooks to 'cookbooks'...
  Resolving cookbook dependencies...
  Using yum (3.10.0)
  Using yum-epel (0.6.5)
  Vendoring yum (3.10.0) to cookbooks/yum
  Vendoring yum-epel (0.6.5) to cookbooks/yum-epel
  Uploading the kitchen...
  Generating solo config...
  Running Chef: sudo chef-solo -c ~/chef-solo/solo.rb -j ~/chef-solo/dna.json
  Starting Chef Client, version 12.7.2
  Compiling Cookbooks...
  Converging 5 resources
  Recipe: yum-epel::default
    * yum_repository[epel] action create
      * template[/etc/yum.repos.d/epel.repo] action create
        - update content in file /etc/yum.repos.d/epel.repo from 942dac to d02c1f
        --- /etc/yum.repos.d/epel.repo	2016-02-21 01:58:03.339879602 +0000
        +++ /etc/yum.repos.d/.epel.repo20160221-16395-1kk6smf	2016-02-21 03:56:30.298013142 +0000
        @@ -3,7 +3,7 @@

         [epel]
         name=Extra Packages for Enterprise Linux 6 - $basearch
        -enabled=0
        +enabled=1
         failovermethod=priority
         gpgcheck=1
         gpgkey=https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
        - restore selinux security context
      * execute[yum clean metadata epel] action run
        - execute yum clean metadata --disablerepo=* --enablerepo=epel


      * execute[yum-makecache-epel] action run
        - execute yum -q -y makecache --disablerepo=* --enablerepo=epel
      * ruby_block[yum-cache-reload-epel] action create
        - execute the ruby block yum-cache-reload-epel
      * execute[yum clean metadata epel] action nothing (skipped due to action :nothing)
      * execute[yum-makecache-epel] action nothing (skipped due to action :nothing)
      * ruby_block[yum-cache-reload-epel] action nothing (skipped due to action :nothing)

  Recipe: yum-update::default
    * execute[yum-update] action run
      - execute yum -y update
  Recipe: mariadb::default
    * cookbook_file[/etc/yum.repos.d/MariaDB.repo] action create
      - create new file /etc/yum.repos.d/MariaDB.repo
      - update content in file /etc/yum.repos.d/MariaDB.repo from none to 3e5392
      --- /etc/yum.repos.d/MariaDB.repo	2016-02-21 03:56:38.319013136 +0000
      +++ /etc/yum.repos.d/.MariaDB.repo20160221-16395-ih10g6	2016-02-21 03:56:38.319013136 +0000
      @@ -1 +1,8 @@
      +# MariaDB 10.1 CentOS repository list - created 2016-02-21 00:19 UTC
      +# http://mariadb.org/mariadb/repositories/
      +[mariadb]
      +name = MariaDB
      +baseurl = http://yum.mariadb.org/10.1/centos6-amd64
      +gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
      +gpgcheck=1
      - change mode from '' to '0644'
      - change owner from '' to 'root'
      - change group from '' to 'root'
      - restore selinux security context
    * yum_package[MariaDB-server] action install
      - install version 10.1.11-1.el6 of package MariaDB-server
    * yum_package[MariaDB-client] action install (up to date)
    * yum_package[MariaDB-devel] action install
      - install version 10.1.11-1.el6 of package MariaDB-devel

  Running handlers:
  Running handlers complete
  Chef Client finished, 8/12 resources updated in 01 minutes 59 seconds
```

* ノードから確認

```sh
  % ssh dev

  $ sudo service mysql start
  Starting MySQL. SUCCESS!

  $ mysql -u root
  Welcome to the MariaDB monitor.  Commands end with ; or \g.
  Your MariaDB connection id is 3
  Server version: 10.1.11-MariaDB MariaDB Server

  Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  MariaDB [(none)]> exit
  Bye
```

## Chefの作業手順について

chefで作業するときの手順を整理すると下記のようになる。

1. クックブックを生成
2. クックブックの中のレシピを修正
3. レシピの中のリソースを記述
4. run_list（実行一覧）にレシピを追加
5. ノードに適用

## 参考

* https://docs.chef.io/
* Chef実践入門