eace686044
Primarily, this patch contains refactors to remove tracebacks that are generated when libraries are missing. There is also, * Removed re-def of cleanup_tokens. * Changed parameter args to be keywords. * Changed imports to include new module_util locations. * Imports also include developing (sideband) module_util locations. * Changed to using F5Client and plain AnsibleModule to prevent tracebacks caused by missing libraries. * Removed init and update methods from most Parameter classes (optimization) as its now included in module_utils. * Changed module and module param references to take into account the new self.module arg. Minor bug fixes made during this refactor.
104 lines
3.2 KiB
Python
104 lines
3.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
# Copyright (c) 2017 F5 Networks Inc.
|
|
# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
|
|
from __future__ import (absolute_import, division, print_function)
|
|
__metaclass__ = type
|
|
|
|
import os
|
|
import json
|
|
import sys
|
|
|
|
from nose.plugins.skip import SkipTest
|
|
if sys.version_info < (2, 7):
|
|
raise SkipTest("F5 Ansible modules require Python >= 2.7")
|
|
|
|
from ansible.compat.tests import unittest
|
|
from ansible.compat.tests.mock import Mock
|
|
from ansible.compat.tests.mock import patch
|
|
from ansible.module_utils.basic import AnsibleModule
|
|
|
|
try:
|
|
from library.bigip_hostname import Parameters
|
|
from library.bigip_hostname import ModuleManager
|
|
from library.bigip_hostname import ArgumentSpec
|
|
from library.module_utils.network.f5.common import F5ModuleError
|
|
from library.module_utils.network.f5.common import iControlUnexpectedHTTPError
|
|
from test.unit.modules.utils import set_module_args
|
|
except ImportError:
|
|
try:
|
|
from ansible.modules.network.f5.bigip_hostname import Parameters
|
|
from ansible.modules.network.f5.bigip_hostname import ModuleManager
|
|
from ansible.modules.network.f5.bigip_hostname import ArgumentSpec
|
|
from ansible.module_utils.network.f5.common import F5ModuleError
|
|
from ansible.module_utils.network.f5.common import iControlUnexpectedHTTPError
|
|
from units.modules.utils import set_module_args
|
|
except ImportError:
|
|
raise SkipTest("F5 Ansible modules require the f5-sdk Python library")
|
|
|
|
fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures')
|
|
fixture_data = {}
|
|
|
|
|
|
def load_fixture(name):
|
|
path = os.path.join(fixture_path, name)
|
|
|
|
if path in fixture_data:
|
|
return fixture_data[path]
|
|
|
|
with open(path) as f:
|
|
data = f.read()
|
|
|
|
try:
|
|
data = json.loads(data)
|
|
except Exception:
|
|
pass
|
|
|
|
fixture_data[path] = data
|
|
return data
|
|
|
|
|
|
class TestParameters(unittest.TestCase):
|
|
def test_module_parameters(self):
|
|
args = dict(
|
|
hostname='foo.internal.com'
|
|
)
|
|
p = Parameters(params=args)
|
|
assert p.hostname == 'foo.internal.com'
|
|
|
|
|
|
class TestManager(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.spec = ArgumentSpec()
|
|
|
|
def test_update_hostname(self, *args):
|
|
set_module_args(dict(
|
|
hostname='foo2.internal.com',
|
|
password='passsword',
|
|
server='localhost',
|
|
user='admin'
|
|
))
|
|
|
|
# Configure the parameters that would be returned by querying the
|
|
# remote device
|
|
current = Parameters(
|
|
dict(
|
|
hostname='foo.internal.com'
|
|
)
|
|
)
|
|
module = AnsibleModule(
|
|
argument_spec=self.spec.argument_spec,
|
|
supports_check_mode=self.spec.supports_check_mode
|
|
)
|
|
|
|
# Override methods to force specific logic in the module to happen
|
|
mm = ModuleManager(module=module)
|
|
mm.update_on_device = Mock(return_value=True)
|
|
mm.read_current_from_device = Mock(return_value=current)
|
|
|
|
results = mm.exec_module()
|
|
|
|
assert results['changed'] is True
|
|
assert results['hostname'] == 'foo2.internal.com'
|