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:
parent
a45b90e93f
commit
84d8ca9234
7 changed files with 151 additions and 3 deletions
3
changelogs/fragments/4836-alternatives.yml
Normal file
3
changelogs/fragments/4836-alternatives.yml
Normal 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)."
|
|
@ -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,
|
||||
|
|
|
@ -66,6 +66,8 @@
|
|||
state: absent
|
||||
with_items:
|
||||
- '{{ alternatives_dir }}/dummy'
|
||||
- '{{ alternatives_dir }}/dummymain'
|
||||
- '{{ alternatives_dir }}/dummysubcmd'
|
||||
|
||||
- file:
|
||||
path: '/usr/bin/dummy{{ item }}'
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
---
|
||||
alternatives_dir: /var/lib/dpkg/alternatives/
|
||||
alternatives_command: update-alternatives
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
---
|
||||
alternatives_dir: /var/lib/rpm/alternatives/
|
||||
alternatives_command: update-alternatives
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
---
|
||||
alternatives_dir: /var/lib/alternatives/
|
||||
alternatives_command: update-alternatives
|
||||
|
|
Loading…
Reference in a new issue