1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

Fix alternatives module (#4836)

* Only pass subcommands when they are specified as module arguments.

* When 'subcommands' is specified, 'link' must be given for every subcommand.

* Extend subcommand tests.
This commit is contained in:
Felix Fontein 2022-06-14 16:02:31 +02:00 committed by GitHub
parent a45b90e93f
commit 84d8ca9234
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 151 additions and 3 deletions

View file

@ -0,0 +1,3 @@
bugfixes:
- "alternatives - only pass subcommands when they are specified as module arguments (https://github.com/ansible-collections/community.general/issues/4803, https://github.com/ansible-collections/community.general/issues/4804, https://github.com/ansible-collections/community.general/pull/4836)."
- "alternatives - when ``subcommands`` is specified, ``link`` must be given for every subcommand. This was already mentioned in the documentation, but not enforced by the code (https://github.com/ansible-collections/community.general/pull/4836)."

View file

@ -77,6 +77,7 @@ options:
description:
- The path to the symbolic link that should point to the real subcommand executable.
type: path
required: true
version_added: 5.1.0
requirements: [ update-alternatives ]
'''
@ -204,7 +205,7 @@ class AlternativesModule(object):
cmd = [self.UPDATE_ALTERNATIVES, '--install', self.link, self.name, self.path, str(self.priority)]
if self.subcommands is not None:
if self.module.params['subcommands'] is not None:
subcommands = [['--slave', subcmd['link'], subcmd['name'], subcmd['path']] for subcmd in self.subcommands]
cmd += [item for sublist in subcommands for item in sublist]
@ -384,7 +385,7 @@ def main():
subcommands=dict(type='list', elements='dict', aliases=['slaves'], options=dict(
name=dict(type='str', required=True),
path=dict(type='path', required=True),
link=dict(type='path'),
link=dict(type='path', required=True),
)),
),
supports_check_mode=True,

View file

@ -66,6 +66,8 @@
state: absent
with_items:
- '{{ alternatives_dir }}/dummy'
- '{{ alternatives_dir }}/dummymain'
- '{{ alternatives_dir }}/dummysubcmd'
- file:
path: '/usr/bin/dummy{{ item }}'

View file

@ -32,6 +32,15 @@
that:
- cmd.stdout == "dummy2"
- name: Get dummymain alternatives output
command:
cmd: '{{ alternatives_command }} --display dummymain'
register: result
- name: Print result
debug:
var: result.stdout_lines
- name: Subcommands are not removed if not specified
alternatives:
name: dummymain
@ -75,4 +84,134 @@
assert:
that:
- cmd.rc == 2
- '"No such file" in cmd.msg'
- '"No such file" in cmd.msg'
- name: Get dummymain alternatives output
command:
cmd: '{{ alternatives_command }} --display dummymain'
register: result
- name: Print result
debug:
var: result.stdout_lines
- name: Install other alternative with subcommands
alternatives:
name: dummymain
path: '/usr/bin/dummy3'
link: '/usr/bin/dummymain'
subcommands:
- name: dummysubcmd
path: '/usr/bin/dummy4'
link: '/usr/bin/dummysubcmd'
register: alternative
- name: Check expected command was executed
assert:
that:
- 'alternative is changed'
- name: Execute the current dummymain command
command: dummymain
register: cmd
- name: Ensure that the expected command was executed
assert:
that:
- cmd.stdout == "dummy3"
- name: Execute the current dummysubcmd command
command: dummysubcmd
register: cmd
- name: Ensure that the expected command was executed
assert:
that:
- cmd.stdout == "dummy4"
- name: Get dummymain alternatives output
command:
cmd: '{{ alternatives_command }} --display dummymain'
register: result
- name: Print result
debug:
var: result.stdout_lines
- name: Switch to first alternative
alternatives:
name: dummymain
path: '/usr/bin/dummy1'
register: alternative
- name: Check expected command was executed
assert:
that:
- 'alternative is changed'
- name: Execute the current dummymain command
command: dummymain
register: cmd
- name: Ensure that the expected command was executed
assert:
that:
- cmd.stdout == "dummy1"
- name: Execute the current dummysubcmd command
command: dummysubcmd
register: cmd
ignore_errors: True
- name: Ensure that the subcommand is gone
assert:
that:
- cmd.rc == 2
- '"No such file" in cmd.msg'
- name: Get dummymain alternatives output
command:
cmd: '{{ alternatives_command }} --display dummymain'
register: result
- name: Print result
debug:
var: result.stdout_lines
- name: Switch to second alternative
alternatives:
name: dummymain
path: '/usr/bin/dummy3'
register: alternative
- name: Check expected command was executed
assert:
that:
- 'alternative is changed'
- name: Execute the current dummymain command
command: dummymain
register: cmd
- name: Ensure that the expected command was executed
assert:
that:
- cmd.stdout == "dummy3"
- name: Execute the current dummysubcmd command
command: dummysubcmd
register: cmd
- name: Ensure that the expected command was executed
assert:
that:
- cmd.stdout == "dummy4"
- name: Get dummymain alternatives output
command:
cmd: '{{ alternatives_command }} --display dummymain'
register: result
- name: Print result
debug:
var: result.stdout_lines

View file

@ -1,2 +1,3 @@
---
alternatives_dir: /var/lib/dpkg/alternatives/
alternatives_command: update-alternatives

View file

@ -1,2 +1,3 @@
---
alternatives_dir: /var/lib/rpm/alternatives/
alternatives_command: update-alternatives

View file

@ -1,2 +1,3 @@
---
alternatives_dir: /var/lib/alternatives/
alternatives_command: update-alternatives