I have created a couple of arrays using responses from commands via 
ntc_ansible to a Cisco switch, one containing CDP neighbor information 
(with keys "local_interface", "neighbor" and "neighbor_interface") and the 
other from a listing of interfaces on the switch. I want to use the 
presence of a combination of the "neighbor" and "neighbor_interface" values 
(from the CDP neighbor array) in the interface list array as a condition on 
the running of a task.

The playbook currently looks that below.
---
- hosts: production
  gather_facts: no
  connection: local
  vars:
    provider:
      host: "{{ inventory_hostname }}"
      username: "{{ enc_username }}"
      password: "{{ enc_password }}"
      transport: cli
      platform: cisco_nxos
  tasks:
  - include_vars: authentication.yml
  - name: Run SHOW CDP NEI and store output
    ntc_show_command:
      command: "show cdp neig"
      template_dir: "./ntc-templates/templates"
      provider: "{{ provider }}"
    register: cdp_nei
  - name: Run SHOW INT STATUS and store output
    ntc_show_command:
      command: "show int status"
      template_dir: "./ntc-templates/templates"
      provider: "{{ provider }}"
    register: int_stat
  - name: Create interface description statements where needed
    blockinfile:
      dest: ./Output/cdp-output-processed
      insertafter: EOF
      marker: "!"
      block: |
        interface {{ item.local_interface }}
          description ->{{ item.neighbor | regex_replace("\(.*") }}_{{ 
item.neighbor_interface }}
    with_items: "{{ cdp_nei.response }}"
    when: int_stat.response | search("{{ cdp_nei.response.item.neighbor 
}}"_"{{ cdp_nei.response.item.local_interface }}")

The last task fails as below
TASK [Create interface description statements where needed] 
************************************************************

 [WARNING]: when statements should not include jinja2 templating delimiters 
such as {{ }} or {% %}. Found:
int_stat.response | search("{{ cdp_nei.response.item.neighbor }}"_"{{ 
cdp_nei.response.item.local_interface }}")

fatal: [switch]: FAILED! => {"failed": true, "msg": "The conditional check 
'int_stat.response | search(\"{{ cdp_nei.r
esponse.item.neighbor }}\"_\"{{ cdp_nei.response.item.local_interface 
}}\")' failed. The error was: error while evaluati
ng conditional (int_stat.response | search(\"{{ 
cdp_nei.response.item.neighbor }}\"_\"{{ cdp_nei.response.item.local_int
erface }}\")): 'list object' has no attribute 'item'\n\nThe error appears 
to have been in '/home/vagrant/ansible/Automat
ion/cdp-description.yml': line 26, column 5, but may\nbe elsewhere in the 
file depending on the exact syntax problem.\n\
nThe offending line appears to be:\n\n    register: int_stat\n  - name: 
Create interface description statements where ne
eded\n    ^ here\n"}

Any tips on how to proceed?

-- 
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 post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/dc2b7da8-0939-4a98-a021-63852854655b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to