Когато mysql-server
е инсталиран без глава, няма парола. Следователно да направите .my.cnf
работи, трябва да има празен ред за парола. Ето с какво тествах за .my.cnf
:
[client]
user=root
password=
Също така е малко странно да поставите .my.cnf
във вашия vagrant
потребителска директория като собственост на root и може да се чете само като root.
След като се уверите, че паролата е празна в .my.cnf
, успях правилно да задам паролата за root в тези четири контекста. Обърнете внимание, че не успява да се стартира след това, тъй като .my.cnf
ще трябва да бъде актуализиран, така че се провали на теста за идемпотентност.
На страницата на модула 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)