diff --git a/lib/ansible/modules/network/fortimanager/fmgr_device_config.py b/lib/ansible/modules/network/fortimanager/fmgr_device_config.py index 16f497b0a8a..5466d700641 100644 --- a/lib/ansible/modules/network/fortimanager/fmgr_device_config.py +++ b/lib/ansible/modules/network/fortimanager/fmgr_device_config.py @@ -29,6 +29,8 @@ DOCUMENTATION = ''' --- module: fmgr_device_config version_added: "2.8" +notes: + - Full Documentation at U(https://ftnt-ansible-docs.readthedocs.io/en/latest/). author: - Luke Weighall (@lweighall) - Andrew Welsh (@Ghilli3) @@ -43,23 +45,12 @@ options: - The ADOM the configuration should belong to. required: false default: root - host: - description: - - The FortiManager's address. - required: true - username: - description: - - The username used to authenticate with the FortiManager. - required: false - password: - description: - - The password associated with the username account. - required: false device_unique_name: description: - The unique device's name that you are editing. A.K.A. Friendly name of the device in FortiManager. required: True + device_hostname: description: - The device's new hostname. @@ -70,35 +61,31 @@ options: - Tells FMGR to attempt to install the config after making it. required: false default: disable + interface: description: - The interface/port number you are editing. required: false + interface_ip: description: - The IP and subnet of the interface/port you are editing. required: false + interface_allow_access: description: - - Specify what protocols are allowed on the interface, comma-sepeareted list (see examples). + - Specify what protocols are allowed on the interface, comma-separated list (see examples). required: false - ''' EXAMPLES = ''' - name: CHANGE HOSTNAME fmgr_device_config: - host: "{{inventory_hostname}}" - username: "{{ username }}" - password: "{{ password }}" device_hostname: "ChangedbyAnsible" device_unique_name: "FGT1" - name: EDIT INTERFACE INFORMATION fmgr_device_config: - host: "{{inventory_hostname}}" - username: "{{ username }}" - password: "{{ password }}" adom: "root" device_unique_name: "FGT2" interface: "port3" @@ -107,9 +94,6 @@ EXAMPLES = ''' - name: INSTALL CONFIG fmgr_device_config: - host: "{{inventory_hostname}}" - username: "{{ username }}" - password: "{{ password }}" adom: "root" device_unique_name: "FGT1" install_config: "enable" @@ -122,33 +106,42 @@ api_result: type: str """ -from ansible.module_utils.basic import AnsibleModule, env_fallback -from ansible.module_utils.network.fortimanager.fortimanager import AnsibleFortiManager - -# check for pyFMG lib -try: - from pyFMG.fortimgr import FortiManager - HAS_PYFMGR = True -except ImportError: - HAS_PYFMGR = False +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.connection import Connection +from ansible.module_utils.network.fortimanager.fortimanager import FortiManagerHandler +from ansible.module_utils.network.fortimanager.common import FMGBaseException +from ansible.module_utils.network.fortimanager.common import FMGRCommon +from ansible.module_utils.network.fortimanager.common import DEFAULT_RESULT_OBJ +from ansible.module_utils.network.fortimanager.common import FAIL_SOCKET_MSG +from ansible.module_utils.network.fortimanager.common import FMGRMethods -def update_device_hostname(fmg, paramgram): +def update_device_hostname(fmgr, paramgram): """ - Change a device's hostname + :param fmgr: The fmgr object instance from fortimanager.py + :type fmgr: class object + :param paramgram: The formatted dictionary of options to process + :type paramgram: dict + :return: The response from the FortiManager + :rtype: dict """ datagram = { "hostname": paramgram["device_hostname"] } url = "pm/config/device/{device_name}/global/system/global".format(device_name=paramgram["device_unique_name"]) - response = fmg.update(url, datagram) + response = fmgr.process_request(url, datagram, FMGRMethods.UPDATE) return response -def update_device_interface(fmg, paramgram): +def update_device_interface(fmgr, paramgram): """ - Update a device interface IP and allow access + :param fmgr: The fmgr object instance from fortimanager.py + :type fmgr: class object + :param paramgram: The formatted dictionary of options to process + :type paramgram: dict + :return: The response from the FortiManager + :rtype: dict """ access_list = list() allow_access_list = paramgram["interface_allow_access"].replace(' ', '') @@ -161,13 +154,18 @@ def update_device_interface(fmg, paramgram): url = "/pm/config/device/{device_name}/global/system/interface" \ "/{interface}".format(device_name=paramgram["device_unique_name"], interface=paramgram["interface"]) - response = fmg.update(url, datagram) + response = fmgr.process_request(url, datagram, FMGRMethods.UPDATE) return response -def exec_config(fmg, paramgram): +def exec_config(fmgr, paramgram): """ - Update a device interface IP and allow access + :param fmgr: The fmgr object instance from fortimanager.py + :type fmgr: class object + :param paramgram: The formatted dictionary of options to process + :type paramgram: dict + :return: The response from the FortiManager + :rtype: dict """ datagram = { "scope": { @@ -178,55 +176,13 @@ def exec_config(fmg, paramgram): } url = "/securityconsole/install/device" - response = fmg.execute(url, datagram) + response = fmgr.process_request(url, datagram, FMGRMethods.EXEC) return response -# FUNCTION/METHOD FOR LOGGING OUT AND ANALYZING ERROR CODES -def fmgr_logout(fmg, module, msg="NULL", results=(), good_codes=(0,), logout_on_fail=True, logout_on_success=False): - """ - THIS METHOD CONTROLS THE LOGOUT AND ERROR REPORTING AFTER AN METHOD OR FUNCTION RUNS - """ - - # VALIDATION ERROR (NO RESULTS, JUST AN EXIT) - if msg != "NULL" and len(results) == 0: - try: - fmg.logout() - except Exception: - pass - module.fail_json(msg=msg) - - # SUBMISSION ERROR - if len(results) > 0: - if msg == "NULL": - try: - msg = results[1]['status']['message'] - except Exception: - msg = "No status message returned from pyFMG. Possible that this was a GET with a tuple result." - - if results[0] not in good_codes: - if logout_on_fail: - fmg.logout() - module.fail_json(msg=msg, **results[1]) - else: - return_msg = msg + " -- LOGOUT ON FAIL IS OFF, MOVING ON" - return return_msg - else: - if logout_on_success: - fmg.logout() - module.exit_json(msg=msg, **results[1]) - else: - return_msg = msg + " -- LOGOUT ON SUCCESS IS OFF, MOVING ON TO REST OF CODE" - return return_msg - - def main(): argument_spec = dict( - host=dict(required=True, type="str"), adom=dict(required=False, type="str", default="root"), - password=dict(fallback=(env_fallback, ["ANSIBLE_NET_PASSWORD"]), no_log=True), - username=dict(fallback=(env_fallback, ["ANSIBLE_NET_USERNAME"])), - device_unique_name=dict(required=True, type="str"), device_hostname=dict(required=False, type="str"), interface=dict(required=False, type="str"), @@ -235,9 +191,7 @@ def main(): install_config=dict(required=False, type="str", default="disable"), ) - module = AnsibleModule(argument_spec, supports_check_mode=True,) - - # handle params passed via provider and insure they are represented as the data type expected by fortimanager + module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=False, ) paramgram = { "device_unique_name": module.params["device_unique_name"], "device_hostname": module.params["device_hostname"], @@ -247,40 +201,36 @@ def main(): "install_config": module.params["install_config"], "adom": module.params["adom"] } - - # check if params are set - if module.params["host"] is None or module.params["username"] is None or module.params["password"] is None: - module.fail_json(msg="Host and username are required for connection") - - # CHECK IF LOGIN FAILED - fmg = AnsibleFortiManager(module, module.params["host"], module.params["username"], module.params["password"]) - response = fmg.login() - if response[1]['status']['code'] != 0: - module.fail_json(msg="Connection to FortiManager Failed") + module.paramgram = paramgram + fmgr = None + if module._socket_path: + connection = Connection(module._socket_path) + fmgr = FortiManagerHandler(connection, module) + fmgr.tools = FMGRCommon() else: + module.fail_json(**FAIL_SOCKET_MSG) - # START SESSION LOGIC - - # if the device_hostname isn't null, then attempt the api call via method call, store results in variable + # BEGIN MODULE-SPECIFIC LOGIC -- THINGS NEED TO HAPPEN DEPENDING ON THE ENDPOINT AND OPERATION + results = DEFAULT_RESULT_OBJ + try: if paramgram["device_hostname"] is not None: - # add device - results = update_device_hostname(fmg, paramgram) - if results[0] != 0: - fmgr_logout(fmg, module, msg="Failed to set Hostname", results=results, good_codes=[0]) + results = update_device_hostname(fmgr, paramgram) + fmgr.govern_response(module=module, results=results, + ansible_facts=fmgr.construct_ansible_facts(results, module.params, paramgram)) if paramgram["interface_ip"] is not None or paramgram["interface_allow_access"] is not None: - results = update_device_interface(fmg, paramgram) - if results[0] != 0: - fmgr_logout(fmg, module, msg="Failed to Update Device Interface", results=results, good_codes=[0]) + results = update_device_interface(fmgr, paramgram) + fmgr.govern_response(module=module, results=results, + ansible_facts=fmgr.construct_ansible_facts(results, module.params, paramgram)) if paramgram["install_config"] == "enable": - # attempt to install the config - results = exec_config(fmg, paramgram) - if results[0] != 0: - fmgr_logout(fmg, module, msg="Failed to Update Device Interface", results=results, good_codes=[0]) + results = exec_config(fmgr, paramgram) + fmgr.govern_response(module=module, results=results, + ansible_facts=fmgr.construct_ansible_facts(results, module.params, paramgram)) + + except Exception as err: + raise FMGBaseException(err) - # logout, build in check for future logging capabilities - fmg.logout() return module.exit_json(**results[1]) diff --git a/test/units/modules/network/fortimanager/fixtures/test_fmgr_device_config.json b/test/units/modules/network/fortimanager/fixtures/test_fmgr_device_config.json index 1ab30314d0c..c4a68ecd054 100644 --- a/test/units/modules/network/fortimanager/fixtures/test_fmgr_device_config.json +++ b/test/units/modules/network/fortimanager/fixtures/test_fmgr_device_config.json @@ -1,173 +1,204 @@ { - "update_device_interface": [ - { - "raw_response": { - "status": { - "message": "OK", - "code": 0 - }, - "url": "/pm/config/device/FGT1/global/system/interface/port2" - }, - "paramgram_used": { - "adom": "ansible", - "install_config": "disable", - "device_unique_name": "FGT1", - "interface": "port2", - "device_hostname": null, - "interface_ip": "10.1.1.1/24", - "interface_allow_access": "ping, telnet, https, http" - }, - "post_method": "update" - }, - { - "raw_response": { - "status": { - "message": "OK", - "code": 0 - }, - "url": "/pm/config/device/FGT2/global/system/interface/port2" - }, - "paramgram_used": { - "adom": "ansible", - "install_config": "disable", - "device_unique_name": "FGT2", - "interface": "port2", - "device_hostname": null, - "interface_ip": "10.1.2.1/24", - "interface_allow_access": "ping, telnet, https, http" - }, - "post_method": "update" - }, - { - "raw_response": { - "status": { - "message": "OK", - "code": 0 - }, - "url": "/pm/config/device/FGT3/global/system/interface/port2" - }, - "paramgram_used": { - "adom": "ansible", - "install_config": "disable", - "device_unique_name": "FGT3", - "interface": "port2", - "device_hostname": null, - "interface_ip": "10.1.3.1/24", - "interface_allow_access": "ping, telnet, https, http" - }, - "post_method": "update" - } - ], - "update_device_hostname": [ - { - "raw_response": { - "status": { - "message": "OK", - "code": 0 - }, - "url": "pm/config/device/FGT1/global/system/global" - }, - "paramgram_used": { - "adom": "ansible", - "install_config": "disable", - "device_unique_name": "FGT1", - "interface": null, - "device_hostname": "ansible-fgt01", - "interface_ip": null, - "interface_allow_access": null - }, - "post_method": "update" - }, - { - "paramgram_used": { - "adom": "ansible", - "interface": null, - "device_unique_name": "FGT1", - "install_config": "disable", - "device_hostname": "ansible-fgt01", - "interface_ip": null, - "interface_allow_access": null - }, - "raw_response": { - "status": { - "message": "OK", - "code": 0 - }, - "url": "pm/config/device/FGT1/global/system/global" - }, - "post_method": "update" - }, - { - "paramgram_used": { - "adom": "ansible", - "interface": null, - "device_unique_name": "FGT2", - "install_config": "disable", - "device_hostname": "ansible-fgt02", - "interface_ip": null, - "interface_allow_access": null - }, - "raw_response": { - "status": { - "message": "OK", - "code": 0 - }, - "url": "pm/config/device/FGT2/global/system/global" - }, - "post_method": "update" - }, - { - "paramgram_used": { - "adom": "ansible", - "interface": null, - "device_unique_name": "FGT3", - "install_config": "disable", - "device_hostname": "ansible-fgt03", - "interface_ip": null, - "interface_allow_access": null - }, - "raw_response": { - "status": { - "message": "OK", - "code": 0 - }, - "url": "pm/config/device/FGT3/global/system/global" - }, - "post_method": "update" - } - ], - "exec_config": [ - { - "url": "/securityconsole/install/device", - "paramgram_used": { - "adom": "ansible", - "interface": null, - "device_unique_name": "FGT1", - "install_config": "enable", - "device_hostname": null, - "interface_ip": null, - "interface_allow_access": null - }, - "raw_response": { - "task": 352 - }, - "post_method": "execute" - }, - { - "url": "/securityconsole/install/device", - "raw_response": { - "task": 353 - }, - "paramgram_used": { - "adom": "ansible", - "install_config": "enable", - "device_unique_name": "FGT2, FGT3", - "interface": null, - "device_hostname": null, - "interface_ip": null, - "interface_allow_access": null - }, - "post_method": "execute" - } - ] + "update_device_interface": [ + { + "raw_response": { + "status": { + "message": "OK", + "code": 0 + }, + "url": "/pm/config/device/FGT1/global/system/interface/port2" + }, + "datagram_sent": { + "ip": "10.1.1.1/24", + "allowaccess": [ + "ping", + "telnet", + "https", + "http" + ] + }, + "paramgram_used": { + "adom": "ansible", + "install_config": "disable", + "device_unique_name": "FGT1", + "interface": "port2", + "device_hostname": null, + "interface_ip": "10.1.1.1/24", + "interface_allow_access": "ping, telnet, https, http" + }, + "post_method": "update" + }, + { + "raw_response": { + "status": { + "message": "OK", + "code": 0 + }, + "url": "/pm/config/device/FGT2/global/system/interface/port2" + }, + "datagram_sent": { + "ip": "10.1.2.1/24", + "allowaccess": [ + "ping", + "telnet", + "https", + "http" + ] + }, + "paramgram_used": { + "adom": "ansible", + "install_config": "disable", + "device_unique_name": "FGT2", + "interface": "port2", + "device_hostname": null, + "interface_ip": "10.1.2.1/24", + "interface_allow_access": "ping, telnet, https, http" + }, + "post_method": "update" + }, + { + "raw_response": { + "status": { + "message": "OK", + "code": 0 + }, + "url": "/pm/config/device/FGT3/global/system/interface/port2" + }, + "datagram_sent": { + "ip": "10.1.3.1/24", + "allowaccess": [ + "ping", + "telnet", + "https", + "http" + ] + }, + "paramgram_used": { + "adom": "ansible", + "install_config": "disable", + "device_unique_name": "FGT3", + "interface": "port2", + "device_hostname": null, + "interface_ip": "10.1.3.1/24", + "interface_allow_access": "ping, telnet, https, http" + }, + "post_method": "update" + } + ], + "update_device_hostname": [ + { + "paramgram_used": { + "adom": "ansible", + "interface": null, + "device_unique_name": "FGT1", + "install_config": "disable", + "device_hostname": "ansible-fgt01", + "interface_ip": null, + "interface_allow_access": null + }, + "datagram_sent": { + "hostname": "ansible-fgt01" + }, + "raw_response": { + "status": { + "message": "OK", + "code": 0 + }, + "url": "pm/config/device/FGT1/global/system/global" + }, + "post_method": "update" + }, + { + "paramgram_used": { + "adom": "ansible", + "interface": null, + "device_unique_name": "FGT2", + "install_config": "disable", + "device_hostname": "ansible-fgt02", + "interface_ip": null, + "interface_allow_access": null + }, + "datagram_sent": { + "hostname": "ansible-fgt02" + }, + "raw_response": { + "status": { + "message": "OK", + "code": 0 + }, + "url": "pm/config/device/FGT2/global/system/global" + }, + "post_method": "update" + }, + { + "paramgram_used": { + "adom": "ansible", + "interface": null, + "device_unique_name": "FGT3", + "install_config": "disable", + "device_hostname": "ansible-fgt03", + "interface_ip": null, + "interface_allow_access": null + }, + "datagram_sent": { + "hostname": "ansible-fgt03" + }, + "raw_response": { + "status": { + "message": "OK", + "code": 0 + }, + "url": "pm/config/device/FGT3/global/system/global" + }, + "post_method": "update" + } + ], + "exec_config": [ + { + "url": "/securityconsole/install/device", + "paramgram_used": { + "adom": "ansible", + "interface": null, + "device_unique_name": "FGT1", + "install_config": "enable", + "device_hostname": null, + "interface_ip": null, + "interface_allow_access": null + }, + "datagram_sent": { + "scope": { + "name": "FGT1" + }, + "flags": "none", + "adom": "ansible" + }, + "raw_response": { + "task": 243 + }, + "post_method": "exec" + }, + { + "url": "/securityconsole/install/device", + "raw_response": { + "task": 244 + }, + "datagram_sent": { + "scope": { + "name": "FGT2, FGT3" + }, + "flags": "none", + "adom": "ansible" + }, + "paramgram_used": { + "adom": "ansible", + "install_config": "enable", + "device_unique_name": "FGT2, FGT3", + "interface": null, + "device_hostname": null, + "interface_ip": null, + "interface_allow_access": null + }, + "post_method": "exec" + } + ] } diff --git a/test/units/modules/network/fortimanager/test_fmgr_device_config.py b/test/units/modules/network/fortimanager/test_fmgr_device_config.py index 4160ada37c5..ade2e1199fc 100644 --- a/test/units/modules/network/fortimanager/test_fmgr_device_config.py +++ b/test/units/modules/network/fortimanager/test_fmgr_device_config.py @@ -19,17 +19,13 @@ __metaclass__ = type import os import json -from pyFMG.fortimgr import FortiManager +from ansible.module_utils.network.fortimanager.fortimanager import FortiManagerHandler import pytest try: from ansible.modules.network.fortimanager import fmgr_device_config except ImportError: - pytest.skip( - "Could not load required modules for testing", - allow_module_level=True) - -fmg_instance = FortiManager("1.1.1.1", "admin", "") + pytest.skip("Could not load required modules for testing", allow_module_level=True) def load_fixtures(): @@ -43,51 +39,33 @@ def load_fixtures(): return [fixture_data] +@pytest.fixture(autouse=True) +def module_mock(mocker): + connection_class_mock = mocker.patch('ansible.module_utils.basic.AnsibleModule') + return connection_class_mock + + +@pytest.fixture(autouse=True) +def connection_mock(mocker): + connection_class_mock = mocker.patch('ansible.modules.network.fortimanager.fmgr_device_config.Connection') + return connection_class_mock + + @pytest.fixture(scope="function", params=load_fixtures()) def fixture_data(request): func_name = request.function.__name__.replace("test_", "") return request.param.get(func_name, None) +fmg_instance = FortiManagerHandler(connection_mock, module_mock) + + def test_update_device_hostname(fixture_data, mocker): - mocker.patch( - "pyFMG.fortimgr.FortiManager._post_request", - side_effect=fixture_data) + mocker.patch("ansible.module_utils.network.fortimanager.fortimanager.FortiManagerHandler.process_request", + side_effect=fixture_data) + # Fixture sets used:########################### - paramgram_used = { - 'adom': 'ansible', - 'install_config': 'disable', - 'device_unique_name': 'FGT1', - 'interface': None, - 'device_hostname': 'ansible-fgt01', - 'interface_ip': None, - 'interface_allow_access': None, - 'mode': 'update'} - output = fmgr_device_config.update_device_hostname( - fmg_instance, paramgram_used) - # - # adom: ansible - # install_config: disable - # device_unique_name: FGT1 - # interface: None - # device_hostname: ansible-fgt01 - # interface_ip: None - # interface_allow_access: None - # mode: update - # - assert output['raw_response']['status']['code'] == 0 - paramgram_used = { - 'adom': 'ansible', - 'interface': None, - 'device_unique_name': 'FGT1', - 'install_config': 'disable', - 'device_hostname': 'ansible-fgt01', - 'interface_ip': None, - 'interface_allow_access': None, - 'mode': 'update'} - output = fmgr_device_config.update_device_hostname( - fmg_instance, paramgram_used) - # + ################################################## # adom: ansible # interface: None # device_unique_name: FGT1 @@ -96,20 +74,8 @@ def test_update_device_hostname(fixture_data, mocker): # interface_ip: None # interface_allow_access: None # mode: update - # - assert output['raw_response']['status']['code'] == 0 - paramgram_used = { - 'adom': 'ansible', - 'interface': None, - 'device_unique_name': 'FGT2', - 'install_config': 'disable', - 'device_hostname': 'ansible-fgt02', - 'interface_ip': None, - 'interface_allow_access': None, - 'mode': 'update'} - output = fmgr_device_config.update_device_hostname( - fmg_instance, paramgram_used) - # + ################################################## + ################################################## # adom: ansible # interface: None # device_unique_name: FGT2 @@ -118,20 +84,8 @@ def test_update_device_hostname(fixture_data, mocker): # interface_ip: None # interface_allow_access: None # mode: update - # - assert output['raw_response']['status']['code'] == 0 - paramgram_used = { - 'adom': 'ansible', - 'interface': None, - 'device_unique_name': 'FGT3', - 'install_config': 'disable', - 'device_hostname': 'ansible-fgt03', - 'interface_ip': None, - 'interface_allow_access': None, - 'mode': 'update'} - output = fmgr_device_config.update_device_hostname( - fmg_instance, paramgram_used) - # + ################################################## + ################################################## # adom: ansible # interface: None # device_unique_name: FGT3 @@ -140,27 +94,25 @@ def test_update_device_hostname(fixture_data, mocker): # interface_ip: None # interface_allow_access: None # mode: update - # + ################################################## + + # Test using fixture 1 # + output = fmgr_device_config.update_device_hostname(fmg_instance, fixture_data[0]['paramgram_used']) + assert output['raw_response']['status']['code'] == 0 + # Test using fixture 2 # + output = fmgr_device_config.update_device_hostname(fmg_instance, fixture_data[1]['paramgram_used']) + assert output['raw_response']['status']['code'] == 0 + # Test using fixture 3 # + output = fmgr_device_config.update_device_hostname(fmg_instance, fixture_data[2]['paramgram_used']) assert output['raw_response']['status']['code'] == 0 def test_update_device_interface(fixture_data, mocker): - mocker.patch( - "pyFMG.fortimgr.FortiManager._post_request", - side_effect=fixture_data) + mocker.patch("ansible.module_utils.network.fortimanager.fortimanager.FortiManagerHandler.process_request", + side_effect=fixture_data) + # Fixture sets used:########################### - paramgram_used = { - 'adom': 'ansible', - 'install_config': 'disable', - 'device_unique_name': 'FGT1', - 'interface': 'port2', - 'device_hostname': None, - 'interface_ip': '10.1.1.1/24', - 'interface_allow_access': 'ping, telnet, https, http', - 'mode': 'update'} - output = fmgr_device_config.update_device_interface( - fmg_instance, paramgram_used) - # + ################################################## # adom: ansible # install_config: disable # device_unique_name: FGT1 @@ -169,20 +121,8 @@ def test_update_device_interface(fixture_data, mocker): # interface_ip: 10.1.1.1/24 # interface_allow_access: ping, telnet, https, http # mode: update - # - assert output['raw_response']['status']['code'] == 0 - paramgram_used = { - 'adom': 'ansible', - 'install_config': 'disable', - 'device_unique_name': 'FGT2', - 'interface': 'port2', - 'device_hostname': None, - 'interface_ip': '10.1.2.1/24', - 'interface_allow_access': 'ping, telnet, https, http', - 'mode': 'update'} - output = fmgr_device_config.update_device_interface( - fmg_instance, paramgram_used) - # + ################################################## + ################################################## # adom: ansible # install_config: disable # device_unique_name: FGT2 @@ -191,20 +131,8 @@ def test_update_device_interface(fixture_data, mocker): # interface_ip: 10.1.2.1/24 # interface_allow_access: ping, telnet, https, http # mode: update - # - assert output['raw_response']['status']['code'] == 0 - paramgram_used = { - 'adom': 'ansible', - 'install_config': 'disable', - 'device_unique_name': 'FGT3', - 'interface': 'port2', - 'device_hostname': None, - 'interface_ip': '10.1.3.1/24', - 'interface_allow_access': 'ping, telnet, https, http', - 'mode': 'update'} - output = fmgr_device_config.update_device_interface( - fmg_instance, paramgram_used) - # + ################################################## + ################################################## # adom: ansible # install_config: disable # device_unique_name: FGT3 @@ -213,26 +141,25 @@ def test_update_device_interface(fixture_data, mocker): # interface_ip: 10.1.3.1/24 # interface_allow_access: ping, telnet, https, http # mode: update - # + ################################################## + + # Test using fixture 1 # + output = fmgr_device_config.update_device_interface(fmg_instance, fixture_data[0]['paramgram_used']) + assert output['raw_response']['status']['code'] == 0 + # Test using fixture 2 # + output = fmgr_device_config.update_device_interface(fmg_instance, fixture_data[1]['paramgram_used']) + assert output['raw_response']['status']['code'] == 0 + # Test using fixture 3 # + output = fmgr_device_config.update_device_interface(fmg_instance, fixture_data[2]['paramgram_used']) assert output['raw_response']['status']['code'] == 0 def test_exec_config(fixture_data, mocker): - mocker.patch( - "pyFMG.fortimgr.FortiManager._post_request", - side_effect=fixture_data) + mocker.patch("ansible.module_utils.network.fortimanager.fortimanager.FortiManagerHandler.process_request", + side_effect=fixture_data) + # Fixture sets used:########################### - paramgram_used = { - 'adom': 'ansible', - 'interface': None, - 'device_unique_name': 'FGT1', - 'install_config': 'enable', - 'device_hostname': None, - 'interface_ip': None, - 'interface_allow_access': None, - 'mode': 'execute'} - output = fmgr_device_config.exec_config(fmg_instance, paramgram_used) - # + ################################################## # adom: ansible # interface: None # device_unique_name: FGT1 @@ -240,20 +167,9 @@ def test_exec_config(fixture_data, mocker): # device_hostname: None # interface_ip: None # interface_allow_access: None - # mode: execute - # - assert isinstance(output['raw_response'], dict) is True - paramgram_used = { - 'adom': 'ansible', - 'install_config': 'enable', - 'device_unique_name': 'FGT2, FGT3', - 'interface': None, - 'device_hostname': None, - 'interface_ip': None, - 'interface_allow_access': None, - 'mode': 'execute'} - output = fmgr_device_config.exec_config(fmg_instance, paramgram_used) - # + # mode: exec + ################################################## + ################################################## # adom: ansible # install_config: enable # device_unique_name: FGT2, FGT3 @@ -261,6 +177,12 @@ def test_exec_config(fixture_data, mocker): # device_hostname: None # interface_ip: None # interface_allow_access: None - # mode: execute - # + # mode: exec + ################################################## + + # Test using fixture 1 # + output = fmgr_device_config.exec_config(fmg_instance, fixture_data[0]['paramgram_used']) + assert isinstance(output['raw_response'], dict) is True + # Test using fixture 2 # + output = fmgr_device_config.exec_config(fmg_instance, fixture_data[1]['paramgram_used']) assert isinstance(output['raw_response'], dict) is True