ChefでCentOS7にMySQLを導入する方法

# 概要
Chef デビューを果たしたので、MySQL を CentOS 7.1 に入れてみようと思い、`knife cookbook create mysql -o site-cookbooks`で cookbook を作り、下記の通りの recipe を書いてみました。

```ruby:site-cookbooks/mysql/recipes/default.rb
package 'mysql-server' do
  action :install
end

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

すると、

```bash
Recipe: mysql::default
  * yum_package[mysql-server] action install
    * No candidate version available for mysql-server
    ================================================================================
    Error executing action `install` on resource 'yum_package[mysql-server]'
    ================================================================================

    Chef::Exceptions::Package
    -------------------------
    No candidate version available for mysql-server

    Resource Declaration:
    ---------------------
    # In /home/vagrant/chef-solo/cookbooks-3/mysql/recipes/default.rb

     10: package 'mysql-server' do
     11:   action :install
     12: end
     13:

    Compiled Resource:
    ------------------
    # Declared in /home/vagrant/chef-solo/cookbooks-3/mysql/recipes/default.rb:10:in `from_file'

    yum_package("mysql-server") do
      action [:install]
      retries 0
      retry_delay 2
      default_guard_interpreter :default
      package_name "mysql-server"
      flush_cache {:before=>false, :after=>false}
      declared_type :package
      cookbook_name :mysql
      recipe_name "default"
    end
```

というエラーでお亡くなりになってしまいました……。

# 原因
どうやら CentOS7では、標準リポジトリから MySQL のインストールが出来ないようです。
そのため、yum repository に MySQL のリポジトリを追加する必要があります。

ちなみに、CentOS7からは、MariaDB が標準でインストールできるようになっているそうです。
MySQL から MariaDB へ乗り換えろという CentOS からのメッセージですね。

# 対応策
CentOS7 用の rpm を追加するレシピを追加すればインストールができるようになります。

```ruby:site-cookbooks/mysql/recipes/default.rb
remote_file "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-5.noarch.rpm" do
  source 'http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm'
  action :create
end

rpm_package 'mysql-community-release' do
  source "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-5.noarch.rpm"
  action :install
end
```

`Chef::Config[:file_cache_path]`にはファイルキャッシュとして使用するディレクトリのパス名が格納されているそうです。

# 結果
完成したレシピは以下のとおりです。

```ruby:site-cookbooks/mysql/recipes/default.rb
remote_file "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-5.noarch.rpm" do
  source 'http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm'
  action :create
end

rpm_package 'mysql-community-release' do
  source "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-5.noarch.rpm"
  action :install
end

package 'mysql-server' do
  action :install
end

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


それでは実行してみます！

```bash
Recipe: mysql::default
  * remote_file[/var/chef/cache/mysql-community-release-el7-5.noarch.rpm] action create (up to date)
  * rpm_package[mysql-community-release] action install
    - install version el7-5 of package mysql-community-release
  * yum_package[mysql-server] action install[2015-07-16T10:30:52+00:00] WARN: yum_package[mysql-server] matched multiple Provides for mysql-server but we can only use the first match: mysql-community-server. Please use a more specific version.

    - install version 5.6.25-2.el7 of package mysql-community-server
  * service[mysqld] action enable (up to date)
  * service[mysqld] action start
    - start service service[mysqld]
```

無事、CentOS7 に MySQL が導入できました！

# 参考
- [ChefでMySQL5.6をインストール](http://qiita.com/naoyes/items/a49637bfa4bc6a64b87b)
- [サーバー設定ツール「Chef」の概要と基礎的な使い方 3ページ](http://osdn.jp/magazine/14/03/05/090000/3)