概要
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