def test_get_final_security_rules_empty_input_security_rule():
    existing_egress_rules = get_security_rules(
        'egress', 'hashed', None,  None, None,  False, '10.0.0.0/0', '0.0.0.0/0', '10.0.0.0/16', '3', None)

    result, changed = oci_utils.check_and_return_component_list_difference(None, existing_egress_rules, False)
    assert changed is True
    assert not result
def update_path_route_set(lb_client, module, lb_id, path_route_set, name):
    result = dict(path_route_set=to_dict(path_route_set), changed=False)
    update_path_route_set_details = UpdatePathRouteSetDetails()
    purge_path_routes = module.params.get('purge_path_routes')
    input_path_routes = oci_lb_utils.create_path_routes(module.params.get('path_routes', None))
    existing_path_routes = oci_utils.get_hashed_object_list(
        PathRoute, path_route_set.path_routes, attributes_class_type=[PathMatchType])
    get_logger().info("Updating path route set %s in the load balancer %s", name, lb_id)
    changed = False
    if input_path_routes is not None:
        path_routes, changed = oci_utils.check_and_return_component_list_difference(
            input_path_routes, existing_path_routes, purge_path_routes)
    if changed:
        update_path_route_set_details.path_routes = path_routes
    else:
        update_path_route_set_details.path_routes = existing_path_routes

    if changed:
        result = oci_lb_utils.create_or_update_lb_resources_and_wait(resource_type="path_route_set",
                                                                     function=lb_client.update_path_route_set,
                                                                     kwargs_function={
                                                                         'update_path_route_set_details': update_path_route_set_details,
                                                                         'load_balancer_id': lb_id,
                                                                         'path_route_set_name': name},
                                                                     lb_client=lb_client,
                                                                     get_fn=lb_client.get_path_route_set,
                                                                     kwargs_get={'load_balancer_id': lb_id,
                                                                                 'path_route_set_name': name},
                                                                     module=module
                                                                     )
        get_logger().info("Successfully updated path route set %s in the load balancer %s", name, lb_id)
    else:
        get_logger().info("No update to the path route set %s in the load balancer %s as no attribute changed", name, lb_id)

    return result
def test_get_final_security_rules_rule_changed(get_security_rules_patch):
    final_security_rules = get_security_rules(
        'egress', 'hashed', None,  None, None,  False, '10.0.0.0/0', '0.0.0.0/0', '10.0.0.0/16', '3', None)

    result, changed = oci_utils.check_and_return_component_list_difference(final_security_rules, None, False)
    assert changed is True
    assert len(result) is 3
Ejemplo n.º 4
0
def update_export(file_storage_client, module, export):
    result = dict(export=to_dict(export), changed=False)
    update_export_details = UpdateExportDetails()
    purge_export_options = module.params.get('purge_export_options')
    input_export_options = get_export_options(module.params.get('export_options', None))
    existing_export_options = oci_utils.get_hashed_object_list(ClientOptions, export.export_options)
    export_option_changed = False
    if input_export_options is not None:
        export_options, export_option_changed = oci_utils.check_and_return_component_list_difference(
            input_export_options, existing_export_options, purge_export_options)
    if export_option_changed:
        update_export_details.export_options = export_options
    else:
        update_export_details.export_options = existing_export_options
    if export_option_changed:
        result = oci_utils.update_and_wait(resource_type='export',
                                           update_fn=file_storage_client.update_export,
                                           kwargs_update={
                                               'export_id': export.id,
                                               'update_export_details': update_export_details},
                                           client=file_storage_client,
                                           get_fn=file_storage_client.get_export,
                                           get_param='export_id',
                                           module=module
                                           )
    return result
Ejemplo n.º 5
0
def test_get_final_security_rules_rule_changed(get_security_rules_patch):
    final_security_rules = get_security_rules(
        "egress",
        "hashed",
        None,
        None,
        None,
        False,
        "10.0.0.0/0",
        "0.0.0.0/0",
        "10.0.0.0/16",
        "3",
        None,
    )

    result, changed = oci_utils.check_and_return_component_list_difference(
        final_security_rules, None, False)
    assert changed is True
    assert len(result) is 3
Ejemplo n.º 6
0
def test_get_final_security_rules_empty_input_security_rule():
    existing_egress_rules = get_security_rules(
        "egress",
        "hashed",
        None,
        None,
        None,
        False,
        "10.0.0.0/0",
        "0.0.0.0/0",
        "10.0.0.0/16",
        "3",
        None,
    )

    result, changed = oci_utils.check_and_return_component_list_difference(
        None, existing_egress_rules, False)
    assert changed is True
    assert not result
Ejemplo n.º 7
0
def update_export(file_storage_client, module, export):
    result = dict(export=to_dict(export), changed=False)
    update_export_details = UpdateExportDetails()
    purge_export_options = module.params.get("purge_export_options")
    delete_export_options = module.params.get("delete_export_options")
    input_export_options = get_export_options(
        module.params.get("export_options", None))
    existing_export_options = oci_utils.get_hashed_object_list(
        ClientOptions, export.export_options)
    export_option_changed = False
    if input_export_options is not None:
        (
            export_options,
            export_option_changed,
        ) = oci_utils.check_and_return_component_list_difference(
            input_export_options,
            existing_export_options,
            purge_export_options,
            delete_export_options,
        )
    if export_option_changed:
        update_export_details.export_options = export_options
    else:
        update_export_details.export_options = existing_export_options
    if export_option_changed:
        result = oci_utils.update_and_wait(
            resource_type="export",
            update_fn=file_storage_client.update_export,
            kwargs_update={
                "export_id": export.id,
                "update_export_details": update_export_details,
            },
            client=file_storage_client,
            get_fn=file_storage_client.get_export,
            get_param="export_id",
            module=module,
        )
    return result
Ejemplo n.º 8
0
def update_virtual_circuit(virtual_network_client, existing_virtual_circuit, module):
    result = dict(virtual_circuit=to_dict(existing_virtual_circuit), changed=False)
    attributes_changed = False
    cross_connect_mappings_changed = False
    update_virtual_circuit_details = UpdateVirtualCircuitDetails()
    for attribute in update_virtual_circuit_details.attribute_map:
        if attribute != "cross_connect_mappings":
            if module.params.get(attribute) is not None and not eq(
                module.params.get(attribute),
                getattr(existing_virtual_circuit, attribute),
            ):
                attributes_changed = True
                update_virtual_circuit_details.__setattr__(
                    attribute, module.params.get(attribute)
                )
    purge_cross_connect_mappings = module.params.get(
        "purge_cross_connect_mappings", True
    )
    delete_cross_connect_mappings = module.params.get("delete_cross_connect_mappings")
    input_cross_connect_mappings = get_cross_connect_mappings(module)
    existing_cross_connect_mappings = oci_utils.get_hashed_object_list(
        CrossConnectMapping, existing_virtual_circuit.cross_connect_mappings
    )
    if existing_virtual_circuit.type == "PUBLIC":
        remove_assigned_bgp_peering_ips(existing_cross_connect_mappings)
    if input_cross_connect_mappings is not None:
        (
            cross_connect_mappings,
            cross_connect_mappings_changed,
        ) = oci_utils.check_and_return_component_list_difference(
            input_cross_connect_mappings,
            existing_cross_connect_mappings,
            purge_cross_connect_mappings,
            delete_cross_connect_mappings,
        )
    if cross_connect_mappings_changed:
        update_virtual_circuit_details.cross_connect_mappings = cross_connect_mappings
    else:
        update_virtual_circuit_details.cross_connect_mappings = (
            existing_cross_connect_mappings
        )
    if attributes_changed or cross_connect_mappings_changed:
        result = oci_utils.update_and_wait(
            resource_type="virtual_circuit",
            update_fn=virtual_network_client.update_virtual_circuit,
            kwargs_update={
                "update_virtual_circuit_details": update_virtual_circuit_details,
                "virtual_circuit_id": existing_virtual_circuit.id,
            },
            client=virtual_network_client,
            get_fn=virtual_network_client.get_virtual_circuit,
            get_param="virtual_circuit_id",
            module=module,
        )

    if module.params.get("public_prefixes") is not None:
        result = bulk_add_or_delete_public_prefixes(
            get_public_prefixes(module),
            virtual_network_client,
            existing_virtual_circuit.id,
            module,
        )

    return result
def update_backend_set(lb_client, module, lb_id, backend_set, name):
    result = dict(backend_set=to_dict(backend_set), changed=False)
    update_backend_set_details = UpdateBackendSetDetails()
    purge_backends = module.params.get("purge_backends")
    delete_backends = module.params.get("delete_backends")
    input_backends = oci_lb_utils.create_backends(module.params.get("backends", None))
    existing_backends = oci_utils.get_hashed_object_list(
        BackendDetails, backend_set.backends
    )
    get_logger().info("Updating backend set %s in the load balancer %s", name, lb_id)
    backends_changed = False
    if input_backends is not None:
        (
            backends,
            backends_changed,
        ) = oci_utils.check_and_return_component_list_difference(
            input_backends, existing_backends, purge_backends, delete_backends
        )
    if backends_changed:
        update_backend_set_details.backends = backends
    else:
        update_backend_set_details.backends = existing_backends

    input_health_checker = oci_lb_utils.create_health_checker(
        module.params.get("health_checker")
    )
    health_checker_changed = oci_utils.update_class_type_attr_difference(
        update_backend_set_details,
        backend_set,
        "health_checker",
        HealthCheckerDetails,
        input_health_checker,
    )
    policy_changed = oci_utils.check_and_update_attributes(
        update_backend_set_details,
        "policy",
        module.params.get("policy"),
        backend_set.policy,
        False,
    )
    input_session_persistence_configuration = oci_lb_utils.create_session_persistence_configuration(
        module.params.get("session_persistence_configuration", None)
    )
    session_persistence_configuration_changed = oci_utils.update_class_type_attr_difference(
        update_backend_set_details,
        backend_set,
        "session_persistence_configuration",
        SessionPersistenceConfigurationDetails,
        input_session_persistence_configuration,
    )
    input_ssl_configuration = oci_lb_utils.create_ssl_configuration(
        module.params.get("ssl_configuration", None)
    )
    ssl_configuration_changed = oci_utils.update_class_type_attr_difference(
        update_backend_set_details,
        backend_set,
        "ssl_configuration",
        SSLConfigurationDetails,
        input_ssl_configuration,
    )
    changed = (
        backends_changed
        or health_checker_changed
        or policy_changed
        or session_persistence_configuration_changed
        or ssl_configuration_changed
    )
    if changed:
        result = oci_lb_utils.create_or_update_lb_resources_and_wait(
            resource_type="backend_set",
            function=lb_client.update_backend_set,
            kwargs_function={
                "update_backend_set_details": update_backend_set_details,
                "load_balancer_id": lb_id,
                "backend_set_name": name,
            },
            lb_client=lb_client,
            get_fn=lb_client.get_backend_set,
            kwargs_get={"load_balancer_id": lb_id, "backend_set_name": name},
            module=module,
        )
        get_logger().info(
            "Successfully updated backend set %s in the load balancer %s", name, lb_id
        )
    else:
        get_logger().info(
            "No update on backend set %s in the load balancer %s as no attribute changed",
            name,
            lb_id,
        )

    return result
Ejemplo n.º 10
0
def update_security_list(virtual_network_client, existing_security_list, module):
    if existing_security_list is None:
        raise ClientError(
            Exception(
                "No Security List with id "
                + module.params.get("security_list_id")
                + " is found for update"
            )
        )
    result = dict(security_list=to_dict(existing_security_list), changed=False)
    input_ingress_security_rules = module.params.get("ingress_security_rules")
    input_egress_security_rules = module.params.get("egress_security_rules")
    purge_security_rules = module.params.get("purge_security_rules")
    delete_security_rules = module.params.get("delete_security_rules")
    name_tag_changed = False
    egress_security_rules_changed = False
    ingress_security_rules_changed = False
    update_security_list_details = UpdateSecurityListDetails()
    existing_egress_security_rule = existing_security_list.egress_security_rules
    existing_ingress_security_rule = existing_security_list.ingress_security_rules
    attributes_to_compare = ["display_name", "freeform_tags", "defined_tags"]
    for attribute in attributes_to_compare:
        name_tag_changed = oci_utils.check_and_update_attributes(
            update_security_list_details,
            attribute,
            module.params.get(attribute),
            getattr(existing_security_list, attribute),
            name_tag_changed,
        )

    if input_egress_security_rules is not None:
        input_egress_security_rules = get_security_rules(
            "egress_security_rules", input_egress_security_rules
        )
        (
            egress_security_rules,
            egress_security_rules_changed,
        ) = oci_utils.check_and_return_component_list_difference(
            input_egress_security_rules,
            get_hashed_security_rules(
                "egress_security_rules", existing_egress_security_rule
            ),
            purge_security_rules,
            delete_security_rules,
        )

    if input_ingress_security_rules is not None:
        input_ingress_security_rules = get_security_rules(
            "ingress_security_rules", input_ingress_security_rules
        )
        (
            ingress_security_rules,
            ingress_security_rules_changed,
        ) = oci_utils.check_and_return_component_list_difference(
            input_ingress_security_rules,
            get_hashed_security_rules(
                "ingress_security_rules", existing_ingress_security_rule
            ),
            purge_security_rules,
            delete_security_rules,
        )

    if egress_security_rules_changed:
        update_security_list_details.egress_security_rules = egress_security_rules
    else:
        update_security_list_details.egress_security_rules = (
            existing_egress_security_rule
        )

    if ingress_security_rules_changed:
        update_security_list_details.ingress_security_rules = ingress_security_rules
    else:
        update_security_list_details.ingress_security_rules = (
            existing_ingress_security_rule
        )

    if name_tag_changed or (
        egress_security_rules_changed or ingress_security_rules_changed
    ):
        result = oci_utils.update_and_wait(
            resource_type="security_list",
            update_fn=virtual_network_client.update_security_list,
            kwargs_update={
                "security_list_id": existing_security_list.id,
                "update_security_list_details": update_security_list_details,
            },
            client=virtual_network_client,
            get_fn=virtual_network_client.get_security_list,
            get_param="security_list_id",
            module=module,
        )
    return result
def update_listener(lb_client, module, listener, lb_id, name):
    result = dict(listener=to_dict(listener), changed=False)
    update_listener_details = UpdateListenerDetails()
    changed = False
    get_logger().info("Updating listener %s in load balancer %s", name, lb_id)
    for attribute in update_listener_details.attribute_map.keys():
        if attribute not in [
            "ssl_configuration",
            "connection_configuration",
            "hostname_names",
        ]:
            changed = oci_utils.check_and_update_attributes(
                update_listener_details,
                attribute,
                module.params.get(attribute, None),
                getattr(listener, attribute),
                changed,
            )

    input_ssl_configuration = oci_lb_utils.create_ssl_configuration(
        module.params.get("ssl_configuration", None)
    )
    existing_ssl_configuration = oci_utils.get_hashed_object(
        SSLConfigurationDetails, listener.ssl_configuration
    )
    ssl_configuration_changed = oci_utils.check_and_update_attributes(
        update_listener_details,
        "ssl_configuration",
        input_ssl_configuration,
        existing_ssl_configuration,
        False,
    )

    input_connection_configuration = oci_lb_utils.create_connection_configuration(
        module.params.get("connection_configuration", None)
    )
    existing_connection_configuration = oci_utils.get_hashed_object(
        ConnectionConfiguration, listener.connection_configuration
    )
    connection_configuration_changed = oci_utils.check_and_update_attributes(
        update_listener_details,
        "connection_configuration",
        input_connection_configuration,
        existing_connection_configuration,
        False,
    )

    input_hostname_names = module.params.get("hostname_names", None)
    update_listener_details.hostname_names = listener.hostname_names
    hostname_names_changed = False
    if input_hostname_names is not None:
        (
            changed_hostname_names,
            hostname_names_changed,
        ) = oci_utils.check_and_return_component_list_difference(
            input_hostname_names,
            listener.hostname_names,
            module.params.get("purge_hostname_names"),
            module.params.get("delete_hostname_names"),
        )
    if hostname_names_changed:
        update_listener_details.hostname_names = changed_hostname_names

    changed = (
        changed
        or ssl_configuration_changed
        or connection_configuration_changed
        or hostname_names_changed
    )
    get_logger().debug(
        "Existing listener property values: %s, input property values: %s",
        listener,
        update_listener_details,
    )
    if changed:
        result = oci_lb_utils.create_or_update_lb_resources_and_wait(
            resource_type="listener",
            function=lb_client.update_listener,
            kwargs_function={
                "update_listener_details": update_listener_details,
                "load_balancer_id": lb_id,
                "listener_name": name,
            },
            lb_client=lb_client,
            get_sub_resource_fn=oci_lb_utils.get_listener,
            kwargs_get={
                "lb_client": lb_client,
                "module": module,
                "load_balancer_id": lb_id,
                "name": name,
            },
            module=module,
        )
    else:
        get_logger().info(
            "Successfully updated listener %s in load balancer %s", name, lb_id
        )

    return result
def update_security_list(virtual_network_client, existing_security_list,
                         module):
    if existing_security_list is None:
        raise ClientError(
            Exception("No Security List with id " +
                      module.params.get('security_list_id') +
                      " is found for update"))
    result = dict(security_list=to_dict(existing_security_list), changed=False)
    input_ingress_security_rules = module.params.get('ingress_security_rules')
    input_egress_security_rules = module.params.get('egress_security_rules')
    purge_security_rules = module.params.get('purge_security_rules')
    name_tag_changed = False
    egress_security_rules_changed = False
    ingress_security_rules_changed = False
    update_security_list_details = UpdateSecurityListDetails()
    existing_egress_security_rule = existing_security_list.egress_security_rules
    existing_ingress_security_rule = existing_security_list.ingress_security_rules
    attributes_to_compare = ['display_name', 'freeform_tags', 'defined_tags']
    for attribute in attributes_to_compare:
        name_tag_changed = oci_utils.check_and_update_attributes(
            update_security_list_details, attribute,
            module.params.get(attribute),
            getattr(existing_security_list, attribute), name_tag_changed)

    if input_egress_security_rules is not None:
        input_egress_security_rules = get_security_rules(
            'egress_security_rules', input_egress_security_rules)
        egress_security_rules, egress_security_rules_changed = oci_utils.check_and_return_component_list_difference(
            input_egress_security_rules,
            get_hashed_security_rules('egress_security_rules',
                                      existing_egress_security_rule),
            purge_security_rules)

    if input_ingress_security_rules is not None:
        input_ingress_security_rules = get_security_rules(
            'ingress_security_rules', input_ingress_security_rules)
        ingress_security_rules, ingress_security_rules_changed = oci_utils.check_and_return_component_list_difference(
            input_ingress_security_rules,
            get_hashed_security_rules('ingress_security_rules',
                                      existing_ingress_security_rule),
            purge_security_rules)

    if egress_security_rules_changed:
        update_security_list_details.egress_security_rules = egress_security_rules
    else:
        update_security_list_details.egress_security_rules = existing_egress_security_rule

    if ingress_security_rules_changed:
        update_security_list_details.ingress_security_rules = ingress_security_rules
    else:
        update_security_list_details.ingress_security_rules = existing_ingress_security_rule

    if name_tag_changed or (egress_security_rules_changed
                            or ingress_security_rules_changed):
        result = oci_utils.update_and_wait(
            resource_type='security_list',
            update_fn=virtual_network_client.update_security_list,
            kwargs_update={
                'security_list_id': existing_security_list.id,
                'update_security_list_details': update_security_list_details
            },
            client=virtual_network_client,
            get_fn=virtual_network_client.get_security_list,
            get_param='security_list_id',
            module=module)
    return result
def update_listener(lb_client, module, listener, lb_id, name):
    result = dict(listener=to_dict(listener), changed=False)
    update_listener_details = UpdateListenerDetails()
    changed = False
    get_logger().info("Updating listener %s in load balancer %s", name, lb_id)
    for attribute in update_listener_details.attribute_map.keys():
        if attribute not in [
                'ssl_configuration', 'connection_configuration',
                'hostname_names'
        ]:
            changed = oci_utils.check_and_update_attributes(
                update_listener_details, attribute,
                module.params.get(attribute, None),
                getattr(listener, attribute), changed)

    input_ssl_configuration = oci_lb_utils.create_ssl_configuration(
        module.params.get('ssl_configuration', None))
    existing_ssl_configuration = oci_utils.get_hashed_object(
        SSLConfigurationDetails, listener.ssl_configuration)
    ssl_configuration_changed = oci_utils.check_and_update_attributes(
        update_listener_details, 'ssl_configuration', input_ssl_configuration,
        existing_ssl_configuration, False)

    input_connection_configuration = oci_lb_utils.create_connection_configuration(
        module.params.get('connection_configuration', None))
    existing_connection_configuration = oci_utils.get_hashed_object(
        ConnectionConfiguration, listener.connection_configuration)
    connection_configuration_changed = oci_utils.check_and_update_attributes(
        update_listener_details, 'connection_configuration',
        input_connection_configuration, existing_connection_configuration,
        False)

    input_hostname_names = module.params.get('hostname_names', None)
    update_listener_details.hostname_names = listener.hostname_names
    hostname_names_changed = False
    if input_hostname_names is not None:
        changed_hostname_names, hostname_names_changed = oci_utils.check_and_return_component_list_difference(
            input_hostname_names, listener.hostname_names,
            module.params.get('purge_hostname_names'))
    if hostname_names_changed:
        update_listener_details.hostname_names = changed_hostname_names

    changed = changed or ssl_configuration_changed or connection_configuration_changed or hostname_names_changed
    get_logger().debug(
        "Existing listener property values: %s, input property values: %s",
        listener, update_listener_details)
    if changed:
        result = oci_lb_utils.create_or_update_lb_resources_and_wait(
            resource_type='listener',
            function=lb_client.update_listener,
            kwargs_function={
                'update_listener_details': update_listener_details,
                'load_balancer_id': lb_id,
                'listener_name': name
            },
            lb_client=lb_client,
            get_sub_resource_fn=oci_lb_utils.get_listener,
            kwargs_get={
                'lb_client': lb_client,
                'module': module,
                'load_balancer_id': lb_id,
                'name': name
            },
            module=module)
    else:
        get_logger().info(
            "Successfully updated listener %s in load balancer %s", name,
            lb_id)

    return result
def update_backend_set(lb_client, module, lb_id, backend_set, name):
    result = dict(backend_set=to_dict(backend_set), changed=False)
    update_backend_set_details = UpdateBackendSetDetails()
    purge_backends = module.params.get('purge_backends')
    input_backends = oci_lb_utils.create_backends(
        module.params.get('backends', None))
    existing_backends = oci_utils.get_hashed_object_list(
        BackendDetails, backend_set.backends)
    get_logger().info("Updating backend set %s in the load balancer %s", name,
                      lb_id)
    backends_changed = False
    if input_backends is not None:
        backends, backends_changed = oci_utils.check_and_return_component_list_difference(
            input_backends, existing_backends, purge_backends)
    if backends_changed:
        update_backend_set_details.backends = backends
    else:
        update_backend_set_details.backends = existing_backends

    input_health_checker = oci_lb_utils.create_health_checker(
        module.params.get('health_checker'))
    health_checker_changed = oci_utils.update_class_type_attr_difference(
        update_backend_set_details, backend_set, 'health_checker',
        HealthCheckerDetails, input_health_checker)
    policy_changed = oci_utils.check_and_update_attributes(
        update_backend_set_details, 'policy', module.params.get('policy'),
        backend_set.policy, False)
    input_session_persistence_configuration = oci_lb_utils.create_session_persistence_configuration(
        module.params.get('session_persistence_configuration', None))
    session_persistence_configuration_changed = oci_utils.update_class_type_attr_difference(
        update_backend_set_details, backend_set,
        'session_persistence_configuration',
        SessionPersistenceConfigurationDetails,
        input_session_persistence_configuration)
    input_ssl_configuration = oci_lb_utils.create_ssl_configuration(
        module.params.get('ssl_configuration', None))
    ssl_configuration_changed = oci_utils.update_class_type_attr_difference(
        update_backend_set_details, backend_set, 'ssl_configuration',
        SSLConfigurationDetails, input_ssl_configuration)
    changed = backends_changed or health_checker_changed or policy_changed or \
        session_persistence_configuration_changed or ssl_configuration_changed
    if changed:
        result = oci_lb_utils.create_or_update_lb_resources_and_wait(
            resource_type="backend_set",
            function=lb_client.update_backend_set,
            kwargs_function={
                'update_backend_set_details': update_backend_set_details,
                'load_balancer_id': lb_id,
                'backend_set_name': name
            },
            lb_client=lb_client,
            get_fn=lb_client.get_backend_set,
            kwargs_get={
                'load_balancer_id': lb_id,
                'backend_set_name': name
            },
            module=module)
        get_logger().info(
            "Successfully updated backend set %s in the load balancer %s",
            name, lb_id)
    else:
        get_logger().info(
            "No update on backend set %s in the load balancer %s as no attribute changed",
            name, lb_id)

    return result