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:
commit
5a15762739
1 changed files with 24 additions and 12 deletions
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue