Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions cloudinit/config/cc_snap.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,14 @@
01: ['snap', 'install', 'vlc']
02: snap install vlc
03: 'snap install vlc'
"""), dedent("""\
# You can use a list of commands
snap:
commands:
- ['install', 'vlc']
- ['snap', 'install', 'vlc']
- snap install vlc
- 'snap install vlc'
""")],
'frequency': PER_INSTANCE,
'type': 'object',
Expand All @@ -110,6 +118,12 @@
'additionalItems': False, # Reject non-string & non-list
'minItems': 1,
'minProperties': 1,
'additionalProperties': {
'oneOf': [
{'type': 'string'},
{'type': 'array', 'items': {'type': 'string'}},
],
},
},
'squashfuse_in_container': {
'type': 'boolean'
Expand Down
32 changes: 32 additions & 0 deletions cloudinit/config/tests/test_snap.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,38 @@ def test_schema_when_commands_are_list_or_dict(self, _):
{'snap': {'commands': {'01': 'also valid'}}}, schema)
self.assertEqual('', self.logs.getvalue())

@mock.patch('cloudinit.config.cc_snap.run_commands')
def test_schema_when_commands_values_are_invalid_type(self, _):
"""Warnings when snap:commands values are invalid type (e.g. int)"""
validate_cloudconfig_schema(
{'snap': {'commands': [123]}}, schema)
validate_cloudconfig_schema(
{'snap': {'commands': {'01': 123}}}, schema)
self.assertEqual(
"WARNING: Invalid config:\n"
"snap.commands.0: 123 is not valid under any of the given"
" schemas\n"
"WARNING: Invalid config:\n"
"snap.commands.01: 123 is not valid under any of the given"
" schemas\n",
self.logs.getvalue())

@mock.patch('cloudinit.config.cc_snap.run_commands')
def test_schema_when_commands_list_values_are_invalid_type(self, _):
"""Warnings when snap:commands list values are wrong type (e.g. int)"""
validate_cloudconfig_schema(
{'snap': {'commands': [["snap", "install", 123]]}}, schema)
validate_cloudconfig_schema(
{'snap': {'commands': {'01': ["snap", "install", 123]}}}, schema)
self.assertEqual(
"WARNING: Invalid config:\n"
"snap.commands.0: ['snap', 'install', 123] is not valid under any"
" of the given schemas\n",
"WARNING: Invalid config:\n"
"snap.commands.0: ['snap', 'install', 123] is not valid under any"
" of the given schemas\n",
self.logs.getvalue())

@mock.patch('cloudinit.config.cc_snap.add_assertions')
def test_warn_schema_assertions_is_not_list_or_dict(self, _):
"""Warn when snap:assertions config is not a list or dict."""
Expand Down