Wanneer mysql-server
headless wordt geïnstalleerd, is er geen wachtwoord. Maak daarom .my.cnf
werkt, zou het een lege wachtwoordregel moeten hebben. Dit is waarmee ik heb getest voor een .my.cnf
:
[client]
user=root
password=
Het is ook een beetje vreemd om .my.cnf
. te plaatsen in je vagrant
gebruikersmap als eigendom van root en alleen leesbaar als root.
Nadat u zeker weet dat het wachtwoord leeg was in .my.cnf
, kon ik het wachtwoord voor root correct instellen in die vier contexten. Merk op dat het daarna niet meer werkt, aangezien .my.cnf
zou moeten worden bijgewerkt, dus het slaagt niet voor de idempotentie-test.
Er is een opmerking op de ansible mysql_user modulepagina die suggereert het wachtwoord te schrijven en vervolgens het schrijven van de .my.cnf
het dossier. Als je dat doet, heb je een where
. nodig clausule aan de mysql_user
actie (waarschijnlijk met een bestandsstatistiek daarvoor).
Nog eleganter is het gebruik van check_implicit_admin
samen met login_user
en login_password
. Dat is prachtig idempotent.
Als derde manier, misschien check_implicit_admin
maakt het nog makkelijker.
Hier is mijn succesvolle playbook met het bovenstaande, getest met een paar nieuwe servers. Ben hier best wel trots op. Opmerking .my.cnf
is voor dit alles niet nodig.
---
- 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- my.cnf verwijderd)