88from azure .cli .core .azclierror import InvalidArgumentValueError
99from azure .cli .core .commands .client_factory import get_subscription_id
1010from azure .core .serialization import NULL as AzureCoreNull
11+ from azure .mgmt .containerregistry .models import (
12+ CacheRule ,
13+ CacheRuleProperties ,
14+ CacheRuleUpdateParameters ,
15+ CacheRuleUpdateProperties ,
16+ IdentityProperties ,
17+ UserIdentityProperties
18+ )
1119
1220
1321def acr_cache_show (cmd ,
@@ -54,9 +62,12 @@ def acr_cache_create(cmd,
5462 source_repo ,
5563 target_repo ,
5664 resource_group_name = None ,
57- cred_set = None ):
65+ cred_set = None ,
66+ identity = None ):
5867
5968 rg = get_resource_group_name_by_registry_name (cmd .cli_ctx , registry_name , resource_group_name )
69+
70+ # Handle credential set
6071 if cred_set :
6172 sub_id = get_subscription_id (cmd .cli_ctx )
6273 # Format the credential set ID using subscription ID, resource group, registry name, and credential set name
@@ -69,13 +80,29 @@ def acr_cache_create(cmd,
6980 else :
7081 cred_set_id = AzureCoreNull
7182
72- CacheRuleCreateParameters = cmd .get_models ('CacheRule' , operation_group = 'cache_rules' )
83+ # Handle identity
84+ identity_properties = None
85+ if identity :
86+ # Create IdentityProperties with UserAssigned type
87+ identity_properties = IdentityProperties (
88+ type = "UserAssigned" ,
89+ user_assigned_identities = {
90+ identity : UserIdentityProperties ()
91+ }
92+ )
93+
94+ # Create cache rule properties
95+ cache_rule_properties = CacheRuleProperties (
96+ source_repository = source_repo ,
97+ target_repository = target_repo ,
98+ credential_set_resource_id = cred_set_id
99+ )
73100
74- cache_rule_create_params = CacheRuleCreateParameters ()
75- cache_rule_create_params . name = name
76- cache_rule_create_params . source_repository = source_repo
77- cache_rule_create_params . target_repository = target_repo
78- cache_rule_create_params . credential_set_resource_id = cred_set_id
101+ # Create cache rule with direct SDK model
102+ cache_rule_create_params = CacheRule (
103+ properties = cache_rule_properties ,
104+ identity = identity_properties
105+ )
79106
80107 return client .begin_create (resource_group_name = rg ,
81108 registry_name = registry_name ,
@@ -88,35 +115,57 @@ def acr_cache_update_custom(cmd,
88115 registry_name ,
89116 resource_group_name = None ,
90117 cred_set = None ,
91- remove_cred_set = False ):
118+ remove_cred_set = False ,
119+ identity = None ):
92120
93- if cred_set is None and remove_cred_set is False :
94- raise InvalidArgumentValueError ("You must either update the credential set ID or remove it." )
121+ # Check if any update parameters are provided
122+ has_cred_update = cred_set is not None or remove_cred_set
123+ has_identity_update = identity is not None
95124
96- if remove_cred_set :
97- cred_set_id = AzureCoreNull
98- else :
99- sub_id = get_subscription_id (cmd .cli_ctx )
100- rg = get_resource_group_name_by_registry_name (cmd .cli_ctx , registry_name , resource_group_name )
101- # Format the credential set ID using subscription ID, resource group, registry name, and credential set name
102- cred_set_id = CREDENTIAL_SET_RESOURCE_ID_TEMPLATE .format (
103- sub_id = sub_id ,
104- rg = rg ,
105- reg_name = registry_name ,
106- cred_set_name = cred_set
125+ if not has_cred_update and not has_identity_update :
126+ raise InvalidArgumentValueError (
127+ "You must provide at least one parameter to update "
128+ "(credential set, identity, or removal flag)."
107129 )
108130
109- instance .credential_set_resource_id = cred_set_id
131+ # initialize properties if not already set
132+ if instance .properties is None :
133+ instance .properties = CacheRuleUpdateProperties ()
134+
135+ # Handle credential set updates
136+ if has_cred_update :
137+ if remove_cred_set :
138+ instance .properties .credential_set_resource_id = AzureCoreNull
139+ else :
140+ sub_id = get_subscription_id (cmd .cli_ctx )
141+ rg = get_resource_group_name_by_registry_name (cmd .cli_ctx , registry_name , resource_group_name )
142+ # Format the credential set ID using subscription ID, resource group, registry name, and credential set name
143+ cred_set_id = CREDENTIAL_SET_RESOURCE_ID_TEMPLATE .format (
144+ sub_id = sub_id ,
145+ rg = rg ,
146+ reg_name = registry_name ,
147+ cred_set_name = cred_set
148+ )
149+ instance .properties .credential_set_resource_id = cred_set_id
150+
151+ # Handle identity updates
152+ if has_identity_update and identity :
153+ # Create IdentityProperties with UserAssigned type
154+ identity_properties = IdentityProperties (
155+ type = "UserAssigned" ,
156+ user_assigned_identities = {
157+ identity : UserIdentityProperties ()
158+ }
159+ )
160+ instance .identity = identity_properties
110161
111162 return instance
112163
113164
114- def acr_cache_update_get (cmd ):
165+ def acr_cache_update_get (cmd ): # pylint: disable=unused-argument
115166 """Returns an empty CacheRuleUpdateParameters object.
116167 """
117168
118- CacheRuleUpdateParameters = cmd .get_models ('CacheRuleUpdateParameters' , operation_group = 'cache_rules' )
119-
120169 return CacheRuleUpdateParameters ()
121170
122171
0 commit comments