Kiedy mysql-server jest zainstalowany bez nagłówka, nie ma hasła. Dlatego zrobić .my.cnf pracy, powinien mieć pustą linię hasła. Oto, z czym testowałem dla .my.cnf :
[client]
user=root
password=
Trochę dziwne jest również umieszczenie .my.cnf w twoim vagrant katalog użytkownika jako własność roota i możliwy do odczytu tylko jako root.
Po upewnieniu się, że hasło jest puste w .my.cnf , udało mi się poprawnie ustawić hasło dla roota w tych czterech kontekstach. Zauważ, że po tym nie działa, ponieważ .my.cnf musiałby zostać zaktualizowany, więc nie przejdzie testu idempotentności.
Na stronie modułu mysql_user ansible znajduje się uwaga, która sugeruje wpisanie hasła i następnie pisanie .my.cnf plik. Jeśli to zrobisz, potrzebujesz where klauzula mysql_user akcja (prawdopodobnie z wcześniejszą statystyką pliku).
Jeszcze bardziej eleganckie jest użycie check_implicit_admin wraz z login_user i login_password . To pięknie idempotentne.
Jako trzeci sposób, być może check_implicit_admin sprawia, że jest to jeszcze łatwiejsze.
Oto mój udany podręcznik pokazujący powyższe, przetestowany na kilku nowych serwerach. Trochę z tego dumny. Uwaga .my.cnf jest niepotrzebne do tego wszystkiego.
---
- 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
(edytuj - usunięto my.cnf)