mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-24 03:11:24 -07:00
[PR #6618/8dc5a602 backport][stable-7] Support for simpleinit-msb init system (#7342)
Support for simpleinit-msb init system (#6618)
* Support for simpleinit-msb init system
* Drop unused imports
* Correct regex
* Fix documentation
* Address BOTMETA
* PEP8 compliance
* Drop irrelevant snippet
* Add missing option type in docs
* PEP8 compliance
* Update plugins/modules/simpleinit_msb.py
Co-authored-by: Felix Fontein <felix@fontein.de>
* Update plugins/modules/simpleinit_msb.py
Co-authored-by: Felix Fontein <felix@fontein.de>
* Update plugins/modules/simpleinit_msb.py
Co-authored-by: Felix Fontein <felix@fontein.de>
* Daemonize commands in service control to handle telinit broken behavior
* Update plugins/modules/simpleinit_msb.py
Co-authored-by: Felix Fontein <felix@fontein.de>
* Update plugins/modules/simpleinit_msb.py
Co-authored-by: Felix Fontein <felix@fontein.de>
* Update plugins/modules/simpleinit_msb.py
Co-authored-by: Felix Fontein <felix@fontein.de>
* Update plugins/modules/simpleinit_msb.py
Co-authored-by: Felix Fontein <felix@fontein.de>
* Unify examples section
* Add unit tests for service state detection
* Drop unused import
* Add service enable/disable tests
* Test get_service_tools()
* Do not shadow fail_json()
* Reuse module init
* Implement service_enabled() and associated tests
* Update plugins/modules/simpleinit_msb.py
Co-authored-by: Felix Fontein <felix@fontein.de>
* Indent
* Bump version_added
* Bump requirements
* Reword and move to notes
---------
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 8dc5a60294
)
Co-authored-by: Val V <vaygr@users.noreply.github.com>
This commit is contained in:
parent
51648d5328
commit
1b488b53f5
3 changed files with 524 additions and 0 deletions
200
tests/unit/plugins/modules/test_simpleinit_msb.py
Normal file
200
tests/unit/plugins/modules/test_simpleinit_msb.py
Normal file
|
@ -0,0 +1,200 @@
|
|||
# Copyright (c) 2023 Vlad Glagolev <scm@vaygr.net>
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
|
||||
from ansible_collections.community.general.tests.unit.compat.mock import patch
|
||||
from ansible_collections.community.general.tests.unit.plugins.modules.utils import AnsibleFailJson, ModuleTestCase, set_module_args
|
||||
|
||||
from ansible_collections.community.general.plugins.modules.simpleinit_msb import SimpleinitMSB, build_module
|
||||
|
||||
|
||||
_TELINIT_LIST = """
|
||||
RUNLEVEL SCRIPT
|
||||
2 smgl-suspend-single
|
||||
3 crond
|
||||
3 fuse
|
||||
3 network
|
||||
3 nscd
|
||||
3 smgl-default-remote-fs
|
||||
3 smgl-misc
|
||||
3 sshd
|
||||
DEV coldplug
|
||||
DEV devices
|
||||
DEV udevd
|
||||
S hostname.sh
|
||||
S hwclock.sh
|
||||
S keymap.sh
|
||||
S modutils
|
||||
S mountall.sh
|
||||
S mountroot.sh
|
||||
S single
|
||||
S smgl-default-crypt-fs
|
||||
S smgl-metalog
|
||||
S smgl-sysctl
|
||||
S sysstat
|
||||
"""
|
||||
|
||||
_TELINIT_LIST_ENABLED = """
|
||||
smgl-suspend-single
|
||||
crond
|
||||
fuse
|
||||
network
|
||||
nscd
|
||||
smgl-default-remote-fs
|
||||
smgl-misc
|
||||
sshd
|
||||
coldplug
|
||||
devices
|
||||
udevd
|
||||
hostname.sh
|
||||
hwclock.sh
|
||||
keymap.sh
|
||||
modutils
|
||||
mountall.sh
|
||||
mountroot.sh
|
||||
single
|
||||
smgl-default-crypt-fs
|
||||
smgl-metalog
|
||||
smgl-sysctl
|
||||
"""
|
||||
|
||||
_TELINIT_LIST_DISABLED = """
|
||||
sysstat
|
||||
"""
|
||||
|
||||
_TELINIT_ALREADY_ENABLED = """
|
||||
Service smgl-suspend-single already enabled.
|
||||
"""
|
||||
|
||||
_TELINIT_ALREADY_DISABLED = """
|
||||
Service smgl-suspend-single already disabled.
|
||||
"""
|
||||
|
||||
_TELINIT_STATUS_RUNNING = """
|
||||
sshd is running with Process ID(s) 8510 8508 2195
|
||||
"""
|
||||
|
||||
_TELINIT_STATUS_RUNNING_NOT = """
|
||||
/sbin/metalog is not running
|
||||
"""
|
||||
|
||||
|
||||
class TestSimpleinitMSB(ModuleTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestSimpleinitMSB, self).setUp()
|
||||
|
||||
def tearDown(self):
|
||||
super(TestSimpleinitMSB, self).tearDown()
|
||||
|
||||
def init_module(self, args):
|
||||
set_module_args(args)
|
||||
|
||||
return SimpleinitMSB(build_module())
|
||||
|
||||
@patch('os.path.exists', return_value=True)
|
||||
@patch('ansible.module_utils.basic.AnsibleModule.get_bin_path', return_value="/sbin/telinit")
|
||||
def test_get_service_tools(self, *args, **kwargs):
|
||||
simpleinit_msb = self.init_module({
|
||||
'name': 'smgl-suspend-single',
|
||||
'state': 'running',
|
||||
})
|
||||
|
||||
simpleinit_msb.get_service_tools()
|
||||
|
||||
self.assertEqual(simpleinit_msb.telinit_cmd, "/sbin/telinit")
|
||||
|
||||
@patch('ansible_collections.community.general.plugins.modules.simpleinit_msb.SimpleinitMSB.execute_command')
|
||||
def test_service_exists(self, execute_command):
|
||||
simpleinit_msb = self.init_module({
|
||||
'name': 'smgl-suspend-single',
|
||||
'state': 'running',
|
||||
})
|
||||
|
||||
execute_command.return_value = (0, _TELINIT_LIST, "")
|
||||
|
||||
simpleinit_msb.service_exists()
|
||||
|
||||
@patch('ansible_collections.community.general.plugins.modules.simpleinit_msb.SimpleinitMSB.execute_command')
|
||||
def test_service_exists_not(self, execute_command):
|
||||
simpleinit_msb = self.init_module({
|
||||
'name': 'ntp',
|
||||
'state': 'running',
|
||||
})
|
||||
|
||||
execute_command.return_value = (0, _TELINIT_LIST, "")
|
||||
|
||||
with self.assertRaises(AnsibleFailJson) as context:
|
||||
simpleinit_msb.service_exists()
|
||||
|
||||
self.assertEqual("telinit could not find the requested service: ntp", context.exception.args[0]["msg"])
|
||||
|
||||
@patch('ansible_collections.community.general.plugins.modules.simpleinit_msb.SimpleinitMSB.service_exists')
|
||||
@patch('ansible_collections.community.general.plugins.modules.simpleinit_msb.SimpleinitMSB.execute_command')
|
||||
def test_check_service_enabled(self, execute_command, service_exists):
|
||||
simpleinit_msb = self.init_module({
|
||||
'name': 'nscd',
|
||||
'state': 'running',
|
||||
'enabled': 'true',
|
||||
})
|
||||
|
||||
service_exists.return_value = True
|
||||
execute_command.return_value = (0, _TELINIT_LIST_ENABLED, "")
|
||||
|
||||
self.assertTrue(simpleinit_msb.service_enabled())
|
||||
|
||||
# Race condition check
|
||||
with patch('ansible_collections.community.general.plugins.modules.simpleinit_msb.SimpleinitMSB.service_enabled', return_value=False):
|
||||
execute_command.return_value = (0, "", _TELINIT_ALREADY_ENABLED)
|
||||
|
||||
simpleinit_msb.service_enable()
|
||||
|
||||
self.assertFalse(simpleinit_msb.changed)
|
||||
|
||||
@patch('ansible_collections.community.general.plugins.modules.simpleinit_msb.SimpleinitMSB.service_exists')
|
||||
@patch('ansible_collections.community.general.plugins.modules.simpleinit_msb.SimpleinitMSB.execute_command')
|
||||
def test_check_service_disabled(self, execute_command, service_exists):
|
||||
simpleinit_msb = self.init_module({
|
||||
'name': 'sysstat',
|
||||
'state': 'stopped',
|
||||
'enabled': 'false',
|
||||
})
|
||||
|
||||
service_exists.return_value = True
|
||||
execute_command.return_value = (0, _TELINIT_LIST_DISABLED, "")
|
||||
|
||||
self.assertFalse(simpleinit_msb.service_enabled())
|
||||
|
||||
# Race condition check
|
||||
with patch('ansible_collections.community.general.plugins.modules.simpleinit_msb.SimpleinitMSB.service_enabled', return_value=True):
|
||||
execute_command.return_value = (0, "", _TELINIT_ALREADY_DISABLED)
|
||||
|
||||
simpleinit_msb.service_enable()
|
||||
|
||||
self.assertFalse(simpleinit_msb.changed)
|
||||
|
||||
@patch('ansible_collections.community.general.plugins.modules.simpleinit_msb.SimpleinitMSB.service_control')
|
||||
def test_check_service_running(self, service_control):
|
||||
simpleinit_msb = self.init_module({
|
||||
'name': 'sshd',
|
||||
'state': 'running',
|
||||
})
|
||||
|
||||
service_control.return_value = (0, _TELINIT_STATUS_RUNNING, "")
|
||||
|
||||
self.assertFalse(simpleinit_msb.get_service_status())
|
||||
|
||||
@patch('ansible_collections.community.general.plugins.modules.simpleinit_msb.SimpleinitMSB.service_control')
|
||||
def test_check_service_running_not(self, service_control):
|
||||
simpleinit_msb = self.init_module({
|
||||
'name': 'smgl-metalog',
|
||||
'state': 'running',
|
||||
})
|
||||
|
||||
service_control.return_value = (0, _TELINIT_STATUS_RUNNING_NOT, "")
|
||||
|
||||
self.assertFalse(simpleinit_msb.get_service_status())
|
Loading…
Add table
Add a link
Reference in a new issue