Thanks Todd. My messages kept getting deleted so I thought to try again

I probably over-redacted the output of the playbook to only show the 
relevant bits. The full playbook is below:

== playbook ==

- 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: Re-confirm is_leader before adding to group
           debug:
              msg: "Preparing to add {{ inventory_hostname }} to stby group 
based on is_leader = {{ is_leader }}"
           when: is_leader is false

         - name: Add standby proxysql node
           add_host:
              name: "{{ inventory_hostname }}"
              groups: nodes_stby
           when: is_leader == False

         - name: Re-confirm is_leader before adding to group
           debug:
              msg: "Preparing to add {{ inventory_hostname }} to prim group 
based on is_leader = {{ is_leader }}"
           when: is_leader == True

         - name: Add primary proxysql node
           add_host:
              name: "{{ inventory_hostname }}"
              groups: nodes_prim
           when: is_leader == True

== output ==

PLAY [Get Server Recycling Order] 
**********************************************************************************************************************************************

TASK [Gathering Facts] 
*********************************************************************************************************************************************************

ok: [node-2]
ok: [node-1]

TASK [Get IP addresses of eth0 using nmcli command] 
****************************************************************************************************************************

ok: [node-2] => {
    "changed": false,
    "cmd": [
        "nmcli",
        "-g",
        "ip4.address",
        "conn",
        "show",
        "System eth0"
    ],

}

STDOUT:

x.x.x.x/x
ok: [node-1] => {
    "changed": false,
    "cmd": [
        "nmcli",
        "-g",
        "ip4.address",
        "conn",
        "show",
        "System eth0"
    ],

}

STDOUT:

x.x.x.x/x | y.y.y.y/y

TASK [Get nmcli output] 
********************************************************************************************************************************************************
ok: [node-1] => {
    "nmcli_output": {
        "changed": false,
        "cmd": [
            "nmcli",
            "-g",
            "ip4.address",
            "conn",
            "show",
            "System eth0"
        ],
        "stderr": "",
        "stderr_lines": [],
        "stdout": "x.x.x.x/x | y.y.y.y/y",
        "stdout_lines": [
            "x.x.x.x/x | y.y.y.y/y"
        ]
    }
}
ok: [node-2] => {
    "nmcli_output": {
        "changed": false,
        "cmd": [
            "nmcli",
            "-g",
            "ip4.address",
            "conn",
            "show",
            "System eth0"
        ],
        "stderr": "",
        "stderr_lines": [],
        "stdout": "x.x.x.x/x",
        "stdout_lines": [
            "x.x.x.x/x"
        ]
    }
}

TASK [Set is_leader variable based on number of IPs] 
**************************************************************************************************************************
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)] 
**************************************************************************************************************************
ok: [node-1] => {
    "is_leader": true
}
ok: [node-2] => {
    "is_leader": false
}

TASK [Debug is_leader value] 
**************************************************************************************************************************************************
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] 
****************************************************************************************************************************
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] 
***********************************************************************************************************************************************
skipping: [node-1] => {
    "changed": false,
    "skip_reason": "Conditional result was False"
}

TASK [Re-confirm is_leader before adding to group] 
****************************************************************************************************************************
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] 
***********************************************************************************************************************************************
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


A lot of those debug steps were added in by me to figure out why the 
"is_leader" condition was being skipped when it was false.  
Also the plan was to add all the hosts to a single group but, in an order 
that serial tasks could be executed on in a subsequent playbook.

Thanks

On Thursday, April 25, 2024 at 1:38:38 PM UTC+1 deewon wrote:

> Testing if my email is still deleted without any code
>
> On Tuesday, April 23, 2024 at 11:28:59 PM UTC+1 Todd Lewis wrote:
>
>> All that said, I don't see why this one task wouldn't work for your 
>> purposes:
>>
>>     - name: Add hosts to groups
>>       ansible.builtin.add_host:
>>         name: "{{ inventory_hostname }}"
>>         groups:
>>           - nodes
>>           - "{{ 'nodes_prim' if is_active | d(false) else 'nodes_stby' }}"
>>
>>
>> On 4/23/24 5:40 PM, Todd Lewis wrote:
>>
>> Hard to say. The job log you show doesn't match the tasks in the playbook 
>> you posted. They seem to be the same down to the "Debug is_leader value" 
>> task, but after that the task names in the log don't match those in the 
>> playbook.
>>
>> In the playbook you posted, task "Add standby host" an task "Add primary 
>> host" both add the hosts to the same group. That may be a source of your 
>> problem. But as we don't see the output for those tasks …, hmm.
>> —
>> Todd
>>
>> On 4/23/24 4:03 PM, 'deewon' via Ansible Project wrote:
>>
>> 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
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Ansible Project" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/ansible-project/4d6c8e6a-478c-4736-9e10-c12032dd7c3fn%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/ansible-project/4d6c8e6a-478c-4736-9e10-c12032dd7c3fn%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>>
>> -- 
>> Todd
>>
>>
>> -- 
>> Todd
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/143954d0-10aa-4c1e-a787-fec05d60a97fn%40googlegroups.com.

Reply via email to