From 48c5930836055cd41c55e105f9ad964eb13b20fc Mon Sep 17 00:00:00 2001 From: Derek Ditch Date: Mon, 25 Jun 2018 10:10:39 -0500 Subject: [PATCH] Adds support for proxy authentication and repoview enablement. --- lib/ansible/modules/packaging/os/pulp_repo.py | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/lib/ansible/modules/packaging/os/pulp_repo.py b/lib/ansible/modules/packaging/os/pulp_repo.py index 8b6a676a352..b5bba979b8a 100644 --- a/lib/ansible/modules/packaging/os/pulp_repo.py +++ b/lib/ansible/modules/packaging/os/pulp_repo.py @@ -40,6 +40,15 @@ options: the Basic authentication header upon initial request. type: bool default: 'no' + generate_sqlite: + description: + - Boolean flag to indicate whether sqlite files should be generated during + a repository publish. + required: false + type: bool + choices: [ "yes", "no" ] + default: "no" + version_added: "2.7" importer_ssl_ca_cert: description: - CA certificate string used to validate the feed source SSL certificate. @@ -65,9 +74,25 @@ options: description: - Proxy url setting for the pulp repository importer. This is in the format scheme://host. + required: false + default: null proxy_port: description: - Proxy port setting for the pulp repository importer. + required: false + default: null + proxy_username: + description: + - Proxy username for the pulp repository importer. + required: false + default: null + version_added: "2.7" + proxy_password: + description: + - Proxy password for the pulp repository importer. + required: false + default: null + version_added: "2.7" publish_distributor: description: - Distributor to use when state is C(publish). The default is to @@ -84,6 +109,15 @@ options: description: - Repo plugin type to use (i.e. C(rpm), C(docker)). default: rpm + repoview: + description: + - Whether to generate repoview files for a published repository. Setting + this to "yes" automatically activates `generate_sqlite`. + required: false + type: bool + choices: ["yes", "no"] + default: no + version_added: "2.7" serve_http: description: - Make the repo available over HTTP. @@ -195,6 +229,9 @@ class pulp_server(object): for distributor in repo_config['distributors']: for key, value in kwargs.items(): + if key not in distributor['config'].keys(): + return False + if not distributor['config'][key] == value: return False @@ -219,10 +256,14 @@ class pulp_server(object): repo_id, relative_url, feed=None, + generate_sqlite=False, serve_http=False, serve_https=True, proxy_host=None, proxy_port=None, + proxy_username=None, + proxy_password=None, + repoview=False, ssl_ca_cert=None, ssl_client_cert=None, ssl_client_key=None, @@ -242,6 +283,8 @@ class pulp_server(object): yum_distributor['distributor_config']['http'] = serve_http yum_distributor['distributor_config']['https'] = serve_https yum_distributor['distributor_config']['relative_url'] = relative_url + yum_distributor['distributor_config']['repoview'] = repoview + yum_distributor['distributor_config']['generate_sqlite'] = generate_sqlite or repoview data['distributors'].append(yum_distributor) if add_export_distributor: @@ -253,6 +296,8 @@ class pulp_server(object): export_distributor['distributor_config']['http'] = serve_http export_distributor['distributor_config']['https'] = serve_https export_distributor['distributor_config']['relative_url'] = relative_url + export_distributor['distributor_config']['repoview'] = repoview + export_distributor['distributor_config']['generate_sqlite'] = generate_sqlite or repoview data['distributors'].append(export_distributor) data['importer_type_id'] = "yum_importer" @@ -267,6 +312,12 @@ class pulp_server(object): if proxy_port: data['importer_config']['proxy_port'] = proxy_port + if proxy_username: + data['importer_config']['proxy_username'] = proxy_username + + if proxy_password: + data['importer_config']['proxy_password'] = proxy_password + if ssl_ca_cert: data['importer_config']['ssl_ca_cert'] = ssl_ca_cert @@ -479,16 +530,20 @@ def main(): argument_spec.update( add_export_distributor=dict(default=False, type='bool'), feed=dict(), + generate_sqlite=dict(default=False, type='bool', choices=[True, False]), importer_ssl_ca_cert=dict(), importer_ssl_client_cert=dict(), importer_ssl_client_key=dict(), name=dict(required=True, aliases=['repo']), proxy_host=dict(), proxy_port=dict(), + proxy_username=dict(), + proxy_password=dict(no_log=True), publish_distributor=dict(), pulp_host=dict(default="https://127.0.0.1"), relative_url=dict(), repo_type=dict(default="rpm"), + repoview=dict(default=False, type='bool', choices=[True, False]), serve_http=dict(default=False, type='bool'), serve_https=dict(default=True, type='bool'), state=dict( @@ -501,16 +556,20 @@ def main(): add_export_distributor = module.params['add_export_distributor'] feed = module.params['feed'] + generate_sqlite = module.params['generate_sqlite'] importer_ssl_ca_cert = module.params['importer_ssl_ca_cert'] importer_ssl_client_cert = module.params['importer_ssl_client_cert'] importer_ssl_client_key = module.params['importer_ssl_client_key'] proxy_host = module.params['proxy_host'] proxy_port = module.params['proxy_port'] + proxy_username = module.params['proxy_username'] + proxy_password = module.params['proxy_password'] publish_distributor = module.params['publish_distributor'] pulp_host = module.params['pulp_host'] relative_url = module.params['relative_url'] repo = module.params['name'] repo_type = module.params['repo_type'] + repoview = module.params['repoview'] serve_http = module.params['serve_http'] serve_https = module.params['serve_https'] state = module.params['state'] @@ -584,10 +643,14 @@ def main(): repo_id=repo, relative_url=relative_url, feed=feed, + generate_sqlite=generate_sqlite, serve_http=serve_http, serve_https=serve_https, proxy_host=proxy_host, proxy_port=proxy_port, + proxy_username=proxy_username, + proxy_password=proxy_password, + repoview=repoview, ssl_ca_cert=importer_ssl_ca_cert, ssl_client_cert=importer_ssl_client_cert, ssl_client_key=importer_ssl_client_key, @@ -604,6 +667,8 @@ def main(): feed=feed, proxy_host=proxy_host, proxy_port=proxy_port, + proxy_username=proxy_username, + proxy_password=proxy_password, ssl_ca_cert=importer_ssl_ca_cert, ssl_client_cert=importer_ssl_client_cert, ssl_client_key=importer_ssl_client_key @@ -614,6 +679,8 @@ def main(): feed=feed, proxy_host=proxy_host, proxy_port=proxy_port, + proxy_username=proxy_username, + proxy_password=proxy_password, ssl_ca_cert=importer_ssl_ca_cert, ssl_client_cert=importer_ssl_client_cert, ssl_client_key=importer_ssl_client_key) @@ -632,6 +699,18 @@ def main(): changed = True + if not server.compare_repo_distributor_config(repo, generate_sqlite=generate_sqlite): + if not module.check_mode: + server.update_repo_distributor_config(repo, generate_sqlite=generate_sqlite) + + changed = True + + if not server.compare_repo_distributor_config(repo, repoview=repoview): + if not module.check_mode: + server.update_repo_distributor_config(repo, repoview=repoview) + + changed = True + if not server.compare_repo_distributor_config(repo, http=serve_http): if not module.check_mode: server.update_repo_distributor_config(repo, http=serve_http)