Ketika mysql-server
diinstal tanpa kepala, tidak ada kata sandi. Oleh karena itu untuk membuat .my.cnf
berfungsi, itu harus memiliki baris kata sandi kosong. Inilah yang saya uji dengan .my.cnf
:
[client]
user=root
password=
Agak aneh juga menempatkan .my.cnf
di vagrant
direktori pengguna yang dimiliki oleh root dan hanya dapat dibaca sebagai root.
Setelah memastikan kata sandi kosong di .my.cnf
, saya dapat mengatur kata sandi untuk root dengan benar dalam empat konteks tersebut. Perhatikan bahwa gagal dijalankan setelah itu, karena .my.cnf
perlu diperbarui, sehingga gagal dalam uji idempotensi.
Ada catatan di halaman modul mysql_user yang memungkinkan yang menyarankan untuk menulis kata sandi dan lalu menulis .my.cnf
mengajukan. Jika Anda melakukannya, Anda memerlukan where
klausa ke mysql_user
action (mungkin dengan file stat sebelumnya).
Yang lebih elegan adalah menggunakan check_implicit_admin
bersama dengan login_user
dan login_password
. Itu idempoten yang bagus.
Sebagai cara ketiga, mungkin check_implicit_admin
membuatnya lebih mudah.
Inilah buku pedoman saya yang berhasil menunjukkan hal di atas, diuji dengan beberapa server baru. Agak bangga dengan ini. Catatan .my.cnf
tidak perlu untuk semua ini.
---
- 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- hapus my.cnf)