Tôi đã có thể giải quyết vấn đề của mình bằng cách xác định các biến cho một máy chủ giả mới và sau đó sử dụng nó trên playbook với hostvars .
Giải pháp tương tự đã được đề cập trong một trong các câu trả lời trong Làm cách nào để đặt biến đăng ký để duy trì giữa các lần phát ở chế độ ansible? Tuy nhiên, tôi đã không nhận thấy điều đó cho đến khi tôi đăng câu hỏi này.
Đây là những gì tôi đã làm trong các nhiệm vụ có thể kiểm soát được:
- Tôi đã tạo một máy chủ giả master_value_holder và xác định các biến cần thiết. (Ở đây tôi cần master_log_file và master_log_Postion )
- Đã truy cập các biến bằng hostvars ['master_value_holder'] ['master_log_file']
Nhiệm vụ trên 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 }}"
Nhiệm vụ dành cho nô lệ
- 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
Đầu ra
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]
Như bạn có thể thấy từ đầu ra ở trên rằng trạng thái sao chép chính hiện có sẵn cho cả hai máy chủ.