こんにちは!beardです!
RDSを使わないでEC2にMySQLをインストールして使うこともあるかと思います。
今回は、そんな場合にServerspecでmysql-serverのテストをできるようにしてみます。
Serverspecのインストールと基本的な操作については、過去の記事『Amazon OSS編~Serverspecパート①~』をご覧ください。
1. まずAmazonLinuxのEC2にmysqlをインストールして設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$yum -y install mysql-server $vim /etc/my.cnf ←mysql設定変更 [mysqld_safe] log-error = /var/log/mysqld.log pid-file = /var/run/mysqld/mysqld.pid [mysqld] datadir = /var/lib/mysql socket = /var/lib/mysql/mysql.sock symbolic-links = 0 character-set-server = utf8 ←日本語に対応するためUTF8を使用 $service mysqld start ←サービス起動 $chkconfig mysqld on ←自動起動設定 |
2. serverspecでこれらの設定を確認します。
ディレクトリ構成とRakefileとspec_helper.rbは「Serverspecでサーバ情報をファイルに保存してテストする方法」の記事と同じです。
1 2 3 4 5 6 7 |
Serverspec ├Rakefile ├mysql.yml ←サーバ情報を書きます ├spec ├spec_helper.rb └mysql └mysql_spec.rb ←mysqlの設定を新規で作ります。 |
mysql.ymlの内容
1 2 3 |
”IPアドレス”: :roles: - mysql |
mysql_spec.rbの内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
require 'spec_helper' describe service('mysqld') do ←mysqlの起動について it { should be_enabled } it { should be_running } end describe port(3306) do ←mysqlのポート it { should be_listening } end describe file('/etc/my.cnf') do ←設定ファイル it {should contain('character-set-server = utf8').from(/^[mysqld]/).to(/^end/)} it { should be_mode 644 } end |
3. このようにファイルを変更した後、「rake spec」コマンドでテストを開始します。
1 2 3 4 5 6 7 |
$ rake spec Enter Servers.yml to test(full path): /etc/serverspec/hsuzuki/mysqld.yml /usr/bin/ruby2.0 -S rspec spec/mysql/mysql_spec.rb spec/test/test_spec.rb ...... Finished in 2.51 seconds 6 examples, 0 failuresrake spec ←テスト成功 |
4. 解説
今回の特徴としては/etc/my.cnfのテストです。
ここでは[mysqld]からファイルの最後までの間にcharacter-set-server = utf8の記述があることを評価しています。
また、ファイルの権限もテストしておきます。
1 2 3 4 |
describe file('/etc/my.cnf') do it {should contain('character-set-server = utf8').from(/^[mysqld]/).to(/^end/)} it { should be_mode 644 } end |
いかがでしたか?
なんらかの理由でRDSを使わない場合はこういった方法も必要です。
次回もお楽しみに!!