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

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

3.88.0 - 2026-06-23
-------------------
Added
~~~~~
* Support for global parameter federation-endpoint to override the auth service federation endpoint used with instance principal authentication

* ``oci <commands> --auth instance_principal --federation-endpoint``

* Resource Scheduler service

* Support for ADBD Backup support

* ``oci resource-scheduler schedule create --action BACKUP_RESOURCE``
* ``oci resource-scheduler resource-type-collection list-resource-types --action-type BACKUP_RESOURCE``
* ``oci resource-scheduler schedule update --action BACKUP_RESOURCE``

* API Gateway service

* Support for static redirect URLs in authentication policy plugins for deployments in create and update commands

* ``oci api-gateway deployment create --specification``
* ``oci api-gateway deployment update --specification``

* Support for 3 optional parameters in sdk update command

* ``oci api-gateway sdk update --max-wait-seconds --wait-for-state --wait-interval-seconds``

* Container Engine service

* Support for virtual node pool cycling

* ``oci ce virtual-node-pool create --virtual-node-pool-cycling-details ``
* ``oci ce virtual-node-pool update --virtual-node-pool-cycling-details``

* DNS service

* Support for Zero Trust Packet Routing (ZPR) security attributes, defined tags, and free-form tags for DNS resolver endpoint

* ``oci dns resolver-endpoint create --defined-tags --freeform-tags --security-attributes``
* ``oci dns resolver-endpoint update --defined-tags --freeform-tags --security-attributes``

Changed
~~~~~~~
* API Gateway service

* [BREAKING] SDK update command now returns an `Sdk` payload instead of `None`

* ``oci api-gateway sdk update``

3.87.0 - 2026-06-16
-------------------
Added
Expand Down
11 changes: 9 additions & 2 deletions conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,14 @@
if not os.path.exists(os.path.join('tests', 'temp')):
os.makedirs(os.path.join('tests', 'temp'))

dynamic_loader.load_all_services()
final_command_processor.process()

def _load_services_for_pytest(service_name):
if service_name == "all":
dynamic_loader.load_all_services()
elif service_name not in dynamic_loader.NON_SERVICE_TOP_LEVEL_COMMANDS:
dynamic_loader.load_service(service_name)

final_command_processor.process()


def pytest_addoption(parser):
Expand All @@ -70,6 +76,7 @@ def add_test_option(parser, option, action, default, help):

def pytest_configure(config):
test_config_container.vcr_mode = config.getoption("--vcr-record-mode")
_load_services_for_pytest(config.getoption("service"))


@pytest.fixture(scope="session", autouse=True)
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ 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.179.0
oci==2.180.0
packaging>=22.0,<25.0; python_version > '3.8'
packaging==20.2; python_version <= '3.8'
pluggy==0.13.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1583,12 +1583,15 @@ def update_certificate(ctx, from_json, force, wait_for_state, max_wait_seconds,
@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('--is-lock-override', type=click.BOOL, help=u"""Whether to override locks (if any exist).""")
@cli_util.option('--force', help="""Perform update without prompting for confirmation.""", is_flag=True)
@cli_util.option('--wait-for-state', type=custom_types.CliCaseInsensitiveChoice(["CREATING", "ACTIVE", "FAILED", "DELETING", "DELETED"]), multiple=True, help="""This operation creates, modifies or deletes a resource that has a defined lifecycle state. Specify this option to perform the action and then wait until the resource reaches a given lifecycle state. Multiple states can be specified, returning on the first state. For example, --wait-for-state CREATING --wait-for-state DELETED 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 resource to reach the lifecycle 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 resource has reached the lifecycle state defined by --wait-for-state. Defaults to 30 seconds.""")
@json_skeleton_utils.get_cli_json_input_option({'freeform-tags': {'module': 'apigateway', 'class': 'dict(str, string)'}, 'defined-tags': {'module': 'apigateway', 'class': 'dict(str, dict(str, object))'}})
@cli_util.help_option
@click.pass_context
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={'freeform-tags': {'module': 'apigateway', 'class': 'dict(str, string)'}, 'defined-tags': {'module': 'apigateway', 'class': 'dict(str, dict(str, object))'}})
@json_skeleton_utils.json_skeleton_generation_handler(input_params_to_complex_types={'freeform-tags': {'module': 'apigateway', 'class': 'dict(str, string)'}, 'defined-tags': {'module': 'apigateway', 'class': 'dict(str, dict(str, object))'}}, output_type={'module': 'apigateway', 'class': 'Sdk'})
@cli_util.wrap_exceptions
def update_sdk(ctx, from_json, force, sdk_id, display_name, freeform_tags, defined_tags, if_match, is_lock_override):
def update_sdk(ctx, from_json, force, wait_for_state, max_wait_seconds, wait_interval_seconds, sdk_id, display_name, freeform_tags, defined_tags, if_match, is_lock_override):

if isinstance(sdk_id, six.string_types) and len(sdk_id.strip()) == 0:
raise click.UsageError('Parameter --sdk-id cannot be whitespace or empty string')
Expand Down Expand Up @@ -1621,4 +1624,27 @@ def update_sdk(ctx, from_json, force, sdk_id, display_name, freeform_tags, defin
update_sdk_details=_details,
**kwargs
)
if wait_for_state:

if hasattr(client, 'get_sdk') and callable(getattr(client, 'get_sdk')):
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

click.echo('Action completed. Waiting until the resource has entered state: {}'.format(wait_for_state), file=sys.stderr)
result = oci.wait_until(client, client.get_sdk(result.data.id), 'lifecycle_state', 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 resource 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 resource 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 resource to enter the specified state', file=sys.stderr)
cli_util.render_response(result, ctx)
Loading