Hatena::Groupprogram

ひとり開発日記。 このページをアンテナに追加 RSSフィード

2015/10/14 (Wed)

Vagrantで起動したCentOS6.7にMySQL5.6をAnsibleでインストール

| Vagrantで起動したCentOS6.7にMySQL5.6をAnsibleでインストール - ひとり開発日記。 を含むブックマーク はてなブックマーク - Vagrantで起動したCentOS6.7にMySQL5.6をAnsibleでインストール - ひとり開発日記。

VirtualBoxCentOSインスタンスを作って、Vagrantで起動し、それにMySQLインストールして、ローカル試験環境として使ってるのですが、誤って vagrant destroy してしまうこともありますよね…?*1

折角の仮想環境なので、すぐに作ったり壊したり出来たほうがいいよなぁ、と言うことで、手順をここに書いておきます。

方針
  1. ホストOSWindows7、ゲストOSはCentOS6.7
  2. VagrantVirtualBox を起動
  3. 仮想環境にSSHログイン
  4. Ansibleをインストール
  5. Ansible Playbookをコピー
  6. hosts設定
  7. AnsibleでMySQLインストール

お仕事でMacじゃなくてWindowsマシンの人、多いでしょう? で、WindowsにAnsible入れるのってのも無謀な気がしましたし。 試験環境として、MySQLだけ動けば良いわけですので、ベストプラクティス*2は無視して、一枚ペラのPlaybookをローカル実行、と言う方針で。

環境
VagrantVirtualBox を起動
  • Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.define :server_db do |node|
    node.vm.box = "box-cutter/centos67"
    node.vm.box_version = "2.0.5"
    node.vm.network :private_network, ip:"192.168.33.15"
  end

  config.vm.provider "virtualbox" do |v|
    v.gui = true
  end

end

Vagrantfileはこんな感じで。 boxは、Atlas上にあるミニマムCentOS環境 box-cutter/centos67 v2.0.5 を使い、固定IPは 192.168.33.15 で。

vagrant up

で起動します。

仮想環境にSSHログイン

仮想環境へSSHログインします*3 ユーザー:vagrant / パスワード:vagrantログインできます。

Ansibleをインストール
sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo yum -y install ansible

ミニマム過ぎて、EPELリポジトリも入ってないので、まずEPELリポジトリインストール。 その後でAnsibleをインストールします

[vagrant@localhost ~]$ ansible --version
ansible 1.9.4
  configured module search path = None

この時点でのAnsibleのバージョンは 1.9.4

Ansible Playbookをコピー
  • playbook.yml
- hosts: all
  remote_user: vagrant
  sudo: yes

  tasks:
    - name: yum update all
      yum: name=* state=latest

    - name: install MySQL Yum Repository
      yum: name=https://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm state=present

    - name: install MySQL/MySQL-python/libselinux-python
      yum: name={{ item.name }} enablerepo={{ item.repo }} state=present
      with_items:
        - { name: "mysql-community-libs-compat", repo: "mysql56-community" }
        - { name: "mysql-community-client", repo: "mysql56-community" }
        - { name: "mysql-community-server", repo: "mysql56-community" }
        - { name: "MySQL-python", repo: "epel" }
        - { name: "libselinux-python", repo: "epel" }

    - name: add my.cnf character-set-server
      replace: dest=/etc/my.cnf regexp="^\[mysqld\]$" replace="[mysqld]\ncharacter-set-server=utf8"

    - name: start MySQL service
      service: name=mysqld enabled=yes state=started

    - name: add MySQL work user
      mysql_user: name=dbuser password=dbpassword1 host={{ item }} priv=*.*:ALL,GRANT state=present
      with_items:
        - "localhost"
        - "%"

vi等でコピー。*4

hosts設定
echo "127.0.0.1" | sudo tee /etc/ansible/hosts > /dev/null

/etc/ansible/hostsにローカルIPだけ設定*5

AnsibleでMySQLインストール
sudo ansible-playbook playbook.yml -c local

playbookが反映され、MySQLが起動されている(はずです)

*1:本日のワタクシがそうでした…

*2:Best Practices — Ansible Documentation http://docs.ansible.com/ansible/playbooks_best_practices.html

*3クライアントTeraTerm 等で https://osdn.jp/projects/ttssh2/

*4:本当はGitHubとかにコミットしておいて、git cloneで持ってくるのが良いのかもですけど

*5sudoリダイレクトが Permission denied になる件 | CUBE SUGAR STORAGE http://bit.ly/1VSAkPS

トラックバック - http://program.g.hatena.ne.jp/halflite/20151014