Публикувах за това на coderwall , но ще възпроизведа подобрението на dennisjac в коментарите на оригиналната си публикация.
Номерът да го направите идемпотентно е да знаете, че модулът mysql_user ще зареди файл ~/.my.cnf, ако намери такъв.
Първо променям паролата, след което копирам .my.cnf файл с идентификационните данни за паролата. Когато се опитате да го стартирате втори път, модулът myqsl_user ansible ще намери .my.cnf и ще използва новата парола.
- hosts: staging_mysql
user: ec2-user
sudo: yes
tasks:
- name: Install MySQL
action: yum name={{ item }}
with_items:
- MySQL-python
- mysql
- mysql-server
- name: Start the MySQL service
action: service name=mysqld state=started
# 'localhost' needs to be the last item for idempotency, see
# http://ansible.cc/docs/modules.html#mysql-user
- name: update mysql root password for all root accounts
mysql_user: name=root host={{ item }} password={{ mysql_root_password }} priv=*.*:ALL,GRANT
with_items:
- "{{ ansible_hostname }}"
- 127.0.0.1
- ::1
- localhost
- name: copy .my.cnf file with root password credentials
template: src=templates/root/.my.cnf dest=/root/.my.cnf owner=root mode=0600
Шаблонът .my.cnf изглежда така:
[client]
user=root
password={{ mysql_root_password }}
Редактиране:Добавени са привилегии, както е препоръчано от Dhananjay Nene в коментарите, и променена интерполация на променлива, за да се използват скоби вместо знак за долар .