summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToshio Kuratomi <toshio@fedoraproject.org>2015-07-20 23:59:38 -0700
committerToshio Kuratomi <toshio@fedoraproject.org>2015-07-22 09:13:36 -0700
commite08a2e84da362808f3cdd7d228df03388c34c8b2 (patch)
tree2af9d0438b87d583eae42330db3c3971bc7c9a60
parent79173ac18de66bcdb6c25729fb4561c772d37cab (diff)
downloadansible-modules-extras-fetch_url-layman.tar.gz
Port layman to fetch_urlfetch_url-layman
-rw-r--r--packaging/os/layman.py57
1 files changed, 35 insertions, 22 deletions
diff --git a/packaging/os/layman.py b/packaging/os/layman.py
index c9d6b8ed..62694ee9 100644
--- a/packaging/os/layman.py
+++ b/packaging/os/layman.py
@@ -20,7 +20,6 @@
import shutil
from os import path
-from urllib2 import Request, urlopen, URLError
DOCUMENTATION = '''
---
@@ -52,6 +51,15 @@ options:
required: false
default: present
choices: [present, absent, updated]
+ validate_certs:
+ description:
+ - If C(no), SSL certificates will not be validated. This should only be
+ set to C(no) when no other option exists. Prior to 1.9.3 the code
+ defaulted to C(no).
+ required: false
+ default: 'yes'
+ choices: ['yes', 'no']
+ version_added: '1.9.3'
'''
EXAMPLES = '''
@@ -89,11 +97,12 @@ def init_layman(config=None):
:param config: the layman's configuration to use (optional)
'''
- if config is None: config = BareConfig(read_configfile=True, quietness=1)
+ if config is None:
+ config = BareConfig(read_configfile=True, quietness=1)
return LaymanAPI(config)
-def download_url(url, dest):
+def download_url(module, url, dest):
'''
:param url: the URL to download
:param dest: the absolute path of where to save the downloaded content to;
@@ -101,14 +110,13 @@ def download_url(url, dest):
:raises ModuleError
'''
- request = Request(url)
- request.add_header('User-agent', USERAGENT)
- try:
- response = urlopen(request)
- except URLError, e:
- raise ModuleError("Failed to get %s: %s" % (url, str(e)))
-
+ # Hack to add params in the form that fetch_url expects
+ module.params['http_agent'] = USERAGENT
+ response, info = fetch_url(module, url)
+ if info['status'] != 200:
+ raise ModuleError("Failed to get %s: %s" % (url, info['msg']))
+
try:
with open(dest, 'w') as f:
shutil.copyfileobj(response, f)
@@ -116,7 +124,7 @@ def download_url(url, dest):
raise ModuleError("Failed to write: %s" % str(e))
-def install_overlay(name, list_url=None):
+def install_overlay(module, name, list_url=None):
'''Installs the overlay repository. If not on the central overlays list,
then :list_url of an alternative list must be provided. The list will be
fetched and saved under ``%(overlay_defs)/%(name.xml)`` (location of the
@@ -138,18 +146,20 @@ def install_overlay(name, list_url=None):
return False
if not layman.is_repo(name):
- if not list_url: raise ModuleError("Overlay '%s' is not on the list of known " \
+ if not list_url:
+ raise ModuleError("Overlay '%s' is not on the list of known " \
"overlays and URL of the remote list was not provided." % name)
overlay_defs = layman_conf.get_option('overlay_defs')
dest = path.join(overlay_defs, name + '.xml')
- download_url(list_url, dest)
+ download_url(module, list_url, dest)
# reload config
layman = init_layman()
- if not layman.add_repos(name): raise ModuleError(layman.get_errors())
+ if not layman.add_repos(name):
+ raise ModuleError(layman.get_errors())
return True
@@ -201,11 +211,12 @@ def sync_overlays():
def main():
# define module
module = AnsibleModule(
- argument_spec = {
- 'name': { 'required': True },
- 'list_url': { 'aliases': ['url'] },
- 'state': { 'default': "present", 'choices': ['present', 'absent', 'updated'] },
- }
+ argument_spec = dict(
+ name = dict(required=True),
+ list_url = dict(aliases=['url']),
+ state = dict(default="present", choices=['present', 'absent', 'updated']),
+ validate_certs = dict(required=False, default=True, type='bool'),
+ )
)
if not HAS_LAYMAN_API:
@@ -216,12 +227,12 @@ def main():
changed = False
try:
if state == 'present':
- changed = install_overlay(name, url)
+ changed = install_overlay(module, name, url)
elif state == 'updated':
if name == 'ALL':
sync_overlays()
- elif install_overlay(name, url):
+ elif install_overlay(module, name, url):
changed = True
else:
sync_overlay(name)
@@ -236,4 +247,6 @@ def main():
# import module snippets
from ansible.module_utils.basic import *
-main()
+from ansible.module_utils.urls import *
+if __name__ == '__main__':
+ main()