はじめに
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-zero
でBerkshelf
のmysql 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の設定を記述します。
#
# 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'
を追加。
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_list
にmysql-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がインストールされていることが確認できます。