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
Beispiel #3
0
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