Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

Chef | cookbook | mysql向けcookbookの作成

概要

mysql向けcookbookの作成

詳細

mysql向けcookbookの作成をします。

手順

# kitchenの作成
mkdir mysql
cd mysql
knife solo init .

# Vagrantfile生成
vagrant init

# Vagrantfile編集 ※詳細は後述
vi Vagrantfile

# cookbookのテンプレート生成
knife cookbook create mysql -o site-cookbooks/

# レシピの編集 ※詳細は後述

# vagrant起動
vagrant up
vagrant provision

# 動作確認
vagrant ssh

# mysqlのインストールバージョン確認
vagrant@precise64:~$ mysql --version
mysql  Ver 14.14 Distrib 5.5.34, for debian-linux-gnu (x86_64) using readline 6.2

# rootのパスワード空文字でログイン出来るか検証
vagrant@precise64:~$ mysql -u root
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.provider :virtualbox do |vb|
    vb.name = "mysql"
    vb.customize ["modifyvm", :id, "--memory", 512]
  end

  config.vm.box = "ubuntu-12.04-x64"
  config.omnibus.chef_version = "11.6.0"
  config.vm.network :private_network, ip: "192.168.33.22"
  
  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"]
    chef.add_recipe "mysql"
  end
end

site-cookbooks/mysql/libraries/helper.rb

class Chef
  class Recipe
    def execute_with_log(name, &block)
      log "start #{name}"
      block.call
      log "end   #{name}"
    end
  end
end

site-cookbooks/mysql/recipe/default.rb

※ここではrootユーザーのパスワードをrootに設定したうえで
最後に空文字で再設定しています。
実運用時は再設定の必要はなく、また設定するパスワードもdata_bag + αを利用して
暗号化しておく必要があります。

#
# Cookbook Name:: mysql
# Recipe:: default
#
# Copyright 2013
#
# All rights reserved - Do Not Redistribute
#
execute_with_log("install mysql") do
  bash "install mysql" do
    user "root"
    code <<-EOS
    sudo debconf-set-selections <<< 'mysql-server-5.5.34 mysql-server/root_password password root'
    sudo debconf-set-selections <<< 'mysql-server-5.5.34 mysql-server/root_password_again password root'

    sudo apt-get -y install mysql-server=5.5.34-0ubuntu0.12.04.1

    mysqladmin -p'root' password '' -u root
    EOS
  end
end


packages = %w{libmysqlclient-dev libmysql-ruby}
execute_with_log("install packages =  #{packages.inspect}") do
  packages.each do |each_package|
    execute_with_log("#{each_package} install") do
      package each_package do
        action :install
        options "--force-yes"
      end
    end
  end
end