Hello,
          I need help in with getting my play-book to parse data that is 
coming back from Ansible URI Response using "ansible.builtin.uri" module, 
trying to parse data json saved as var=result.  But I keep seeing the 
following message, saying variable is not defined ! 'dict object has no 
attribute 'json'.  The play-book come back with no syntax error nor any 
failures just this message below.

Message:
    "result.json.data": "VARIABLE IS NOT DEFINED!: 'dict object' has no 
attribute 'json'"


see below:

$ cat uricall.yml
---
- name: Validate KIE Server deployment
  hosts:  all
  become: false
  gather_facts: false
  vars:
    ansible_python_interpreter: /opt/bin/python
    kie_server_server: "http://reqres.in/api/users?page=2";
    kie_server_endpoint: "/kie-server/services/rest/server/containers"
    kie_server_port: ":13421"
    kieserver_user: "user"
    kieserver_password: "somepassword"
    expected_server_version: "7.72.0.Final"
  tasks:
    - name: list details
      ansible.builtin.uri:
        url: "{{ kie_server_server }}{{ kie_server_port }}{{ 
kie_server_endpoint }}"
        user: "{{ kieserver_user }}"
        password: "{{ kieserver_password }}"
        method: GET
        validate_certs: false
        status_code: 200
        timeout: 30
      register: result

    - name: debug
      ansible.builtin.debug:
        var: result.json.data
// ------------------------------------------------------------------------

$ python3 --version
Python 3.6.8
$ ansible --version
ansible [core 2.13.3]
  config file = /users/admin/ansible.cfg
  configured module search path = ['/users/admin/.ansible/plugins/modules', 
'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/site-packages/ansible
  ansible collection location = 
/users/admin/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.9.13 (main, Nov  9 2022, 13:16:24) [GCC 8.5.0 20210514 
(Red Hat 8.5.0-15)]
  jinja version = 3.1.2
  libyaml = True
$

// ------------------------------------------------------------------------

$ ansible-playbook uricall.yml -l reqres.in/api/users?page=2 -vvv
ansible-playbook [core 2.13.3]
  config file = /users/admin/ansible.cfg
  configured module search path = ['/users/admin/.ansible/plugins/modules', 
'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/site-packages/ansible
  ansible collection location = 
/users/admin/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible-playbook
  python version = 3.9.13 (main, Nov  9 2022, 13:16:24) [GCC 8.5.0 20210514 
(Red Hat 8.5.0-15)]
  jinja version = 3.1.2
  libyaml = True
Using /users/admin/ansible.cfg as config file
host_list declined parsing /users/admin/hosts as it did not pass its 
verify_file() method
script declined parsing /users/admin/hosts as it did not pass its 
verify_file() method
auto declined parsing /users/admin/hosts as it did not pass its 
verify_file() method
Parsed /users/admin/hosts inventory source with ini plugin
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: uricall.yml 
*************************************************************************************************************************************************
1 plays in uricall.yml

PLAY [Validate KIE Server deployment] 
*********************************************************************************************************************************
META: ran handlers

TASK [list details] 
***************************************************************************************************************************************************
task path: /users/admin/uricall.yml:15
<reqres.in/api/users?page=2> ESTABLISH SSH CONNECTION FOR USER: None
<reqres.in/api/users?page=2> SSH: EXEC ssh -C -o ControlMaster=auto -o 
ControlPersist=60s -o KbdInteractiveAuthentication=no -o 
PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey 
-o PasswordAuthentication=no -o ConnectTimeout=10 -o 
'ControlPath="/users/admin/.ansible/cp/2abdb2e15a"' 
reqres.in/api/users?page=2 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<reqres.in/api/users?page=2> (0, b'/users/admin\n', b'')
<reqres.in/api/users?page=2> ESTABLISH SSH CONNECTION FOR USER: None
<reqres.in/api/users?page=2> SSH: EXEC ssh -C -o ControlMaster=auto -o 
ControlPersist=60s -o KbdInteractiveAuthentication=no -o 
PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey 
-o PasswordAuthentication=no -o ConnectTimeout=10 -o 
'ControlPath="/users/admin/.ansible/cp/2abdb2e15a"' 
reqres.in/api/users?page=2 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo 
/users/admin/.ansible/tmp `"&& mkdir "` echo 
/users/admin/.ansible/tmp/ansible-tmp-1676942607.0676842-2055362-84558986433951 
`" && echo ansible-tmp-1676942607.0676842-2055362-84558986433951="` echo 
/users/admin/.ansible/tmp/ansible-tmp-1676942607.0676842-2055362-84558986433951 
`" ) && sleep 0'"'"''
<reqres.in/api/users?page=2> (0, 
b'ansible-tmp-1676942607.0676842-2055362-84558986433951=/users/admin/.ansible/tmp/ansible-tmp-1676942607.0676842-2055362-84558986433951\n',
 
b'')
Using module file /usr/lib/python3.9/site-packages/ansible/modules/uri.py
<reqres.in/api/users?page=2> PUT 
/users/admin/.ansible/tmp/ansible-local-2055349bkonkdfj/tmpy1xvsbm3 TO 
/users/admin/.ansible/tmp/ansible-tmp-1676942607.0676842-2055362-84558986433951/AnsiballZ_uri.py
<reqres.in/api/users?page=2> SSH: EXEC sftp -b - -C -o ControlMaster=auto 
-o ControlPersist=60s -o KbdInteractiveAuthentication=no -o 
PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey 
-o PasswordAuthentication=no -o ConnectTimeout=10 -o 
'ControlPath="/users/admin/.ansible/cp/2abdb2e15a"' 
'[reqres.in/api/users?page=2]'
<reqres.in/api/users?page=2> (0, b'sftp> put 
/users/admin/.ansible/tmp/ansible-local-2055349bkonkdfj/tmpy1xvsbm3 
/users/admin/.ansible/tmp/ansible-tmp-1676942607.0676842-2055362-84558986433951/AnsiballZ_uri.py\n',
 
b'')
<reqres.in/api/users?page=2> ESTABLISH SSH CONNECTION FOR USER: None
<reqres.in/api/users?page=2> SSH: EXEC ssh -C -o ControlMaster=auto -o 
ControlPersist=60s -o KbdInteractiveAuthentication=no -o 
PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey 
-o PasswordAuthentication=no -o ConnectTimeout=10 -o 
'ControlPath="/users/admin/.ansible/cp/2abdb2e15a"' 
reqres.in/api/users?page=2 '/bin/sh -c '"'"'chmod u+x 
/users/admin/.ansible/tmp/ansible-tmp-1676942607.0676842-2055362-84558986433951/
 
/users/admin/.ansible/tmp/ansible-tmp-1676942607.0676842-2055362-84558986433951/AnsiballZ_uri.py
 
&& sleep 0'"'"''
<reqres.in/api/users?page=2> (0, b'', b'')
<reqres.in/api/users?page=2> ESTABLISH SSH CONNECTION FOR USER: None
<reqres.in/api/users?page=2> SSH: EXEC ssh -C -o ControlMaster=auto -o 
ControlPersist=60s -o KbdInteractiveAuthentication=no -o 
PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey 
-o PasswordAuthentication=no -o ConnectTimeout=10 -o 
'ControlPath="/users/admin/.ansible/cp/2abdb2e15a"' -tt 
reqres.in/api/users?page=2 '/bin/sh -c '"'"'/opt/bin/python 
/users/admin/.ansible/tmp/ansible-tmp-1676942607.0676842-2055362-84558986433951/AnsiballZ_uri.py
 
&& sleep 0'"'"''
<reqres.in/api/users?page=2> (0, b'\r\n{"status": 200, "content_length": 
"3529", "cookies": {"JSESSIONID": 
"LLNxkYsDklms77MV4ofo8r1d6yUCuu-Krc4iR_aaz5jD3_EDIl8c!1154788022"}, "date": 
"Tue, 21 Feb 2023 01:23:29 GMT", "set_cookie": 
"JSESSIONID=LLNxkYsDklms77MV4ofo8r1d6yUCuu-Krc4iR_aaz5jD3_EDIl8c!1154788022; 
path=/; HttpOnly", "url": 
"http://reqres.in/api/users?page=2:13421/kie-server/services/rest/server/containers";,
 
"changed": false, "elapsed": 0, "invocation": {"module_args": {"force": 
false, "remote_src": false, "status_code": [200], "owner": null, 
"body_format": "raw", "client_key": null, "group": null, "use_gssapi": 
false, "unix_socket": null, "unsafe_writes": false, "serole": null, 
"setype": null, "follow_redirects": "safe", "unredirected_headers": [], 
"return_content": false, "method": "GET", "mode": null, "body": null, 
"timeout": 30, "src": null, "dest": null, "selevel": null, 
"force_basic_auth": false, "removes": null, "http_agent": 
"ansible-httpget", "user": "user", "password": 
"VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", "use_proxy": true, "url_password": 
"VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", "url": 
"http://reqres.in/api/users?page=2:13421/kie-server/services/rest/server/containers";,
 
"seuser": null, "client_cert": null, "creates": null, "headers": {}, 
"ca_path": null, "url_username": "user", "attributes": null, 
"validate_certs": false}}, "connection": "close", "content_type": 
"application/xml", "msg": "OK (3529 bytes)", "redirected": false, 
"cookies_string": 
"JSESSIONID=LLNxkYsDklms77MV4ofo8r1d6yUCuu-Krc4iR_aaz5jD3_EDIl8c!1154788022"}\r\n',
 
b'Shared connection to reqres.in/api/users?page=2 closed.\r\n')
<reqres.in/api/users?page=2> ESTABLISH SSH CONNECTION FOR USER: None
<reqres.in/api/users?page=2> SSH: EXEC ssh -C -o ControlMaster=auto -o 
ControlPersist=60s -o KbdInteractiveAuthentication=no -o 
PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey 
-o PasswordAuthentication=no -o ConnectTimeout=10 -o 
'ControlPath="/users/admin/.ansible/cp/2abdb2e15a"' 
reqres.in/api/users?page=2 '/bin/sh -c '"'"'rm -f -r 
/users/admin/.ansible/tmp/ansible-tmp-1676942607.0676842-2055362-84558986433951/
 
> /dev/null 2>&1 && sleep 0'"'"''
<reqres.in/api/users?page=2> (0, b'', b'')
ok: [reqres.in/api/users?page=2] => {
    "changed": false,
    "connection": "close",
    "content_length": "3529",
    "content_type": "application/xml",
    "cookies": {
        "JSESSIONID": 
"LLNxkYsDklms77MV4ofo8r1agawergad6yUCuu-Krc4iR_aaz5jD3_EDIl8c!1154788022"
    },
    "cookies_string": 
"JSESSIONID=LLNxkYsgswDklms77MV4ofqo8r1hd6yUCuu-Krc4iR_aaaz5jD3_EDIl8c!1154788022",
    "date": "Tue, 21 Feb 2023 01:23:29 GMT",
    "elapsed": 0,
    "invocation": {
        "module_args": {
            "attributes": null,
            "body": null,
            "body_format": "raw",
            "ca_path": null,
            "client_cert": null,
            "client_key": null,
            "creates": null,
            "dest": null,
            "follow_redirects": "safe",
            "force": false,
            "force_basic_auth": false,
            "group": null,
            "headers": {},
            "http_agent": "ansible-httpget",
            "method": "GET",
            "mode": null,
            "owner": null,
            "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "remote_src": false,
            "removes": null,
            "return_content": false,
            "selevel": null,
            "serole": null,
            "setype": null,
            "seuser": null,
            "src": null,
            "status_code": [
                200
            ],
            "timeout": 30,
            "unix_socket": null,
            "unredirected_headers": [],
            "unsafe_writes": false,
            "url": 
"http://reqres.in/api/users?page=2:13421/kie-server/services/rest/server/containers";,
            "url_password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "url_username": "user",
            "use_gssapi": false,
            "use_proxy": true,
            "user": "user",
            "validate_certs": false
        }
    },
    "msg": "OK (3529 bytes)",
    "redirected": false,
    "set_cookie": 
"JSESSIONID=LLNxkYsDklms77MV4ofo8r1d6yUCuu-Krc4iR_aaz5jD3_EDIl8c!1154788022; 
path=/; HttpOnly",
    "status": 200,
    "url": 
"http://reqres.in/api/users?page=2:13421/kie-server/services/rest/server/containers";
}

TASK [debug] 
**********************************************************************************************************************************************************
task path: /users/admin/uricall.yml:26
ok: [reqres.in/api/users?page=2] => {
    "result.json.data": "VARIABLE IS NOT DEFINED!: 'dict object' has no 
attribute 'json'"
}
META: ran handlers
META: ran handlers

PLAY RECAP 
************************************************************************************************************************************************************
reqres.in/api/users?page=2       : ok=2    changed=0    unreachable=0   
 failed=0    skipped=0    rescued=0    ignored=0





On Saturday, February 18, 2023 at 2:10:37 PM UTC-8 Sohail Jaffer wrote:

> *Hello,*
> *        I am new to this group and ansible as well.  I would like to 
> skill up and be able to perform config management tasks using Ansible 
> playbooks.  The current problem I am working on is to be able to validate 
> KIE server deployment.  I made little progress by checking your group and 
> other blogs but stuck with this error below.  Please help if you can 
> identify the issue right away or if you could guide me where to look for 
> validating rest api's using ansible.  *
>
> *// ------------------------------  ERROR MESSAGE  
> -----------------------------------*
>
> ********************
> fatal: [localhost]: FAILED! => {"msg": "The conditional check 
> 'results.content is search(\"SUCCESS\")' failed. The error was: error while 
> evaluating conditional (results.content is search(\"SUCCESS\")): 'dict 
> object' has no attribute 'content'"}
>
> // --------------------- YAML -------------------------------
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> *- name: Validate KIE Server deployment  hosts: localhost  vars:    
> kie_server_host: "https://apiurl.com <https://apiurl.com>"    
> kie_server_port: "13001"    kieserver_user: "user"    kieserver_password: 
> "somepassword"    expected_server_version: "7.72.0.Final"  tasks:    - 
> name: Get KIE Server information      uri:        url: "http://{{ 
> kie_server_host }}:{{ kie_server_port }}/kie-server/services/rest/server/"  
>       user: "{{ kieserver_user }}"        password: "{{ kieserver_password 
> }}"        return_content: yes        method: GET      register: results    
> - name: Check server version      assert:        that: results.content is 
> search("SUCCESS")    - debug:       var: results*
>
> *                                       Here it goes:*
>
> *When I do a dry run of the playbook I see following results  --- saying 
> that ansible.legacy.uri does not support check mode*
>
> $ ansible-playbook newapicall.yml -C
> [WARNING]: provided hosts list is empty, only localhost is available. Note 
> that the implicit localhost does not match 'all'
>
> PLAY [Validate KIE Server deployment] 
> *****************************************************************************************************
>
> TASK [Gathering Facts] 
> ********************************************************************************************************************
> ok: [localhost]
>
> TASK [Get KIE Server information] 
> *********************************************************************************************************
> skipping: [localhost]
>
> TASK [debug] 
> ******************************************************************************************************************************
> ok: [localhost] => {
>     "results": {
>         "changed": false,
>         "failed": false,
>         "msg": "remote module (ansible.legacy.uri) does not support check 
> mode",
>         "skipped": true
>     }
> }
>
> PLAY RECAP 
> ********************************************************************************************************************************
> localhost                  : ok=2    changed=0    unreachable=0   
>  failed=0    skipped=1    rescued=0    ignored=0
>
>
> *But when I finally run the play book - Debug of VAR = results returns 
> content from KIE server that I need to use to parse information like if 
> "SUCCESS" is seen in content then deployment was successful e.g.*
>
>
>
>
>
> *// ------------------ check ----------------------    - name: Check 
> server version      assert:        that: results.content is 
> search("SUCCESS")// -----------------------------------------------*
>
>
>
> $ ansible-playbook newapicall.yml
> [WARNING]: provided hosts list is empty, only localhost is available. Note 
> that the implicit localhost does not match 'all'
>
> PLAY [Validate KIE Server deployment] 
> *****************************************************************************************************
>
> TASK [Gathering Facts] 
> ********************************************************************************************************************
> ok: [localhost]
>
> TASK [Get KIE Server information] 
> *********************************************************************************************************
> ok: [localhost]
>
> TASK [debug] 
> ******************************************************************************************************************************
> ok: [localhost] => {
>     "results": {
>         "changed": false,
>         "connection": "close",
>         "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" 
> standalone=\"yes\"?>\n<response type=\"SUCCESS\" msg=\"Kie Server info\">\n 
>    <kie-server-info>\n        <capabilities>KieServer</capabilities>\n     
>    <capabilities>BRM</capabilities>\n       
>  <capabilities>BPM</capabilities>\n       
>  <capabilities>CaseMgmt</capabilities>\n       
>  <capabilities>BPM-UI</capabilities>\n       
>  <capabilities>BRP</capabilities>\n       
>  <capabilities>DMN</capabilities>\n       
>  <capabilities>Swagger</capabilities>\n        <location>
> https://apiurl.com:11001/kie-server/services/rest/server</location>\n     
>    <messages>\n            <content>Server 
> KieServerInfo{serverId='kie-weblogic-qa1', version='7.72.0.Final', 
> name='kie-weblogic-qa1', location='
> https://apiurl.com:11001/kie-server/services/rest/server', 
> capabilities=[KieServer, BRM, BPM, CaseMgmt, BPM-UI, BRP, DMN, Swagger]', 
> messages=null', mode=DEVELOPMENT}started successfully at Tue Jan 24 
> 20:56:01 UTC 2023</content>\n            <severity>INFO</severity>\n       
>      <timestamp>2023-01-24T20:56:01.597Z</timestamp>\n        </messages>\n 
>        <mode>DEVELOPMENT</mode>\n        <name>kie-weblogic-qa1</name>\n   
>      <id>kie-weblogic-qa1</id>\n        <version>7.72.0.Final</version>\n   
>  </kie-server-info>\n</response>\n",
>         "content_length": "1252",
>         "content_type": "application/xml",
>         "cookies": {
>             "JSESSIONID": 
> "xHRmZgYJkoG2J89BjT66_01TEr_-Zb0wJx1sPnfsxTH8lCz1Tzyv!1154788022"
>         },
>         "cookies_string": 
> "JSESSIONID=xHRmZgYJkoG2J89BjT66_01TEr_-Zb0wJr1SPnfsxTH8lwcz1Tyv!1154788022",
>         "date": "Sat, 18 Feb 2023 21:20:07 GMT",
>         "elapsed": 0,
>         "failed": false,
>         "msg": "OK (1252 bytes)",
>         "redirected": false,
>         "set_cookie": 
> "JSESSIONID=xHRmZgqG2J89BjT66_01TEr_-Zb0wJx1rSPnfsxTH8lwCz1Tyv!1154788022; 
> path=/; HttpOnly",
>         "status": 200,
>         "url": "https://apiurl.com:11001/kie-server/services/rest/server/";
>     }
> }
>
> PLAY RECAP 
> ********************************************************************************************************************************
> localhost                  : ok=3    changed=0    unreachable=0   
>  failed=0    skipped=0    rescued=0    ignored=0
>
>
> playbook: newapicall.yml
> $ ansible-playbook newapicall.yml -C
> [WARNING]: provided hosts list is empty, only localhost is available. Note 
> that the implicit localhost does not match 'all'
>
> PLAY [Validate KIE Server deployment] 
> *****************************************************************************************************
>
> TASK [Gathering Facts] 
> ********************************************************************************************************************
> ok: [localhost]
>
> TASK [Get KIE Server information] 
> *********************************************************************************************************
> skipping: [localhost]
>
> TASK [Check server vresion] 
> ***************************************************************************************************************
> fatal: [localhost]: FAILED! => {"msg": "The conditional check 
> 'results.content is search(\"SUCCESS\")' failed. The error was: error while 
> evaluating conditional (results.content is search(\"SUCCESS\")): 'dict 
> object' has no attribute 'content'"}
>
> PLAY RECAP 
> ********************************************************************************************************************************
> localhost                  : ok=1    changed=0    unreachable=0   
>  failed=1    skipped=1    rescued=0    ignored=0
>
>
> *Below is the full playbook with some information removed for security. 
>  But wen I check for server version or if check for content showing 
> "SUCCESS"  when "status": 200 or even if the kie server deployment was 
> successful with given containers would be useful information.*
>
>
>
>
>
>
>
>
>
>
> *e.g.#         that:#          - results.status == 200#    - 
> "results.json.version" == "{{ expected_server_version }}"e.g.when kie 
> server returns containre information to be parsed"content": "<?xml 
> version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<response 
> type=\"SUCCESS\" msg=\"List of created containers\">\n   
>  <kie-containers>\n  *
>
>
>
> Thank you in advance -- I have put my comments in italics and code in BOLD 
> to separate the output from debug and my comments.  I think I may have 
> mixed up in content format expectations, it is returning in xml and code 
> expects json. ?? or may be more issues.
>
> Regards
> Sohail Jaffer
>

-- 
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/d75fb02e-2822-4ff1-a44f-21c7807f4a0bn%40googlegroups.com.

Reply via email to