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

Comment utiliser les valeurs de retour d'une tâche dans une autre tâche pour un hôte différent dans ansible

J'ai pu résoudre mon problème en définissant les variables sur un nouvel hôte factice puis en l'utilisant dans le playbook avec hostvars .

Une solution similaire a déjà été mentionnée dans l'une des réponses dans Comment configurer register une variable pour qu'elle persiste entre les lectures dans ansible ? Cependant, je ne l'ai pas remarqué jusqu'à ce que j'ai posté cette question.

Voici ce que j'ai fait dans les tâches ansible :

  • J'ai créé un hôte factice master_value_holder et défini les variables requises. (Ici j'avais besoin de master_log_file etmaster_log_Position )
  • Accédé aux variables à l'aide de hostvars['master_value_holder']['master_log_file']

Tâches sur le maître

- name: Mysql - Check master replication status.
  mysql_replication: mode=getmaster
  register: master

- name: "Add master return values to a dummy host"
  add_host:
    name:   "master_value_holder"
    master_log_file: "{{ master.File }}"
    master_log_pos: "{{ master.Position }}"

Tâches pour l'esclave

- name: Mysql - Displaying master replication status
  debug: msg="Master Bin Log File  is {{ hostvars['master_value_holder']['master_log_file'] }} and Master Bin Log Position is {{ hostvars['master_value_holder']['master_log_pos'] }}"

- name: Mysql - Configure replication on the slave.
  mysql_replication:
    mode: changemaster
    master_host: "{{ replication_master }}"
    master_user: "{{ replication_user }}"
    master_password: "{{ replication_pass }}"
    master_log_file: "{{ hostvars['master_value_holder']['master_log_file'] }}"
    master_log_pos: "{{ hostvars['master_value_holder']['master_log_pos'] }}"
  when: ansible_eth0.ipv4.address != replication_master and not slave.Slave_SQL_Running

Sortie

TASK [Mysql_Base : Mysql - Check master replication status.] ****************
skipping: [stagmysql02]
ok: [stagmysql01]

TASK [AZ-Mysql_Base : Add master return values to a dummy host] ****************
changed: [stagmysql01]

TASK [AZ-Mysql_Base : Mysql - Displaying master replication status] ************
ok: [stagmysql01] => {
    "msg": "Master Bin Log File  is mysql-bin.000001 and Master Bin Log Position is 154"
}
ok: [stagmysql02] => {
    "msg": "Master Bin Log File  is mysql-bin.000001 and Master Bin Log Position is 154"
}

TASK [AZ-Mysql_Base : Mysql - Configure replication on the slave.] *************
skipping: [stagmysql01]
skipping: [stagmysql02]

Comme vous pouvez le voir dans la sortie ci-dessus, le statut de réplication maître est maintenant disponible pour les deux hôtes.