mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Fix unittests
This commit is contained in:
parent
452034564c
commit
75546678d9
7 changed files with 291 additions and 114 deletions
|
@ -1435,9 +1435,13 @@ class AnsibleModule(object):
|
||||||
|
|
||||||
def _load_params(self):
|
def _load_params(self):
|
||||||
''' read the input and set the params attribute. Sets the constants as well.'''
|
''' read the input and set the params attribute. Sets the constants as well.'''
|
||||||
|
# Avoid tracebacks when locale is non-utf8
|
||||||
|
if sys.version_info < (3,):
|
||||||
buffer = sys.stdin.read()
|
buffer = sys.stdin.read()
|
||||||
|
else:
|
||||||
|
buffer = sys.stdin.buffer.read()
|
||||||
try:
|
try:
|
||||||
params = json.loads(buffer)
|
params = json.loads(buffer.decode('utf-8'))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
# This helper used too early for fail_json to work.
|
# This helper used too early for fail_json to work.
|
||||||
print('{"msg": "Error: Module unable to decode valid JSON on stdin. Unable to figure out what parameters were passed", "failed": true}')
|
print('{"msg": "Error: Module unable to decode valid JSON on stdin. Unable to figure out what parameters were passed", "failed": true}')
|
||||||
|
@ -1451,31 +1455,6 @@ class AnsibleModule(object):
|
||||||
print('{"msg": "Error: Module unable to locate ANSIBLE_MODULE_ARGS and ANSIBLE_MODULE_CONSTANTS in json data from stdin. Unable to figure out what parameters were passed", "failed": true}')
|
print('{"msg": "Error: Module unable to locate ANSIBLE_MODULE_ARGS and ANSIBLE_MODULE_CONSTANTS in json data from stdin. Unable to figure out what parameters were passed", "failed": true}')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# import select
|
|
||||||
# buffer = ''
|
|
||||||
# while True:
|
|
||||||
# input_list = select.select([sys.stdin], [], [], 5.0)[0]
|
|
||||||
# if sys.stdin not in input_list:
|
|
||||||
# # This helper used too early for fail_json to work.
|
|
||||||
# print('{"msg": "Error: Module unable to read arguments from stdin. Unable to figure out what parameters were passed", "failed": true}')
|
|
||||||
# sys.exit(1)
|
|
||||||
# buffer += sys.stdin.read()
|
|
||||||
# if json.loads(buffer):
|
|
||||||
#
|
|
||||||
# for line in sys.stdin:
|
|
||||||
# if line is None:
|
|
||||||
# print('s')
|
|
||||||
# data = sys.stdin.read()
|
|
||||||
# if MODULE_COMPLEX_ARGS is None:
|
|
||||||
# # This helper used too early for fail_json to work.
|
|
||||||
# print('{"msg": "Error: ANSIBLE_MODULE_ARGS not found in environment. Unable to figure out what parameters were passed", "failed": true}')
|
|
||||||
# sys.exit(1)
|
|
||||||
#
|
|
||||||
# params = json_dict_unicode_to_bytes(json.loads(data))
|
|
||||||
# if params is None:
|
|
||||||
# params = dict()
|
|
||||||
# self.params = params
|
|
||||||
|
|
||||||
def _log_to_syslog(self, msg):
|
def _log_to_syslog(self, msg):
|
||||||
if HAS_SYSLOG:
|
if HAS_SYSLOG:
|
||||||
module = 'ansible-%s' % os.path.basename(__file__)
|
module = 'ansible-%s' % os.path.basename(__file__)
|
||||||
|
|
|
@ -22,18 +22,38 @@ __metaclass__ = type
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import json
|
import json
|
||||||
|
from io import BytesIO, StringIO
|
||||||
|
|
||||||
|
from ansible.compat.six import PY3
|
||||||
|
from ansible.utils.unicode import to_bytes
|
||||||
|
|
||||||
from ansible.compat.tests import unittest
|
from ansible.compat.tests import unittest
|
||||||
from ansible.compat.tests.mock import MagicMock
|
from ansible.compat.tests.mock import MagicMock
|
||||||
|
|
||||||
class TestModuleUtilsBasic(unittest.TestCase):
|
class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.real_stdin = sys.stdin
|
||||||
|
args = json.dumps(
|
||||||
|
dict(
|
||||||
|
ANSIBLE_MODULE_ARGS=dict(
|
||||||
|
foo=False, bar=[1,2,3], bam="bam", baz=u'baz'),
|
||||||
|
ANSIBLE_MODULE_CONSTANTS=dict()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
sys.stdin = self.real_stdin
|
||||||
|
|
||||||
@unittest.skipIf(sys.version_info[0] >= 3, "Python 3 is not supported on targets (yet)")
|
@unittest.skipIf(sys.version_info[0] >= 3, "Python 3 is not supported on targets (yet)")
|
||||||
def test_module_utils_basic__log_invocation(self):
|
def test_module_utils_basic__log_invocation(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
# test basic log invocation
|
# test basic log invocation
|
||||||
basic.MODULE_COMPLEX_ARGS = json.dumps(dict(foo=False, bar=[1,2,3], bam="bam", baz=u'baz'))
|
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec=dict(
|
argument_spec=dict(
|
||||||
foo = dict(default=True, type='bool'),
|
foo = dict(default=True, type='bool'),
|
||||||
|
|
|
@ -23,8 +23,10 @@ __metaclass__ = type
|
||||||
import copy
|
import copy
|
||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
from io import BytesIO
|
from io import BytesIO, StringIO
|
||||||
|
|
||||||
|
from ansible.compat.six import PY3
|
||||||
|
from ansible.utils.unicode import to_bytes
|
||||||
from ansible.compat.tests import unittest
|
from ansible.compat.tests import unittest
|
||||||
|
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
@ -37,9 +39,13 @@ empty_invocation = {u'module_args': {}}
|
||||||
class TestAnsibleModuleExitJson(unittest.TestCase):
|
class TestAnsibleModuleExitJson(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.COMPLEX_ARGS = basic.MODULE_COMPLEX_ARGS
|
self.old_stdin = sys.stdin
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
self.old_stdout = sys.stdout
|
self.old_stdout = sys.stdout
|
||||||
self.fake_stream = BytesIO()
|
self.fake_stream = BytesIO()
|
||||||
|
@ -48,8 +54,8 @@ class TestAnsibleModuleExitJson(unittest.TestCase):
|
||||||
self.module = basic.AnsibleModule(argument_spec=dict())
|
self.module = basic.AnsibleModule(argument_spec=dict())
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
basic.MODULE_COMPLEX_ARGS = self.COMPLEX_ARGS
|
|
||||||
sys.stdout = self.old_stdout
|
sys.stdout = self.old_stdout
|
||||||
|
sys.stdin = self.old_stdin
|
||||||
|
|
||||||
def test_exit_json_no_args_exits(self):
|
def test_exit_json_no_args_exits(self):
|
||||||
with self.assertRaises(SystemExit) as ctx:
|
with self.assertRaises(SystemExit) as ctx:
|
||||||
|
@ -118,19 +124,31 @@ class TestAnsibleModuleExitValuesRemoved(unittest.TestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.COMPLEX_ARGS = basic.MODULE_COMPLEX_ARGS
|
self.old_stdin = sys.stdin
|
||||||
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
self.old_stdout = sys.stdout
|
self.old_stdout = sys.stdout
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
basic.MODULE_COMPLEX_ARGS = self.COMPLEX_ARGS
|
sys.stdin = self.old_stdin
|
||||||
sys.stdout = self.old_stdout
|
sys.stdout = self.old_stdout
|
||||||
|
|
||||||
def test_exit_json_removes_values(self):
|
def test_exit_json_removes_values(self):
|
||||||
self.maxDiff = None
|
self.maxDiff = None
|
||||||
for args, return_val, expected in self.dataset:
|
for args, return_val, expected in self.dataset:
|
||||||
sys.stdout = BytesIO()
|
sys.stdout = BytesIO()
|
||||||
basic.MODULE_COMPLEX_ARGS = json.dumps(args)
|
params = dict(ANSIBLE_MODULE_ARGS=args, ANSIBLE_MODULE_CONSTANTS={})
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
params = json.dumps(params)
|
||||||
|
if PY3:
|
||||||
|
sys.stdin = StringIO(params)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(params))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(params))
|
||||||
module = basic.AnsibleModule(
|
module = basic.AnsibleModule(
|
||||||
argument_spec = dict(
|
argument_spec = dict(
|
||||||
username=dict(),
|
username=dict(),
|
||||||
|
@ -149,8 +167,13 @@ class TestAnsibleModuleExitValuesRemoved(unittest.TestCase):
|
||||||
del expected['changed']
|
del expected['changed']
|
||||||
expected['failed'] = True
|
expected['failed'] = True
|
||||||
sys.stdout = BytesIO()
|
sys.stdout = BytesIO()
|
||||||
basic.MODULE_COMPLEX_ARGS = json.dumps(args)
|
params = dict(ANSIBLE_MODULE_ARGS=args, ANSIBLE_MODULE_CONSTANTS={})
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
params = json.dumps(params)
|
||||||
|
if PY3:
|
||||||
|
sys.stdin = StringIO(params)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(params))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(params))
|
||||||
module = basic.AnsibleModule(
|
module = basic.AnsibleModule(
|
||||||
argument_spec = dict(
|
argument_spec = dict(
|
||||||
username=dict(),
|
username=dict(),
|
||||||
|
|
|
@ -21,7 +21,12 @@ from __future__ import (absolute_import, division)
|
||||||
__metaclass__ = type
|
__metaclass__ = type
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
import json
|
||||||
import syslog
|
import syslog
|
||||||
|
from io import BytesIO, StringIO
|
||||||
|
|
||||||
|
from ansible.compat.six import PY3
|
||||||
|
from ansible.utils.unicode import to_bytes
|
||||||
|
|
||||||
from ansible.compat.tests import unittest
|
from ansible.compat.tests import unittest
|
||||||
from ansible.compat.tests.mock import patch, MagicMock
|
from ansible.compat.tests.mock import patch, MagicMock
|
||||||
|
@ -41,10 +46,14 @@ except ImportError:
|
||||||
class TestAnsibleModuleSysLogSmokeTest(unittest.TestCase):
|
class TestAnsibleModuleSysLogSmokeTest(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.complex_args_token = basic.MODULE_COMPLEX_ARGS
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
self.constants_sentinel = basic.MODULE_CONSTANTS
|
self.real_stdin = sys.stdin
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
if PY3:
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
self.am = basic.AnsibleModule(
|
self.am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -55,8 +64,7 @@ class TestAnsibleModuleSysLogSmokeTest(unittest.TestCase):
|
||||||
basic.has_journal = False
|
basic.has_journal = False
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
basic.MODULE_COMPLEX_ARGS = self.complex_args_token
|
sys.stdin = self.real_stdin
|
||||||
basic.MODULE_CONSTANTS = self.constants_sentinel
|
|
||||||
basic.has_journal = self.has_journal
|
basic.has_journal = self.has_journal
|
||||||
|
|
||||||
def test_smoketest_syslog(self):
|
def test_smoketest_syslog(self):
|
||||||
|
@ -75,17 +83,21 @@ class TestAnsibleModuleSysLogSmokeTest(unittest.TestCase):
|
||||||
class TestAnsibleModuleJournaldSmokeTest(unittest.TestCase):
|
class TestAnsibleModuleJournaldSmokeTest(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.complex_args_token = basic.MODULE_COMPLEX_ARGS
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
self.constants_sentinel = basic.MODULE_CONSTANTS
|
self.real_stdin = sys.stdin
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
if PY3:
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
|
|
||||||
self.am = basic.AnsibleModule(
|
self.am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
basic.MODULE_COMPLEX_ARGS = self.complex_args_token
|
sys.stdin = self.real_stdin
|
||||||
basic.MODULE_CONSTANTS = self.constants_sentinel
|
|
||||||
|
|
||||||
@unittest.skipUnless(basic.has_journal, 'python systemd bindings not installed')
|
@unittest.skipUnless(basic.has_journal, 'python systemd bindings not installed')
|
||||||
def test_smoketest_journal(self):
|
def test_smoketest_journal(self):
|
||||||
|
@ -121,10 +133,15 @@ class TestAnsibleModuleLogSyslog(unittest.TestCase):
|
||||||
}
|
}
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.complex_args_token = basic.MODULE_COMPLEX_ARGS
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
self.constants_sentinel = basic.MODULE_CONSTANTS
|
self.real_stdin = sys.stdin
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
if PY3:
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
|
|
||||||
self.am = basic.AnsibleModule(
|
self.am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -134,8 +151,7 @@ class TestAnsibleModuleLogSyslog(unittest.TestCase):
|
||||||
basic.has_journal = False
|
basic.has_journal = False
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
basic.MODULE_COMPLEX_ARGS = self.complex_args_token
|
sys.stdin = self.real_stdin
|
||||||
basic.MODULE_CONSTANTS = self.constants_sentinel
|
|
||||||
basic.has_journal = self.has_journal
|
basic.has_journal = self.has_journal
|
||||||
|
|
||||||
@patch('syslog.syslog', autospec=True)
|
@patch('syslog.syslog', autospec=True)
|
||||||
|
@ -176,10 +192,14 @@ class TestAnsibleModuleLogJournal(unittest.TestCase):
|
||||||
}
|
}
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.complex_args_token = basic.MODULE_COMPLEX_ARGS
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
self.constants_sentinel = basic.MODULE_CONSTANTS
|
self.real_stdin = sys.stdin
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
if PY3:
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
self.am = basic.AnsibleModule(
|
self.am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -198,8 +218,8 @@ class TestAnsibleModuleLogJournal(unittest.TestCase):
|
||||||
self._fake_out_reload(basic)
|
self._fake_out_reload(basic)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
basic.MODULE_COMPLEX_ARGS = self.complex_args_token
|
sys.stdin = self.real_stdin
|
||||||
basic.MODULE_CONSTANTS = self.constants_sentinel
|
|
||||||
basic.has_journal = self.has_journal
|
basic.has_journal = self.has_journal
|
||||||
if self.module_patcher:
|
if self.module_patcher:
|
||||||
self.module_patcher.stop()
|
self.module_patcher.stop()
|
||||||
|
|
|
@ -20,9 +20,13 @@ from __future__ import (absolute_import, division)
|
||||||
__metaclass__ = type
|
__metaclass__ = type
|
||||||
|
|
||||||
import errno
|
import errno
|
||||||
|
import json
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
from io import BytesIO
|
from io import BytesIO, StringIO
|
||||||
|
|
||||||
|
from ansible.compat.six import PY3
|
||||||
|
from ansible.utils.unicode import to_bytes
|
||||||
|
|
||||||
from ansible.compat.tests import unittest
|
from ansible.compat.tests import unittest
|
||||||
from ansible.compat.tests.mock import call, MagicMock, Mock, patch, sentinel
|
from ansible.compat.tests.mock import call, MagicMock, Mock, patch, sentinel
|
||||||
|
@ -61,8 +65,12 @@ class TestAnsibleModuleRunCommand(unittest.TestCase):
|
||||||
if path == '/inaccessible':
|
if path == '/inaccessible':
|
||||||
raise OSError(errno.EPERM, "Permission denied: '/inaccessible'")
|
raise OSError(errno.EPERM, "Permission denied: '/inaccessible'")
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
self.module = AnsibleModule(argument_spec=dict())
|
self.module = AnsibleModule(argument_spec=dict())
|
||||||
self.module.fail_json = MagicMock(side_effect=SystemExit)
|
self.module.fail_json = MagicMock(side_effect=SystemExit)
|
||||||
|
|
||||||
|
|
|
@ -20,16 +20,32 @@
|
||||||
from __future__ import (absolute_import, division)
|
from __future__ import (absolute_import, division)
|
||||||
__metaclass__ = type
|
__metaclass__ = type
|
||||||
|
|
||||||
from ansible.compat.tests import unittest
|
import sys
|
||||||
|
import json
|
||||||
|
from io import BytesIO, StringIO
|
||||||
|
|
||||||
|
from ansible.compat.tests import unittest
|
||||||
|
from ansible.compat.six import PY3
|
||||||
|
from ansible.utils.unicode import to_bytes
|
||||||
|
|
||||||
class TestAnsibleModuleExitJson(unittest.TestCase):
|
class TestAnsibleModuleExitJson(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.real_stdin = sys.stdin
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
sys.stdin = self.real_stdin
|
||||||
|
|
||||||
def test_module_utils_basic_safe_eval(self):
|
def test_module_utils_basic_safe_eval(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec=dict(),
|
argument_spec=dict(),
|
||||||
)
|
)
|
||||||
|
|
|
@ -21,14 +21,19 @@ from __future__ import (absolute_import, division)
|
||||||
__metaclass__ = type
|
__metaclass__ = type
|
||||||
|
|
||||||
import errno
|
import errno
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
from io import BytesIO, StringIO
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import builtins
|
import builtins
|
||||||
except ImportError:
|
except ImportError:
|
||||||
import __builtin__ as builtins
|
import __builtin__ as builtins
|
||||||
|
|
||||||
|
from ansible.compat.six import PY3
|
||||||
|
from ansible.utils.unicode import to_bytes
|
||||||
|
|
||||||
from ansible.compat.tests import unittest
|
from ansible.compat.tests import unittest
|
||||||
from ansible.compat.tests.mock import patch, MagicMock, mock_open, Mock, call
|
from ansible.compat.tests.mock import patch, MagicMock, mock_open, Mock, call
|
||||||
|
|
||||||
|
@ -37,10 +42,10 @@ realimport = builtins.__import__
|
||||||
class TestModuleUtilsBasic(unittest.TestCase):
|
class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
pass
|
self.real_stdin = sys.stdin
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
pass
|
sys.stdin = self.real_stdin
|
||||||
|
|
||||||
def clear_modules(self, mods):
|
def clear_modules(self, mods):
|
||||||
for mod in mods:
|
for mod in mods:
|
||||||
|
@ -266,8 +271,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_creation(self):
|
def test_module_utils_basic_ansible_module_creation(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec=dict(),
|
argument_spec=dict(),
|
||||||
)
|
)
|
||||||
|
@ -282,8 +292,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
req_to = (('bam', 'baz'),)
|
req_to = (('bam', 'baz'),)
|
||||||
|
|
||||||
# should test ok
|
# should test ok
|
||||||
basic.MODULE_COMPLEX_ARGS = '{"foo":"hello"}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={"foo": "hello"}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = arg_spec,
|
argument_spec = arg_spec,
|
||||||
mutually_exclusive = mut_ex,
|
mutually_exclusive = mut_ex,
|
||||||
|
@ -297,8 +312,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
# FIXME: add asserts here to verify the basic config
|
# FIXME: add asserts here to verify the basic config
|
||||||
|
|
||||||
# fail, because a required param was not specified
|
# fail, because a required param was not specified
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
SystemExit,
|
SystemExit,
|
||||||
basic.AnsibleModule,
|
basic.AnsibleModule,
|
||||||
|
@ -312,8 +332,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
# fail because of mutually exclusive parameters
|
# fail because of mutually exclusive parameters
|
||||||
basic.MODULE_COMPLEX_ARGS = '{"foo":"hello", "bar": "bad", "bam": "bad"}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={"foo":"hello", "bar": "bad", "bam": "bad"}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
SystemExit,
|
SystemExit,
|
||||||
basic.AnsibleModule,
|
basic.AnsibleModule,
|
||||||
|
@ -327,8 +352,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
# fail because a param required due to another param was not specified
|
# fail because a param required due to another param was not specified
|
||||||
basic.MODULE_COMPLEX_ARGS = '{"bam":"bad"}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={"bam": "bad"}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
SystemExit,
|
SystemExit,
|
||||||
basic.AnsibleModule,
|
basic.AnsibleModule,
|
||||||
|
@ -344,8 +374,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_load_file_common_arguments(self):
|
def test_module_utils_basic_ansible_module_load_file_common_arguments(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -394,8 +429,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_selinux_mls_enabled(self):
|
def test_module_utils_basic_ansible_module_selinux_mls_enabled(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -415,8 +455,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_selinux_initial_context(self):
|
def test_module_utils_basic_ansible_module_selinux_initial_context(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -430,8 +475,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_selinux_enabled(self):
|
def test_module_utils_basic_ansible_module_selinux_enabled(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -463,8 +513,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_selinux_default_context(self):
|
def test_module_utils_basic_ansible_module_selinux_default_context(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -500,8 +555,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_selinux_context(self):
|
def test_module_utils_basic_ansible_module_selinux_context(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -543,8 +603,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_is_special_selinux_path(self):
|
def test_module_utils_basic_ansible_module_is_special_selinux_path(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={"SELINUX_SPECIAL_FS": "nfs,nfsd,foos"}))
|
||||||
basic.MODULE_CONSTANTS = '{"SELINUX_SPECIAL_FS": "nfs,nfsd,foos"}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -585,8 +650,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_to_filesystem_str(self):
|
def test_module_utils_basic_ansible_module_to_filesystem_str(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -597,8 +667,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_user_and_group(self):
|
def test_module_utils_basic_ansible_module_user_and_group(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -613,8 +688,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_find_mount_point(self):
|
def test_module_utils_basic_ansible_module_find_mount_point(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -638,8 +718,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_set_context_if_different(self):
|
def test_module_utils_basic_ansible_module_set_context_if_different(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -684,8 +769,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_set_owner_if_different(self):
|
def test_module_utils_basic_ansible_module_set_owner_if_different(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -724,7 +814,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_set_group_if_different(self):
|
def test_module_utils_basic_ansible_module_set_group_if_different(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -763,8 +859,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
def test_module_utils_basic_ansible_module_set_mode_if_different(self):
|
def test_module_utils_basic_ansible_module_set_mode_if_different(self):
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -852,8 +953,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
|
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
@ -1031,8 +1137,13 @@ class TestModuleUtilsBasic(unittest.TestCase):
|
||||||
|
|
||||||
from ansible.module_utils import basic
|
from ansible.module_utils import basic
|
||||||
|
|
||||||
basic.MODULE_COMPLEX_ARGS = '{}'
|
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||||
basic.MODULE_CONSTANTS = '{}'
|
if PY3:
|
||||||
|
sys.stdin = StringIO(args)
|
||||||
|
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||||
|
else:
|
||||||
|
sys.stdin = BytesIO(to_bytes(args))
|
||||||
|
|
||||||
am = basic.AnsibleModule(
|
am = basic.AnsibleModule(
|
||||||
argument_spec = dict(),
|
argument_spec = dict(),
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue