MySQL
chef-zero
knife-zero

knife zeroでMySQLサーバ5.6をインストールする

はじめに

BerkshelfのMySQL cookbookのバージョンを6系にしたら、下記のエラーが出るようになりました。

Chef::Exceptions::RecipeNotFound
--------------------------------
could not find recipe default for cookbook mysql

こちらについて調べてみたところ

As of version 6.0.0 the mysql cookbook is now a library-only cookbook. This means it no longer provides recipes. You'll want to create a wrapper cookbook that uses the mysql_client resource and use that recipe instead.

だそうで、どうやら6系からは自分でレシピを作る必要があるようです。

巷の話ではknife-soloオワコンらしいし、これを機にknife-zeroBerkshelfmysql cookbookを使ったMySQLサーバのインストールを行うことにしました。

knife zeroを入れる

こちらに書かれた手順に従って、knife-zeroをローカルマシンにインストールします。
Knife-ZeroでCookbookの作成/実行/削除&git cloneコマンドでCookbookの取得 (1/2)

入れたらbootstrapしますが、bootstrapするとrun_listが初期化されるので、nodesディレクトリはバックアップしておきましょう。

あと常に-zする人は、事前に.chef/knife.rbに下記の設定を追記しておくとよいです。

local_mode true

bootstrapを実行します。

$ knife zero bootstrap hoge --sudo

knife zeroでは実行結果でnodes/hoge.jsonを更新しますので、サーバのホスト名とbootstrapで指定するホスト名を揃えておく必要があります(hostsや.ssh/configに別名を書いていたりすると、ホスト名の不整合で正しく動かない)

ラッパーレシピ作成

Berkshelfsがインストールされ、cookbooksが最新化されている前提で進めます。
cookbooks/mysqlのリソースを呼び出すためのラッパーレシピを作成します。

$ knife cookbook create mysql-default -o site-cookbooks

レシピにmysqlの設定を記述します。

site-cookbooks/mysql-default/recipes/default.rb
#
# Cookbook Name:: mysql-default
# Recipe:: default
#
# Copyright 2016, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
mysql_service 'default' do
  port '3306'
  version '5.6'
  initial_root_password ''
  action [:create, :start]
end

mysql_client 'default' do
  action :create
end

metadata.rbにdepends 'mysql'を追加。

site-cookbooks/mysql-default/metadata.rb
name             'mysql-default'
maintainer       'YOUR_COMPANY_NAME'
maintainer_email 'YOUR_EMAIL'
license          'All rights reserved'
description      'Installs/Configures mysql-default'
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version          '0.1.0'
depends          'mysql' # added

run_list追加

nodeのrun_listmysql-defaultを追加します。

$ knife node run_list add hoge mysql-default

converge実行

convergeを実行し、mysqlをインストールします。

$ knife zero converge "name:hoge" --sudo

hoge Starting Chef Client, version 12.6.0
hoge resolving cookbooks for run list: ["mysql", "base"]
hoge Synchronizing Cookbooks:
hoge   - mysql (6.1.2)
hoge   - base (0.1.0)
hoge   - yum-mysql-community (0.1.21)
hoge   - smf (2.2.7)
hoge   - yum (3.5.1)
hoge   - rbac (1.0.3)
hoge Compiling Cookbooks...
hoge Converging 22 resources
hoge Recipe: mysql::default
hoge   * mysql_service[default] action create
hoge   Recipe: yum-mysql-community::mysql56
hoge     * yum_repository[mysql56-community] action create
hoge       * template[/etc/yum.repos.d/mysql56-community.repo] action create
hoge         - create new file /etc/yum.repos.d/mysql56-community.repo
hoge         - update content in file /etc/yum.repos.d/mysql56-community.repo from none to f82f43
hoge         --- /etc/yum.repos.d/mysql56-community.repo    2016-01-08 09:46:22.358486843 +0000
hoge         +++ /etc/yum.repos.d/.mysql56-community.repo20160108-3460-13wm327  2016-01-08 09:46:22.358486843 +0000
hoge         @@ -1 +1,12 @@
hoge         +# This file was generated by Chef
hoge         +# Do NOT modify this file by hand.
hoge         +
hoge         +[mysql56-community]
hoge         +name=MySQL 5.6 Community Server
hoge         +baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/$releasever/$basearch/
hoge         +enabled=1
hoge         +failovermethod=priority
hoge         +gpgcheck=1
hoge         +gpgkey=https://raw.githubusercontent.com/chef-cookbooks/yum-mysql-community/master/files/default/mysql_pubkey.asc
hoge         +sslverify=true
hoge         - change mode from '' to '0644'
hoge       * execute[yum-makecache-mysql56-community] action run
hoge         - execute yum -q makecache --disablerepo=* --enablerepo=mysql56-community
hoge       * ruby_block[yum-cache-reload-mysql56-community] action create
hoge         - execute the ruby block yum-cache-reload-mysql56-community
hoge       * execute[yum-makecache-mysql56-community] action nothing (skipped due to action :nothing)
hoge       * ruby_block[yum-cache-reload-mysql56-community] action nothing (skipped due to action :nothing)
hoge     
hoge     * yum_package[default :create mysql-community-server] action install
hoge       - install version 5.6.28-2.el6 of package mysql-community-server
hoge     * service[default :create mysqld] action stop (up to date)
hoge     * service[default :create mysqld] action disable (up to date)
hoge     * group[default :create mysql] action create (up to date)
hoge     * user[default :create mysql] action create (up to date)
hoge     * file[default :create /etc/mysql/my.cnf] action delete (up to date)
hoge     * file[default :create /etc/my.cnf] action delete
hoge       - delete file /etc/my.cnf
hoge     * link[default :create /usr/share/my-default.cnf] action create
hoge       - create symlink at /usr/share/my-default.cnf to /etc/mysql-default/my.cnf
hoge     * directory[default :create /etc/mysql-default] action create
hoge       - create new directory /etc/mysql-default
hoge       - change mode from '' to '0750'
hoge       - change owner from '' to 'mysql'
hoge       - change group from '' to 'mysql'
hoge     * directory[default :create /etc/mysql-default/conf.d] action create
hoge       - create new directory /etc/mysql-default/conf.d
hoge       - change mode from '' to '0750'
hoge       - change owner from '' to 'mysql'
hoge       - change group from '' to 'mysql'
hoge     * directory[default :create /var/run/mysql-default] action create
hoge       - create new directory /var/run/mysql-default
hoge       - change mode from '' to '0755'
hoge       - change owner from '' to 'mysql'
hoge       - change group from '' to 'mysql'
hoge     * directory[default :create /var/log/mysql-default] action create
hoge       - create new directory /var/log/mysql-default
hoge       - change mode from '' to '0750'
hoge       - change owner from '' to 'mysql'
hoge       - change group from '' to 'mysql'
hoge     * directory[default :create /var/lib/mysql-default] action create
hoge       - create new directory /var/lib/mysql-default
hoge       - change mode from '' to '0750'
hoge       - change owner from '' to 'mysql'
hoge       - change group from '' to 'mysql'
hoge     * template[default :create /etc/mysql-default/my.cnf] action create
hoge       - create new file /etc/mysql-default/my.cnf
hoge       - update content in file /etc/mysql-default/my.cnf from none to b075a3
hoge       --- /etc/mysql-default/my.cnf    2016-01-08 09:47:07.116854806 +0000
hoge       +++ /etc/mysql-default/.my.cnf20160108-3460-1u4m2wd  2016-01-08 09:47:07.116854806 +0000
hoge       @@ -1 +1,23 @@
hoge       +# Chef generated my.cnf for instance mysql-default
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 中略 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
hoge Running handlers:
hoge Running handlers complete
hoge 
hoge Deprecated features used!
hoge   Cannot specify both default and name_property together on property path of resource yum_globalconfig. Only one (name_property) will be obeyed. In Chef 13, this will become an error. at 1 location:
hoge     - /var/chef/cache/cookbooks/yum/resources/globalconfig.rb:76:in `class_from_file'
hoge 
hoge Chef Client finished, 22/29 resources updated in 02 minutes 54 seconds

確認

finishedを確認し、ログインしてmysqlのバージョンを確認します。

$ mysql -u root --socket=/var/run/mysql-default/mysqld.sock --port=3306
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.28 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.6.28    |
+-----------+
1 row in set (0.00 sec)

レシピで指定したMySQLがインストールされていることが確認できます。