@@ -625,8 +625,9 @@ def create_application(cmd, client, display_name, identifier_uris=None,
625625 if len (existing_apps ) == 1 :
626626 logger .warning ("Found an existing application instance: (id) %s. We will patch it." ,
627627 existing_apps [0 ][ID ])
628- body = update_application (
629- existing_apps [0 ], display_name = display_name , identifier_uris = identifier_uris ,
628+ update_application (
629+ client , existing_apps [0 ][ID ],
630+ display_name = display_name , identifier_uris = identifier_uris ,
630631 is_fallback_public_client = is_fallback_public_client , sign_in_audience = sign_in_audience ,
631632 # keyCredentials
632633 key_value = key_value , key_type = key_type , key_usage = key_usage ,
@@ -642,7 +643,6 @@ def create_application(cmd, client, display_name, identifier_uris=None,
642643 app_roles = app_roles ,
643644 optional_claims = optional_claims ,
644645 required_resource_accesses = required_resource_accesses )
645- patch_application (cmd , existing_apps [0 ][ID ], body )
646646
647647 # no need to resolve identifierUris or appId. Just use id.
648648 return client .application_get (existing_apps [0 ][ID ])
@@ -680,7 +680,7 @@ def create_application(cmd, client, display_name, identifier_uris=None,
680680 return result
681681
682682
683- def update_application (instance , display_name = None , identifier_uris = None , # pylint: disable=unused-argument
683+ def update_application (client , identifier , display_name = None , identifier_uris = None ,
684684 is_fallback_public_client = None , sign_in_audience = None ,
685685 # keyCredentials
686686 key_value = None , key_type = None , key_usage = None , start_date = None , end_date = None ,
@@ -691,8 +691,11 @@ def update_application(instance, display_name=None, identifier_uris=None, # pyl
691691 # publicClient
692692 public_client_redirect_uris = None ,
693693 # JSON properties
694- app_roles = None , optional_claims = None , required_resource_accesses = None ):
694+ app_roles = None , optional_claims = None , required_resource_accesses = None ,
695+ # Generic update
696+ parameters = None , properties_to_set = None ):
695697 body = {}
698+ _update_patch_body (body , parameters , properties_to_set )
696699
697700 key_credentials = None
698701 if key_value :
@@ -714,14 +717,8 @@ def update_application(instance, display_name=None, identifier_uris=None, # pyl
714717 # JSON properties
715718 app_roles = app_roles , optional_claims = optional_claims , required_resource_accesses = required_resource_accesses
716719 )
717-
718- return body
719-
720-
721- def patch_application (cmd , identifier , parameters ):
722- graph_client = _graph_client_factory (cmd .cli_ctx )
723- object_id = _resolve_application (graph_client , identifier )
724- return graph_client .application_update (object_id , parameters )
720+ object_id = _resolve_application (client , identifier )
721+ return client .application_update (object_id , body )
725722
726723
727724def show_application (client , identifier ):
@@ -1013,15 +1010,14 @@ def create_service_principal(cmd, identifier):
10131010 return _create_service_principal (cmd .cli_ctx , identifier )
10141011
10151012
1016- def update_service_principal (instance ): # pylint: disable=unused-argument
1013+ def update_service_principal (client , identifier ,
1014+ # Generic update
1015+ parameters = None , properties_to_set = None ):
10171016 # Do not PATCH back properties retrieved with GET and leave everything else to generic update.
1018- return {}
1019-
1020-
1021- def patch_service_principal (cmd , identifier , parameters ):
1022- graph_client = _graph_client_factory (cmd .cli_ctx )
1023- object_id = _resolve_service_principal (graph_client , identifier )
1024- return graph_client .service_principal_update (object_id , parameters )
1017+ body = {}
1018+ _update_patch_body (body , parameters , properties_to_set )
1019+ object_id = _resolve_service_principal (client , identifier )
1020+ return client .service_principal_update (object_id , body )
10251021
10261022
10271023def _create_service_principal (cli_ctx , identifier , resolve_app = True ):
@@ -1989,3 +1985,26 @@ def _get_member_groups(get_member_group_func, identifier, security_enabled_only)
19891985 "securityEnabledOnly" : security_enabled_only
19901986 }
19911987 return get_member_group_func (identifier , body )
1988+
1989+
1990+ def _update_patch_body (body , parameters , properties_to_set ):
1991+ # --parameters
1992+ if parameters :
1993+ body .update (parameters )
1994+
1995+ # --set
1996+ if properties_to_set :
1997+ for exp in properties_to_set :
1998+ try :
1999+ key , value = exp .split ('=' , 1 )
2000+ except ValueError as ex :
2001+ from azure .cli .core .azclierror import ArgumentUsageError
2002+ raise ArgumentUsageError ('Usage error: Please set properties with space-separated list of '
2003+ '{name}={string or JSON}, such as `--set displayName=myapp`' ) from ex
2004+ # Try parsing value as JSON
2005+ try :
2006+ value = shell_safe_json_parse (value )
2007+ except : # pylint:disable=bare-except
2008+ pass
2009+ body [key ] = value
2010+ return body
0 commit comments