Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 135 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,141 @@ All notable changes to this project will be documented in this file.

The format is based on `Keep a Changelog <http://keepachangelog.com/>`__.

3.84.0 - 2026-05-26
-------------------
Added
~~~~~

* Database service

* Support for optional parameter ``--plan-intent``

* ``oci db action-param-values-summary list-params-for-action-type --plan-intent``
* ``oci db scheduling-plan create --plan-intent``
* ``oci db scheduling-plan list --plan-intent``

* Supports for following optional parameters ``--db-split-threshold``, ``--distribution-affinity``, ``--net-services-architecture`` and ``--vm-failover-reservation``

* ``oci db autonomous-container-database update --db-split-threshold --distribution-affinity --net-services-architecture --vm-failover-reservation``

* Support for optional parameters ``--distribution-algorithm`` and ``--sga-percentage``

* ``oci db autonomous-vm-cluster create --distribution-algorithm --sga-percentage``
* ``oci db autonomous-vm-cluster update --distribution-algorithm --sga-percentage``
* ``oci db cloud-autonomous-vm-cluster create --distribution-algorithm --sga-percentage``
* ``oci db cloud-autonomous-vm-cluster update --distribution-algorithm --sga-percentage``

* Support for optional parameters ``--is-mtls-enabled``, ``--scan-listener-port-non-tls``, ``--scan-listener-port-tls`` and ``--time-zone``

* ``oci db autonomous-vm-cluster update --is-mtls-enabled --scan-listener-port-non-tls --scan-listener-port-tls --time-zone``

* Support for optional parameters ``--cluster-time-zone``, ``--is-mtls-enabled-vm-cluster``, ``--scan-listener-port-non-tls`` and ``--scan-listener-port-tls``

* ``oci db cloud-autonomous-vm-cluster update --cluster-time-zone --is-mtls-enabled-vm-cluster --scan-listener-port-non-tls --scan-listener-port-tls``

* Support for optional parameter ``--maintenance-version-preferences``

* ``oci db cloud-exa-infra create --maintenance-version-preferences``
* ``oci db cloud-exa-infra update --maintenance-version-preferences``
* ``oci db exadata-infrastructure create --maintenance-version-preferences``
* ``oci db exadata-infrastructure update --maintenance-version-preferences``

* Support for optional parameter ``--cadence``

* ``oci db scheduling-policy list --cadence``

* Cluster Placement Groups service

* Support for selecting compute shape configuration during Cluster Placement Group creation

* ``oci cpg cluster-placement-group create``

* Data Science service

* Support for Compute Target, to create and manage reusable managed compute capacity for Data Science workloads

* ``oci data-science compute-target create``
* ``oci data-science compute-target get``
* ``oci data-science compute-target list``
* ``oci data-science compute-target update``
* ``oci data-science compute-target delete``
* ``oci data-science compute-target change-compartment``
* ``oci data-science compute-target-shape list``

* Support for Managed Compute Cluster as a Compute Target type

* ``oci data-science compute-target create-compute-target-managed-compute-cluster-compute-configuration-details``
* ``oci data-science compute-target update-compute-target-update-managed-compute-cluster-configuration-details``

* Support for creating and updating Jobs using Managed Compute Cluster infrastructure

* ``oci data-science job create-job-managed-compute-cluster-job-infrastructure-configuration-details``
* ``oci data-science job update-job-managed-compute-cluster-job-infrastructure-configuration-details``
* ``oci data-science job-run create-job-run-managed-compute-cluster-job-infrastructure-configuration-details``

* Support for creating and updating Model Deployments using flex configuration details

* ``oci data-science model-deployment create-model-deployment-single-model-deployment-flex-configuration-details``
* ``oci data-science model-deployment update-model-deployment-update-single-model-deployment-flex-configuration-details``

* Container Engine for Kubernetes service

* Support for Zero Trust Packet Routing

* ``oci ce node-pool create --primary-vnic``
* ``oci ce cluster create --endpoint-security-attributes``

* Support for new optional parameter ``--remaining-local-volume-in-gbs-greater-than-or-equal-to`` in Compute Service

* ``oci compute dedicated-vm-host list --remaining-local-volume-in-gbs-greater-than-or-equal-to``

* Network Firewall service

* Support for Network Firewall Health Status APIs

* ``oci network-firewall network-firewall-health-status``

* Support for new optional parameter ``--securityattributes``

* ``oci network-firewall create --securityattributes``

* Support for new optional parameter ``--secrets``

* ``oci network-firewall decryption-rule create --secrets``

* GoldenGate service

* Support for Veridata deployment type

* ``oci goldengate deployment create --deployment-type``

* Support for clone operation for ZeroETL pipelines

* ``oci goldengate pipeline clone``

* Support for ``cpuCoreCount`` and ``autoScaling`` for ZeroETL pipelines

* ``oci goldengate pipeline create-zero-etl-pipeline --cpu-core-count --is-auto-scaling-enabled``
* ``oci goldengate pipeline update-zero-etl-pipeline --cpu-core-count --is-auto-scaling-enabled``

* Support for Disaster Recovery (DR) deployment operations

* ``oci goldengate deployment create --disaster-recovery-status``
* ``oci goldengate deployment switchover-deployment-peer --mode``
* ``oci goldengate deployment generate-disaster-recovery-precheck-report``
* ``oci goldengate deployment get-disaster-recovery-precheck-report``

Changed
~~~~~~~

* Data Science service

* [BREAKING] Removed support for IDCS authentication modes from ML Applications resources

* ``oci data-science ml-app-instance create-ml-application-instance-create-idcs-auth-configuration-details``
* ``oci data-science ml-app-instance create-ml-application-instance-create-idcs-custom-service-auth-configuration-details``


3.83.0 - 2026-05-19
-------------------
Added
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Jinja2>=3.1.5,<4.0.0; python_version >= '3.7'
jmespath>=0.10.0,<=1.0.1
ndg-httpsclient==0.4.2
mock==2.0.0
oci==2.175.0
oci==2.176.0
packaging>=22.0,<25.0; python_version > '3.8'
packaging==20.2; python_version <= '3.8'
pluggy==0.13.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,68 @@
from oci_cli import cli_util # noqa: F401
from oci_cli import custom_types # noqa: F401
from oci_cli import json_skeleton_utils # noqa: F401
# Fix the JSON skeleton generation for capabilities
_original_get_example_object_for_tags = json_skeleton_utils.get_example_object_for_tags


def _get_example_object_for_tags_patched(targeted_complex_param):
"""Patched to return custom capabilities example with additionalDetails as object"""
result = _original_get_example_object_for_tags(targeted_complex_param)
if result is not None:
return result
if targeted_complex_param == "capabilities":
return {
"items": [
{
"name": "string",
"service": "string",
"additionalDetails": {"count": 0, "memoryInGBs": 0.0, "nvmes": 0, "ocpus": 0.0, "serviceType": "COMPUTE"}
},
{"name": "string", "service": "string", "additionalDetails": None}
]
}
return None


json_skeleton_utils.get_example_object_for_tags = _get_example_object_for_tags_patched


def _convert_additional_details_to_object(capabilities):
"""
Convert additionalDetails from array to JSON object in capabilities structure.
If additionalDetails is an array, extract the first JSON object from it.
The function always returns a JSON string since the generated code expects to parse it.
"""
if not capabilities:
return capabilities
try:
# Parse capabilities if it's a string
if isinstance(capabilities, str):
capabilities_data = json.loads(capabilities)
else:
capabilities_data = capabilities
# Process capabilities items
if isinstance(capabilities_data, dict) and 'items' in capabilities_data:
items = capabilities_data['items']
if isinstance(items, list):
for item in items:
if isinstance(item, dict) and 'additionalDetails' in item:
additional_details = item['additionalDetails']
# If additionalDetails is an array, extract the first object
if isinstance(additional_details, list):
# Find the first dictionary object in the array
for element in additional_details:
if isinstance(element, dict):
item['additionalDetails'] = element
break
else:
# If no object found, set to None
item['additionalDetails'] = None
# Always return as JSON string since generated code will parse it
return json.dumps(capabilities_data)
except (json.JSONDecodeError, TypeError, AttributeError):
# If parsing fails, return original
return capabilities


# oci cluster-placement-groups work-request-log-entry list-work-request-logs -> oci cluster-placement-groups work-request-log-entry list
Expand All @@ -30,7 +92,9 @@ def create_cluster_placement_group_extended(ctx, **kwargs):
if 'type' in kwargs:
kwargs['cluster_placement_group_type'] = kwargs['type']
kwargs.pop('type')

# Convert additionalDetails from array to JSON object in capabilities
if 'capabilities' in kwargs and kwargs['capabilities'] is not None:
kwargs['capabilities'] = _convert_additional_details_to_object(kwargs['capabilities'])
ctx.invoke(clusterplacementgroupscp_cli.create_cluster_placement_group, **kwargs)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,12 +137,14 @@ def generate_token(ctx, from_json, cluster_id):
security groups (NSGs) to apply to the cluster endpoint. You must also specify --endpoint-subnet-id.""" + custom_types.cli_complex_type.COMPLEX_TYPE_HELP)
@cli_util.option('--endpoint-public-ip-enabled', type=click.BOOL, help="""Whether the cluster should be assigned a public\
IP address. Defaults to false. If set to true on a private subnet, the cluster provisioning will fail. You must also specify --endpoint-subnet-id.""")
@cli_util.option('--endpoint-security-attributes', type=custom_types.CLI_COMPLEX_TYPE, help=u"""[Security attributes] are labels for a resource that can be referenced in a [Zero Trust Packet Routing] (ZPR) policy to control access to ZPR-supported resources.""" + custom_types.cli_complex_type.COMPLEX_TYPE_HELP)
@cli_util.option('--ip-families', type=custom_types.CLI_COMPLEX_TYPE, help="""A list of IP families for the cluster. Example: '[\"IPv4\", \"IPv6\"]'""" + custom_types.cli_complex_type.COMPLEX_TYPE_HELP)
@json_skeleton_utils.get_cli_json_input_option(
{'defined-tags': {'module': 'container_engine', 'class': 'dict(str, dict(str, object))'},
'freeform-tags': {'module': 'container_engine', 'class': 'dict(str, string)'},
'service-lb-subnet-ids': {'module': 'container_engine', 'class': 'list[string]'},
'endpoint-nsg-ids': {'module': 'container_engine', 'class': 'list[string]'},
'endpoint-security-attributes': {'module': 'container_engine', 'class': 'dict(str, dict(str, object))'},
'service-lb-defined-tags': {'module': 'container_engine', 'class': 'dict(str, dict(str, object))'},
'service-lb-freeform-tags': {'module': 'container_engine', 'class': 'dict(str, string)'},
'persistent-volume-defined-tags': {'module': 'container_engine', 'class': 'dict(str, dict(str, object))'},
Expand All @@ -159,6 +161,7 @@ def generate_token(ctx, from_json, cluster_id):
'freeform-tags': {'module': 'container_engine', 'class': 'dict(str, string)'},
'service-lb-subnet-ids': {'module': 'container_engine', 'class': 'list[string]'},
'endpoint-nsg-ids': {'module': 'container_engine', 'class': 'list[string]'},
'endpoint-security-attributes': {'module': 'container_engine', 'class': 'dict(str, dict(str, object))'},
'service-lb-defined-tags': {'module': 'container_engine', 'class': 'dict(str, dict(str, object))'},
'service-lb-freeform-tags': {'module': 'container_engine', 'class': 'dict(str, string)'},
'persistent-volume-defined-tags': {'module': 'container_engine', 'class': 'dict(str, dict(str, object))'},
Expand Down Expand Up @@ -303,6 +306,10 @@ def create_cluster(ctx, **kwargs):
raise click.UsageError(
'Cannot specify --endpoint-public-ip-enabled without --endpoint-subnet-id'
)
if kwargs.get('endpoint_security_attributes') and not kwargs.get('endpoint_subnet_id'):
raise click.UsageError(
'Cannot specify --endpoint-security-attributes without --endpoint-subnet-id'
)

if 'endpoint_subnet_id' in kwargs and kwargs['endpoint_subnet_id'] is not None:
kwargs['endpoint_config'] = {}
Expand All @@ -311,9 +318,12 @@ def create_cluster(ctx, **kwargs):
kwargs['endpoint_config']['nsgIds'] = cli_util.parse_json_parameter("endpoint_nsg_ids", kwargs['endpoint_nsg_ids'])
if 'endpoint_public_ip_enabled' in kwargs and kwargs['endpoint_public_ip_enabled'] is not None:
kwargs['endpoint_config']['isPublicIpEnabled'] = kwargs['endpoint_public_ip_enabled']
if 'endpoint_security_attributes' in kwargs and kwargs['endpoint_security_attributes'] is not None:
kwargs['endpoint_config']['securityAttributes'] = cli_util.parse_json_parameter("endpoint_security_attributes", kwargs['endpoint_security_attributes'])
kwargs.pop('endpoint_subnet_id', None)
kwargs.pop('endpoint_nsg_ids', None)
kwargs.pop('endpoint_public_ip_enabled', None)
kwargs.pop('endpoint_security_attributes', None)

# It seems like the service needs options param even if it is empty so leave it when invoking the create command

Expand Down
Loading