Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:computersalat:devel:sysmgmnt_ansible
ansible
ansible-zypper_repository.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File ansible-zypper_repository.patch of Package ansible
Index: ansible_collections/community/general/plugins/modules/zypper_repository.py =================================================================== --- ansible_collections/community/general/plugins/modules/zypper_repository.py.orig +++ ansible_collections/community/general/plugins/modules/zypper_repository.py @@ -3,6 +3,7 @@ # Copyright (c) 2013, Matthias Vogelgesang <matthias.vogelgesang@gmail.com> # Copyright (c) 2014, Justin Lecher <jlec@gentoo.org> +# (c) 2017, Christian Wittmer <chris@computersalat.de> # # GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) # SPDX-License-Identifier: GPL-3.0-or-later @@ -15,9 +16,9 @@ DOCUMENTATION = ''' --- module: zypper_repository author: "Matthias Vogelgesang (@matze)" -short_description: Add and remove Zypper repositories +short_description: Add, modify and remove Zypper repositories description: - - Add or remove Zypper repositories on SUSE and openSUSE + - Add, modify or remove Zypper repositories on SLE and openSUSE extends_documentation_fragment: - community.general.attributes attributes: @@ -32,7 +33,18 @@ options: type: str repo: description: - - URI of the repository or .repo file. Required when state=present. + - URI of the repository or .repo file. Required when I(state=present) and I(action=add). + type: str + action: + required: false + choices: [ "add", "modify", "remove" ] + default: "add" + description: + - The action you want to perform. C(add, modify or remove) + - When wanting to C(add) a repo you can omit either I(action=add) or I(state=present) cause of their defaults. + - When wanting to C(modify) a repo then just use I(action=modify) + - When wanting to C(remove) a repo then just use one of I(state=absent) or I(action=remove) + - When using with C(modify) you should not run another task with C(add) before or afterwards cause of idempotency. type: str state: description: @@ -293,6 +305,36 @@ def addmodify_repo(module, repodata, old return rc, stdout, stderr +def modify_repo(module, repodata, zypper_version, warnings): + "Modifys the repo like name, enable/disable, refresh/no-refresh, priority" + cmd = _get_cmd('modifyrepo') + if repodata['name']: + cmd.extend(['--name', repodata['name']]) + + # priority on addrepo available since 1.12.25 + # https://github.com/openSUSE/zypper/blob/b9b3cb6db76c47dc4c47e26f6a4d2d4a0d12b06d/package/zypper.changes#L327-L336 + if repodata['priority']: + if zypper_version >= LooseVersion('1.12.25'): + cmd.extend(['--priority', str(repodata['priority'])]) + else: + warnings.append("Setting priority only available for zypper >= 1.12.25. Ignoring priority argument.") + + if repodata['enabled'] == '1': + cmd.append('--enable') + else: + cmd.append('--disable') + + if repodata['autorefresh'] == '1': + cmd.append('--refresh') + else: + cmd.append('--no-refresh') + + cmd.append(repodata['alias']) + + rc, stdout, stderr = module.run_command(cmd, check_rc=False) + return rc, stdout, stderr + + def remove_repo(module, repo): "Removes the repo." cmd = _get_cmd(module, 'removerepo', repo) @@ -325,6 +367,7 @@ def main(): module = AnsibleModule( argument_spec=dict( name=dict(required=False), + action=dict(choices=['add', 'remove', 'modify'], default='add'), repo=dict(required=False), state=dict(choices=['present', 'absent'], default='present'), runrefresh=dict(required=False, default=False, type='bool'), @@ -337,11 +380,12 @@ def main(): auto_import_keys=dict(required=False, default=False, type='bool'), ), supports_check_mode=False, - required_one_of=[['state', 'runrefresh']], + required_one_of=[['action', 'state', 'runrefresh']], ) repo = module.params['repo'] alias = module.params['name'] + action = module.params['action'] state = module.params['state'] overwrite_multiple = module.params['overwrite_multiple'] auto_import_keys = module.params['auto_import_keys'] @@ -381,17 +425,19 @@ def main(): else: module.fail_json(msg='repo=* can only be used with the runrefresh option.') - if state == 'present' and not repo: - module.fail_json(msg='Module option state=present requires repo') - if state == 'absent' and not repo and not alias: - module.fail_json(msg='Alias or repo parameter required when state=absent') + if state == 'present' and action == 'add' and not repo: + module.fail_json(msg='Missing option: \'repo\' (URI). Required when state=present and action=add') + if action == 'modify' and not alias: + module.fail_json(msg='Missing option: \'name\' (Alias). Required when action=modify') + if (state == 'absent' or action == 'remove') and not alias: + module.fail_json(msg='Missing option: \'name\' (Alias). Required when state=absent or action=remove') if repo and repo.endswith('.repo'): if alias: module.fail_json(msg='Incompatible option: \'name\'. Do not use name when adding .repo files') else: - if not alias and state == "present": - module.fail_json(msg='Name required when adding non-repo files.') + if not alias and state == "present" and action == 'add': + module.fail_json(msg='Missing option: \'name\' (Alias). Required when adding non-repo files.') # Download / Open and parse .repo file to ensure idempotency if repo and repo.endswith('.repo'): @@ -450,7 +496,7 @@ def main(): else: shortname = repo - if state == 'present': + if action == 'add' and state == 'present': if exists and not mod: if runrefresh: runrefreshrepo(module, auto_import_keys, shortname) @@ -458,15 +504,22 @@ def main(): rc, stdout, stderr = addmodify_repo(module, repodata, old_repos, zypper_version, warnings) if rc == 0 and (runrefresh or auto_import_keys): runrefreshrepo(module, auto_import_keys, shortname) - elif state == 'absent': + elif action == 'modify' and state == 'present': + if exists and not mod: + exit_unchanged() + if not exists: + exit_unchanged() + rc, stdout, stderr = modify_repo(module, repodata, zypper_version, warnings) + elif action == 'remove' or state == 'absent': if not exists: exit_unchanged() rc, stdout, stderr = remove_repo(module, shortname) if rc == 0: - module.exit_json(changed=True, repodata=repodata, state=state, warnings=warnings) + module.exit_json(changed=True, repodata=repodata, action=action, state=state, warnings=warnings) else: - module.fail_json(msg="Zypper failed with rc %s" % rc, rc=rc, stdout=stdout, stderr=stderr, repodata=repodata, state=state, warnings=warnings) + module.fail_json(msg="zypper failed with rc %s" % rc, rc=rc, stdout=stdout, stderr=stderr, repodata=repodata, action=action, state=state, + warnings=warnings) if __name__ == '__main__':
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor