Wenn mysql-server
wird kopflos installiert, es gibt kein Passwort. Daher .my.cnf
erstellen funktioniert, sollte es eine leere Passwortzeile haben. Folgendes habe ich für eine .my.cnf
getestet :
[client]
user=root
password=
Es ist auch etwas seltsam, .my.cnf
zu setzen in Ihrem vagrant
Benutzerverzeichnis im Besitz von root und nur als root lesbar.
Nachdem sichergestellt wurde, dass das Passwort in .my.cnf
leer war , konnte ich das Passwort für root in diesen vier Kontexten richtig festlegen. Beachten Sie, dass es danach nicht mehr ausgeführt werden kann, da .my.cnf
aktualisiert werden müsste, sodass es den Idempotenztest nicht besteht.
Es gibt einen Hinweis auf der Modulseite von ansible mysql_user, der vorschlägt, das Passwort und then zu schreiben Schreiben der .my.cnf
Datei. Wenn Sie das tun, brauchen Sie ein where
-Klausel zu mysql_user
Aktion (wahrscheinlich mit einem Dateistatus davor).
Noch eleganter ist die Verwendung von check_implicit_admin
zusammen mit login_user
und login_password
. Das ist wunderbar idempotent.
Als dritte Möglichkeit vielleicht check_implicit_admin
macht es noch einfacher.
Hier ist mein erfolgreiches Playbook, das das oben Gesagte zeigt, getestet mit ein paar frischen Servern. Irgendwie stolz darauf. Beachten Sie .my.cnf
ist für all das unnötig.
---
- 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
(bearbeiten – my.cnf entfernt)