def perform_action(self, action): action_fn = self.get_action_fn(action) if not action_fn: self.module.fail_json(msg="{0} not supported by the module.".format(action)) # the idempotency checks for these actions are custom since we aren't doing the regular # check for existence, we are checking if a requested resource is present within a list if action == "bulk_add_virtual_circuit_public_prefixes": action_idempotency_checks_fn = ( self._bulk_add_virtual_circuit_public_prefixes_idempotency_check ) check_mode_response_resource = to_dict( BulkAddVirtualCircuitPublicPrefixesDetails(public_prefixes=[]) ) elif action == "bulk_delete_virtual_circuit_public_prefixes": action_idempotency_checks_fn = ( self._bulk_delete_virtual_circuit_public_prefixes_idempotency_check ) check_mode_response_resource = to_dict( BulkDeleteVirtualCircuitPublicPrefixesDetails(public_prefixes=[]) ) else: self.module.fail_json( msg="Performing action failed for unrecognized action: {0}".format( action ) ) result = action_idempotency_checks_fn() if result: return result if self.check_mode: return oci_common_utils.get_result( changed=True, resource_type=self.resource_type, resource=check_mode_response_resource, ) try: action_fn() except MaximumWaitTimeExceeded as mwtex: self.module.fail_json(msg=str(mwtex)) except ServiceError as se: self.module.fail_json( msg="Performing action failed with exception: {0}".format(se.message) ) else: # the individual action operations return None. So get the final list of public prefixes # and return them. resource = BulkAddVirtualCircuitPublicPrefixesDetails( public_prefixes=self.list_public_prefixes() ) return oci_common_utils.get_result( changed=True, resource_type=self.resource_type, resource=to_dict(resource), )
def _bulk_delete_virtual_circuit_public_prefixes_idempotency_check(self): existing_public_prefixes = self.list_public_prefixes() existing_public_prefix_cidrs = [ existing_public_prefix.cidr_block for existing_public_prefix in existing_public_prefixes ] provided_public_prefixes = self.module.params.get("public_prefixes", []) public_prefixes_to_delete = [ public_prefix for public_prefix in provided_public_prefixes if public_prefix.get("cidr_block") in existing_public_prefix_cidrs ] if len(public_prefixes_to_delete) == 0: return oci_common_utils.get_result( changed=False, resource_type=self.resource_type, resource=to_dict( BulkAddVirtualCircuitPublicPrefixesDetails( public_prefixes=existing_public_prefixes ) ), ) else: self.module.params["public_prefixes"] = public_prefixes_to_delete
def bulk_add_or_delete_public_prefixes( input_public_prefixes, virtual_network_client, virtual_circuit_id, module ): update_fn = None kwargs_update = None virtual_circuit_public_prefixes_details = None if module.params.get("delete_public_prefixes"): virtual_circuit_public_prefixes_details = ( BulkDeleteVirtualCircuitPublicPrefixesDetails() ) update_fn = virtual_network_client.bulk_delete_virtual_circuit_public_prefixes kwargs_update = { "bulk_delete_virtual_circuit_public_prefixes_details": virtual_circuit_public_prefixes_details, "virtual_circuit_id": virtual_circuit_id, } else: virtual_circuit_public_prefixes_details = ( BulkAddVirtualCircuitPublicPrefixesDetails() ) update_fn = virtual_network_client.bulk_add_virtual_circuit_public_prefixes kwargs_update = { "bulk_add_virtual_circuit_public_prefixes_details": virtual_circuit_public_prefixes_details, "virtual_circuit_id": virtual_circuit_id, } virtual_circuit_public_prefixes_details.public_prefixes = input_public_prefixes result = oci_utils.update_and_wait( resource_type="virtual_circuit", update_fn=update_fn, kwargs_update=kwargs_update, client=virtual_network_client, get_fn=virtual_network_client.get_virtual_circuit, kwargs_get={"virtual_circuit_id": virtual_circuit_id}, get_param=None, module=module, ) return result