1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

Merge pull request #5826 from romeotheriault/fix_follow_redirects

A fix for uri module regarding following redirects. The old behavior would follow redirects either way. This change clarifies the functionality and makes it a bit more explicit. Comparing the old behavior to the new 'yes' == 'all', 'no' == 'safe' and now 'no' will not follow any redirects. Historic behavior is still supported and documented with a push to the new values.
This commit is contained in:
Richard Isaacson 2014-02-07 11:36:51 -06:00
commit 5a15762739

View file

@ -87,10 +87,15 @@ options:
default: "no" default: "no"
follow_redirects: follow_redirects:
description: description:
- Whether or not the URI module should follow all redirects. - Whether or not the URI module should follow redirects. C(all) will follow all redirects.
C(safe) will follow only "safe" redirects, where "safe" means that the client is only
doing a GET or HEAD on the URI to which it is being redirected. C(none) will not follow
any redirects. Note that C(yes) and C(no) choices are accepted for backwards compatibility,
where C(yes) is the equivalent of C(all) and C(no) is the equivalent of C(safe). C(yes) and C(no)
are deprecated and will be removed in some future version of Ansible.
required: false required: false
choices: [ "yes", "no" ] choices: [ "all", "safe", "none" ]
default: "no" default: "safe"
creates: creates:
description: description:
- a filename, when it already exists, this step will not be run. - a filename, when it already exists, this step will not be run.
@ -231,9 +236,21 @@ def uri(module, url, dest, user, password, body, method, headers, redirects, soc
# To debug # To debug
#httplib2.debug = 4 #httplib2.debug = 4
# Handle Redirects
if redirects == "all" or redirects == "yes":
follow_redirects = True
follow_all_redirects = True
elif redirects == "none":
follow_redirects = False
follow_all_redirects = False
else:
follow_redirects = True
follow_all_redirects = False
# Create a Http object and set some default options. # Create a Http object and set some default options.
h = httplib2.Http(disable_ssl_certificate_validation=True, timeout=socket_timeout) h = httplib2.Http(disable_ssl_certificate_validation=True, timeout=socket_timeout)
h.follow_all_redirects = redirects h.follow_all_redirects = follow_all_redirects
h.follow_redirects = follow_redirects
h.forward_authorization_headers = True h.forward_authorization_headers = True
# If they have a username or password verify they have both, then add them to the request # If they have a username or password verify they have both, then add them to the request
@ -272,7 +289,7 @@ def uri(module, url, dest, user, password, body, method, headers, redirects, soc
headers['If-Modified-Since'] = tstamp headers['If-Modified-Since'] = tstamp
# do safe redirects now, including 307 # do safe redirects now, including 307
h.follow_redirects=True h.follow_redirects=follow_redirects
# Make the request, or try to :) # Make the request, or try to :)
try: try:
@ -312,7 +329,7 @@ def main():
method = dict(required=False, default='GET', choices=['GET', 'POST', 'PUT', 'HEAD', 'DELETE', 'OPTIONS', 'PATCH']), method = dict(required=False, default='GET', choices=['GET', 'POST', 'PUT', 'HEAD', 'DELETE', 'OPTIONS', 'PATCH']),
return_content = dict(required=False, default='no', type='bool'), return_content = dict(required=False, default='no', type='bool'),
force_basic_auth = dict(required=False, default='no', type='bool'), force_basic_auth = dict(required=False, default='no', type='bool'),
follow_redirects = dict(required=False, default='no', type='bool'), follow_redirects = dict(required=False, default='safe', choices=['all', 'safe', 'none', 'yes', 'no']),
creates = dict(required=False, default=None), creates = dict(required=False, default=None),
removes = dict(required=False, default=None), removes = dict(required=False, default=None),
status_code = dict(required=False, default=200, type='int'), status_code = dict(required=False, default=200, type='int'),
@ -335,7 +352,7 @@ def main():
dest = module.params['dest'] dest = module.params['dest']
return_content = module.params['return_content'] return_content = module.params['return_content']
force_basic_auth = module.params['force_basic_auth'] force_basic_auth = module.params['force_basic_auth']
follow_redirects = module.params['follow_redirects'] redirects = module.params['follow_redirects']
creates = module.params['creates'] creates = module.params['creates']
removes = module.params['removes'] removes = module.params['removes']
status_code = int(module.params['status_code']) status_code = int(module.params['status_code'])
@ -372,11 +389,6 @@ def main():
if force_basic_auth: if force_basic_auth:
dict_headers["Authorization"] = "Basic {0}".format(base64.b64encode("{0}:{1}".format(user, password))) dict_headers["Authorization"] = "Basic {0}".format(base64.b64encode("{0}:{1}".format(user, password)))
# Redirects
if follow_redirects:
redirects = True
else:
redirects = False
# Make the request # Make the request
resp, content, dest = uri(module, url, dest, user, password, body, method, dict_headers, redirects, socket_timeout) resp, content, dest = uri(module, url, dest, user, password, body, method, dict_headers, redirects, socket_timeout)