Пример #1
0
def run_module():
    module = AnsibleModule(
        argument_spec={
            'type': dict(type='str'),
            'resource': dict(type='str'),
            'operation': dict(type='str'),
            'software_version': dict(type='str'),
            'settings': dict(type='dict')
        })

    connection = Connection(module._socket_path)
    configurator = ResourceConfigurator(connection=connection, module=module)

    if module.params['type'] == 'packetstack':
        resource_url = 'recirculated_afm_resources'
        resource_name = 'packetstack_resources'
    elif module.params['type'] == 'appstack':
        resource_url = 'atip_resources'
        resource_name = 'appstack_resources'

    try:
        from inspect import signature
        # fetch using Web API the python dictionary representing the argument_spec
        properties = configurator.connection.get_python_representation_of_object(
            resource_url=resource_url, resource_name=resource_name)

        module.argument_spec['settings'] = {
            'type': 'dict',
            'options': properties
        }

        s = signature(module._check_arguments)
        if 'check_invalid_arguments' in s.parameters:
            module._check_arguments(check_invalid_arguments=False)
        else:
            module._check_arguments()
    except:
        pass

    result = dict(changed=False, messages=[])

    try:
        configurator.clear_payload(module.params)
        configurator.module = module

        if 'resource' in module.params:
            configurator.get_target('resource', '/' + module.params['type'])
        elif 'settings' in module.params and 'name' in module.params[
                'settings']:
            configurator.get_target('name', '/' + module.params['type'])

        output = configurator.configure_resources()

        for each in output:
            if each['status_code'] not in [200, 202, 401]:
                result['failed'] = True
            elif each['content'] != 'NOT CHANGED':
                result['changed'] = True

            result['messages'].append(each['content'])

        module.exit_json(**result)

    except Exception as e:
        module.fail_json(msg=e, **result)