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
@@ -68,14 +79,30 @@ def acr_cache_create(cmd,
6879 )
6980 else :
7081 cred_set_id = AzureCoreNull
82+
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+ )
7193
72- CacheRuleCreateParameters = cmd .get_models ('CacheRule' , operation_group = 'cache_rules' )
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,25 +115,50 @@ def acr_cache_update_custom(cmd,
88115 registry_name ,
89116 resource_group_name = None ,
90117 cred_set = None ,
91- remove_cred_set = False ):
92-
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." )
95-
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
107- )
108-
109- instance .credential_set_resource_id = cred_set_id
118+ remove_cred_set = False ,
119+ identity = None ):
120+
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
124+
125+ if not has_cred_update and not has_identity_update :
126+ raise InvalidArgumentValueError ("You must provide at least one parameter to update (credential set, identity, or removal flag)." )
127+
128+ #initilize properties if not already set
129+ if instance .properties is None :
130+ instance .properties = CacheRuleUpdateProperties ()
131+
132+ # Handle credential set updates
133+ if has_cred_update :
134+ if remove_cred_set :
135+ instance .properties .credential_set_resource_id = AzureCoreNull
136+ else :
137+ sub_id = get_subscription_id (cmd .cli_ctx )
138+ rg = get_resource_group_name_by_registry_name (cmd .cli_ctx , registry_name , resource_group_name )
139+ # Format the credential set ID using subscription ID, resource group, registry name, and credential set name
140+ cred_set_id = CREDENTIAL_SET_RESOURCE_ID_TEMPLATE .format (
141+ sub_id = sub_id ,
142+ rg = rg ,
143+ reg_name = registry_name ,
144+ cred_set_name = cred_set
145+ )
146+ instance .properties .credential_set_resource_id = cred_set_id
147+
148+ # Handle identity updates
149+ if has_identity_update :
150+ if identity :
151+ # Create IdentityProperties with UserAssigned type
152+ identity_properties = IdentityProperties (
153+ type = "UserAssigned" ,
154+ user_assigned_identities = {
155+ identity : UserIdentityProperties ()
156+ }
157+ )
158+ instance .identity = identity_properties
159+ else :
160+ # Remove identity by setting to None
161+ instance .identity = None
110162
111163 return instance
112164
@@ -115,8 +167,6 @@ def acr_cache_update_get(cmd):
115167 """Returns an empty CacheRuleUpdateParameters object.
116168 """
117169
118- CacheRuleUpdateParameters = cmd .get_models ('CacheRuleUpdateParameters' , operation_group = 'cache_rules' )
119-
120170 return CacheRuleUpdateParameters ()
121171
122172
0 commit comments