snap: add RV version (#9598)

* snap: add RV version

* add chglog frag

* fix typo

* fix docs

* add missing import

* fix sanity

* more fixes

* Update plugins/modules/snap.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/modules/snap_alias.py

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
pull/9608/head
Alexei Znamensky 2025-01-23 08:04:38 +13:00 committed by GitHub
parent 8f29976102
commit f27d5e7a42
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 57 additions and 11 deletions

View File

@ -0,0 +1,3 @@
minor_changes:
- snap - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9598).
- snap_alias - add return value ``version`` (https://github.com/ansible-collections/community.general/pull/9598).

View File

@ -41,8 +41,15 @@ def snap_runner(module, **kwargs):
options=cmd_runner_fmt.as_list(),
info=cmd_runner_fmt.as_fixed("info"),
dangerous=cmd_runner_fmt.as_bool("--dangerous"),
version=cmd_runner_fmt.as_fixed("version"),
),
check_rc=False,
**kwargs
)
return runner
def get_version(runner):
with runner("version") as ctx:
rc, out, err = ctx.run()
return dict(x.split() for x in out.splitlines() if len(x.split()) == 2)

View File

@ -167,6 +167,11 @@ options_changed:
type: list
returned: When any options have been changed/set
version_added: 4.4.0
version:
description: Versions of snap components as reported by C(snap version).
type: dict
returned: always
version_added: 10.3.0
"""
import re
@ -176,7 +181,7 @@ import numbers
from ansible.module_utils.common.text.converters import to_native
from ansible_collections.community.general.plugins.module_utils.module_helper import StateModuleHelper
from ansible_collections.community.general.plugins.module_utils.snap import snap_runner
from ansible_collections.community.general.plugins.module_utils.snap import snap_runner, get_version
class Snap(StateModuleHelper):
@ -210,6 +215,7 @@ class Snap(StateModuleHelper):
def __init_module__(self):
self.runner = snap_runner(self.module)
self.vars.version = get_version(self.runner)
# if state=present there might be file names passed in 'name', in
# which case they must be converted to their actual snap names, which
# is done using the names_from_snaps() method calling 'snap info'.

View File

@ -80,13 +80,18 @@ snap_aliases:
type: list
elements: str
returned: always
version:
description: Versions of snap components as reported by C(snap version).
type: dict
returned: always
version_added: 10.3.0
"""
import re
from ansible_collections.community.general.plugins.module_utils.module_helper import StateModuleHelper
from ansible_collections.community.general.plugins.module_utils.snap import snap_runner
from ansible_collections.community.general.plugins.module_utils.snap import snap_runner, get_version
class SnapAlias(StateModuleHelper):
@ -112,6 +117,7 @@ class SnapAlias(StateModuleHelper):
def __init_module__(self):
self.runner = snap_runner(self.module)
self.vars.version = get_version(self.runner)
self.vars.set("snap_aliases", self._aliases(), change=True, diff=True)
def __quit_module__(self):

View File

@ -376,6 +376,16 @@ issue_6803_kubectl_out = (
"\r\u001b[0m\u001b[?25h\u001b[Kkubectl (1.27/stable) v1.27.2 from Canonical** installed\n"
)
default_env = {'environ_update': {'LANGUAGE': 'C', 'LC_ALL': 'C'}, 'check_rc': False}
default_version_out = """\
snap 2.66.1+24.04
snapd 2.66.1+24.04
series 16
ubuntu 24.04
kernel 6.8.0-49-generic
"""
TEST_CASES = [
dict(
id="simple case",
@ -384,30 +394,37 @@ TEST_CASES = [
flags={},
mocks=dict(
run_command=[
dict(
command=['/testbin/snap', 'version'],
environ=default_env,
rc=0,
out=default_version_out,
err="",
),
dict(
command=['/testbin/snap', 'info', 'hello-world'],
environ={'environ_update': {'LANGUAGE': 'C', 'LC_ALL': 'C'}, 'check_rc': False},
environ=default_env,
rc=0,
out='name: hello-world\n',
err="",
),
dict(
command=['/testbin/snap', 'list'],
environ={'environ_update': {'LANGUAGE': 'C', 'LC_ALL': 'C'}, 'check_rc': False},
environ=default_env,
rc=0,
out="",
err="",
),
dict(
command=['/testbin/snap', 'install', 'hello-world'],
environ={'environ_update': {'LANGUAGE': 'C', 'LC_ALL': 'C'}, 'check_rc': False},
environ=default_env,
rc=0,
out="hello-world (12345/stable) v12345 from Canonical** installed\n",
err="",
),
dict(
command=['/testbin/snap', 'list'],
environ={'environ_update': {'LANGUAGE': 'C', 'LC_ALL': 'C'}, 'check_rc': False},
environ=default_env,
rc=0,
out=(
"Name Version Rev Tracking Publisher Notes"
@ -428,37 +445,44 @@ TEST_CASES = [
flags={},
mocks=dict(
run_command=[
dict(
command=['/testbin/snap', 'version'],
environ=default_env,
rc=0,
out=default_version_out,
err="",
),
dict(
command=['/testbin/snap', 'info', 'microk8s', 'kubectl'],
environ={'environ_update': {'LANGUAGE': 'C', 'LC_ALL': 'C'}, 'check_rc': False},
environ=default_env,
rc=0,
out='name: microk8s\n---\nname: kubectl\n',
err="",
),
dict(
command=['/testbin/snap', 'list'],
environ={'environ_update': {'LANGUAGE': 'C', 'LC_ALL': 'C'}, 'check_rc': False},
environ=default_env,
rc=0,
out=issue_6803_status_out,
err="",
),
dict(
command=['/testbin/snap', 'install', '--classic', 'microk8s'],
environ={'environ_update': {'LANGUAGE': 'C', 'LC_ALL': 'C'}, 'check_rc': False},
environ=default_env,
rc=0,
out=issue_6803_microk8s_out,
err="",
),
dict(
command=['/testbin/snap', 'install', '--classic', 'kubectl'],
environ={'environ_update': {'LANGUAGE': 'C', 'LC_ALL': 'C'}, 'check_rc': False},
environ=default_env,
rc=0,
out=issue_6803_kubectl_out,
err="",
),
dict(
command=['/testbin/snap', 'list'],
environ={'environ_update': {'LANGUAGE': 'C', 'LC_ALL': 'C'}, 'check_rc': False},
environ=default_env,
rc=0,
out=(
"Name Version Rev Tracking Publisher Notes"