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)