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

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

3.92.1 - 2026-09-08
-------------------
Added
~~~~~
* Database Service

* Support for Grid Infrastructure Home (GI Home) lifecycle operations

* ``oci db gi-home create``
* ``oci db gi-home delete``
* ``oci db gi-home get``
* ``oci db gi-home list``
* ``oci db gi-home update``

* Support for new optional parameter ``--source-gi-home-id``

* ``oci db database-software-image create --source-gi-home-id``

* OCI Cache

* Support for converting an existing OCI Cache cluster into a secondary cluster, converting a secondary cluster into a standalone cluster, and performing switchover between primary and secondary clusters

* ``oci redis redis-cluster redis-cluster convert-to-secondary-cluster``
* ``oci redis redis-cluster redis-cluster convert-to-standalone-cluster``
* ``oci redis redis-cluster redis-cluster switchover``

* Support for new optional parameter ``--primary-cluster-id``

* ``oci redis redis-cluster redis-cluster create --primary-cluster-id``

* Oracle Cloud VMware Solution

* Support for configurable fault domain host distribution via new optional parameter ``--initial-fault-domain-host-distribution`` (accepted values: EVENLY_DISTRIBUTED, UNEVENLY_DISTRIBUTED)

* ``oci ocvs cluster create --initial-fault-domain-host-distribution``
* ``oci ocvs esxi-host create --initial-fault-domain-host-distribution``
* ``oci ocvs esxi-host inplace-upgrade --initial-fault-domain-host-distribution``
* ``oci ocvs esxi-host replace-host --initial-fault-domain-host-distribution``

* Support for new command

* ``oci ocvs cluster generate-host-distribution-report``

3.92.0 - 2026-09-01
-------------------
Added
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jmespath>=0.10.0,<=1.0.1
importlib-metadata; python_version < '3.8'
ndg-httpsclient==0.4.2
mock==2.0.0
oci==2.185.1
oci==2.185.2
packaging==20.2; python_version < '3.7'
packaging>=21.0,<25.0; python_version >= '3.7' and python_version < '3.9'
packaging>=22.0,<25.0; python_version >= '3.9'
Expand Down
72 changes: 38 additions & 34 deletions services/database/src/oci_cli_database/database_cli_extended.py
Original file line number Diff line number Diff line change
Expand Up @@ -1648,6 +1648,7 @@ def patch_db_system(ctx, **kwargs):
@cli_util.option('--update-mode', help="""The update mode applicable to OS Update.""")
@cli_util.option('--update-id', help="""The [OCID](/Content/General/Concepts/identifiers.htm) of the maintenance update.""")
@cli_util.option('--gi-image-id', help="""The [OCID](/Content/General/Concepts/identifiers.htm) of the grid infrastructure software image. This is a database software image of type `GRID_IMAGE`.""")
@cli_util.option('--gi-home-id', help="""The [OCID](/Content/General/Concepts/identifiers.htm) of the grid infrastructure home.""")
@cli_util.option('--data-collection-options', type=custom_types.CLI_COMPLEX_TYPE, help=DATA_COLLECTION_OPTIONS_HELP)
@click.pass_context
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={'ssh-public-keys': {'module': 'database', 'class': 'list[string]'}, 'version-parameterconflict': {'module': 'database', 'class': 'PatchDetails'}, 'update-details': {'module': 'database', 'class': 'VmClusterUpdateDetails'}, 'freeform-tags': {'module': 'database', 'class': 'dict(str, string)'}, 'defined-tags': {'module': 'database', 'class': 'dict(str, dict(str, object))'}, 'data-collection-options': {'module': 'database', 'class': 'DataCollectionOptions'}, 'file-system-configuration-details': {'module': 'database', 'class': 'list[FileSystemConfigurationDetail]'}}, output_type={'module': 'database', 'class': 'VmCluster'})
Expand All @@ -1667,28 +1668,28 @@ def update_vm_cluster_extended(ctx, **kwargs):

update_action = kwargs.get('update_action')
update_mode = kwargs.get('update_mode')
update_id = kwargs.get('update_id')
gi_image_id = kwargs.get('gi_image_id')
if update_id and gi_image_id:
raise click.UsageError('Provide only one of the identifiers --update-id for Oracle released update or --gi-image-id for custom software image')
elif update_action and not (update_id or gi_image_id):
raise click.UsageError('--update-id or --gi-image-id is required if --update-action is specified')
elif (update_id or gi_image_id) and not update_action:
raise click.UsageError('--update-action is required if --update-id or --gi-image-id is specified')
elif update_mode is not None and not update_id:
update_identifiers = {
'updateId': kwargs.get('update_id'),
'giImageId': kwargs.get('gi_image_id'),
'giHomeId': kwargs.get('gi_home_id')
}
provided_update_identifiers = {key: value for key, value in six.iteritems(update_identifiers) if value is not None}
if len(provided_update_identifiers) > 1:
raise click.UsageError('Provide only one of the identifiers --update-id for Oracle released update or --gi-image-id for custom software image or --gi-home-id for GI Home')
elif update_action and not provided_update_identifiers:
raise click.UsageError('--update-id or --gi-image-id or --gi-home-id is required if --update-action is specified')
elif provided_update_identifiers and not update_action:
raise click.UsageError('--update-action is required if --update-id or --gi-image-id or --gi-home-id is specified')
elif update_mode is not None and 'updateId' not in provided_update_identifiers:
raise click.UsageError('--update-mode is only required if --update-id is specified to perform DomU OS Update')
elif update_id and update_action:
elif update_action and provided_update_identifiers:
update_detail_name, update_detail_value = next(six.iteritems(provided_update_identifiers))
kwargs['update_details'] = {
"updateAction": update_action,
"updateId": update_id
'updateAction': update_action,
update_detail_name: update_detail_value
}
if update_mode is not None:
kwargs['update_details']['updateMode'] = update_mode
elif gi_image_id and update_action:
kwargs['update_details'] = {
"updateAction": update_action,
"giSoftwareImageId": gi_image_id
}

# remove kwargs that update_vm_cluster wont recognize
del kwargs['patch_action']
Expand All @@ -1697,6 +1698,7 @@ def update_vm_cluster_extended(ctx, **kwargs):
del kwargs['update_id']
del kwargs['gi_image_id']
del kwargs['update_mode']
del kwargs['gi_home_id']

ctx.invoke(database_cli.update_vm_cluster, **kwargs)

Expand Down Expand Up @@ -2311,6 +2313,7 @@ def list_cloud_vm_clusters(ctx, **kwargs):
@cli_util.option('--update-mode', help="""The update mode applicable to OS Update.""")
@cli_util.option('--update-id', help="""The [OCID](/Content/General/Concepts/identifiers.htm) of the maintenance update.""")
@cli_util.option('--gi-image-id', help="""The [OCID](/Content/General/Concepts/identifiers.htm) of the grid infrastructure software image. This is a database software image of type `GRID_IMAGE`.""")
@cli_util.option('--gi-home-id', help="""The [OCID](/Content/General/Concepts/identifiers.htm) of the grid infrastructure home.""")
@cli_util.option('--ssh-authorized-keys-file', type=click.File('r'), help="""A file containing one or more public SSH keys to use for SSH access to the cloud VM cluster. Use a newline character to separate multiple keys. The length of the combined keys cannot exceed 10,000 characters.""")
@cli_util.option('--data-collection-options', type=custom_types.CLI_COMPLEX_TYPE, help=DATA_COLLECTION_OPTIONS_HELP)
@click.pass_context
Expand All @@ -2323,35 +2326,36 @@ def update_cloud_vm_cluster(ctx, **kwargs):

update_action = kwargs.get('update_action')
update_mode = kwargs.get('update_mode')
update_id = kwargs.get('update_id')
gi_image_id = kwargs.get('gi_image_id')
if update_id and gi_image_id:
raise click.UsageError('Provide only one of the identifiers --update-id for Oracle released update or --gi-image-id for custom software image')
elif update_action and not (update_id or gi_image_id):
raise click.UsageError('--update-id or --gi-image-id is required if --update-action is specified')
elif (update_id or gi_image_id) and not update_action:
raise click.UsageError('--update-action is required if --update-id or --gi-image-id is specified')
elif update_mode is not None and not update_id:
update_identifiers = {
'updateId': kwargs.get('update_id'),
'giImageId': kwargs.get('gi_image_id'),
'giHomeId': kwargs.get('gi_home_id')
}
provided_update_identifiers = {key: value for key, value in six.iteritems(update_identifiers) if value is not None}
if len(provided_update_identifiers) > 1:
raise click.UsageError('Provide only one of the identifiers --update-id for Oracle released update or --gi-image-id for custom software image or --gi-home-id for GI Home')
elif update_action and not provided_update_identifiers:
raise click.UsageError('--update-id or --gi-image-id or --gi-home-id is required if --update-action is specified')
elif provided_update_identifiers and not update_action:
raise click.UsageError('--update-action is required if --update-id or --gi-image-id or --gi-home-id is specified')
elif update_mode is not None and 'updateId' not in provided_update_identifiers:
raise click.UsageError('--update-mode is only required if --update-id is specified to perform DomU OS Update')
elif update_id and update_action:
elif update_action and provided_update_identifiers:
update_detail_name, update_detail_value = next(six.iteritems(provided_update_identifiers))
kwargs['update_details'] = {
"updateAction": update_action,
"updateId": update_id
'updateAction': update_action,
update_detail_name: update_detail_value
}
if update_mode is not None:
kwargs['update_details']['updateMode'] = update_mode
elif gi_image_id and update_action:
kwargs['update_details'] = {
"updateAction": update_action,
"giSoftwareImageId": gi_image_id
}

# remove kwargs that update cloud vm cluster wont recognize
del kwargs['ssh_authorized_keys_file']
del kwargs['update_action']
del kwargs['update_id']
del kwargs['gi_image_id']
del kwargs['update_mode']
del kwargs['gi_home_id']

ctx.invoke(database_cli.update_cloud_vm_cluster, **kwargs)

Expand Down
Loading