Vagrant + Fabricの設定

More than 5 years have 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