Skip to content

Commit 8372a52

Browse files
Enable no-wait and test validation for DeploymentErrors and Provision… (Azure#8365)
1 parent 099b5c2 commit 8372a52

9 files changed

+14481
-6700
lines changed

src/containerapp/HISTORY.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ Release History
55
upcoming
66
++++++
77
* 'az containerapp debug': Open an SSH-like interactive shell within a container app debug console.
8+
* 'az containerapp connected-env certificate upload/remove': Support `--no-wait`.
9+
* 'az containerapp connected-env dapr-component set/remove': Support `--no-wait`.
10+
* 'az containerapp connected-env storage set/remove': Support `--no-wait`.
811

912
1.1.0b1
1013
++++++

src/containerapp/azext_containerapp/_clients.py

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ def create_or_update_certificate(cls, cmd, resource_group_name, name, certificat
575575
return r.json()
576576

577577
@classmethod
578-
def delete_certificate(cls, cmd, resource_group_name, name, certificate_name):
578+
def delete_certificate(cls, cmd, resource_group_name, name, certificate_name, no_wait=False):
579579
management_hostname = cmd.cli_ctx.cloud.endpoints.resource_manager
580580
sub_id = get_subscription_id(cmd.cli_ctx)
581581
url_fmt = "{}/subscriptions/{}/resourceGroups/{}/providers/Microsoft.App/connectedEnvironments/{}/certificates/{}?api-version={}"
@@ -587,7 +587,16 @@ def delete_certificate(cls, cmd, resource_group_name, name, certificate_name):
587587
certificate_name,
588588
cls.api_version)
589589

590-
return send_raw_request(cmd.cli_ctx, "DELETE", request_url, body=None)
590+
r = send_raw_request(cmd.cli_ctx, "DELETE", request_url, body=None)
591+
592+
if no_wait:
593+
return # API doesn't return JSON (it returns no content)
594+
elif r.status_code == 202:
595+
operation_url = r.headers.get(HEADER_LOCATION)
596+
poll_results(cmd, operation_url)
597+
logger.warning('Certificate %s was successfully deleted', certificate_name)
598+
599+
return
591600

592601
@classmethod
593602
def check_name_availability(cls, cmd, resource_group_name, name, name_availability_request):
@@ -635,7 +644,7 @@ def create_or_update(cls, cmd, resource_group_name, environment_name, name, dapr
635644
return r.json()
636645

637646
@classmethod
638-
def delete(cls, cmd, resource_group_name, environment_name, name):
647+
def delete(cls, cmd, resource_group_name, environment_name, name, no_wait=False):
639648
management_hostname = cmd.cli_ctx.cloud.endpoints.resource_manager
640649
sub_id = get_subscription_id(cmd.cli_ctx)
641650
url_fmt = "{}/subscriptions/{}/resourceGroups/{}/providers/Microsoft.App/connectedEnvironments/{}/daprComponents/{}?api-version={}"
@@ -647,7 +656,15 @@ def delete(cls, cmd, resource_group_name, environment_name, name):
647656
name,
648657
cls.api_version)
649658

650-
send_raw_request(cmd.cli_ctx, "DELETE", request_url)
659+
r = send_raw_request(cmd.cli_ctx, "DELETE", request_url)
660+
661+
if no_wait:
662+
return # API doesn't return JSON (it returns no content)
663+
elif r.status_code == 202:
664+
operation_url = r.headers.get(HEADER_LOCATION)
665+
poll_results(cmd, operation_url)
666+
logger.warning('Dapr component %s was successfully deleted', name)
667+
651668
return
652669

653670
@classmethod
@@ -700,7 +717,7 @@ class ConnectedEnvStorageClient():
700717
api_version = PREVIEW_API_VERSION
701718

702719
@classmethod
703-
def create_or_update(cls, cmd, resource_group_name, env_name, name, storage_envelope):
720+
def create_or_update(cls, cmd, resource_group_name, env_name, name, storage_envelope, no_wait=False):
704721
management_hostname = cmd.cli_ctx.cloud.endpoints.resource_manager
705722
sub_id = get_subscription_id(cmd.cli_ctx)
706723
url_fmt = "{}/subscriptions/{}/resourceGroups/{}/providers/Microsoft.App/connectedEnvironments/{}/storages/{}?api-version={}"
@@ -714,10 +731,17 @@ def create_or_update(cls, cmd, resource_group_name, env_name, name, storage_enve
714731

715732
r = send_raw_request(cmd.cli_ctx, "PUT", request_url, body=json.dumps(storage_envelope))
716733

734+
if no_wait:
735+
return r.json()
736+
elif r.status_code == 201:
737+
operation_url = r.headers.get(HEADER_AZURE_ASYNC_OPERATION)
738+
poll_status(cmd, operation_url)
739+
r = send_raw_request(cmd.cli_ctx, "GET", request_url)
740+
717741
return r.json()
718742

719743
@classmethod
720-
def delete(cls, cmd, resource_group_name, env_name, name):
744+
def delete(cls, cmd, resource_group_name, env_name, name, no_wait=False):
721745
management_hostname = cmd.cli_ctx.cloud.endpoints.resource_manager
722746
sub_id = get_subscription_id(cmd.cli_ctx)
723747
url_fmt = "{}/subscriptions/{}/resourceGroups/{}/providers/Microsoft.App/connectedEnvironments/{}/storages/{}?api-version={}"
@@ -729,7 +753,14 @@ def delete(cls, cmd, resource_group_name, env_name, name):
729753
name,
730754
cls.api_version)
731755

732-
send_raw_request(cmd.cli_ctx, "DELETE", request_url)
756+
r = send_raw_request(cmd.cli_ctx, "DELETE", request_url)
757+
758+
if no_wait:
759+
return # API doesn't return JSON (it returns no content)
760+
elif r.status_code == 202:
761+
operation_url = r.headers.get(HEADER_LOCATION)
762+
poll_results(cmd, operation_url)
763+
logger.warning('Storage %s was successfully deleted', name)
733764

734765
return
735766

src/containerapp/azext_containerapp/commands.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,13 +166,13 @@ def load_command_table(self, args):
166166
with self.command_group('containerapp connected-env dapr-component', is_preview=True) as g:
167167
g.custom_command('list', 'connected_env_list_dapr_components')
168168
g.custom_show_command('show', 'connected_env_show_dapr_component')
169-
g.custom_command('set', 'connected_env_create_or_update_dapr_component')
170-
g.custom_command('remove', 'connected_env_remove_dapr_component')
169+
g.custom_command('set', 'connected_env_create_or_update_dapr_component', supports_no_wait=True, exception_handler=ex_handler_factory())
170+
g.custom_command('remove', 'connected_env_remove_dapr_component', supports_no_wait=True, exception_handler=ex_handler_factory())
171171

172172
with self.command_group('containerapp connected-env certificate', is_preview=True) as g:
173173
g.custom_command('list', 'connected_env_list_certificates')
174-
g.custom_command('upload', 'connected_env_upload_certificate')
175-
g.custom_command('delete', 'connected_env_delete_certificate', confirmation=True, exception_handler=ex_handler_factory())
174+
g.custom_command('upload', 'connected_env_upload_certificate', supports_no_wait=True, exception_handler=ex_handler_factory())
175+
g.custom_command('delete', 'connected_env_delete_certificate', supports_no_wait=True, confirmation=True, exception_handler=ex_handler_factory())
176176

177177
with self.command_group('containerapp connected-env storage', is_preview=True) as g:
178178
g.custom_show_command('show', 'connected_env_show_storage')

src/containerapp/azext_containerapp/custom.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1853,18 +1853,18 @@ def connected_env_show_dapr_component(cmd, resource_group_name, dapr_component_n
18531853
return ConnectedEnvDaprComponentClient.show(cmd, resource_group_name, environment_name, name=dapr_component_name)
18541854

18551855

1856-
def connected_env_remove_dapr_component(cmd, resource_group_name, dapr_component_name, environment_name):
1856+
def connected_env_remove_dapr_component(cmd, resource_group_name, dapr_component_name, environment_name, no_wait=False):
18571857
_validate_subscription_registered(cmd, CONTAINER_APPS_RP)
18581858

18591859
try:
1860-
r = ConnectedEnvDaprComponentClient.delete(cmd, resource_group_name, environment_name, name=dapr_component_name)
1860+
r = ConnectedEnvDaprComponentClient.delete(cmd, resource_group_name, environment_name, name=dapr_component_name, no_wait=no_wait)
18611861
logger.warning("Dapr componenet successfully deleted.")
18621862
return r
18631863
except Exception as e:
18641864
handle_raw_exception(e)
18651865

18661866

1867-
def connected_env_create_or_update_dapr_component(cmd, resource_group_name, environment_name, dapr_component_name, yaml):
1867+
def connected_env_create_or_update_dapr_component(cmd, resource_group_name, environment_name, dapr_component_name, yaml, no_wait=False):
18681868
_validate_subscription_registered(cmd, CONTAINER_APPS_RP)
18691869

18701870
yaml_dapr_component = load_yaml_file(yaml)
@@ -1893,7 +1893,8 @@ def connected_env_create_or_update_dapr_component(cmd, resource_group_name, envi
18931893
r = ConnectedEnvDaprComponentClient.create_or_update(cmd, resource_group_name=resource_group_name,
18941894
environment_name=environment_name,
18951895
dapr_component_envelope=dapr_component_envelope,
1896-
name=dapr_component_name)
1896+
name=dapr_component_name,
1897+
no_wait=no_wait)
18971898
return r
18981899
except Exception as e:
18991900
handle_raw_exception(e)
@@ -1929,7 +1930,7 @@ def both_match(c):
19291930
handle_raw_exception(e)
19301931

19311932

1932-
def connected_env_upload_certificate(cmd, name, resource_group_name, certificate_file, certificate_name=None, certificate_password=None, location=None, prompt=False):
1933+
def connected_env_upload_certificate(cmd, name, resource_group_name, certificate_file, certificate_name=None, certificate_password=None, location=None, prompt=False, no_wait=False):
19331934
_validate_subscription_registered(cmd, CONTAINER_APPS_RP)
19341935

19351936
blob, thumbprint = load_cert_file(certificate_file, certificate_password)
@@ -1972,7 +1973,7 @@ def connected_env_upload_certificate(cmd, name, resource_group_name, certificate
19721973
handle_raw_exception(e)
19731974

19741975
try:
1975-
r = ConnectedEnvCertificateClient.create_or_update_certificate(cmd, resource_group_name, name, cert_name, certificate)
1976+
r = ConnectedEnvCertificateClient.create_or_update_certificate(cmd, resource_group_name, name, cert_name, certificate, no_wait)
19761977
return r
19771978
except Exception as e:
19781979
handle_raw_exception(e)
@@ -2010,7 +2011,7 @@ def connected_env_list_storages(cmd, name, resource_group_name):
20102011
handle_raw_exception(e)
20112012

20122013

2013-
def connected_env_create_or_update_storage(cmd, storage_name, resource_group_name, name, azure_file_account_name=None, azure_file_share_name=None, azure_file_account_key=None, access_mode=None): # pylint: disable=redefined-builtin
2014+
def connected_env_create_or_update_storage(cmd, storage_name, resource_group_name, name, azure_file_account_name=None, azure_file_share_name=None, azure_file_account_key=None, access_mode=None, no_wait=False): # pylint: disable=redefined-builtin
20142015
_validate_subscription_registered(cmd, CONTAINER_APPS_RP)
20152016

20162017
r = None
@@ -2033,16 +2034,16 @@ def connected_env_create_or_update_storage(cmd, storage_name, resource_group_nam
20332034
storage_envelope["properties"]["azureFile"] = storage_def
20342035

20352036
try:
2036-
return ConnectedEnvStorageClient.create_or_update(cmd, resource_group_name, name, storage_name, storage_envelope)
2037+
return ConnectedEnvStorageClient.create_or_update(cmd, resource_group_name, name, storage_name, storage_envelope, no_wait)
20372038
except CLIError as e:
20382039
handle_raw_exception(e)
20392040

20402041

2041-
def connected_env_remove_storage(cmd, storage_name, name, resource_group_name):
2042+
def connected_env_remove_storage(cmd, storage_name, name, resource_group_name, no_wait=False):
20422043
_validate_subscription_registered(cmd, CONTAINER_APPS_RP)
20432044

20442045
try:
2045-
return ConnectedEnvStorageClient.delete(cmd, resource_group_name, name, storage_name)
2046+
return ConnectedEnvStorageClient.delete(cmd, resource_group_name, name, storage_name, no_wait)
20462047
except CLIError as e:
20472048
handle_raw_exception(e)
20482049

0 commit comments

Comments
 (0)