Quando mysql-server
è installato senza testa, non c'è password. Quindi fare .my.cnf
lavoro, dovrebbe avere una riga della password vuota. Ecco cosa ho testato per un .my.cnf
:
[client]
user=root
password=
È anche un po' strano mettere .my.cnf
nel tuo vagrant
directory utente come di proprietà di root e leggibile solo come root.
Dopo aver verificato che la password fosse vuota in .my.cnf
, sono stato in grado di impostare correttamente la password per root in questi quattro contesti. Nota che non viene eseguito dopo, poiché .my.cnf
dovrebbe essere aggiornato, quindi non supera il test di idempotenza.
C'è una nota sulla pagina del modulo ansible mysql_user che suggerisce di scrivere la password e quindi scrivendo il .my.cnf
file. Se lo fai, hai bisogno di un where
clausola al mysql_user
azione (probabilmente con un file stat prima).
Ancora più elegante è usare check_implicit_admin
insieme a login_user
e login_password
. È meravigliosamente idempotente.
Come terzo modo, forse check_implicit_admin
lo rende ancora più semplice.
Ecco il mio playbook di successo che mostra quanto sopra, testato con alcuni server nuovi. Un po' orgoglioso di questo. Nota .my.cnf
non è necessario per tutto questo.
---
- 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
(modifica-rimosso my.cnf)