Cuando mysql-server se instala sin cabeza, no hay contraseña. Por lo tanto, para hacer .my.cnf trabajo, debe tener una línea de contraseña en blanco. Esto es lo que probé para un .my.cnf :
[client]
user=root
password=
También es un poco extraño poner .my.cnf en tu vagrant directorio de usuario como propiedad de root y solo legible como root.
Después de asegurarse de que la contraseña estaba en blanco en .my.cnf , pude configurar correctamente la contraseña para root en esos cuatro contextos. Tenga en cuenta que no se ejecuta después de eso, ya que .my.cnf necesitaría ser actualizado, por lo que falla la prueba de idempotencia.
Hay una nota en la página del módulo ansible mysql_user que sugiere escribir la contraseña y luego escribiendo el .my.cnf expediente. Si haces eso, necesitas un where cláusula al mysql_user acción (probablemente con una estadística de archivo antes de eso).
Aún más elegante es usar check_implicit_admin junto con login_user y login_password . Eso es hermosamente idempotente.
Como tercera forma, quizás check_implicit_admin lo hace aún más fácil.
Aquí está mi exitoso libro de jugadas que muestra lo anterior, probado con algunos servidores nuevos. Un poco orgulloso de esto. Nota .my.cnf es innecesario para todo esto.
---
- 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
(editar- eliminado my.cnf)