Ansible ProvisionerでMySQLを対象としたansible roleのテストをする
概要
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でバッティングしてるのかも?
よくわからんけど。