def service_control_policy()

in source/state_machine_router.py [0:0]


def service_control_policy(event, function_name):
    scp = ServiceControlPolicy(event, logger)
    logger.info("Router FunctionName: {}".format(function_name))
    if function_name == 'list_policies':
        response = scp.list_policies()
    elif function_name == 'list_policies_for_account':
        response = scp.list_policies_for_account()
    elif function_name == 'list_policies_for_ou':
        response = scp.list_policies_for_ou()
    elif function_name == 'create_policy':
        response = scp.create_policy()
    elif function_name == 'update_policy':
        response = scp.update_policy()
    elif function_name == 'delete_policy':
        response = scp.delete_policy()
    elif function_name == 'configure_count':
        policy_list = event.get('ResourceProperties').get('PolicyList', [])
        logger.info("List of policies: {}".format(policy_list))
        event.update({'Index': 0})
        event.update({'Step': 1})
        event.update({'Count': len(policy_list)})
        return event
    elif function_name == 'iterator':
        index = event.get('Index')
        step = event.get('Step')
        count = event.get('Count')
        policy_list = event.get('ResourceProperties').get('PolicyList', [])
        policy_to_apply = policy_list[index]  \
            if len(policy_list) > index else None

        if index < count:
            _continue = True
        else:
            _continue = False

        index = index + step

        event.update({'Index': index})
        event.update({'Step': step})
        event.update({'Continue': _continue})
        event.update({'PolicyName': policy_to_apply})
        return event
    elif function_name == 'attach_policy':
        response = scp.attach_policy()
    elif function_name == 'detach_policy':
        response = scp.detach_policy()
    elif function_name == 'detach_policy_from_all_accounts':
        response = scp.detach_policy_from_all_accounts()
    elif function_name == 'enable_policy_type':
        response = scp.enable_policy_type()
    elif function_name == 'configure_count_2':
        ou_list = event.get('ResourceProperties').get('OUList', [])
        logger.info("List of OUs: {}".format(ou_list))
        event.update({'Index': 0})
        event.update({'Step': 1})
        event.update({'Count': len(ou_list)})
        return event
    elif function_name == 'iterator2':
        index = event.get('Index')
        step = event.get('Step')
        count = event.get('Count')
        ou_list = event.get('ResourceProperties').get('OUList', [])
        ou_map = ou_list[index] if len(ou_list) > index else None

        if index < count:
            _continue = True
        else:
            _continue = False

        index = index + step

        event.update({'Index': index})
        event.update({'Step': step})
        event.update({'Continue': _continue})
        if ou_map: # ou list example: [['ouname1','ouid1],'Attach']
            logger.info("[state_machine_router.service_control_policy] ou_map:  {}".format(ou_map))
            logger.debug("[state_machine_router.service_control_policy] OUName: {}; OUId: {}; Operation: {}"\
                        .format(ou_map[0][0], ou_map[0][1], ou_map[1]))

            event.update({'OUName': ou_map[0][0]})
            event.update({'OUId': ou_map[0][1]})
            event.update({'Operation': ou_map[1]})

        return event

    else:
        message = build_messages(1)
        logger.info(message)
        return {"Message": message}

    logger.info(response)
    return response