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
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
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
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_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
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
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