Skip to content

Commit aef398a

Browse files
Releasing version 3.49.4
Releasing version 3.49.4
2 parents 40b5ec9 + 0508a2d commit aef398a

File tree

10 files changed

+165
-25
lines changed

10 files changed

+165
-25
lines changed

CHANGELOG.rst

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,41 @@ 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.49.4 - 2024-10-29
10+
--------------------
11+
Added
12+
~~~~~
13+
* OKE Control Plane service
14+
15+
* Support for overriding an existing addon installation
16+
17+
* ``oci ce cluster install-addon --is-override-existing``
18+
19+
* Network load balancer service
20+
21+
* Support for L3IP listener feature
22+
23+
* ``oci nlb listener create --l3-ip-idle-timeout --protocol l3ip``
24+
* ``oci nlb listener update --l3-ip-idle-timeout --protocol l3ip``
25+
26+
Fixed
27+
~~~~~
28+
* OKE Control Plane service
29+
30+
* Support for new Open Id Connect Authentication and Open Id Connect Discovery feature
31+
32+
* ``oci ce cluster create --oidc-ca-certificate``
33+
* ``oci ce cluster create --oidc-client-id``
34+
* ``oci ce cluster create --oidc-groups-claim``
35+
* ``oci ce cluster create --oidc-groups-prefix``
36+
* ``oci ce cluster create --oidc-issuer-url``
37+
* ``oci ce cluster create --oidc-required-claims``
38+
* ``oci ce cluster create --oidc-signing-algorithms``
39+
* ``oci ce cluster create --oidc-username-claim``
40+
* ``oci ce cluster create --oidc-username-prefix``
41+
* ``oci ce cluster create --open-id-connect-auth-enabled``
42+
* ``oci ce cluster create --open-id-connect-discovery-enabled``
43+
944
3.49.3 - 2024-10-22
1045
--------------------
1146
Added

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Jinja2>=3.1.4; python_version >= '3.7'
1515
jmespath==0.10.0
1616
ndg-httpsclient==0.4.2
1717
mock==2.0.0
18-
oci==2.137.0
18+
oci==2.137.1
1919
packaging==20.2
2020
pluggy==0.13.0
2121
py==1.11.0

services/cloud_bridge/src/oci_cli_inventory/inventory_cli_extended.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ def create_asset(ctx, from_json, wait_for_state, max_wait_seconds, wait_interval
277277
@cli_util.wrap_exceptions
278278
def update_asset(ctx, from_json, force, wait_for_state, max_wait_seconds, wait_interval_seconds, asset_id, asset_type,
279279
display_name, asset_source_ids, freeform_tags, defined_tags, compute, vm, vmware_vm, vmware_v_center,
280-
aws_ebs, aws_ec2, aws_ec2_cost, attached_ebs_volumes_cost, if_match):
280+
aws_ebs, aws_ec2, aws_ec2_cost, attached_ebs_volumes_cost, if_match):
281281
if isinstance(asset_id, six.string_types) and len(asset_id.strip()) == 0:
282282
raise click.UsageError('Parameter --asset-id cannot be whitespace or empty string')
283283
if not force:

services/container_engine/src/oci_cli_container_engine/containerengine_cli_extended.py

Lines changed: 93 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,26 @@ def generate_token(ctx, from_json, cluster_id):
103103
deploy and troubleshoot containerized applications, and to manage Kubernetes resources. Default value is false.""")
104104
@cli_util.option('--tiller-enabled', type=click.BOOL, help="""Select if you want Tiller (the server portion of Helm)\
105105
to run in the Kubernetes cluster. Default value is false.""")
106+
@cli_util.option('--oidc-issuer-url', help="""URL of the provider that allows the API server to discover public signing keys.
107+
Only URLs that use the https:// scheme are accepted. This is typically the provider's discovery URL,
108+
changed to have an empty path.""")
109+
@cli_util.option('--oidc-client-id', help="""A client id that all tokens must be issued for.""")
110+
@cli_util.option('--oidc-username-claim', help="""JWT claim to use as the user name. By default sub, which is expected to be a unique identifier of the end
111+
user. Admins can choose other claims, such as email or name, depending on their provider. However, claims
112+
other than email will be prefixed with the issuer URL to prevent naming clashes with other plugins.""")
113+
@cli_util.option('--oidc-username-prefix', help="""Prefix prepended to username claims to prevent clashes with existing names (such as system:users).
114+
For example, the value oidc: will create usernames like oidc:jane.doe. If this flag isn't provided and
115+
--oidc-username-claim is a value other than email the prefix defaults to ( Issuer URL )# where
116+
( Issuer URL ) is the value of --oidc-issuer-url. The value - can be used to disable all prefixing.""")
117+
@cli_util.option('--oidc-groups-claim', help="""JWT claim to use as the user's group. If the claim is present it must be an array of strings.""")
118+
@cli_util.option('--oidc-groups-prefix', help="""Prefix prepended to group claims to prevent clashes with existing names (such as system:groups).""")
119+
@cli_util.option('--oidc-required-claims', type=custom_types.CLI_COMPLEX_TYPE, help="""A key=value pair that describes a required claim in the ID Token. If set, the claim is verified to be present
120+
in the ID Token with a matching value. Repeat this flag to specify multiple claims.""" + custom_types.cli_complex_type.COMPLEX_TYPE_HELP)
121+
@cli_util.option('--oidc-ca-certificate', help="""The path to the certificate for the CA that signed your identity provider's web certificate. Defaults to the
122+
host's root CAs.""")
123+
@cli_util.option('--oidc-signing-algorithms', type=custom_types.CLI_COMPLEX_TYPE, help="""The signing algorithms accepted. Default is ["RS256"].""" + custom_types.cli_complex_type.COMPLEX_TYPE_HELP)
124+
@cli_util.option('--open-id-connect-auth-enabled', type=click.BOOL, help="""Whether the cluster has OIDC Auth Config enabled. Defaults to false.""")
125+
@cli_util.option('--open-id-connect-discovery-enabled', type=click.BOOL, help="""Whether the cluster has OIDC Discovery enabled. Defaults to false. If set to true, the cluster will be assigned a public OIDC Discovery endpoint.""")
106126
@cli_util.option('--pods-cidr', help="""The available group of network addresses that can be allocated to pods running\
107127
in the cluster, expressed as a single, contiguous IPv4 CIDR block. For example, 10.244.0.0/16.""")
108128
@cli_util.option('--services-cidr', help="""The available group of network addresses that can be exposed as Kubernetes\
@@ -126,7 +146,10 @@ def generate_token(ctx, from_json, cluster_id):
126146
'persistent-volume-defined-tags': {'module': 'container_engine', 'class': 'dict(str, dict(str, object))'},
127147
'persistent-volume-freeform-tags': {'module': 'container_engine', 'class': 'dict(str, string)'},
128148
'image-policy-config': {'module': 'container_engine', 'class': 'CreateImagePolicyConfigDetails'},
129-
'cluster-pod-network-options': {'module': 'container_engine', 'class': 'list[ClusterPodNetworkOptionDetails]'}})
149+
'governance-policy-config': {'module': 'container_engine', 'class': 'CreateGovernancePolicyConfigDetails'},
150+
'cluster-pod-network-options': {'module': 'container_engine', 'class': 'list[ClusterPodNetworkOptionDetails]'},
151+
'oidc-signing-algorithms': {'module': 'container_engine', 'class': 'list[string]'},
152+
'oidc-required-claims': {'module': 'container_engine', 'class': 'list[KeyValue]'}})
130153
@click.pass_context
131154
@json_skeleton_utils.json_skeleton_generation_handler(
132155
input_params_to_complex_types={'defined-tags': {'module': 'container_engine', 'class': 'dict(str, dict(str, object))'},
@@ -138,7 +161,10 @@ def generate_token(ctx, from_json, cluster_id):
138161
'persistent-volume-defined-tags': {'module': 'container_engine', 'class': 'dict(str, dict(str, object))'},
139162
'persistent-volume-freeform-tags': {'module': 'container_engine', 'class': 'dict(str, string)'},
140163
'image-policy-config': {'module': 'container_engine', 'class': 'CreateImagePolicyConfigDetails'},
141-
'cluster-pod-network-options': {'module': 'container_engine', 'class': 'list[ClusterPodNetworkOptionDetails]'}})
164+
'governance-policy-config': {'module': 'container_engine', 'class': 'CreateGovernancePolicyConfigDetails'},
165+
'cluster-pod-network-options': {'module': 'container_engine', 'class': 'list[ClusterPodNetworkOptionDetails]'},
166+
'oidc-signing-algorithms': {'module': 'container_engine', 'class': 'list[string]'},
167+
'oidc-required-claims': {'module': 'container_engine', 'class': 'list[KeyValue]'}})
142168
@cli_util.wrap_exceptions
143169
def create_cluster(ctx, **kwargs):
144170
kwargs['options'] = {}
@@ -158,6 +184,71 @@ def create_cluster(ctx, **kwargs):
158184
kwargs['options']['addOns']['isTillerEnabled'] = kwargs['tiller_enabled']
159185
kwargs.pop('tiller_enabled', None)
160186

187+
if 'oidc_issuer_url' in kwargs and kwargs['oidc_issuer_url'] is not None:
188+
if 'openIdConnectTokenAuthenticationConfig' not in kwargs['options']:
189+
kwargs['options']['openIdConnectTokenAuthenticationConfig'] = {}
190+
kwargs['options']['openIdConnectTokenAuthenticationConfig']['issuerUrl'] = kwargs['oidc_issuer_url']
191+
kwargs.pop('oidc_issuer_url', None)
192+
193+
if 'oidc_client_id' in kwargs and kwargs['oidc_client_id'] is not None:
194+
if 'openIdConnectTokenAuthenticationConfig' not in kwargs['options']:
195+
kwargs['options']['openIdConnectTokenAuthenticationConfig'] = {}
196+
kwargs['options']['openIdConnectTokenAuthenticationConfig']['clientId'] = kwargs['oidc_client_id']
197+
kwargs.pop('oidc_client_id', None)
198+
199+
if 'oidc_username_claim' in kwargs and kwargs['oidc_username_claim'] is not None:
200+
if 'openIdConnectTokenAuthenticationConfig' not in kwargs['options']:
201+
kwargs['options']['openIdConnectTokenAuthenticationConfig'] = {}
202+
kwargs['options']['openIdConnectTokenAuthenticationConfig']['usernameClaim'] = kwargs['oidc_username_claim']
203+
kwargs.pop('oidc_username_claim', None)
204+
205+
if 'oidc_username_prefix' in kwargs and kwargs['oidc_username_prefix'] is not None:
206+
if 'openIdConnectTokenAuthenticationConfig' not in kwargs['options']:
207+
kwargs['options']['openIdConnectTokenAuthenticationConfig'] = {}
208+
kwargs['options']['openIdConnectTokenAuthenticationConfig']['usernamePrefix'] = kwargs['oidc_username_prefix']
209+
kwargs.pop('oidc_username_prefix', None)
210+
211+
if 'oidc_groups_claim' in kwargs and kwargs['oidc_groups_claim'] is not None:
212+
if 'openIdConnectTokenAuthenticationConfig' not in kwargs['options']:
213+
kwargs['options']['openIdConnectTokenAuthenticationConfig'] = {}
214+
kwargs['options']['openIdConnectTokenAuthenticationConfig']['groupsClaim'] = kwargs['oidc_groups_claim']
215+
kwargs.pop('oidc_groups_claim', None)
216+
217+
if 'oidc_groups_prefix' in kwargs and kwargs['oidc_groups_prefix'] is not None:
218+
if 'openIdConnectTokenAuthenticationConfig' not in kwargs['options']:
219+
kwargs['options']['openIdConnectTokenAuthenticationConfig'] = {}
220+
kwargs['options']['openIdConnectTokenAuthenticationConfig']['groupsPrefix'] = kwargs['oidc_groups_prefix']
221+
kwargs.pop('oidc_groups_prefix', None)
222+
223+
if 'oidc_required_claims' in kwargs and kwargs['oidc_required_claims'] is not None:
224+
if 'openIdConnectTokenAuthenticationConfig' not in kwargs['options']:
225+
kwargs['options']['openIdConnectTokenAuthenticationConfig'] = {}
226+
kwargs['options']['openIdConnectTokenAuthenticationConfig']['requiredClaims'] = cli_util.parse_json_parameter("oidc_required_claims", kwargs['oidc_required_claims'])
227+
kwargs.pop('oidc_required_claims', None)
228+
229+
if 'oidc_ca_certificate' in kwargs and kwargs['oidc_ca_certificate'] is not None:
230+
if 'openIdConnectTokenAuthenticationConfig' not in kwargs['options']:
231+
kwargs['options']['openIdConnectTokenAuthenticationConfig'] = {}
232+
kwargs['options']['openIdConnectTokenAuthenticationConfig']['caCertificate'] = kwargs['oidc_ca_certificate']
233+
kwargs.pop('oidc_ca_certificate', None)
234+
235+
if 'oidc_signing_algorithms' in kwargs and kwargs['oidc_signing_algorithms'] is not None:
236+
if 'openIdConnectTokenAuthenticationConfig' not in kwargs['options']:
237+
kwargs['options']['openIdConnectTokenAuthenticationConfig'] = {}
238+
kwargs['options']['openIdConnectTokenAuthenticationConfig']['signingAlgorithms'] = cli_util.parse_json_parameter("oidc_signing_algorithms", kwargs['oidc_signing_algorithms'])
239+
kwargs.pop('oidc_signing_algorithms', None)
240+
241+
if 'open_id_connect_auth_enabled' in kwargs and kwargs['open_id_connect_auth_enabled'] is not None:
242+
if 'openIdConnectTokenAuthenticationConfig' not in kwargs['options']:
243+
kwargs['options']['openIdConnectTokenAuthenticationConfig'] = {}
244+
kwargs['options']['openIdConnectTokenAuthenticationConfig']['isOpenIdConnectAuthEnabled'] = kwargs['open_id_connect_auth_enabled']
245+
kwargs.pop('open_id_connect_auth_enabled', None)
246+
if 'open_id_connect_discovery_enabled' in kwargs and kwargs['open_id_connect_discovery_enabled'] is not None:
247+
if 'openIdConnectDiscovery' not in kwargs['options']:
248+
kwargs['options']['openIdConnectDiscovery'] = {}
249+
kwargs['options']['openIdConnectDiscovery']['isOpenIdConnectDiscoveryEnabled'] = kwargs['open_id_connect_discovery_enabled']
250+
kwargs.pop('open_id_connect_discovery_enabled', None)
251+
161252
if 'pods_cidr' in kwargs and kwargs['pods_cidr'] is not None:
162253
kwargs['options']['kubernetesNetworkConfig'] = {}
163254
kwargs['options']['kubernetesNetworkConfig']['podsCidr'] = kwargs['pods_cidr']

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1429,6 +1429,7 @@ def get_workload_mapping(ctx, from_json, cluster_id, workload_mapping_id):
14291429
@cli_util.option('--configurations', type=custom_types.CLI_COMPLEX_TYPE, help=u"""Addon configuration details.
14301430
14311431
This option is a JSON list with items of type AddonConfiguration. For documentation on AddonConfiguration please see our API reference: https://docs.cloud.oracle.com/api/#/en/containerengine/20180222/datatypes/AddonConfiguration.""" + custom_types.cli_complex_type.COMPLEX_TYPE_HELP)
1432+
@cli_util.option('--is-override-existing', type=click.BOOL, help=u"""Whether or not to override an existing addon installation. Defaults to false. If set to true, any existing addon installation would be overridden as per new installation details.""")
14321433
@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.""")
14331434
@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.""")
14341435
@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.""")
@@ -1438,7 +1439,7 @@ def get_workload_mapping(ctx, from_json, cluster_id, workload_mapping_id):
14381439
@click.pass_context
14391440
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={'configurations': {'module': 'container_engine', 'class': 'list[AddonConfiguration]'}})
14401441
@cli_util.wrap_exceptions
1441-
def install_addon(ctx, from_json, wait_for_state, max_wait_seconds, wait_interval_seconds, cluster_id, addon_name, version_parameterconflict, configurations, if_match):
1442+
def install_addon(ctx, from_json, wait_for_state, max_wait_seconds, wait_interval_seconds, cluster_id, addon_name, version_parameterconflict, configurations, is_override_existing, if_match):
14421443

14431444
if isinstance(cluster_id, six.string_types) and len(cluster_id.strip()) == 0:
14441445
raise click.UsageError('Parameter --cluster-id cannot be whitespace or empty string')
@@ -1457,6 +1458,9 @@ def install_addon(ctx, from_json, wait_for_state, max_wait_seconds, wait_interva
14571458
if configurations is not None:
14581459
_details['configurations'] = cli_util.parse_json_parameter("configurations", configurations)
14591460

1461+
if is_override_existing is not None:
1462+
_details['isOverrideExisting'] = is_override_existing
1463+
14601464
client = cli_util.build_client('container_engine', 'container_engine', ctx)
14611465
result = client.install_addon(
14621466
cluster_id=cluster_id,

0 commit comments

Comments
 (0)