Když mysql-server
je nainstalován bezhlavě, neexistuje žádné heslo. Proto vytvořit .my.cnf
práce, měl by mít prázdný řádek s heslem. Zde je to, s čím jsem testoval .my.cnf
:
[client]
user=root
password=
Je také trochu zvláštní umístit .my.cnf
ve vašem vagrant
uživatelský adresář vlastněný uživatelem root a čitelný pouze jako uživatel root.
Poté, co se ujistil, že heslo v .my.cnf
bylo prázdné , byl jsem schopen správně nastavit heslo pro root v těchto čtyřech kontextech. Všimněte si, že se poté nespustí, protože .my.cnf
bude nutné aktualizovat, takže neprojde testem idempotence.
Na stránce modulu ansible mysql_user je poznámka, která navrhuje napsat heslo a pak zápis .my.cnf
soubor. Pokud to uděláte, potřebujete where
klauzule do mysql_user
akce (pravděpodobně se statistikou souboru před tím).
Ještě elegantnější je použít check_implicit_admin
spolu s login_user
a login_password
. To je krásně idempotentní.
Jako třetí způsob možná check_implicit_admin
je to ještě jednodušší.
Zde je můj úspěšný playbook, který ukazuje výše uvedené, testovaný na několika nových serverech. Na tohle jsem docela hrdý. Poznámka:.my.cnf
je pro to všechno zbytečné.
---
- 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
(edit- remove my.cnf)