Skip to content

Commit a0edbb5

Browse files
author
OGFTestPipeline
committed
linting and exceptions
1 parent 1b26e03 commit a0edbb5

File tree

4 files changed

+96
-51
lines changed

4 files changed

+96
-51
lines changed

src/azure-cli/azure/cli/command_modules/appservice/_help.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2212,7 +2212,7 @@
22122212
short-summary: Create sitecontainers for a linux webapp
22132213
examples:
22142214
- name: Create sitecontainers for a linux webapp (autogenerated)
2215-
text: az webapp sitecontaienrs create --name MyWebApp --resource-group MyResourceGroup
2215+
text: az webapp sitecontaienrs create --name MyWebApp --resource-group MyResourceGroup
22162216
crafted: true
22172217
"""
22182218

src/azure-cli/azure/cli/command_modules/appservice/_params.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ def load_arguments(self, _):
175175
with self.argument_context("webapp sitecontainers") as c:
176176
c.argument("create", help='Create sitecontainers for a linux webapp')
177177
c.argument("is_main", help="If true, this sitecontainer becomes the primary sitecontainer receiving frontend traffic.",
178-
arg_type=get_three_state_flag() )
178+
arg_type=get_three_state_flag())
179179

180180
with self.argument_context('webapp show') as c:
181181
c.argument('name', arg_type=webapp_name_arg_type)

src/azure-cli/azure/cli/command_modules/appservice/commands.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def load_command_table(self, _):
141141
g.custom_command('deploy', 'perform_onedeploy_webapp', validator=validate_onedeploy_params)
142142
g.generic_update_command('update', getter_name='get_webapp', setter_name='set_webapp',
143143
custom_func_name='update_webapp', command_type=appservice_custom)
144-
144+
145145
with self.command_group('webapp sitecontainers') as g:
146146
g.custom_command('create', 'create_webapp_sitecontainers')
147147
g.custom_command('update', 'update_webapp_sitecontainer')

src/azure-cli/azure/cli/command_modules/appservice/custom.py

Lines changed: 93 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
# --------------------------------------------------------------------------------------------
55

66
import ast
7-
import os
87
import threading
98
import time
109
import re
@@ -994,9 +993,15 @@ def progress_callback(current, total):
994993
if ex.response.status_code != 200:
995994
raise ex
996995

996+
997997
class SiteContainerSpec:
998-
# Todo add summary and types
999-
def __init__(self, name, image, target_port, is_main, start_up_command=None, auth_type=None, user_name=None, password_secret=None, user_managed_identity_client_id=None, volume_mounts=None, environment_variables=None):
998+
# pylint: disable=too-many-instance-attributes,too-few-public-methods
999+
from azure.mgmt.web.models import VolumeMount, EnvironmentVariable
1000+
1001+
def __init__(self, name: str, image: str, target_port: str, is_main: bool, start_up_command: str = None,
1002+
auth_type: str = None, user_name: str = None, password_secret: str = None,
1003+
user_managed_identity_client_id: str = None, volume_mounts: list[VolumeMount] = None,
1004+
environment_variables: list[EnvironmentVariable] = None):
10001005
self.name = name
10011006
self.image = image
10021007
self.target_port = target_port
@@ -1009,8 +1014,12 @@ def __init__(self, name, image, target_port, is_main, start_up_command=None, aut
10091014
self.volume_mounts = volume_mounts
10101015
self.environment_variables = environment_variables
10111016

1012-
def create_webapp_sitecontainers(cmd, name, resource_group, container_name=None, image=None, target_port=None, slot=None, startup_cmd=None , is_main=None, system_assigned_identity=None, user_assigned_identity=None, registry_username=None, registry_password=None,
1013-
sitecontainers_spec_file=None):
1017+
1018+
def create_webapp_sitecontainers(cmd, name, resource_group, container_name=None, image=None, target_port=None,
1019+
slot=None, startup_cmd=None, is_main=None, system_assigned_identity=None,
1020+
user_assigned_identity=None, registry_username=None,
1021+
registry_password=None, sitecontainers_spec_file=None):
1022+
import os
10141023
# verify if site is a linux site
10151024
client = web_client_factory(cmd.cli_ctx)
10161025
app = client.web_apps.get(resource_group, name)
@@ -1019,12 +1028,12 @@ def create_webapp_sitecontainers(cmd, name, resource_group, container_name=None,
10191028
response = None
10201029

10211030
# check if sitecontainers_spec_file is provided
1022-
if sitecontainers_spec_file is not None:
1023-
sitecontainers_spec = None
1031+
if sitecontainers_spec_file:
10241032
response = []
10251033
logger.warning("Using sitecontainer spec file to create sitecontainer(s)")
10261034
if not os.path.exists(sitecontainers_spec_file):
1027-
raise ValidationError("The sitecontainer spec file does not exist at the path '{}'".format(sitecontainers_spec_file))
1035+
raise ValidationError("The sitecontainer spec file does not exist at the path '{}'"
1036+
.format(sitecontainers_spec_file))
10281037
with open(sitecontainers_spec_file, 'r') as file:
10291038
sitecontainers_spec_json = json.load(file)
10301039
if not isinstance(sitecontainers_spec_json, list):
@@ -1036,12 +1045,19 @@ def create_webapp_sitecontainers(cmd, name, resource_group, container_name=None,
10361045
if sitecontainers_spec is None or len(sitecontainers_spec) == 0:
10371046
raise ValidationError("No sitecontainers found in the sitecontainers spec file.")
10381047
for spec in sitecontainers_spec:
1039-
sitecontainer = SiteContainer(image=spec.image, target_port=spec.target_port, start_up_command=spec.start_up_command, is_main=spec.is_main, auth_type=spec.auth_type, user_name=spec.user_name, password_secret=spec.password_secret, user_managed_identity_client_id=spec.user_managed_identity_client_id, volume_mounts=spec.volume_mounts, environment_variables=spec.environment_variables)
1040-
response.append(_create_or_update_webapp_sitecontainer_internal(cmd, name, resource_group, spec.name, sitecontainer, slot))
1041-
1048+
sitecontainer = SiteContainer(image=spec.image, target_port=spec.target_port,
1049+
start_up_command=spec.start_up_command,
1050+
is_main=spec.is_main, auth_type=spec.auth_type, user_name=spec.user_name,
1051+
password_secret=spec.password_secret,
1052+
user_managed_identity_client_id=spec.user_managed_identity_client_id,
1053+
volume_mounts=spec.volume_mounts,
1054+
environment_variables=spec.environment_variables)
1055+
response.append(_create_or_update_webapp_sitecontainer_internal(cmd, name, resource_group,
1056+
spec.name, sitecontainer, slot))
10421057
else:
10431058
if container_name is None or image is None or target_port is None:
1044-
raise ValidationError("The following arguments are required if argument --sitecontainers-spec-file is not provided: --container-name, --image, --target-port")
1059+
raise RequiredArgumentMissingError("The following arguments are required if argument \
1060+
--sitecontainers-spec-file is not provided: --container-name, --image, --target-port")
10451061
auth_type = AuthType.ANONYMOUS
10461062
if system_assigned_identity is True:
10471063
auth_type = AuthType.SYSTEM_IDENTITY
@@ -1050,27 +1066,42 @@ def create_webapp_sitecontainers(cmd, name, resource_group, container_name=None,
10501066
elif registry_username and registry_password:
10511067
auth_type = AuthType.USER_CREDENTIALS
10521068

1053-
sitecontainer = SiteContainer(image=image, target_port=target_port, start_up_command=startup_cmd, is_main=is_main, auth_type=auth_type, user_name = registry_username, password_secret = registry_password, user_managed_identity_client_id=user_assigned_identity)
1054-
response = _create_or_update_webapp_sitecontainer_internal(cmd, name, resource_group, container_name, sitecontainer, slot)
1055-
1056-
return response
1069+
sitecontainer = SiteContainer(image=image, target_port=target_port, start_up_command=startup_cmd,
1070+
is_main=is_main, auth_type=auth_type, user_name=registry_username,
1071+
password_secret=registry_password,
1072+
user_managed_identity_client_id=user_assigned_identity)
1073+
response = _create_or_update_webapp_sitecontainer_internal(cmd, name, resource_group,
1074+
container_name, sitecontainer, slot)
10571075

1058-
def _create_or_update_webapp_sitecontainer_internal(cmd, name, resource_group, container_name, sitecontainer, slot=None):
1076+
return response
1077+
1078+
1079+
def _create_or_update_webapp_sitecontainer_internal(cmd, name, resource_group, container_name,
1080+
sitecontainer, slot=None):
10591081
web_client = get_mgmt_service_client(cmd.cli_ctx, WebSiteManagementClient).web_apps
10601082
response = None
1061-
if slot:
1062-
response = web_client.create_or_update_site_container_slot(resource_group, name, slot, container_name, sitecontainer)
1063-
else:
1064-
response = web_client.create_or_update_site_container(resource_group, name, container_name, sitecontainer)
1065-
return response
1083+
try:
1084+
if slot:
1085+
response = web_client.create_or_update_site_container_slot(resource_group, name,
1086+
slot, container_name, sitecontainer)
1087+
else:
1088+
response = web_client.create_or_update_site_container(resource_group, name, container_name, sitecontainer)
1089+
return response
1090+
except Exception as ex:
1091+
raise AzureInternalError("Failed to create or update sitecontainer {}. Error: {}"
1092+
.format(container_name, str(ex)))
10661093

1067-
def update_webapp_sitecontainer(cmd, name, resource_group, container_name, image=None, target_port=None, slot=None, startup_cmd=None, is_main=None, system_assigned_identity=None, user_assigned_identity=None, registry_username=None, registry_password=None):
1094+
1095+
def update_webapp_sitecontainer(cmd, name, resource_group, container_name, image=None, target_port=None,
1096+
slot=None, startup_cmd=None, is_main=None, system_assigned_identity=None,
1097+
user_assigned_identity=None, registry_username=None, registry_password=None):
10681098
# get the sitecontainer
10691099
site_container = None
10701100
try:
10711101
site_container = get_webapp_sitecontainer(cmd, name, resource_group, container_name, slot)
10721102
except:
1073-
raise ValidationError("Sitecontainer '{}' does not exist, failed to update the sitecontainer.".format(container_name))
1103+
raise ResourceNotFoundError("Sitecontainer '{}' does not exist, failed to update the sitecontainer."
1104+
.format(container_name))
10741105
# update only the provided parameters
10751106
if image is not None:
10761107
site_container.image = image
@@ -1089,59 +1120,72 @@ def update_webapp_sitecontainer(cmd, name, resource_group, container_name, image
10891120
site_container.auth_type = AuthType.USER_CREDENTIALS
10901121
site_container.user_name = registry_username
10911122
site_container.password_secret = registry_password
1092-
response = _create_or_update_webapp_sitecontainer_internal(cmd, name, resource_group, container_name, site_container, slot)
1123+
response = _create_or_update_webapp_sitecontainer_internal(cmd, name, resource_group,
1124+
container_name, site_container, slot)
10931125
return response
10941126

1127+
10951128
def get_webapp_sitecontainer(cmd, name, resource_group, container_name, slot=None):
10961129
web_client = get_mgmt_service_client(cmd.cli_ctx, WebSiteManagementClient).web_apps
10971130
site_container = None
1098-
if slot:
1099-
site_container = web_client.get_site_container_slot(resource_group, name, container_name, slot)
1100-
else:
1101-
site_container = web_client.get_site_container(resource_group, name, container_name)
1131+
try:
1132+
if slot:
1133+
site_container = web_client.get_site_container_slot(resource_group, name, container_name, slot)
1134+
else:
1135+
site_container = web_client.get_site_container(resource_group, name, container_name)
1136+
except Exception as ex:
1137+
raise ResourceNotFoundError("Failed to fetch sitecontainer '{}'. Error: {}".format(container_name, str(ex)))
11021138
return site_container
11031139

11041140

11051141
def delete_webapp_sitecontainer(cmd, name, resource_group, container_name, slot=None):
11061142
web_client = get_mgmt_service_client(cmd.cli_ctx, WebSiteManagementClient).web_apps
11071143
response = None
1108-
if slot:
1109-
response = web_client.delete_site_container_slot(resource_group, name, container_name, slot, cls=lambda x, y, z: x)
1110-
else:
1111-
response = web_client.delete_site_container(resource_group, name, container_name, cls=lambda x, y, z: x)
1112-
if response is not None and response.http_response.status_code in (200, 204):
1113-
# TODO: Validate deletion via response status code once api bug is fixed,
1114-
# Status 200 -> container existed and was deleted successfully
1115-
# Status 204 -> container does not exist
1116-
logger.warning("Sitecontainer '{}' was deleted successfully.".format(container_name))
1117-
else:
1118-
logger.error("Failed to delete sitecontainer '{}'.".format(container_name))
1144+
try:
1145+
if slot:
1146+
response = web_client.delete_site_container_slot(resource_group, name,
1147+
container_name, slot, cls=lambda x, y, z: x)
1148+
else:
1149+
response = web_client.delete_site_container(resource_group, name, container_name, cls=lambda x, y, z: x)
1150+
if response is not None and response.http_response.status_code in (200, 204):
1151+
# TODO: Validate deletion via response status code once api bug is fixed,
1152+
# Status 200 -> container existed and was deleted successfully
1153+
# Status 204 -> container does not exist
1154+
logger.warning("Sitecontainer %s was deleted successfully.", container_name)
1155+
else:
1156+
logger.error("Failed to delete sitecontainer %s.", container_name)
1157+
except Exception as ex:
1158+
raise AzureInternalError("Failed to delete sitecontainer '{}'. Error: {}".format(container_name, str(ex)))
11191159
return response
11201160

11211161

11221162
def list_webapp_sitecontainers(cmd, name, resource_group, slot=None):
11231163
web_client = get_mgmt_service_client(cmd.cli_ctx, WebSiteManagementClient).web_apps
11241164
site_containers = None
1125-
if slot:
1126-
site_containers = web_client.list_site_containers_slot(resource_group, name, slot)
1127-
else:
1128-
site_containers = web_client.list_site_containers(resource_group, name)
1165+
try:
1166+
if slot:
1167+
site_containers = web_client.list_site_containers_slot(resource_group, name, slot)
1168+
else:
1169+
site_containers = web_client.list_site_containers(resource_group, name)
1170+
except Exception as ex:
1171+
raise ResourceNotFoundError("Failed to fetch sitecontainers. Error: {}".format(str(ex)))
11291172
return site_containers
11301173

11311174

11321175
def get_webapp_sitecontainers_status(cmd, name, resource_group, container_name=None, slot=None):
11331176
import requests
11341177
scm_url = _get_scm_url(cmd, resource_group, name, slot)
1135-
site_container_status_url = scm_url + '/api/sitecontainers/' + (container_name if container_name is not None else "")
1178+
site_container_status_url = scm_url + '/api/sitecontainers/' + (container_name
1179+
if container_name is not None else "")
11361180
headers = get_scm_site_headers(cmd.cli_ctx, name, resource_group, slot)
11371181
try:
11381182
response = requests.get(site_container_status_url, headers=headers)
11391183
return response.json()
11401184
except Exception as ex:
1141-
raise CLIError("Failed to fetch sitecontainer status. Error: {}".format(str(ex)))
1185+
raise AzureInternalError("Failed to fetch sitecontainer status. Error: {}".format(str(ex)))
1186+
11421187

11431188
def get_webapp_sitecontainer_logs(cmd, name, resource_group, container_name, slot=None):
1144-
import requests
11451189
scm_url = _get_scm_url(cmd, resource_group, name, slot)
11461190
site_container_logs_url = scm_url + '/api/sitecontainers/' + container_name + '/logs'
11471191
headers = get_scm_site_headers(cmd.cli_ctx, name, resource_group, slot)
@@ -1152,7 +1196,8 @@ def get_webapp_sitecontainer_logs(cmd, name, resource_group, container_name, slo
11521196
while True:
11531197
time.sleep(100) # so that ctrl+c can stop the command
11541198
except Exception as ex:
1155-
raise CLIError("Failed to fetch sitecontainer logs. Error: {}".format(str(ex)))
1199+
raise AzureInternalError("Failed to fetch sitecontainer logs. Error: {}".format(str(ex)))
1200+
11561201

11571202
# for generic updater
11581203
def get_webapp(cmd, resource_group_name, name, slot=None):

0 commit comments

Comments
 (0)