Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como usar valores de retorno de uma tarefa em outra tarefa para um host diferente no ansible


Consegui resolver meu problema definindo as variáveis ​​para um novo host fictício e, em seguida, usá-lo em todo o manual com hostvars .

Uma solução semelhante já foi mencionada em uma das respostas em Como defino registrar uma variável para persistir entre as jogadas no ansible? No entanto, eu não percebi isso até postar esta pergunta.

Aqui está o que eu fiz nas tarefas ansible:
  • Criei um host fictício master_value_holder e definir as variáveis ​​necessárias. (Aqui eu precisava de master_log_file emaster_log_Postion )
  • Acessou as variáveis ​​usando hostvars['master_value_holder']['master_log_file']

Tarefas no Mestre
- 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 }}"

Tarefas para escravo
- 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

Saída
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 você pode ver na saída acima, o status de replicação mestre está disponível para ambos os hosts agora.