概要
ansible roleのテストを行うときにVagrantのAnsible Provisionerを使ってるわけですが
MySQLとかのDBを対象としたタスクのテストをしようと思うと、MySQL環境を構築しなければならず面倒です。
なので、MySQL環境構築のスクリプトを書きました。
書きましたと言ってもネットに落ちてるやつ拝借しただけですが。
目次
参考サイト様
前提
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.4
BuildVersion: 19E287
$ python -V
Python 3.7.7
$ vagrant --version
Vagrant 2.2.7
想定シーン
- ansible MySQL moduleを使ってよしなにしたい
成果物
ほぼ、参考サイト様のパクリです。
$script = <<-SCRIPT
lookFile=/home/vagrant/provisioner.lock
if [ ! -e $lookFile ]; then
touch $lookFile
yum -y remove mariadb-libs
rm -rf /var/lib/mysql
yum -y localinstall http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum -y install mysql-community-server
cat << __CONF__ >> /etc/my.cnf
character-set-server = utf8
default_password_lifetime = 0
__CONF__
systemctl enable mysqld
systemctl start mysqld
password=`cat /var/log/mysqld.log | grep "A temporary password" | tr ' ' '\n' | tail -n1`
mysql -u root -p${password} --connect-expired-password << EOT
SET password FOR root@localhost=password('uQvdquWj3=bW');
SET global validate_password_policy=LOW;
SET global validate_password_length=6;
SET password FOR root@localhost=password('vagrant');
EOT
fi
SCRIPT
Vagrant.configure("2") do |config|
config.vm.box = "gbailey/amzn2"
config.vm.provision "shell", inline: $script
config.vm.provision "ansible" do |ansible|
ansible.playbook = "tests/test.yml"
ansible.become = true
ansible.limit = "all"
ansible.compatibility_mode = "2.0"
end
end
読んでそのまんまです。
$script
にMySQL構築用スクリプトを突っ込んで、vmがプロビジョニングされると実行されるようにしています。
ただ、ansibleのテストを複数回流す絡みでvagrant provision
を実行するたびスクリプトが流れると嫌なので下記で制御します。
lookFile=/home/vagrant/provisioner.lock
if [ ! -e $lookFile ]; then
touch $lookFile
# 省略
fi
よくある、空のファイル作って実行済みか判定するやつっすね。
以上
雑感
GitHubのリポジトリをパブリックにしたいのだけれど…
あと、このVagrantファイルあまり安定してないかも?初回でうまくいくときと行かないときがある。
エラー的にはyumのプロセスがうんたらってなってるので、MySQL構築用に流してるスクリプトとansibleのtaskでバッティングしてるのかも?
よくわからんけど。