def _resource_execute_operation(params, connection):

        with mock.patch.object(BaseConfigurationResource, '_fetch_system_info') as fetch_system_info_mock:
            fetch_system_info_mock.return_value = {
                'databaseInfo': {
                    'buildVersion': '6.3.0'
                }
            }
            resource = BaseConfigurationResource(connection)
            op_name = params['operation']

            resp = resource.execute_operation(op_name, params)

        return resp
def main():
    fields = dict(operation=dict(type='str', required=True),
                  data=dict(type='dict'),
                  query_params=dict(type='dict'),
                  path_params=dict(type='dict'),
                  register_as=dict(type='str'),
                  filters=dict(type='dict'))
    module = AnsibleModule(argument_spec=fields, supports_check_mode=True)
    params = module.params

    connection = Connection(module._socket_path)
    resource = BaseConfigurationResource(connection, module.check_mode)
    op_name = params['operation']
    try:
        resp = resource.execute_operation(op_name, params)
        module.exit_json(changed=resource.config_changed,
                         response=resp,
                         ansible_facts=construct_ansible_facts(
                             resp, module.params))
    except FtdInvalidOperationNameError as e:
        module.fail_json(msg='Invalid operation name provided: %s' %
                         e.operation_name)
    except FtdConfigurationError as e:
        module.fail_json(
            msg=
            'Failed to execute %s operation because of the configuration error: %s'
            % (op_name, e.msg))
    except FtdServerError as e:
        module.fail_json(
            msg=
            'Server returned an error trying to execute %s operation. Status code: %s. '
            'Server response: %s' % (op_name, e.code, e.response))
    except FtdUnexpectedResponse as e:
        module.fail_json(msg=e.args[0])
    except ValidationError as e:
        module.fail_json(msg=e.args[0])
    except CheckModeException:
        module.exit_json(changed=False)