From 8ea59e8ce517b07046ee3eae00b4d297b4a7e5fe Mon Sep 17 00:00:00 2001 From: Romeo Theriault Date: Wed, 29 Jan 2014 14:04:53 -1000 Subject: [PATCH] fix following redirects --- library/network/uri | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/library/network/uri b/library/network/uri index 9a22d4758c..5102b83fdb 100644 --- a/library/network/uri +++ b/library/network/uri @@ -87,10 +87,15 @@ options: default: "no" follow_redirects: 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 - choices: [ "yes", "no" ] - default: "no" + choices: [ "all", "safe", "none" ] + default: "safe" creates: description: - 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 #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. 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 # 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 # do safe redirects now, including 307 - h.follow_redirects=True + h.follow_redirects=follow_redirects # Make the request, or try to :) try: @@ -312,7 +329,7 @@ def main(): method = dict(required=False, default='GET', choices=['GET', 'POST', 'PUT', 'HEAD', 'DELETE', 'OPTIONS']), return_content = 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), removes = dict(required=False, default=None), status_code = dict(required=False, default=200, type='int'), @@ -335,7 +352,7 @@ def main(): dest = module.params['dest'] return_content = module.params['return_content'] force_basic_auth = module.params['force_basic_auth'] - follow_redirects = module.params['follow_redirects'] + redirects = module.params['follow_redirects'] creates = module.params['creates'] removes = module.params['removes'] status_code = int(module.params['status_code']) @@ -372,11 +389,6 @@ def main(): if force_basic_auth: 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 resp, content, dest = uri(module, url, dest, user, password, body, method, dict_headers, redirects, socket_timeout)