När mysql-server
installeras huvudlöst, det finns inget lösenord. Gör därför .my.cnf
fungerar, bör den ha en tom lösenordsrad. Här är vad jag testade med för en .my.cnf
:
[client]
user=root
password=
Det är också lite konstigt att sätta .my.cnf
i din vagrant
användarkatalog som ägs av root och endast läsbar som root.
Efter att ha säkerställt att lösenordet var tomt i .my.cnf
, kunde jag ställa in lösenordet för root korrekt i dessa fyra sammanhang. Observera att den inte kan köras efter det, eftersom .my.cnf
skulle behöva uppdateras, så den klarar inte idempotenstestet.
Det finns en anteckning på den ansible mysql_user-modulsidan som föreslår att du skriver lösenordet och sedan skriva .my.cnf
fil. Om du gör det behöver du en where
sats till mysql_user
åtgärd (troligen med en filstat före det).
Ännu mer elegant är att använda check_implicit_admin
tillsammans med login_user
och login_password
. Det är vackert idempotent.
Som ett tredje sätt, kanske check_implicit_admin
gör det ännu enklare.
Här är min framgångsrika spelbok som visar ovanstående, testad med några nya servrar. Lite stolt över detta. Notera .my.cnf
är onödigt för allt detta.
---
- 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
(redigera- tog bort my.cnf)