do not return the body even if it failed (#69706)

* do not return the body even if it failed

* add some tests for this and rebase

* import test task

* ignore_errors when fails

Co-authored-by: Jack Zhang <jack.zhang@aspiraconnect.com>
This commit is contained in:
Jack 2020-06-01 21:55:38 +08:00 committed by GitHub
parent 723a904f4e
commit 80f09efd03
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 60 additions and 2 deletions

View file

@ -0,0 +1,3 @@
bugfixes:
- uri - Don't return the body even if it failed
(https://github.com/ansible/ansible/issues/21003)

View file

@ -75,7 +75,7 @@ options:
return_content:
description:
- Whether or not to return the body of the response as a "content" key in
the dictionary result.
the dictionary result no matter it succeeded or failed.
- Independently of this option, if the reported Content-type is "application/json", then the JSON is
always loaded into a key called C(json) in the dictionary results.
type: bool
@ -739,7 +739,10 @@ def main():
if resp['status'] not in status_code:
uresp['msg'] = 'Status code was %s and not %s: %s' % (resp['status'], status_code, uresp.get('msg', ''))
module.fail_json(content=u_content, **uresp)
if return_content:
module.fail_json(content=u_content, **uresp)
else:
module.fail_json(**uresp)
elif return_content:
module.exit_json(content=u_content, **uresp)
else:

View file

@ -595,3 +595,6 @@
- name: Check unexpected failures
import_tasks: unexpected-failures.yml
- name: Check return-content
import_tasks: return-content.yml

View file

@ -0,0 +1,49 @@
- name: Test when return_content is yes
uri:
url: https://{{ httpbin_host }}/get
return_content: yes
register: result
- name: Assert content exists when return_content is yes and request succeeds
assert:
that:
- result is successful
- "'content' in result"
- name: Test when return_content is yes
uri:
url: http://does/not/exist
return_content: yes
register: result
ignore_errors: true
- name: Assert content exists when return_content is yes and request fails
assert:
that:
- result is failed
- "'content' in result"
- name: Test when return_content is no
uri:
url: https://{{ httpbin_host }}/get
return_content: no
register: result
- name: Assert content does not exist when return_content is no and request succeeds
assert:
that:
- result is successful
- "'content' not in result"
- name: Test when return_content is no
uri:
url: http://does/not/exist
return_content: no
register: result
ignore_errors: true
- name: Assert content does not exist when return_content is no and request fails
assert:
that:
- result is failed
- "'content' not in result"