Quando
mysql-server
é instalado sem cabeça, não há senha. Portanto, para tornar .my.cnf
funcionar, ele deve ter uma linha de senha em branco. Aqui está o que eu testei para um .my.cnf
:[client]
user=root
password=
Também é um pouco estranho colocar
.my.cnf
em seu vagrant
diretório de usuário como propriedade do root e legível apenas como root. Depois de garantir que a senha estava em branco em
.my.cnf
, consegui definir corretamente a senha para root nesses quatro contextos. Observe que ele não é executado depois disso, pois .my.cnf
precisaria ser atualizado, então ele falha no teste de idempotência. Há uma nota na página do módulo mysql_user do ansible que sugere escrever a senha e então escrevendo o
.my.cnf
Arquivo. Se você fizer isso, precisará de um where
cláusula para o mysql_user
ação (provavelmente com uma estatística de arquivo antes disso). Ainda mais elegante é usar
check_implicit_admin
junto com login_user
e login_password
. Isso é lindamente idempotente. Como uma terceira maneira, talvez
check_implicit_admin
torna ainda mais fácil. Aqui está o meu manual de sucesso mostrando o acima, testado com alguns servidores novos. Meio orgulhoso disso. Observe
.my.cnf
é desnecessário para tudo isso. ---
- 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
(editar-removido my.cnf)