Ansible skip  depending on output in a loop

i am trying to create dhcp scope only if it does not exists, below is what 
i have tried:

  - name: Get scopes
    ansible.windows.win_shell: Get-DhcpServerv4Scope  -ScopeId  {{ 
item.ScopeId }}
    changed_when: false
    register: dhcp
    with_items: "{{ dhcp_scope}}"

vars dhcp_scope:

  "EndRange": "172.30.0.254",
  "LeaseDuration": "10:00:00",
  "ScopeId": "172.30.0.0",
  "StartRange": "172.30.0.1",
  "SubnetMask": "255.255.255.0",
  "name": "Office B"

dhcp register



    "msg": {
        "changed": false,
        "msg": "All items completed",
        "results": [
            {
                "ansible_loop_var": "item",
                "changed": false,
                "cmd": "Get-DhcpServerv4Scope  -ScopeId  172.30.0.0",
                "delta": "0:00:01.528935",
                "end": "2023-07-13 21:47:35.792188",
                "failed": false,
                "item": {
                    "EndRange": "172.30.0.254",
                    "LeaseDuration": "10:00:00",
                    "ScopeId": "172.30.0.0",
                    "StartRange": "172.30.0.1",
                    "SubnetMask": "255.255.255.0",
                    "name": "Office B"
                },
                "rc": 0,
                "start": "2023-07-13 21:47:34.263252",
                "stderr": "",
                "stderr_lines": [],
                "stdout": "\r\nScopeId         SubnetMask      Name         
  State    StartRange      EndRange        LeaseDurat\r\n                   
                                                                     ion   
    \r\n-------         ----------      ----           -----    ---------- 
     --------        ----------\r\n172.30.0.0      255.255.255.0   Office B 
      Active   172.30.0.1      172.30.0.254    10:00:00  \r\n\r\n\r\n",
                "stdout_lines": [
                    "",
                    "ScopeId         SubnetMask      Name           State   
 StartRange      EndRange        LeaseDurat",
                    "                                                       
                                 ion       ",
                    "-------         ----------      ----           -----   
 ----------      --------        ----------",
                    "172.30.0.0      255.255.255.0   Office B       Active 
  172.30.0.1      172.30.0.254    10:00:00  ",
                    "",
                    ""
                ]
            },
            {
                "ansible_loop_var": "item",
                "changed": false,
                "cmd": "Get-DhcpServerv4Scope  -ScopeId  172.31.0.0",
                "delta": "0:00:01.477053",
                "end": "2023-07-13 21:47:39.577233",
                "failed": false,
                "item": {
                    "EndRange": "172.31.0.254",
                    "LeaseDuration": "10:00:00",
                    "ScopeId": "172.31.0.0",
                    "StartRange": "172.31.0.1",
                    "SubnetMask": "255.255.255.0",
                    "name": "Office C"
                },
                "rc": 0,
                "start": "2023-07-13 21:47:38.100180",
                "stderr": "",
                "stderr_lines": [],
                "stdout": "\r\nScopeId         SubnetMask      Name         
  State    StartRange      EndRange        LeaseDurat\r\n                   
                                                                     ion   
    \r\n-------         ----------      ----           -----    ---------- 
     --------        ----------\r\n172.31.0.0      255.255.255.0   Office C 
      Active   172.31.0.1      172.31.0.254    8.00:00:00\r\n\r\n\r\n",
                "stdout_lines": [
                    "",
                    "ScopeId         SubnetMask      Name           State   
 StartRange      EndRange        LeaseDurat",
                    "                                                       
                                 ion       ",
                    "-------         ----------      ----           -----   
 ----------      --------        ----------",
                    "172.31.0.0      255.255.255.0   Office C       Active 
  172.31.0.1      172.31.0.254    8.00:00:00",
                    "",
                    ""


This is working, it is skipping the rc=0

  - name: "Evaluate the scopes
    debug: 
    when: "item.rc == 1"
    with_items:  "{{  dhcp}}"
    loop: "{{ dhcp.results }}"


but trying to apply it to create the scopes

  - name: Create DHCP scopes
    win_shell: |
        Add-DhcpServerv4Scope -Name "{{ item.name }}" -StartRange "{{ 
item.StartRange}}" -EndRange "{{ item.EndRange}}" -SubnetMask "{{ 
item.SubnetMask}}"
    with_items: "{{ dhcp_scope}}"
    changed_when: false
    when: "item.rc == 1"
    loop: "{{ dhcp.results }}"

It is failing, due to the fact that is not getting the ScopeId, which is 
normal as the loop is going through the dhcp.results and not with_items: 
"{{ dhcp_scope}}" , how to make it so that it can skip the output that is 
rc=0 and only when item.rc == 1 ?

TASK [Create DHCP scopes] 
********************************************************************************************************************************************************************
 
fatal: []: FAILED! => {"msg": "The task includes an option with an 
undefined variable. The error was: 'dict object' has no attribute 
'ScopeId'\n\nThe error appears to be in '/etc/ansible/dhcp_check.yml': line 
57, column 5, but may\nbe elsewhere in the file depending on the exact 
syntax problem.\n\nThe offending line appears to be:\n\n\n - name: Create 
DHCP scopes\n ^ here\n"}

if i change it to:

  - name: Create DHCP scopes
    with_items: "{{ dhcp}}"
    changed_when: false
    when: "item.rc == 1"
    loop: "{{ dhcp.results }}"
ASK [Create DHCP scopes] 
********************************************************************************************************************************************************************

FAILED! => {"msg": "The task includes an option with an undefined variable. 
The error was: 'dict object' has no attribute 'ScopeId'\n\nThe error 
appears to be in '/etc/ansible/dhcp_check.yml': line 57, column 5, but 
may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe 
offending line appears to be:\n\n\n - name: Create DHCP scopes\n ^ here\n"}.

How to make - name: Create DHCP scopes so that it can skip creating the 
scopes if rc=0 and only when item.rc == 1 ? similar with the debug which 
skips the scopes that exist?

i cant loop over dhcp_scope it will throw an error: error FAILED! => 
{"msg": "The conditional check 'item.rc == 1' failed. The error was: error 
while evaluating conditional (item.rc == 1).

What i am trying to achieve is run command on the remote host, if the dhcp 
scope exist i will skip creating it and only creates the one that do not 
exists.

-- 
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/dcabe389-82bc-4481-b953-811691604318n%40googlegroups.com.

Reply via email to