Ansibleのmysql_userモジュールを使ってrootのパスワードを変更する

http://docs.ansible.com/ansible/mysql_user_module.html

MySQLdbライブラリのインストール

mysel_userモジュールを使用するためには下記記載のようにPythonのMySQLdbライブラリが必要。

Requirements (on host that executes module)

  • MySQLdb
http://docs.ansible.com/ansible/mysql_user_module.html#requirements-on-host-that-executes-module

Amazon Linux環境だったのでYumリポジトリからインストールすることができた。
ただ、バージョンを指定する必要があった。指定がない状態だと2.6用のがインストールされる。

# yum install -y MySQL-python27

プレイブックで書くとこうなる。

- name: yum install MySQL-python require ansible mysql_user module                                                                                                                   
  yum: name=MySQL-python27 state=latest

パスワード変更

MySQLはユーザ名とクライアントのホスト名をセットで管理しているので、ユーザ名とホスト名を指定する必要がある。
今回は全てのホストに対して変更をかけたかったのでmysel_userモジュールのhost_allオプションを使用した(v2.1以降で使用可能)
別途mysql_root_passwordという変数の用意が必要。

- name: mysql root change password
  mysql_user: name=root password='{{mysql_root_password}}' host_all=yes

これでパスワードの変更は完了だが、これだけだと次回以降変更処理をする際にログインできずエラーになってしまう。
ログインするユーザのホームディレクトリに.my.cnfを作成してログイン情報を記載しておくことで解決する。

- name: /root/.my.cnf by template
  template: src=templates/my.cnf.j2 dest=/root/.my.cnf

テンプレートの中身はこう。

[client]
user = root
password = {{ mysql_root_password }}