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

mysql_user - Adds or removes a user from a MySQL database. — Ansible Documentation

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 }}

参考サイト様

Ansible徹底入門 クラウド時代の新しい構成管理の実現

Ansible徹底入門 クラウド時代の新しい構成管理の実現

  • 作者: 廣川英寿,平初,橋本直哉,森田邦裕,渡辺一宏
  • 出版社/メーカー: 翔泳社
  • 発売日: 2017/02/17
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る