जब mysql-server
बिना सिर के स्थापित है, कोई पासवर्ड नहीं है। इसलिए .my.cnf
. बनाने के लिए काम, इसमें एक खाली पासवर्ड लाइन होनी चाहिए। यहां मैंने .my.cnf
. के लिए परीक्षण किया है :
[client]
user=root
password=
.my.cnf
. लगाना भी थोड़ा अजीब है आपके vagrant
. में उपयोगकर्ता निर्देशिका रूट के स्वामित्व में है और केवल रूट के रूप में पढ़ने योग्य है।
यह सुनिश्चित करने के बाद कि .my.cnf
. में पासवर्ड खाली था , मैं उन चार संदर्भों में रूट के लिए पासवर्ड को ठीक से सेट करने में सक्षम था। ध्यान दें कि यह उसके बाद चलने में विफल रहता है, क्योंकि .my.cnf
अद्यतन करने की आवश्यकता होगी, इसलिए यह idempotency परीक्षण में विफल रहता है।
ansible mysql_user मॉड्यूल पेज पर एक नोट है जो पासवर्ड लिखने का सुझाव देता है और फिर .my.cnf
. लिखना फ़ाइल। यदि आप ऐसा करते हैं, तो आपको एक where
की आवश्यकता होगी mysql_user
. का खंड कार्रवाई (शायद उससे पहले एक फ़ाइल स्टेट के साथ)।
check_implicit_admin
. का उपयोग करना और भी शानदार है login_user
. के साथ और login_password
. यह खूबसूरती से बेहूदा है।
तीसरे तरीके के रूप में, शायद check_implicit_admin
इसे और भी आसान बनाता है।
यहाँ मेरी सफल प्लेबुक है जो ऊपर दिखा रही है, कुछ नए सर्वरों के साथ परीक्षण की गई है। इस पर गर्व है। नोट .my.cnf
इस सब के लिए अनावश्यक है।
---
- 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
(संपादित करें- my.cnf हटा दिया गया)