Skip to content

Commit 3a4e2fa

Browse files
authored
Releasing version 3.30.1
Releasing version 3.30.1
2 parents 50ff160 + b7142a5 commit 3a4e2fa

File tree

30 files changed

+6647
-83
lines changed

30 files changed

+6647
-83
lines changed

CHANGELOG.rst

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,72 @@ 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.30.1 - 2023-08-01
10+
--------------------
11+
Added
12+
~~~~~
13+
* Loganalytics
14+
15+
* Support for Log Source Validations
16+
17+
* ``oci log-analytics source validate-loglist-endpoint``
18+
* ``oci log-analytics source validate-log-endpoint``
19+
* ``oci log-analytics source validate-label-condition``
20+
21+
* Support for listing properties
22+
23+
* ``oci log-analytics property list-effective-properties``
24+
* ``oci log-analytics property list-properties-metadata``
25+
26+
* Support for getting recalls statistics
27+
28+
* ``oci log-analytics storage get-recalled-data-size``
29+
* ``oci log-analytics storage get-recall-count``
30+
* ``oci log-analytics storage list-overlapping-recalls``
31+
32+
* Support for getting rules summary
33+
34+
* ``oci log-analytics rule get-rules-summary``
35+
36+
* Support for new optional parameter
37+
38+
* ``oci log-analytics source upsert-source --endpoints, --source-properties``
39+
* ``oci log-analytics source validate-source --endpoints, --source-properties``
40+
* ``oci log-analytics source validate-source-extfield-details --endpoints, --source-properties``
41+
* ``oci log-analytics storage recall-archived-data --is-recall-new-data-only, --purpose``
42+
* ``oci log-analytics storage estimate-recall-data-size --is-recall-new-data-only, --log-sets``
43+
* ``oci log-analytics em-bridge delete --is-delete-entities``
44+
45+
* Exadata Fleet Update Service
46+
47+
* Support for the Exadata Fleet Update service
48+
49+
* ``oci fleet-software-update``
50+
51+
* Container Engine For Kubernetes
52+
53+
* Support for OKE cluster credential rotation feature
54+
55+
* ``oci ce cluster start-credential-rotation``
56+
* ``oci ce cluster complete-credential-rotation``
57+
* ``oci ce credential-rotation-status get``
58+
59+
* Fusion Applications Environment Management
60+
61+
* Support for new scheduled activity response properties
62+
63+
* ``oci fusion-apps scheduled-activity list --scheduled-activity-association-id, --scheduled-activity-phase``
64+
65+
* Operations Insights
66+
67+
* Support for OPSI news reports
68+
69+
* ``oci opsi news-report list``
70+
* ``oci opsi news-reports change``
71+
* ``oci opsi news-reports delete``
72+
* ``oci opsi news-reports get``
73+
* ``oci opsi news-reports update``
74+
975
3.30.0 - 2023-07-25
1076
--------------------
1177
Added

README.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Try the interactive features anytime with the ``-i`` option:
2626

2727
oci -i
2828

29-
.. image:: images/animation.png
29+
.. image:: https://github.com/oracle/oci-cli/blob/master/images/animation.png?raw=true
3030
:width: 1000
3131
:alt: Alternative text
3232

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Jinja2==3.0.3
1414
jmespath==0.10.0
1515
ndg-httpsclient==0.4.2
1616
mock==2.0.0
17-
oci==2.108.0
17+
oci==2.109.0
1818
packaging==20.2
1919
pluggy==0.13.0
2020
py==1.10.0

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

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ def cluster_group():
3636
pass
3737

3838

39+
@click.command(cli_util.override('ce.credential_rotation_status_group.command_name', 'credential-rotation-status'), cls=CommandGroupWithAlias, help="""Information regarding cluster's credential rotation.""")
40+
@cli_util.help_option_group
41+
def credential_rotation_status_group():
42+
pass
43+
44+
3945
@click.command(cli_util.override('ce.pod_shape_group.command_name', 'pod-shape'), cls=CommandGroupWithAlias, help="""Pod shape.""")
4046
@cli_util.help_option_group
4147
def pod_shape_group():
@@ -104,6 +110,7 @@ def cluster_options_group():
104110

105111
ce_root_group.add_command(virtual_node_pool_group)
106112
ce_root_group.add_command(cluster_group)
113+
ce_root_group.add_command(credential_rotation_status_group)
107114
ce_root_group.add_command(pod_shape_group)
108115
ce_root_group.add_command(addon_option_group)
109116
ce_root_group.add_command(work_request_log_entry_group)
@@ -178,6 +185,57 @@ def cluster_migrate_to_native_vcn(ctx, from_json, wait_for_state, max_wait_secon
178185
cli_util.render_response(result, ctx)
179186

180187

188+
@cluster_group.command(name=cli_util.override('ce.complete_credential_rotation.command_name', 'complete-credential-rotation'), help=u"""Complete cluster credential rotation. Retire old credentials from kubernetes components. \n[Command Reference](completeCredentialRotation)""")
189+
@cli_util.option('--cluster-id', required=True, help=u"""The OCID of the cluster.""")
190+
@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.""")
191+
@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.""")
192+
@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.""")
193+
@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.""")
194+
@json_skeleton_utils.get_cli_json_input_option({})
195+
@cli_util.help_option
196+
@click.pass_context
197+
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={})
198+
@cli_util.wrap_exceptions
199+
def complete_credential_rotation(ctx, from_json, wait_for_state, max_wait_seconds, wait_interval_seconds, cluster_id, if_match):
200+
201+
if isinstance(cluster_id, six.string_types) and len(cluster_id.strip()) == 0:
202+
raise click.UsageError('Parameter --cluster-id cannot be whitespace or empty string')
203+
204+
kwargs = {}
205+
if if_match is not None:
206+
kwargs['if_match'] = if_match
207+
kwargs['opc_request_id'] = cli_util.use_or_generate_request_id(ctx.obj['request_id'])
208+
client = cli_util.build_client('container_engine', 'container_engine', ctx)
209+
result = client.complete_credential_rotation(
210+
cluster_id=cluster_id,
211+
**kwargs
212+
)
213+
if wait_for_state:
214+
215+
if hasattr(client, 'get_work_request') and callable(getattr(client, 'get_work_request')):
216+
try:
217+
wait_period_kwargs = {}
218+
if max_wait_seconds is not None:
219+
wait_period_kwargs['max_wait_seconds'] = max_wait_seconds
220+
if wait_interval_seconds is not None:
221+
wait_period_kwargs['max_interval_seconds'] = wait_interval_seconds
222+
223+
click.echo('Action completed. Waiting until the work request has entered state: {}'.format(wait_for_state), file=sys.stderr)
224+
result = oci.wait_until(client, client.get_work_request(result.headers['opc-work-request-id']), 'status', wait_for_state, **wait_period_kwargs)
225+
except oci.exceptions.MaximumWaitTimeExceeded as e:
226+
# If we fail, we should show an error, but we should still provide the information to the customer
227+
click.echo('Failed to wait until the work request entered the specified state. Outputting last known resource state', file=sys.stderr)
228+
cli_util.render_response(result, ctx)
229+
sys.exit(2)
230+
except Exception:
231+
click.echo('Encountered error while waiting for work request to enter the specified state. Outputting last known resource state', file=sys.stderr)
232+
cli_util.render_response(result, ctx)
233+
raise
234+
else:
235+
click.echo('Unable to wait for the work request to enter the specified state', file=sys.stderr)
236+
cli_util.render_response(result, ctx)
237+
238+
181239
@cluster_group.command(name=cli_util.override('ce.create_cluster.command_name', 'create'), help=u"""Create a new cluster. \n[Command Reference](createCluster)""")
182240
@cli_util.option('--name', required=True, help=u"""The name of the cluster. Avoid entering confidential information.""")
183241
@cli_util.option('--compartment-id', required=True, help=u"""The OCID of the compartment in which to create the cluster.""")
@@ -1160,6 +1218,28 @@ def get_cluster_options(ctx, from_json, cluster_option_id, compartment_id):
11601218
cli_util.render_response(result, ctx)
11611219

11621220

1221+
@credential_rotation_status_group.command(name=cli_util.override('ce.get_credential_rotation_status.command_name', 'get'), help=u"""Get cluster credential rotation status. \n[Command Reference](getCredentialRotationStatus)""")
1222+
@cli_util.option('--cluster-id', required=True, help=u"""The OCID of the cluster.""")
1223+
@json_skeleton_utils.get_cli_json_input_option({})
1224+
@cli_util.help_option
1225+
@click.pass_context
1226+
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={}, output_type={'module': 'container_engine', 'class': 'CredentialRotationStatus'})
1227+
@cli_util.wrap_exceptions
1228+
def get_credential_rotation_status(ctx, from_json, cluster_id):
1229+
1230+
if isinstance(cluster_id, six.string_types) and len(cluster_id.strip()) == 0:
1231+
raise click.UsageError('Parameter --cluster-id cannot be whitespace or empty string')
1232+
1233+
kwargs = {}
1234+
kwargs['opc_request_id'] = cli_util.use_or_generate_request_id(ctx.obj['request_id'])
1235+
client = cli_util.build_client('container_engine', 'container_engine', ctx)
1236+
result = client.get_credential_rotation_status(
1237+
cluster_id=cluster_id,
1238+
**kwargs
1239+
)
1240+
cli_util.render_response(result, ctx)
1241+
1242+
11631243
@node_pool_group.command(name=cli_util.override('ce.get_node_pool.command_name', 'get'), help=u"""Get the details of a node pool. \n[Command Reference](getNodePool)""")
11641244
@cli_util.option('--node-pool-id', required=True, help=u"""The OCID of the node pool.""")
11651245
@json_skeleton_utils.get_cli_json_input_option({})
@@ -1967,6 +2047,63 @@ def list_workload_mappings(ctx, from_json, all_pages, page_size, cluster_id, lim
19672047
cli_util.render_response(result, ctx)
19682048

19692049

2050+
@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)""")
2051+
@cli_util.option('--cluster-id', required=True, help=u"""The OCID of the cluster.""")
2052+
@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 14 days.""")
2053+
@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.""")
2054+
@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.""")
2055+
@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.""")
2056+
@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.""")
2057+
@json_skeleton_utils.get_cli_json_input_option({})
2058+
@cli_util.help_option
2059+
@click.pass_context
2060+
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={})
2061+
@cli_util.wrap_exceptions
2062+
def start_credential_rotation(ctx, from_json, wait_for_state, max_wait_seconds, wait_interval_seconds, cluster_id, auto_completion_delay_duration, if_match):
2063+
2064+
if isinstance(cluster_id, six.string_types) and len(cluster_id.strip()) == 0:
2065+
raise click.UsageError('Parameter --cluster-id cannot be whitespace or empty string')
2066+
2067+
kwargs = {}
2068+
if if_match is not None:
2069+
kwargs['if_match'] = if_match
2070+
kwargs['opc_request_id'] = cli_util.use_or_generate_request_id(ctx.obj['request_id'])
2071+
2072+
_details = {}
2073+
_details['autoCompletionDelayDuration'] = auto_completion_delay_duration
2074+
2075+
client = cli_util.build_client('container_engine', 'container_engine', ctx)
2076+
result = client.start_credential_rotation(
2077+
cluster_id=cluster_id,
2078+
start_credential_rotation_details=_details,
2079+
**kwargs
2080+
)
2081+
if wait_for_state:
2082+
2083+
if hasattr(client, 'get_work_request') and callable(getattr(client, 'get_work_request')):
2084+
try:
2085+
wait_period_kwargs = {}
2086+
if max_wait_seconds is not None:
2087+
wait_period_kwargs['max_wait_seconds'] = max_wait_seconds
2088+
if wait_interval_seconds is not None:
2089+
wait_period_kwargs['max_interval_seconds'] = wait_interval_seconds
2090+
2091+
click.echo('Action completed. Waiting until the work request has entered state: {}'.format(wait_for_state), file=sys.stderr)
2092+
result = oci.wait_until(client, client.get_work_request(result.headers['opc-work-request-id']), 'status', wait_for_state, **wait_period_kwargs)
2093+
except oci.exceptions.MaximumWaitTimeExceeded as e:
2094+
# If we fail, we should show an error, but we should still provide the information to the customer
2095+
click.echo('Failed to wait until the work request entered the specified state. Outputting last known resource state', file=sys.stderr)
2096+
cli_util.render_response(result, ctx)
2097+
sys.exit(2)
2098+
except Exception:
2099+
click.echo('Encountered error while waiting for work request to enter the specified state. Outputting last known resource state', file=sys.stderr)
2100+
cli_util.render_response(result, ctx)
2101+
raise
2102+
else:
2103+
click.echo('Unable to wait for the work request to enter the specified state', file=sys.stderr)
2104+
cli_util.render_response(result, ctx)
2105+
2106+
19702107
@cluster_group.command(name=cli_util.override('ce.update_addon.command_name', 'update-addon'), help=u"""Update addon details for a cluster. \n[Command Reference](updateAddon)""")
19712108
@cli_util.option('--cluster-id', required=True, help=u"""The OCID of the cluster.""")
19722109
@cli_util.option('--addon-name', required=True, help=u"""The name of the addon.""")
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# coding: utf-8
2+
# Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved.
3+
# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
4+
# NOTE: This class is auto generated by OracleSDKGenerator. DO NOT EDIT. API Version: 20220528
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# coding: utf-8
2+
# Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved.
3+
# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
4+
# NOTE: This class is auto generated by OracleSDKGenerator. DO NOT EDIT. API Version: 20220528
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# coding: utf-8
2+
# Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved.
3+
# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
4+
# NOTE: This class is auto generated by OracleSDKGenerator. DO NOT EDIT. API Version: 20220528

0 commit comments

Comments
 (0)