ansible version: 2:11.2
jinja version: 3.0.3
python version: 3.6.8
Hello all
I have a peculiar problem with a relatively simple playbook I have written. It basically checks 2 servers to determine which one has more than 1 IP and uses that to set a simp;e fact called “is_leader” for each node.
This fact is then to be used to build an in-memory inventory using module add_host to iterate through the servers based on the value of that fact. See below:
- name: Get Server Recycling Order
hosts: “{{ my_servers | default (‘localhost’) }}”
become: yes
become_method: sudo
become_user: root
tasks:
-
name: Set Patching Sequence
tags: always
block: -
name: Get IP addresses of eth0 using nmcli command
command: nmcli -g ip4.address conn show “System eth0”
register: nmcli_output
changed_when: false -
name: Get nmcli output
debug:
var: nmcli_output -
name: Set is_leader variable based on number of IPs
set_fact:
is_leader: “{{ (nmcli_output.stdout.split(‘|’) | length) > 1 }}” -
name: Display if server is ACTIVE (1) or PASSIVE (0)
debug:
var: is_leader -
name: Debug is_leader value
debug:
msg: “is_leader value for {{ inventory_hostname }} is {{ is_leader }}” -
name: Add standby host
add_host:
name: “{{ inventory_hostname }}”
groups: nodes
when: not is_leader -
name: Add primary host
add_host:
name: “{{ inventory_hostname }}”
groups: nodes
when: is_leader
#- name: Execute tasks on servers in a specified order
hosts: nodes
gather_facts: no
serial: 1
tasks:
- name: Run a command in a specified order
command: echo “Running on {{ inventory_hostname }}”
tags: always
The problem is that when this runs, the “is_leader” fact is ignored for when the condition is false and the standby node is not added to the inventory. The relevant extract from the execution is below:
TASK [Set is_leader variable based on number of IPs] **************************************************************************************************************************
Tuesday 23 April 2024 19:46:31 +0000 (0:00:00.079) 0:00:16.815 *********
ok: [node-1] => {
“ansible_facts”: {
“is_leader”: true
},
“changed”: false
}
ok: [node-2] => {
“ansible_facts”: {
“is_leader”: false
},
“changed”: false
}
TASK [Display if server is ACTIVE (1) or PASSIVE (0)] **************************************************************************************************************************
Tuesday 23 April 2024 19:46:31 +0000 (0:00:00.083) 0:00:16.898 *********
ok: [node-1] => {
“is_leader”: true
}
ok: [node-2] => {
“is_leader”: false
}
TASK [Debug is_leader value] **************************************************************************************************************************************************
Tuesday 23 April 2024 19:46:31 +0000 (0:00:00.072) 0:00:16.971 *********
ok: [node-1] => {}
MSG:
is_leader value for node-1 is True
ok: [node-2] => {}
MSG:
is_leader value for node-2 is False
TASK [Re-confirm is_leader before adding to group] ****************************************************************************************************************************
Tuesday 23 April 2024 19:46:31 +0000 (0:00:00.074) 0:00:17.045 *********
skipping: [node-1] => {}
ok: [node-2] => {}
MSG:
Preparing to add node-2 to stby group based on is_leader = False
TASK [Add standby proxysql node] ***********************************************************************************************************************************************
Tuesday 23 April 2024 19:46:31 +0000 (0:00:00.088) 0:00:17.134 *********
skipping: [node-1] => {
“changed”: false,
“skip_reason”: “Conditional result was False”
}
TASK [Re-confirm is_leader before adding to group] ****************************************************************************************************************************
Tuesday 23 April 2024 19:46:31 +0000 (0:00:00.036) 0:00:17.170 *********
ok: [node-1] => {}
MSG:
Preparing to add node-1 to prim group based on is_leader = True
skipping: [node-2] => {}
TASK [Add primary proxysql node] ***********************************************************************************************************************************************
Tuesday 23 April 2024 19:46:31 +0000 (0:00:00.059) 0:00:17.230 *********
changed: [node-1] => {
“add_host”: {
“groups”: [
“nodes_prim”
],
“host_name”: “node-1”,
“host_vars”: {}
},
“changed”: true
}
PLAY RECAP *********************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node-1 : ok=8 changed=1 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
node-2 : ok=7 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
I’m not sure what I’m missing regarding this behaviour as it seems like it should simply work?
Thanks