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:
|
description:
|
||||||
- The path to the symbolic link that should point to the real subcommand executable.
|
- The path to the symbolic link that should point to the real subcommand executable.
|
||||||
type: path
|
type: path
|
||||||
|
required: true
|
||||||
version_added: 5.1.0
|
version_added: 5.1.0
|
||||||
requirements: [ update-alternatives ]
|
requirements: [ update-alternatives ]
|
||||||
'''
|
'''
|
||||||
|
@ -204,7 +205,7 @@ class AlternativesModule(object):
|
||||||
|
|
||||||
cmd = [self.UPDATE_ALTERNATIVES, '--install', self.link, self.name, self.path, str(self.priority)]
|
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]
|
subcommands = [['--slave', subcmd['link'], subcmd['name'], subcmd['path']] for subcmd in self.subcommands]
|
||||||
cmd += [item for sublist in subcommands for item in sublist]
|
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(
|
subcommands=dict(type='list', elements='dict', aliases=['slaves'], options=dict(
|
||||||
name=dict(type='str', required=True),
|
name=dict(type='str', required=True),
|
||||||
path=dict(type='path', required=True),
|
path=dict(type='path', required=True),
|
||||||
link=dict(type='path'),
|
link=dict(type='path', required=True),
|
||||||
)),
|
)),
|
||||||
),
|
),
|
||||||
supports_check_mode=True,
|
supports_check_mode=True,
|
||||||
|
|
|
@ -66,6 +66,8 @@
|
||||||
state: absent
|
state: absent
|
||||||
with_items:
|
with_items:
|
||||||
- '{{ alternatives_dir }}/dummy'
|
- '{{ alternatives_dir }}/dummy'
|
||||||
|
- '{{ alternatives_dir }}/dummymain'
|
||||||
|
- '{{ alternatives_dir }}/dummysubcmd'
|
||||||
|
|
||||||
- file:
|
- file:
|
||||||
path: '/usr/bin/dummy{{ item }}'
|
path: '/usr/bin/dummy{{ item }}'
|
||||||
|
|
|
@ -32,6 +32,15 @@
|
||||||
that:
|
that:
|
||||||
- cmd.stdout == "dummy2"
|
- 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
|
- name: Subcommands are not removed if not specified
|
||||||
alternatives:
|
alternatives:
|
||||||
name: dummymain
|
name: dummymain
|
||||||
|
@ -75,4 +84,134 @@
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- cmd.rc == 2
|
- 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_dir: /var/lib/dpkg/alternatives/
|
||||||
|
alternatives_command: update-alternatives
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
---
|
---
|
||||||
alternatives_dir: /var/lib/rpm/alternatives/
|
alternatives_dir: /var/lib/rpm/alternatives/
|
||||||
|
alternatives_command: update-alternatives
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
---
|
---
|
||||||
alternatives_dir: /var/lib/alternatives/
|
alternatives_dir: /var/lib/alternatives/
|
||||||
|
alternatives_command: update-alternatives
|
||||||
|
|
Loading…
Reference in a new issue