Hello Ansible friends,
I’m hoping that you can provide some assistance here. I’m trying to parsed through json response from a web application, but I’m having some issues. The goal of this playbook is to display the site-id for all routers in the json response. Any help is appreciated, thank you.
Here is the ansible playbook.
- 
hosts: vmanage
 connection: local
 gather_facts: no
 tasks:
 
- 
vmanage_device_facts:
 user: “{{ ansible_user }}”
 host: “{{ ansible_host }}”
 password: “{{ ansible_password }}”
 register: output
 
- 
name: Create device dictionary
 set_fact:
 device_status: ‘{{ output | json_query(“vedges[0].[“side-id”]”)}}’
 
- 
name: Print out site ids
 debug:
 msg: “{{ device_status }}”
 
 
            
              
              
              
            
            
           
          
            
            
              
Hello Ansible friends,
I’m hoping that you can provide some assistance here. I’m trying to parsed through json response from a web application, but I’m having some issues. The goal of this playbook is to display the site-id for all routers in the json response. Any help is appreciated, thank you.
Here is the ansible playbook.
- 
hosts: vmanage
 connection: local
 gather_facts: no
 tasks:
 
- 
vmanage_device_facts:
 user: “{{ ansible_user }}”
 host: “{{ ansible_host }}”
 password: “{{ ansible_password }}”
 register: output
 
- 
name: Create device dictionary
 set_fact:
 device_status: ‘{{ output | json_query(“vedges[0].[“side-id”]”)}}’
 
Try quoting side-id with backticks
             
            
              
              
              
            
            
           
          
            
            
              Backticks don't work I see. This should do it:
       device_status: "{{ output | json_query('vedges[0].[\'side-id\']') }}"
             
            
              
              
              
            
            
           
          
            
            
              Thank you for your reply Dick, the backspace didn’t work here, please see error below. I tried all kinds of combinations  Do you have any other ideas?
 Do you have any other ideas?
PLAY [vmanage] **********************************************************************************************************************
TASK [vmanage_device_facts] *********************************************************************************************************
[WARNING]: Module did not set no_log for password
ok: [10.10.2.2]
TASK [parse through output] *********************************************************************************************************
fatal: [10.10.2.2]: FAILED! => {“msg”: “template error while templating string: expected token ‘,’, got ‘side’. String: device_status:"{{ output | json_query(‘vedges[0].[\\‘side-id\\’]’) }}"”}
PLAY RECAP **************************************************************************************************************************
10.10.2.2 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
             
            
              
              
              
            
            
           
          
            
            
              Did you try this literal string?
device_status: "{{ output | json_query('vedges[0].[\'side-id\']') }}"
             
            
              
              
              
            
            
           
          
            
            
              Yes I did, see the playbook below please.
- 
hosts: vmanage
 connection: local
 gather_facts: no
 tasks:
 
- 
vmanage_device_facts:
 user: “{{ ansible_user }}”
 host: “{{ ansible_host }}”
 password: “{{ ansible_password }}”
 register: output
 
- 
name: parse through output
 set_fact:
 device_status:“{{ output | json_query(‘vedges[0].['side-id']’) }}”
 
- 
name: Print out neighbors
 debug:
 msg: “{{ device_status }}”
 
 
            
              
              
              
            
            
           
          
            
            
              Try converting the data to something that ansible can parse using the from_json filter, then just access it using the json path that in your case ends with vedges[0][‘side-id’]
Also why do put a dot between [0] and [‘side-id’] ? no need
             
            
              
              
              
            
            
           
          
            
            
              for some reason, I couldn’t get it to work. I ended up using Ansible URI module to get the information from API and parse it after. It works now. Thank you to all that responded.