Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So verwenden Sie Rückgabewerte einer Aufgabe in einer anderen Aufgabe für einen anderen Host in Ansible

Ich konnte mein Problem lösen, indem ich die Variablen auf einen neuen Dummy-Host definierte und es dann im gesamten Playbook mit hostvars zu verwenden .

Eine ähnliche Lösung wurde bereits in einer der Antworten in Wie setze ich das Register einer Variablen so, dass sie zwischen den Plays in Ansible bestehen bleibt? Ich habe es jedoch nicht bemerkt, bis ich diese Frage gepostet habe.

Folgendes habe ich in den Ansible-Aufgaben gemacht:

  • Ich habe einen Dummy-Host master_value_holder erstellt und die erforderlichen Variablen definiert. (Hier brauchte ich master_log_file undmaster_log_Position )
  • Zugriff auf die Variablen mit hostvars['master_value_holder']['master_log_file']

Aufgaben am Meister

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

Aufgaben für Sklaven

- 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

Ausgabe

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]

Wie Sie der obigen Ausgabe entnehmen können, ist der Master-Replikationsstatus jetzt für beide Hosts verfügbar.