Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Instale o MySQL com o ansible no Ubuntu


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)