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
78 changes: 78 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,84 @@ All notable changes to this project will be documented in this file.

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

3.89.2 - 2026-07-14
-------------------
Added
~~~~~
* Container Instance

* Support for FSS volumes (volumeType OCI_FSS_FILE_SYSTEM) and Linux security context when creating container instances

* ``oci container-instances container-instance create``
* ``oci container-instances container-instance create-container-instance-create-linux-container-instance-security-context-details``

* Digital Assistant Service Instance

* Support for new optional parameter ``--security-attributes``

* ``oci oda management oda-private-endpoint create --security-attributes``
* ``oci oda management oda-private-endpoint update --security-attributes``

* Compute Service

* Support for new optional parameter ``--placement-constraint-details`` (and related subcommands) for Compute Cluster, Dedicated VM Host, and Instance resources

* ``oci compute compute-cluster create --placement-constraint-details``
* ``oci compute compute-cluster update --placement-constraint-details``
* ``oci compute dedicated-vm-host create --placement-constraint-details``
* ``oci compute instance launch --placement-constraint-details``

* Compute Management Service

* Support for GPU Memory Cluster (GMC) in instance configurations and instance pools

* ``oci compute-management instance-configuration create-instance-configuration-create-gmc-configuration-details --gmc-configs --source``
* ``oci compute-management instance-pool create --source``
* ``oci compute-management instance-pool update --source``

* Generative AI Service Management

* Support for Hosted Application IAM operations

* ``oci generative-ai hosted-application-iam create``
* ``oci generative-ai hosted-application-iam delete``
* ``oci generative-ai hosted-application-iam get``
* ``oci generative-ai hosted-application-iam update``
* ``oci generative-ai hosted-application-iam change-compartment``
* ``oci generative-ai hosted-application-collection list-hosted-applications-iam``

* Support for new required parameter ``--inbound-auth-config`` on hosted application create and new optional parameters on hosted deployment artifact commands

* ``oci generative-ai hosted-application create --inbound-auth-config``
* ``oci generative-ai hosted-deployment create --artifact-is-vulnerability-scan-required``
* ``oci generative-ai hosted-deployment update --active-artifact-is-vulnerability-scan-required``

* AiDataPlatform Control Plane

* Support for AI Agents features, including new command to enable AI feature and new optional parameters on create

* ``oci ai-data-platform ai-data-platform enable-ai-feature``
* ``oci ai-data-platform ai-data-platform create --is-enable-ai-feature --vector-db-id --vector-db-admin-cred --vector-db-admin-secret-id``

* DataCC

* Support for the service

* ``oci datacc``

Changed
~~~~~~~
* OS Management Hub

* ``--software-source-ids`` is now an optional parameter

* ``oci os-management-hub profile create-software-source-profile --software-source-ids``

Security
~~~~~~~~
- Updated cryptography dependency to `>=3.2.1,<50.0.0` for all python versions per: https://advisories.gitlab.com/pypi/cryptography/GHSA-537c-gmf6-5ccf/


3.89.1 - 2026-07-07
-------------------
Security
Expand Down
6 changes: 3 additions & 3 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@
appdirs==1.4.3
arrow>=1.0.0,<2.0.0
certifi>=2025.1.31,<2026.0.0
cffi>=1.9.1,<2.0.0
cffi>=1.9.1,<=2.0.0
click<=8.1.2
coverage==6.2; python_version < '3.9'
coverage==7.10.7; python_version >= '3.9'
cryptography>=3.2.1,<47.0.0
cryptography>=3.2.1,<50.0.0
httpsig-cffi==15.0.0
Jinja2<3.0.0; python_version == '3.6'
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.181.1
oci==2.182.0
packaging>=22.0,<25.0; python_version > '3.8'
packaging==20.2; python_version <= '3.8'
pluggy==0.13.0; python_version < '3.9'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,10 @@ def change_ai_data_platform_compartment(ctx, from_json, wait_for_state, max_wait
@cli_util.option('--compartment-id', required=True, help=u"""The [OCID] of the compartment to create the AiDataPlatform in.""")
@cli_util.option('--display-name', help=u"""A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.""")
@cli_util.option('--ai-data-platform-type', help=u"""The AiDataPlatform type.""")
@cli_util.option('--is-enable-ai-feature', type=click.BOOL, help=u"""The flag to enable/disable AiFeatures for the instance.""")
@cli_util.option('--vector-db-id', help=u"""The [OCID] of the vector db Lakehouse 26ai.""")
@cli_util.option('--vector-db-admin-cred', help=u"""The Vector DB Lakehouse 26ai ADMIN user password.""")
@cli_util.option('--vector-db-admin-secret-id', help=u"""The [OCID] of the OCI Vault secret holding the vector db Lakehouse 26ai Admin user password.""")
@cli_util.option('--default-workspace-name', help=u"""The name for the default workspace for the AiDataPlatform""")
@cli_util.option('--freeform-tags', type=custom_types.CLI_COMPLEX_TYPE, help=u"""Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags].

Expand All @@ -178,7 +182,7 @@ def change_ai_data_platform_compartment(ctx, from_json, wait_for_state, max_wait
@click.pass_context
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={'freeform-tags': {'module': 'ai_data_platform', 'class': 'dict(str, string)'}, 'defined-tags': {'module': 'ai_data_platform', 'class': 'dict(str, dict(str, object))'}, 'system-tags': {'module': 'ai_data_platform', 'class': 'dict(str, dict(str, object))'}}, output_type={'module': 'ai_data_platform', 'class': 'AiDataPlatform'})
@cli_util.wrap_exceptions
def create_ai_data_platform(ctx, from_json, wait_for_state, max_wait_seconds, wait_interval_seconds, compartment_id, display_name, ai_data_platform_type, default_workspace_name, freeform_tags, defined_tags, system_tags):
def create_ai_data_platform(ctx, from_json, wait_for_state, max_wait_seconds, wait_interval_seconds, compartment_id, display_name, ai_data_platform_type, is_enable_ai_feature, vector_db_id, vector_db_admin_cred, vector_db_admin_secret_id, default_workspace_name, freeform_tags, defined_tags, system_tags):

kwargs = {}
kwargs['opc_request_id'] = cli_util.use_or_generate_request_id(ctx.obj['request_id'])
Expand All @@ -192,6 +196,18 @@ def create_ai_data_platform(ctx, from_json, wait_for_state, max_wait_seconds, wa
if ai_data_platform_type is not None:
_details['aiDataPlatformType'] = ai_data_platform_type

if is_enable_ai_feature is not None:
_details['isEnableAiFeature'] = is_enable_ai_feature

if vector_db_id is not None:
_details['vectorDbId'] = vector_db_id

if vector_db_admin_cred is not None:
_details['vectorDbAdminCred'] = vector_db_admin_cred

if vector_db_admin_secret_id is not None:
_details['vectorDbAdminSecretId'] = vector_db_admin_secret_id

if default_workspace_name is not None:
_details['defaultWorkspaceName'] = default_workspace_name

Expand Down Expand Up @@ -298,6 +314,77 @@ def delete_ai_data_platform(ctx, from_json, wait_for_state, max_wait_seconds, wa
cli_util.render_response(result, ctx)


@ai_data_platform_group.command(name=cli_util.override('ai_data_platform.enable_ai_feature.command_name', 'enable-ai-feature'), help=u"""The AiDataPlatform will be enabled with AI features \n[Command Reference](enableAiFeature)""")
@cli_util.option('--ai-data-platform-id', required=True, help=u"""The [OCID] of the AiDataPlatform.""")
@cli_util.option('--vector-db-id', help=u"""The [OCID] of the vector db Lakehouse 26ai.""")
@cli_util.option('--vector-db-admin-cred', help=u"""The Vector DB Lakehouse 26ai ADMIN user password.""")
@cli_util.option('--vector-db-admin-secret-id', help=u"""The [OCID] of the OCI Vault secret holding the vector db Lakehouse 26ai Admin user password.""")
@cli_util.option('--if-match', help=u"""For optimistic concurrency control. In the PUT or DELETE call for a resource, set the `if-match` parameter to the value of the etag from a previous GET or POST response for that resource. The resource will be updated or deleted only if the etag you provide matches the resource's current etag value.""")
@cli_util.option('--wait-for-state', type=custom_types.CliCaseInsensitiveChoice(["ACCEPTED", "IN_PROGRESS", "WAITING", "NEEDS_ATTENTION", "FAILED", "SUCCEEDED", "CANCELING", "CANCELED"]), multiple=True, help="""This operation asynchronously creates, modifies or deletes a resource and uses a work request to track the progress of the operation. Specify this option to perform the action and then wait until the work request reaches a certain state. Multiple states can be specified, returning on the first state. For example, --wait-for-state ACCEPTED --wait-for-state CANCELED would return on whichever lifecycle state is reached first. If timeout is reached, a return code of 2 is returned. For any other error, a return code of 1 is returned.""")
@cli_util.option('--max-wait-seconds', type=click.INT, help="""The maximum time to wait for the work request to reach the state defined by --wait-for-state. Defaults to 1200 seconds.""")
@cli_util.option('--wait-interval-seconds', type=click.INT, help="""Check every --wait-interval-seconds to see whether the work request has reached the state defined by --wait-for-state. Defaults to 30 seconds.""")
@json_skeleton_utils.get_cli_json_input_option({})
@cli_util.help_option
@click.pass_context
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={})
@cli_util.wrap_exceptions
def enable_ai_feature(ctx, from_json, wait_for_state, max_wait_seconds, wait_interval_seconds, ai_data_platform_id, vector_db_id, vector_db_admin_cred, vector_db_admin_secret_id, if_match):

if isinstance(ai_data_platform_id, six.string_types) and len(ai_data_platform_id.strip()) == 0:
raise click.UsageError('Parameter --ai-data-platform-id cannot be whitespace or empty string')

kwargs = {}
if if_match is not None:
kwargs['if_match'] = if_match
kwargs['opc_request_id'] = cli_util.use_or_generate_request_id(ctx.obj['request_id'])

_details = {}

if vector_db_id is not None:
_details['vectorDbId'] = vector_db_id

if vector_db_admin_cred is not None:
_details['vectorDbAdminCred'] = vector_db_admin_cred

if vector_db_admin_secret_id is not None:
_details['vectorDbAdminSecretId'] = vector_db_admin_secret_id

client = cli_util.build_client('ai_data_platform', 'ai_data_platform', ctx)
result = client.enable_ai_feature(
ai_data_platform_id=ai_data_platform_id,
enable_ai_feature_details=_details,
**kwargs
)
if wait_for_state:

if hasattr(client, 'get_work_request') and callable(getattr(client, 'get_work_request')):
try:
wait_period_kwargs = {}
if max_wait_seconds is not None:
wait_period_kwargs['max_wait_seconds'] = max_wait_seconds
if wait_interval_seconds is not None:
wait_period_kwargs['max_interval_seconds'] = wait_interval_seconds
if 'opc-work-request-id' not in result.headers:
click.echo('Encountered error while waiting for work request to enter the specified state. Outputting last known resource state')
cli_util.render_response(result, ctx)
return

click.echo('Action completed. Waiting until the work request has entered state: {}'.format(wait_for_state), file=sys.stderr)
result = oci.wait_until(client, client.get_work_request(result.headers['opc-work-request-id']), 'status', wait_for_state, **wait_period_kwargs)
except oci.exceptions.MaximumWaitTimeExceeded as e:
# If we fail, we should show an error, but we should still provide the information to the customer
click.echo('Failed to wait until the work request entered the specified state. Outputting last known resource state', file=sys.stderr)
cli_util.render_response(result, ctx)
sys.exit(2)
except Exception:
click.echo('Encountered error while waiting for work request to enter the specified state. Outputting last known resource state', file=sys.stderr)
cli_util.render_response(result, ctx)
raise
else:
click.echo('Unable to wait for the work request to enter the specified state', file=sys.stderr)
cli_util.render_response(result, ctx)


@ai_data_platform_group.command(name=cli_util.override('ai_data_platform.get_ai_data_platform.command_name', 'get'), help=u"""Gets information about a AiDataPlatform. \n[Command Reference](getAiDataPlatform)""")
@cli_util.option('--ai-data-platform-id', required=True, help=u"""The [OCID] of the AiDataPlatform.""")
@json_skeleton_utils.get_cli_json_input_option({})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"ai_data_platform.change_ai_data_platform_compartment": "oci.ai_data_platform.AiDataPlatformClient.change_ai_data_platform_compartment",
"ai_data_platform.create_ai_data_platform": "oci.ai_data_platform.AiDataPlatformClient.create_ai_data_platform",
"ai_data_platform.delete_ai_data_platform": "oci.ai_data_platform.AiDataPlatformClient.delete_ai_data_platform",
"ai_data_platform.enable_ai_feature": "oci.ai_data_platform.AiDataPlatformClient.enable_ai_feature",
"ai_data_platform.get_ai_data_platform": "oci.ai_data_platform.AiDataPlatformClient.get_ai_data_platform",
"ai_data_platform.get_work_request": "oci.ai_data_platform.AiDataPlatformClient.get_work_request",
"ai_data_platform.list_ai_data_platforms": "oci.ai_data_platform.AiDataPlatformClient.list_ai_data_platforms",
Expand Down
Loading