Vagrant + Fabricの設定

  • 23
    Like
  • 0
    Comment
More than 1 year has passed since last update.

前提

VMはCentOS6.4をVagrantで構築済み。
HostはOSX。

やりたいこと

https://gist.github.com/fuzzy31u/117a6e00f93423aeca10

これはshellスクリプトのprovision。
# TODO manually!
とか書いてあるのを自動化したかったです。

全体的にはhttpサーバ起動したりMySQL, Pythonの最新バージョンをrpmインストールしたりソースインストールしたりするような手続き。

やったこと

Fabricインストール@ホストOS

$ sudo pip install fabric

Fabric provisionerインストール@ホストOS

$ vagrant plugin install vagrant-fabric

provisioning用Pythonスクリプト作成

provision.py
# -*- coding: utf-8 -*-

from fabric.api import run, sudo, cd
from fabric.contrib.files import sed, append, contains

def execute():
    update_yum()
    install()
    change_network_config()
    config_httpd()
    link_www_dir()
    epel()
    remi()
    mysql55()
    python3()

def update_yum():
    sudo('yum update -y')

def install():
    sudo('yum -y install httpd')
    sudo('yum -y install emacs')
    sudo('yum -y install wget')

def change_network_config():
    sudo('service iptables stop')
    sudo('chkconfig iptables off')

def config_httpd():
    sudo ('service httpd start')
    sudo('chkconfig httpd on')

def link_www_dir():
    sudo('ln -fs /vagrant /var/www/html')

def epel():
    run('wget https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm')
    sudo('/bin/rpm -Uvh epel-release-6-8.noarch.rpm')
    sed('/etc/yum.repos.d/epel.repo', before='enabled=1', after='enabled=0', use_sudo=True)

def remi():
    run('wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm')
    sudo('rpm -Uvh remi-release-6.rpm')

def mysql55():
    sudo('yum install -y --enablerepo=remi mysql-server')
    if not contains('/etc/my.cnf', 'character_set_server=utf8'):
        append('/etc/my.cnf', 
               '\ncharacter_set_server=utf8\ndefault-storage-engine=InnoDB\ninnodb_file_per_table\n[mysql]\ndefault-character-set=utf8\n[mysqldump]\ndefault-character-set=utf',
           use_sudo=True)
    sudo('service mysqld start')
    sudo('chkconfig mysqld on')

def python3():
    run('wget https://www.python.org/ftp/python/3.4.0/Python-3.4.0.tgz')
    run('tar xzvf Python-3.4.0.tgz')
    with cd('Python-3.4.0'):
        run('./configure --enable-shared --with-threads')
        run('make')
        sudo('make install')
        sudo('cp -p libpython3.4m.so libpython3.4m.so.1.0 /usr/lib')
        sudo('/sbin/ldconfig')
        run('source ~/.bash_profile')
        run('python3 --version')

ファイル書き換えはputで置き換えなくてもsedとかappendが使えるよう

VagrantFile編集

# 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.box = "centos64"

  config.vm.provision :fabric do |fabric|
    fabric.fabfile_path = "./provision.py"
    fabric.tasks = ["execute"]
  end
end

プロビジョニングを適用しつつup

vagrant up --provision