Ansibleはバージョン「2.2.0.0_2」を使用。
インストール先OSは、Ubuntu 16.04.
そして以下のコード実行し、rootパスワードを変更を試みたが、
更新されず、パスワード無しでログインできてしまう。
tasks/main.yml
- name: Install the mysql packages in Debian derivatives apt: name={{ item }} state=installed with_items: - mysql-server - python-mysqldb - name: update mysql root password for root account mysql_user: name=root password={{ mysql_root_user_pass }} state=present
長々と調べた結果、以下のStackoverflowにたどり着いた。
Ansible Install MySql 5.7 - Set Root User Password - Stack Overflow
The gist of the problem had to do with mysql 5.7 using auth_socket for the root user when no password is provided
問題は、mysql5.7ではパスワードが設定されていないrootユーザに対して、auth_socketを使うことに起因している?
という解釈なのか。。。
解決方法は2つあって、
1)MySQLのdefconfを設定する
defconfとは、簡単に言うと「設定に関する処理を行ってくれるユティリティ」ということになるのだろうか。
By Wikipedia
MySQLでは、インストール時にパスワード設定を求められないようにするために
使用できる。
UbuntuでMySQLをインストールするときにパスワードの設定を求められないようにする - Qiita
同じことをAnsibleでやると以下のようになる。
tasks/main.yml
- name: Specify MySQL root password before installing debconf: name='mysql-server' question='mysql-server/root_password' value='{{mysql_root_user_pass | quote}}' vtype='password' - name: Confirm MySQL root password before installing debconf: name='mysql-server' question='mysql-server/root_password_again' value='{{mysql_root_user_pass | quote}}' vtype='password' - name: Install the mysql packages in Debian derivatives apt: name={{ item }} state=installed with_items: - mysql-server - python-mysqldb - name: update mysql root password for root account mysql_user: name=root password={{ mysql_root_user_pass }} state=present
2)Ansibleのバージョンを2.2.1以上にする
これが一番簡単。