Skip to content

Commit 9c8603e

Browse files
Releasing version 3.54.4
Releasing version 3.54.4
2 parents f223738 + 2daa84c commit 9c8603e

File tree

10 files changed

+532
-12
lines changed

10 files changed

+532
-12
lines changed

CHANGELOG.rst

+26
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,32 @@ All notable changes to this project will be documented in this file.
66

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

9+
3.54.4 - 2025-04-22
10+
--------------------
11+
Added
12+
~~~~~
13+
* Core Services
14+
15+
* Support iSCSI-3 Persistant Reservation for Block Volume
16+
17+
* ``oci bv volume create ----is-reservations-enabled``
18+
* ``oci bv volume create-volume-source-from-volume-backup-delta --is-reservations-enabled``
19+
* ``oci bv volume create-volume-volume-source-from-block-volume-replica-details``
20+
21+
* Visual Builder Service
22+
23+
* Support for restricting public network access to a VB service instance in Visual builder
24+
25+
* ``oci visual-builder vb-instance update-vb-instance-update-public-endpoint-details --network-endpoint-details-allowlisted-http-ips --network-endpoint-details-allowlisted-http-vcns``
26+
* ``oci visual-builder vb-instance update-vb-instance-public-endpoint-details --network-endpoint-details-allowlisted-http-ips --network-endpoint-details-allowlisted-http-vcns``
27+
28+
* Database service
29+
30+
* Support for Database Lifecycle Management Patch Management
31+
32+
* ``oci dblm dblm-patch-management get-patch-management``
33+
* ``oci dblm patch-databases-collection list-databases``
34+
935
3.54.3 - 2025-04-15
1036
--------------------
1137
Added

requirements.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
appdirs==1.4.3
66
arrow>=1.0.0
7-
certifi==2025.1.31
7+
certifi>=2025.1.31
88
cffi>=1.9.1
99
click==8.0.4
1010
coverage==4.5.2
@@ -15,7 +15,7 @@ Jinja2>=3.1.5; python_version >= '3.7'
1515
jmespath==0.10.0
1616
ndg-httpsclient==0.4.2
1717
mock==2.0.0
18-
oci==2.150.1
18+
oci==2.150.2
1919
packaging==20.2
2020
pluggy==0.13.0
2121
py==1.11.0

services/container_engine/src/oci_cli_container_engine/generated/containerengine_cli.py

+134-1
Original file line numberDiff line numberDiff line change
@@ -1188,17 +1188,20 @@ def get_addon(ctx, from_json, cluster_id, addon_name):
11881188

11891189
@cluster_group.command(name=cli_util.override('ce.get_cluster.command_name', 'get'), help=u"""Get the details of a cluster. \n[Command Reference](getCluster)""")
11901190
@cli_util.option('--cluster-id', required=True, help=u"""The OCID of the cluster.""")
1191+
@cli_util.option('--should-include-oidc-config-file', type=click.BOOL, help=u"""Boolean value to determine if the OpenIdConnectAuth configuration file should be displayed for the provided cluster.""")
11911192
@json_skeleton_utils.get_cli_json_input_option({})
11921193
@cli_util.help_option
11931194
@click.pass_context
11941195
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={}, output_type={'module': 'container_engine', 'class': 'Cluster'})
11951196
@cli_util.wrap_exceptions
1196-
def get_cluster(ctx, from_json, cluster_id):
1197+
def get_cluster(ctx, from_json, cluster_id, should_include_oidc_config_file):
11971198

11981199
if isinstance(cluster_id, six.string_types) and len(cluster_id.strip()) == 0:
11991200
raise click.UsageError('Parameter --cluster-id cannot be whitespace or empty string')
12001201

12011202
kwargs = {}
1203+
if should_include_oidc_config_file is not None:
1204+
kwargs['should_include_oidc_config_file'] = should_include_oidc_config_file
12021205
kwargs['opc_request_id'] = cli_util.use_or_generate_request_id(ctx.obj['request_id'])
12031206
client = cli_util.build_client('container_engine', 'container_engine', ctx)
12041207
result = client.get_cluster(
@@ -2092,6 +2095,136 @@ def list_workload_mappings(ctx, from_json, all_pages, page_size, cluster_id, lim
20922095
cli_util.render_response(result, ctx)
20932096

20942097

2098+
@cluster_group.command(name=cli_util.override('ce.reboot_cluster_node.command_name', 'reboot-cluster-node'), help=u"""perform reboot action to node in cluster \n[Command Reference](rebootClusterNode)""")
2099+
@cli_util.option('--cluster-id', required=True, help=u"""The OCID of the cluster.""")
2100+
@cli_util.option('--node-id', required=True, help=u"""The OCID of the compute instance.""")
2101+
@cli_util.option('--node-eviction-settings', type=custom_types.CLI_COMPLEX_TYPE, help=u"""""" + custom_types.cli_complex_type.COMPLEX_TYPE_HELP)
2102+
@cli_util.option('--wait-for-state', type=custom_types.CliCaseInsensitiveChoice(["ACCEPTED", "IN_PROGRESS", "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 SUCCEEDED --wait-for-state FAILED 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.""")
2103+
@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.""")
2104+
@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.""")
2105+
@json_skeleton_utils.get_cli_json_input_option({'node-eviction-settings': {'module': 'container_engine', 'class': 'NodeEvictionSettings'}})
2106+
@cli_util.help_option
2107+
@click.pass_context
2108+
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={'node-eviction-settings': {'module': 'container_engine', 'class': 'NodeEvictionSettings'}})
2109+
@cli_util.wrap_exceptions
2110+
def reboot_cluster_node(ctx, from_json, wait_for_state, max_wait_seconds, wait_interval_seconds, cluster_id, node_id, node_eviction_settings):
2111+
2112+
if isinstance(cluster_id, six.string_types) and len(cluster_id.strip()) == 0:
2113+
raise click.UsageError('Parameter --cluster-id cannot be whitespace or empty string')
2114+
2115+
if isinstance(node_id, six.string_types) and len(node_id.strip()) == 0:
2116+
raise click.UsageError('Parameter --node-id cannot be whitespace or empty string')
2117+
2118+
kwargs = {}
2119+
kwargs['opc_request_id'] = cli_util.use_or_generate_request_id(ctx.obj['request_id'])
2120+
2121+
_details = {}
2122+
2123+
if node_eviction_settings is not None:
2124+
_details['nodeEvictionSettings'] = cli_util.parse_json_parameter("node_eviction_settings", node_eviction_settings)
2125+
2126+
client = cli_util.build_client('container_engine', 'container_engine', ctx)
2127+
result = client.reboot_cluster_node(
2128+
cluster_id=cluster_id,
2129+
node_id=node_id,
2130+
reboot_cluster_node_details=_details,
2131+
**kwargs
2132+
)
2133+
if wait_for_state:
2134+
2135+
if hasattr(client, 'get_work_request') and callable(getattr(client, 'get_work_request')):
2136+
try:
2137+
wait_period_kwargs = {}
2138+
if max_wait_seconds is not None:
2139+
wait_period_kwargs['max_wait_seconds'] = max_wait_seconds
2140+
if wait_interval_seconds is not None:
2141+
wait_period_kwargs['max_interval_seconds'] = wait_interval_seconds
2142+
if 'opc-work-request-id' not in result.headers:
2143+
click.echo('Encountered error while waiting for work request to enter the specified state. Outputting last known resource state')
2144+
cli_util.render_response(result, ctx)
2145+
return
2146+
2147+
click.echo('Action completed. Waiting until the work request has entered state: {}'.format(wait_for_state), file=sys.stderr)
2148+
result = oci.wait_until(client, client.get_work_request(result.headers['opc-work-request-id']), 'status', wait_for_state, **wait_period_kwargs)
2149+
except oci.exceptions.MaximumWaitTimeExceeded as e:
2150+
# If we fail, we should show an error, but we should still provide the information to the customer
2151+
click.echo('Failed to wait until the work request entered the specified state. Outputting last known resource state', file=sys.stderr)
2152+
cli_util.render_response(result, ctx)
2153+
sys.exit(2)
2154+
except Exception:
2155+
click.echo('Encountered error while waiting for work request to enter the specified state. Outputting last known resource state', file=sys.stderr)
2156+
cli_util.render_response(result, ctx)
2157+
raise
2158+
else:
2159+
click.echo('Unable to wait for the work request to enter the specified state', file=sys.stderr)
2160+
cli_util.render_response(result, ctx)
2161+
2162+
2163+
@cluster_group.command(name=cli_util.override('ce.replace_boot_volume_cluster_node.command_name', 'replace-boot-volume-cluster-node'), help=u"""perform cycle action to node in cluster \n[Command Reference](replaceBootVolumeClusterNode)""")
2164+
@cli_util.option('--cluster-id', required=True, help=u"""The OCID of the cluster.""")
2165+
@cli_util.option('--node-id', required=True, help=u"""The OCID of the compute instance.""")
2166+
@cli_util.option('--node-eviction-settings', type=custom_types.CLI_COMPLEX_TYPE, help=u"""""" + custom_types.cli_complex_type.COMPLEX_TYPE_HELP)
2167+
@cli_util.option('--wait-for-state', type=custom_types.CliCaseInsensitiveChoice(["ACCEPTED", "IN_PROGRESS", "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 SUCCEEDED --wait-for-state FAILED 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.""")
2168+
@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.""")
2169+
@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.""")
2170+
@json_skeleton_utils.get_cli_json_input_option({'node-eviction-settings': {'module': 'container_engine', 'class': 'NodeEvictionSettings'}})
2171+
@cli_util.help_option
2172+
@click.pass_context
2173+
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={'node-eviction-settings': {'module': 'container_engine', 'class': 'NodeEvictionSettings'}})
2174+
@cli_util.wrap_exceptions
2175+
def replace_boot_volume_cluster_node(ctx, from_json, wait_for_state, max_wait_seconds, wait_interval_seconds, cluster_id, node_id, node_eviction_settings):
2176+
2177+
if isinstance(cluster_id, six.string_types) and len(cluster_id.strip()) == 0:
2178+
raise click.UsageError('Parameter --cluster-id cannot be whitespace or empty string')
2179+
2180+
if isinstance(node_id, six.string_types) and len(node_id.strip()) == 0:
2181+
raise click.UsageError('Parameter --node-id cannot be whitespace or empty string')
2182+
2183+
kwargs = {}
2184+
kwargs['opc_request_id'] = cli_util.use_or_generate_request_id(ctx.obj['request_id'])
2185+
2186+
_details = {}
2187+
2188+
if node_eviction_settings is not None:
2189+
_details['nodeEvictionSettings'] = cli_util.parse_json_parameter("node_eviction_settings", node_eviction_settings)
2190+
2191+
client = cli_util.build_client('container_engine', 'container_engine', ctx)
2192+
result = client.replace_boot_volume_cluster_node(
2193+
cluster_id=cluster_id,
2194+
node_id=node_id,
2195+
replace_boot_volume_cluster_node_details=_details,
2196+
**kwargs
2197+
)
2198+
if wait_for_state:
2199+
2200+
if hasattr(client, 'get_work_request') and callable(getattr(client, 'get_work_request')):
2201+
try:
2202+
wait_period_kwargs = {}
2203+
if max_wait_seconds is not None:
2204+
wait_period_kwargs['max_wait_seconds'] = max_wait_seconds
2205+
if wait_interval_seconds is not None:
2206+
wait_period_kwargs['max_interval_seconds'] = wait_interval_seconds
2207+
if 'opc-work-request-id' not in result.headers:
2208+
click.echo('Encountered error while waiting for work request to enter the specified state. Outputting last known resource state')
2209+
cli_util.render_response(result, ctx)
2210+
return
2211+
2212+
click.echo('Action completed. Waiting until the work request has entered state: {}'.format(wait_for_state), file=sys.stderr)
2213+
result = oci.wait_until(client, client.get_work_request(result.headers['opc-work-request-id']), 'status', wait_for_state, **wait_period_kwargs)
2214+
except oci.exceptions.MaximumWaitTimeExceeded as e:
2215+
# If we fail, we should show an error, but we should still provide the information to the customer
2216+
click.echo('Failed to wait until the work request entered the specified state. Outputting last known resource state', file=sys.stderr)
2217+
cli_util.render_response(result, ctx)
2218+
sys.exit(2)
2219+
except Exception:
2220+
click.echo('Encountered error while waiting for work request to enter the specified state. Outputting last known resource state', file=sys.stderr)
2221+
cli_util.render_response(result, ctx)
2222+
raise
2223+
else:
2224+
click.echo('Unable to wait for the work request to enter the specified state', file=sys.stderr)
2225+
cli_util.render_response(result, ctx)
2226+
2227+
20952228
@cluster_group.command(name=cli_util.override('ce.start_credential_rotation.command_name', 'start-credential-rotation'), help=u"""Start cluster credential rotation by adding new credentials, old credentials will still work after this operation. \n[Command Reference](startCredentialRotation)""")
20962229
@cli_util.option('--cluster-id', required=True, help=u"""The OCID of the cluster.""")
20972230
@cli_util.option('--auto-completion-delay-duration', required=True, help=u"""The duration in days(in ISO 8601 notation eg. P5D) after which the old credentials should be retired. Maximum delay duration is 90 days.""")

services/container_engine/tests/util/generated/command_to_api.py

+2
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
"ce.list_work_request_logs": "oci.container_engine.ContainerEngineClient.list_work_request_logs",
4040
"ce.list_work_requests": "oci.container_engine.ContainerEngineClient.list_work_requests",
4141
"ce.list_workload_mappings": "oci.container_engine.ContainerEngineClient.list_workload_mappings",
42+
"ce.reboot_cluster_node": "oci.container_engine.ContainerEngineClient.reboot_cluster_node",
43+
"ce.replace_boot_volume_cluster_node": "oci.container_engine.ContainerEngineClient.replace_boot_volume_cluster_node",
4244
"ce.start_credential_rotation": "oci.container_engine.ContainerEngineClient.start_credential_rotation",
4345
"ce.update_addon": "oci.container_engine.ContainerEngineClient.update_addon",
4446
"ce.update_cluster": "oci.container_engine.ContainerEngineClient.update_cluster",

0 commit comments

Comments
 (0)