diff --git a/CHANGELOG.md b/CHANGELOG.md index 94885a6b709..acad8c09c34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -69,6 +69,8 @@ Other notable changes: * regex_replace filter plugin added * added an inventory script for Docker * added an inventory script for Abiquo +* the get_url module now accepts url_username and url_password as parameters, so sites which require + authentication no longer need to have them embedded in the url * ... to be filled in from changelogs ... * diff --git a/lib/ansible/module_utils/urls.py b/lib/ansible/module_utils/urls.py index c6e667be6fc..c2bfc325043 100644 --- a/lib/ansible/module_utils/urls.py +++ b/lib/ansible/module_utils/urls.py @@ -200,6 +200,8 @@ def url_argument_spec(): http_agent = dict(default='ansible-httpget'), use_proxy = dict(default='yes', type='bool'), validate_certs = dict(default='yes', type='bool'), + url_username = dict(required=False), + url_password = dict(required=False), ) @@ -247,15 +249,22 @@ def fetch_url(module, url, data=None, headers=None, method=None, ssl_handler = SSLValidationHandler(module, hostname, port) handlers.append(ssl_handler) - if parsed[0] != 'ftp' and '@' in parsed[1]: - credentials, netloc = parsed[1].split('@', 1) - if ':' in credentials: - username, password = credentials.split(':', 1) - else: - username = credentials - password = '' - parsed = list(parsed) - parsed[1] = netloc + if parsed[0] != 'ftp': + url_username = module.params.get('url_username', '') + if url_username: + username = url_username + password = module.params.get('url_password', '') + netloc = parsed[1] + elif '@' in parsed[1]: + credentials, netloc = parsed[1].split('@', 1) + if ':' in credentials: + username, password = credentials.split(':', 1) + else: + username = credentials + password = '' + + parsed = list(parsed) + parsed[1] = netloc passman = urllib2.HTTPPasswordMgrWithDefaultRealm() # this creates a password manager diff --git a/library/network/get_url b/library/network/get_url index 74cc5479f4a..e1ff8d24d76 100644 --- a/library/network/get_url +++ b/library/network/get_url @@ -90,6 +90,18 @@ options: required: false default: 'yes' choices: ['yes', 'no'] + url_username: + description: + - The username for use in HTTP basic authentication. This parameter can be used + without C(url_password) for sites that allow empty passwords. + required: false + version_added: '1.6' + url_password: + description: + - The password for use in HTTP basic authentication. If the C(url_username) + parameter is not specified, the C(url_password) parameter will not be used. + required: false + version_added: '1.6' others: description: - all arguments accepted by the M(file) module also work here