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)