sql >> Database >  >> RDS >> Mysql

Hoe retourwaarden van de ene taak in een andere taak te gebruiken voor een andere host in ansible

Ik heb mijn probleem kunnen oplossen door de variabelen te definiëren voor een nieuwe dummy-host en het vervolgens in het hele playbook te gebruiken met hostvars .

Een vergelijkbare oplossing werd al genoemd in een van de antwoorden in Hoe stel ik een registervariabele in om te blijven bestaan ​​tussen spelen in ansible? Ik merkte het echter pas toen ik deze vraag plaatste.

Dit is wat ik deed in de ansible-taken:

  • Ik heb een dummy-host gemaakt master_value_holder en gedefinieerde vereiste variabelen. (Hier had ik master_log_file nodig enmaster_log_Postion )
  • Toegang tot de variabelen met hostvars['master_value_holder']['master_log_file']

Taken op Master

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

Taken voor slaaf

- 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

Uitvoer

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]

Zoals je aan de bovenstaande uitvoer kunt zien, is de masterreplicatiestatus nu beschikbaar voor beide hosts.




  1. java Onnodige zoekopdrachten op losgekoppelde objecten in de slaapstand zetten

  2. Converteer MySQL-script naar SQL Server

  3. SYSDATE() Voorbeelden – MySQL

  4. MySQL-database herstellen vanuit fysieke bestanden