diff --git a/changelogs/fragments/9226-xfconf-version.yml b/changelogs/fragments/9226-xfconf-version.yml new file mode 100644 index 0000000000..517beb9b96 --- /dev/null +++ b/changelogs/fragments/9226-xfconf-version.yml @@ -0,0 +1,3 @@ +minor_changes: + - xfconf - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9226). + - xfconf_info - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9226). diff --git a/plugins/module_utils/xfconf.py b/plugins/module_utils/xfconf.py index b63518d0c4..344bd1f3c9 100644 --- a/plugins/module_utils/xfconf.py +++ b/plugins/module_utils/xfconf.py @@ -7,10 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from ansible.module_utils.parsing.convert_bool import boolean -from ansible_collections.community.general.plugins.module_utils.cmd_runner import CmdRunner, cmd_runner_fmt as fmt +from ansible_collections.community.general.plugins.module_utils.cmd_runner import CmdRunner, cmd_runner_fmt -@fmt.unpack_args +@cmd_runner_fmt.unpack_args def _values_fmt(values, value_types): result = [] for value, value_type in zip(values, value_types): @@ -25,14 +25,21 @@ def xfconf_runner(module, **kwargs): module, command='xfconf-query', arg_formats=dict( - channel=fmt.as_opt_val("--channel"), - property=fmt.as_opt_val("--property"), - force_array=fmt.as_bool("--force-array"), - reset=fmt.as_bool("--reset"), - create=fmt.as_bool("--create"), - list_arg=fmt.as_bool("--list"), - values_and_types=fmt.as_func(_values_fmt), + channel=cmd_runner_fmt.as_opt_val("--channel"), + property=cmd_runner_fmt.as_opt_val("--property"), + force_array=cmd_runner_fmt.as_bool("--force-array"), + reset=cmd_runner_fmt.as_bool("--reset"), + create=cmd_runner_fmt.as_bool("--create"), + list_arg=cmd_runner_fmt.as_bool("--list"), + values_and_types=_values_fmt, + version=cmd_runner_fmt.as_fixed("--version"), ), **kwargs ) return runner + + +def get_xfconf_version(runner): + with runner("version") as ctx: + rc, out, err = ctx.run() + return out.splitlines()[0].split()[1] diff --git a/plugins/modules/xfconf.py b/plugins/modules/xfconf.py index b925e624c8..c13f7b7f45 100644 --- a/plugins/modules/xfconf.py +++ b/plugins/modules/xfconf.py @@ -153,10 +153,17 @@ cmd: - string - --set - Pacific/Auckland +version: + description: + - The version of the C(xfconf-query) command. + returned: success + type: str + sample: 4.18.1 + version_added: 10.2.0 """ from ansible_collections.community.general.plugins.module_utils.module_helper import StateModuleHelper -from ansible_collections.community.general.plugins.module_utils.xfconf import xfconf_runner +from ansible_collections.community.general.plugins.module_utils.xfconf import xfconf_runner, get_xfconf_version class XFConfProperty(StateModuleHelper): @@ -183,8 +190,8 @@ class XFConfProperty(StateModuleHelper): def __init_module__(self): self.runner = xfconf_runner(self.module) - self.does_not = 'Property "{0}" does not exist on channel "{1}".'.format(self.vars.property, - self.vars.channel) + self.vars.version = get_xfconf_version(self.runner) + self.does_not = 'Property "{0}" does not exist on channel "{1}".'.format(self.vars.property, self.vars.channel) self.vars.set('previous_value', self._get()) self.vars.set('type', self.vars.value_type) self.vars.set_meta('value', initial_value=self.vars.previous_value) @@ -213,8 +220,7 @@ class XFConfProperty(StateModuleHelper): self.vars.stdout = ctx.results_out self.vars.stderr = ctx.results_err self.vars.cmd = ctx.cmd - if self.verbosity >= 4: - self.vars.run_info = ctx.run_info + self.vars.set("run_info", ctx.run_info, verbosity=4) self.vars.value = None def state_present(self): @@ -244,8 +250,7 @@ class XFConfProperty(StateModuleHelper): self.vars.stdout = ctx.results_out self.vars.stderr = ctx.results_err self.vars.cmd = ctx.cmd - if self.verbosity >= 4: - self.vars.run_info = ctx.run_info + self.vars.set("run_info", ctx.run_info, verbosity=4) if not self.vars.is_array: self.vars.value = self.vars.value[0] diff --git a/plugins/modules/xfconf_info.py b/plugins/modules/xfconf_info.py index d8e6acc50d..36de7daecc 100644 --- a/plugins/modules/xfconf_info.py +++ b/plugins/modules/xfconf_info.py @@ -118,10 +118,17 @@ value_array: - Main - Work - Tmp +version: + description: + - The version of the C(xfconf-query) command. + returned: success + type: str + sample: 4.18.1 + version_added: 10.2.0 """ from ansible_collections.community.general.plugins.module_utils.module_helper import ModuleHelper -from ansible_collections.community.general.plugins.module_utils.xfconf import xfconf_runner +from ansible_collections.community.general.plugins.module_utils.xfconf import xfconf_runner, get_xfconf_version class XFConfInfo(ModuleHelper): @@ -139,6 +146,7 @@ class XFConfInfo(ModuleHelper): def __init_module__(self): self.runner = xfconf_runner(self.module, check_rc=True) + self.vars.version = get_xfconf_version(self.runner) self.vars.set("list_arg", False, output=False) self.vars.set("is_array", False) diff --git a/tests/unit/plugins/modules/test_xfconf.yaml b/tests/unit/plugins/modules/test_xfconf.yaml index 481b090e94..c52c8f7c1b 100644 --- a/tests/unit/plugins/modules/test_xfconf.yaml +++ b/tests/unit/plugins/modules/test_xfconf.yaml @@ -21,11 +21,23 @@ previous_value: '100' type: int value: '90' + version: "4.18.1" mocks: run_command: - - command: [/testbin/xfconf-query, --channel, xfwm4, --property, /general/inactive_opacity] + - command: [/testbin/xfconf-query, --version] environ: &env-def {environ_update: {LANGUAGE: C, LC_ALL: C}, check_rc: false} rc: 0 + out: &version-output | + xfconf-query 4.18.1 + + Copyright (c) 2008-2023 + The Xfce development team. All rights reserved. + + Please report bugs to . + err: "" + - command: [/testbin/xfconf-query, --channel, xfwm4, --property, /general/inactive_opacity] + environ: *env-def + rc: 0 out: "100\n" err: "" - command: [/testbin/xfconf-query, --channel, xfwm4, --property, /general/inactive_opacity, --create, --type, int, --set, '90'] @@ -45,8 +57,14 @@ previous_value: '90' type: int value: '90' + version: "4.18.1" mocks: run_command: + - command: [/testbin/xfconf-query, --version] + environ: *env-def + rc: 0 + out: *version-output + err: "" - command: [/testbin/xfconf-query, --channel, xfwm4, --property, /general/inactive_opacity] environ: *env-def rc: 0 @@ -69,8 +87,14 @@ previous_value: 'true' type: bool value: 'False' + version: "4.18.1" mocks: run_command: + - command: [/testbin/xfconf-query, --version] + environ: *env-def + rc: 0 + out: *version-output + err: "" - command: [/testbin/xfconf-query, --channel, xfce4-session, --property, /general/SaveOnExit] environ: *env-def rc: 0 @@ -93,8 +117,14 @@ previous_value: [Main, Work, Tmp] type: [string, string, string] value: [A, B, C] + version: "4.18.1" mocks: run_command: + - command: [/testbin/xfconf-query, --version] + environ: *env-def + rc: 0 + out: *version-output + err: "" - command: [/testbin/xfconf-query, --channel, xfwm4, --property, /general/workspace_names] environ: *env-def rc: 0 @@ -136,8 +166,14 @@ previous_value: [A, B, C] type: [string, string, string] value: [A, B, C] + version: "4.18.1" mocks: run_command: + - command: [/testbin/xfconf-query, --version] + environ: *env-def + rc: 0 + out: *version-output + err: "" - command: [/testbin/xfconf-query, --channel, xfwm4, --property, /general/workspace_names] environ: *env-def rc: 0 @@ -177,8 +213,14 @@ previous_value: [A, B, C] type: value: + version: "4.18.1" mocks: run_command: + - command: [/testbin/xfconf-query, --version] + environ: *env-def + rc: 0 + out: *version-output + err: "" - command: [/testbin/xfconf-query, --channel, xfwm4, --property, /general/workspace_names] environ: *env-def rc: 0 diff --git a/tests/unit/plugins/modules/test_xfconf_info.yaml b/tests/unit/plugins/modules/test_xfconf_info.yaml index 535e50602f..8e7ae667c4 100644 --- a/tests/unit/plugins/modules/test_xfconf_info.yaml +++ b/tests/unit/plugins/modules/test_xfconf_info.yaml @@ -6,6 +6,13 @@ --- anchors: environ: &env-def {environ_update: {LANGUAGE: C, LC_ALL: C}, check_rc: true} + out: &version-output | + xfconf-query 4.18.1 + + Copyright (c) 2008-2023 + The Xfce development team. All rights reserved. + + Please report bugs to . test_cases: - id: test_simple_property_get input: @@ -14,8 +21,14 @@ test_cases: output: value: '100' is_array: false + version: "4.18.1" mocks: run_command: + - command: [/testbin/xfconf-query, --version] + environ: *env-def + rc: 0 + out: *version-output + err: "" - command: [/testbin/xfconf-query, --channel, xfwm4, --property, /general/inactive_opacity] environ: *env-def rc: 0 @@ -25,9 +38,15 @@ test_cases: input: channel: xfwm4 property: /general/i_dont_exist - output: {} + output: + version: "4.18.1" mocks: run_command: + - command: [/testbin/xfconf-query, --version] + environ: *env-def + rc: 0 + out: *version-output + err: "" - command: [/testbin/xfconf-query, --channel, xfwm4, --property, /general/i_dont_exist] environ: *env-def rc: 1 @@ -39,8 +58,6 @@ test_cases: output: failed: true msg: "missing parameter(s) required by 'property': channel" - mocks: - run_command: [] - id: test_property_get_array input: channel: xfwm4 @@ -48,8 +65,14 @@ test_cases: output: is_array: true value_array: [Main, Work, Tmp] + version: "4.18.1" mocks: run_command: + - command: [/testbin/xfconf-query, --version] + environ: *env-def + rc: 0 + out: *version-output + err: "" - command: [/testbin/xfconf-query, --channel, xfwm4, --property, /general/workspace_names] environ: *env-def rc: 0 @@ -59,8 +82,14 @@ test_cases: input: {} output: channels: [a, b, c] + version: "4.18.1" mocks: run_command: + - command: [/testbin/xfconf-query, --version] + environ: *env-def + rc: 0 + out: *version-output + err: "" - command: [/testbin/xfconf-query, --list] environ: *env-def rc: 0 @@ -77,8 +106,14 @@ test_cases: - /general/wrap_windows - /general/wrap_workspaces - /general/zoom_desktop + version: "4.18.1" mocks: run_command: + - command: [/testbin/xfconf-query, --version] + environ: *env-def + rc: 0 + out: *version-output + err: "" - command: [/testbin/xfconf-query, --list, --channel, xfwm4] environ: *env-def rc: 0