とーますメモ

Ruby on Rails / Goなどの学習メモ

【Ansible】MySQLのrootパスワードが変更できない

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以上にする

これが一番簡単。