@@ -415,11 +415,67 @@ def construct_payload(self):
415415 (self .get_argument_managed_env () is not None and safe_get (self .existing_pool_def , "properties" , "environmentId" ).lower () == self .get_argument_managed_env ().lower ())):
416416 raise ValidationError ("containerType and environmentId cannot be updated." )
417417
418+ self .set_up_managed_identity ()
418419 self .set_up_dynamic_configuration ()
419420 self .set_up_network_configuration ()
420421 self .set_up_scale_configuration ()
421422 self .set_up_secrets ()
422423 self .set_up_custom_container_template (safe_get (self .session_pool_def , "properties" , "secrets" ))
424+ self .set_up_managed_identity_settings ()
425+
426+ def set_up_managed_identity (self ):
427+ if self .get_argument_system_assigned () is not None or self .get_argument_user_assigned () is not None :
428+ identity_def = deepcopy (ManagedServiceIdentity )
429+ identity_def ["type" ] = "None"
430+
431+ assign_system_identity = self .get_argument_system_assigned ()
432+ if self .get_argument_user_assigned ():
433+ assign_user_identities = [x .lower () for x in self .get_argument_user_assigned ()]
434+ else :
435+ assign_user_identities = []
436+
437+ identity = self .get_argument_registry_identity ()
438+ if identity :
439+ if is_registry_msi_system (identity ):
440+ assign_system_identity = True
441+ else :
442+ assign_user_identities .append (self .get_argument_registry_identity ())
443+
444+ if assign_system_identity and assign_user_identities :
445+ identity_def ["type" ] = "SystemAssigned, UserAssigned"
446+ elif assign_system_identity :
447+ identity_def ["type" ] = "SystemAssigned"
448+ elif assign_user_identities :
449+ identity_def ["type" ] = "UserAssigned"
450+
451+ if assign_user_identities :
452+ identity_def ["userAssignedIdentities" ] = {}
453+ subscription_id = get_subscription_id (self .cmd .cli_ctx )
454+
455+ for r in assign_user_identities :
456+ r = _ensure_identity_resource_id (subscription_id , self .get_argument_resource_group_name (), r )
457+ identity_def ["userAssignedIdentities" ][r ] = {} # pylint: disable=unsupported-assignment-operation
458+
459+ safe_set (self .session_pool_def , "identity" , value = identity_def )
460+
461+ def set_up_managed_identity_settings (self ):
462+ managed_identity_settings = []
463+ if self .get_argument_system_assigned ():
464+ managed_identity_setting = {
465+ "identity" : "system" ,
466+ "lifecycle" : "Main"
467+ }
468+ managed_identity_settings .append (managed_identity_setting )
469+
470+ if self .get_argument_user_assigned ():
471+ for x in self .get_argument_user_assigned ():
472+ managed_identity_setting = {
473+ "identity" : x .lower (),
474+ "lifecycle" : "Main"
475+ }
476+ managed_identity_settings .append (managed_identity_setting )
477+ if managed_identity_settings :
478+ safe_set (self .session_pool_def , "properties" , "managedIdentitySettings" , value = managed_identity_settings )
423479
424480 def set_up_dynamic_configuration (self ):
425481 if self .get_argument_cooldown_period_in_seconds () is not None :
@@ -489,15 +545,16 @@ def set_up_container(self, customer_container_template):
489545 def set_up_registry_auth_configuration (self , secrets_def , customer_container_template ):
490546 if self .has_registry_change ():
491547 if safe_get (customer_container_template , "registryCredentials" ) is None :
492- if self .get_argument_registry_server () is None or (self .get_argument_registry_user () is None or self .get_argument_registry_pass () is None ):
548+ if self .get_argument_registry_server () is None or (self .get_argument_registry_identity () is None and ( self . get_argument_registry_user () is None or self .get_argument_registry_pass () is None ) ):
493549 raise ValidationError ("The existing registry credentials are empty. \n "
494- "Please provide --registry-server, --registry-username, and --registry-password to update the registry credentials. \n "
495- "If you want to use managed identity for registry, please use `az containerapp sessionpool create --registry-server myregistry.azurecr.io --registry-identity MyUserIdentityResourceId`.\n " )
550+ "Please provide --registry-server, --registry-username, --registry-password or --registry-identity to update the registry credentials. \n " )
496551 safe_set (customer_container_template , "registryCredentials" , value = {})
497552 if self .get_argument_registry_server () is not None :
498553 safe_set (customer_container_template , "registryCredentials" , "server" , value = self .get_argument_registry_server ())
499554 if self .get_argument_registry_user () is not None :
500555 safe_set (customer_container_template , "registryCredentials" , "username" , value = self .get_argument_registry_user ())
556+ if self .get_argument_registry_identity () is not None :
557+ safe_set (customer_container_template , "registryCredentials" , "identity" , value = self .get_argument_registry_identity ())
501558 if secrets_def is None :
502559 secrets_def = []
503560 if self .get_argument_registry_pass () is not None :
@@ -542,7 +599,8 @@ def has_container_change(self):
542599 def has_registry_change (self ):
543600 return (self .get_argument_registry_server () is not None or
544601 self .get_argument_registry_user () is not None or
545- self .get_argument_registry_pass () is not None )
602+ self .get_argument_registry_pass () is not None or
603+ self .get_argument_registry_identity () is not None )
546604
547605 def has_target_port_change (self ):
548606 return self .get_argument_target_port () is not None
0 commit comments