44# --------------------------------------------------------------------------------------------
55
66import ast
7- import os
87import threading
98import time
109import re
@@ -994,9 +993,15 @@ def progress_callback(current, total):
994993 if ex .response .status_code != 200 :
995994 raise ex
996995
996+
997997class 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+
10951128def 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
11051141def 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
11221162def 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
11321175def 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
11431188def 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
11581203def get_webapp (cmd , resource_group_name , name , slot = None ):
0 commit comments