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

Cómo usar los valores de retorno de una tarea en otra tarea para un host diferente en ansible

Pude resolver mi problema definiendo las variables en un nuevo host ficticio y luego usarlo en el libro de jugadas con hostvars .

Ya se mencionó una solución similar en una de las respuestas en ¿Cómo configuro el registro de una variable para que persista entre reproducciones en ansible? Sin embargo, no me di cuenta hasta que publiqué esta pregunta.

Esto es lo que hice en las tareas de ansible:

  • He creado un host ficticio master_value_holder y definió las variables requeridas. (Aquí necesitaba master_log_file y master_log_Postion )
  • Se accedió a las variables usando hostvars['master_value_holder']['master_log_file']

Tareas en Maestro

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

Tareas para esclavo

- 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

Salida

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]

Como puede ver en el resultado anterior, el estado de replicación maestra está disponible ahora para ambos hosts.