Mysql
 sql >> Base de données >  >> RDS >> Mysql

Installer MySQL avec ansible sur Ubuntu

Lorsque mysql-server est installé sans tête, il n'y a pas de mot de passe. Donc faire .my.cnf fonctionner, il devrait avoir une ligne de mot de passe vide. Voici ce que j'ai testé avec pour un .my.cnf :

[client]
user=root
password=

C'est aussi un peu étrange de mettre .my.cnf dans votre vagrant répertoire utilisateur appartenant à root et lisible uniquement en tant que root.

Après s'être assuré que le mot de passe était vide dans .my.cnf , j'ai pu définir correctement le mot de passe pour root dans ces quatre contextes. Notez qu'il ne parvient pas à s'exécuter après cela, car .my.cnf aurait besoin d'être mis à jour, il échoue donc au test d'idempotence.

Il y a une note sur la page du module ansible mysql_user qui suggère d'écrire le mot de passe et puis écrire le .my.cnf dossier. Si vous faites cela, vous avez besoin d'un where clause au mysql_user action (probablement avec une statistique de fichier avant).

Encore plus élégant est d'utiliser check_implicit_admin avec login_user et login_password . C'est magnifiquement idempotent.

Comme troisième manière, peut-être check_implicit_admin le rend encore plus facile.

Voici mon playbook réussi montrant ce qui précède, testé avec quelques nouveaux serveurs. Un peu fier de ça. Remarque .my.cnf est inutile pour tout cela.

---
- 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 

(édition - suppression de my.cnf)