sql >> Base de Datos >  >> RDS >> Mysql

Instalar MySQL con ansible en ubuntu

Cuando mysql-server se instala sin cabeza, no hay contraseña. Por lo tanto, para hacer .my.cnf trabajo, debe tener una línea de contraseña en blanco. Esto es lo que probé para un .my.cnf :

[client]
user=root
password=

También es un poco extraño poner .my.cnf en tu vagrant directorio de usuario como propiedad de root y solo legible como root.

Después de asegurarse de que la contraseña estaba en blanco en .my.cnf , pude configurar correctamente la contraseña para root en esos cuatro contextos. Tenga en cuenta que no se ejecuta después de eso, ya que .my.cnf necesitaría ser actualizado, por lo que falla la prueba de idempotencia.

Hay una nota en la página del módulo ansible mysql_user que sugiere escribir la contraseña y luego escribiendo el .my.cnf expediente. Si haces eso, necesitas un where cláusula al mysql_user acción (probablemente con una estadística de archivo antes de eso).

Aún más elegante es usar check_implicit_admin junto con login_user y login_password . Eso es hermosamente idempotente.

Como tercera forma, quizás check_implicit_admin lo hace aún más fácil.

Aquí está mi exitoso libro de jugadas que muestra lo anterior, probado con algunos servidores nuevos. Un poco orgulloso de esto. Nota .my.cnf es innecesario para todo esto.

---
- 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- eliminado my.cnf)