Any workaround to this bug ? Get Json array element having dynamically changing position in Ansible

Below is my json file where i have log array inside server array which is inside domain array.

[
{
“?xml”: {
“attributes”: {
“encoding”: “UTF-8”,
“version”: “1.0”
}
}
},
{
“domain”: [
{
“name”: “mydom”
},
{
“domain-version”: “12.2.1.3.0”
},
{
“server”: [
{
“name”: “AdminServer”
},
{
“ssl”: {
“name”: “AdminServer”
}
},
{
“listen-port”: “12400”
},
{
“listen-address”: “mydom.host1.bank.com
}
]
},
{
“server”: [
{
“name”: “myserv1”
},
{
“ssl”: [
{
“name”: “myserv1”
},
{
“login-timeout-millis”: “25000”
}
]
},
{
“log”: [
{
“name”: “myserv1”
},
{
“file-name”: “/web/bea_logs/domains/mydom/myserv1/myserv1.log”
}
]
}
]
},
{
“server”: [
{
“name”: “myserv2”
},
{
“ssl”: {
“name”: “myserv2”
}
},
{
“reverse-dns-allowed”: “false”
},
{
“log”: [
{
“name”: “myserv2”
},
{
“file-name”: “/web/bea_logs/domains/mydom/myserv2/myserv2.log”
}
]
}
]
}
]
}
]

I have three conditions to meet.

  1. server may not always be the 3rd key of domain array.
  2. log may not always be the 2nd key of server array.
  3. log may not always be an element of server array.

I wish to grab the output as below:

myserv1_log: “/web/bea_logs/domains/mydom/myserv1/myserv1.log”
myserv2_log: “/web/bea_logs/domains/mydom/myserv2/myserv2.log”

Below is a proposed solution that works on ansible version 2.12.

  • hosts: localhost
    gather_facts: no
    vars:
    json: “{{ lookup(‘file’, ‘./file.json’) | from_json }}”
    tasks:
  • name: display
    debug:
    msg: “{{ server.0.name }} → {{ filename.0.log[1][‘file-name’] }}”
    loop: “{{ json[1].domain }}”
    vars:
    server: “{{ item.server | selectattr(‘name’, ‘defined’) }}”
    filename: “{{ item.server | selectattr(‘log’, ‘defined’) }}”
    when: item.server is defined and (item.server | selectattr(‘log’, ‘defined’)) !=

However, the code does not work on version 2.9.6 and I get the below error:

"The task includes an option with an undefined variable. The error was: ‘str object’ has no attribute ‘name’\n\nThe error appears to be in ‘/root/test.yml’: line 29, column 8

Is there an alternate solution to my requirement?