Lorsque mysql-server
est installé sans tête, il n'y a pas de mot de passe. Donc faire .my.cnf
fonctionner, il devrait avoir une ligne de mot de passe vide. Voici ce que j'ai testé avec pour un .my.cnf
:
[client]
user=root
password=
C'est aussi un peu étrange de mettre .my.cnf
dans votre vagrant
répertoire utilisateur appartenant à root et lisible uniquement en tant que root.
Après s'être assuré que le mot de passe était vide dans .my.cnf
, j'ai pu définir correctement le mot de passe pour root dans ces quatre contextes. Notez qu'il ne parvient pas à s'exécuter après cela, car .my.cnf
aurait besoin d'être mis à jour, il échoue donc au test d'idempotence.
Il y a une note sur la page du module ansible mysql_user qui suggère d'écrire le mot de passe et puis écrire le .my.cnf
dossier. Si vous faites cela, vous avez besoin d'un where
clause au mysql_user
action (probablement avec une statistique de fichier avant).
Encore plus élégant est d'utiliser check_implicit_admin
avec login_user
et login_password
. C'est magnifiquement idempotent.
Comme troisième manière, peut-être check_implicit_admin
le rend encore plus facile.
Voici mon playbook réussi montrant ce qui précède, testé avec quelques nouveaux serveurs. Un peu fier de ça. Remarque .my.cnf
est inutile pour tout cela.
---
- hosts: mysql
vars:
mysql_root_password: fart
tasks:
- name: Install MySQL
apt: name={{ item }} update_cache=yes cache_valid_time=3600 state=present
sudo: yes
with_items:
- python-mysqldb
- mysql-server
#- name: copy cnf
# copy: src=.my.cnf dest=~/.my.cnf owner=ubuntu mode=0644
# sudo: yes
- name: Start the MySQL service
sudo: yes
service:
name: mysql
state: started
enabled: true
- name: update mysql root password for all root accounts
sudo: yes
mysql_user:
name: root
host: "{{ item }}"
password: "{{ mysql_root_password }}"
login_user: root
login_password: "{{ mysql_root_password }}"
check_implicit_admin: yes
priv: "*.*:ALL,GRANT"
with_items:
- "{{ ansible_hostname }}"
- 127.0.0.1
- ::1
- localhost
(édition - suppression de my.cnf)