Skip to content

Commit aaffbc5

Browse files
authoredJun 30, 2021
[Container Registry] Migrate to track2 SDK (Azure#18611)
1 parent 8cb75ca commit aaffbc5

40 files changed

+4081
-4239
lines changed
 

‎src/azure-cli-core/azure/cli/core/profiles/_shared.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,12 @@ def default_api_version(self):
165165
'role_definitions': '2018-01-01-preview',
166166
'provider_operations_metadata': '2018-01-01-preview'
167167
}),
168-
ResourceType.MGMT_CONTAINERREGISTRY: '2020-11-01-preview',
168+
ResourceType.MGMT_CONTAINERREGISTRY: SDKProfile('2020-11-01-preview', {
169+
'agent_pools': '2019-06-01-preview',
170+
'tasks': '2019-06-01-preview',
171+
'task_runs': '2019-06-01-preview',
172+
'runs': '2019-06-01-preview',
173+
}),
169174
ResourceType.DATA_KEYVAULT: '7.0',
170175
ResourceType.DATA_PRIVATE_KEYVAULT: '7.2',
171176
ResourceType.DATA_KEYVAULT_ADMINISTRATION_BACKUP: '7.2-preview',

‎src/azure-cli/azure/cli/command_modules/acr/__init__.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ class ACRCommandsLoader(AzCommandsLoader):
1313
def __init__(self, cli_ctx=None):
1414
from azure.cli.core.profiles import ResourceType
1515
super(ACRCommandsLoader, self).__init__(cli_ctx=cli_ctx,
16-
resource_type=ResourceType.MGMT_CONTAINERREGISTRY)
16+
resource_type=ResourceType.MGMT_CONTAINERREGISTRY,
17+
operation_group='webhooks')
1718

1819
def load_command_table(self, args):
1920
from azure.cli.command_modules.acr.commands import load_command_table

‎src/azure-cli/azure/cli/command_modules/acr/_agentpool_polling.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
import time
77

88
from msrest import Deserializer
9-
from msrest.polling import PollingMethod, LROPoller
10-
from msrestazure.azure_exceptions import CloudError
9+
from azure.core.exceptions import HttpResponseError
10+
from azure.core.polling import PollingMethod, LROPoller
1111

1212
from ._constants import get_acr_task_models, get_succeeded_agentpool_status, get_finished_agentpool_status
1313

@@ -26,7 +26,7 @@ def deserialize_agentpool(response):
2626
return LROPoller(
2727
client=client,
2828
initial_response=client.get(
29-
resource_group_name, registry_name, agent_pool_name, raw=True),
29+
resource_group_name, registry_name, agent_pool_name, cls=lambda x, y, z: x),
3030
deserialization_callback=deserialize_agentpool,
3131
polling_method=RunPolling(
3232
cmd=cmd,
@@ -50,9 +50,9 @@ def __init__(self, cmd, registry_name, agent_pool_name, timeout=30):
5050
self.operation_result = None
5151

5252
def initialize(self, client, initial_response, deserialization_callback):
53-
self._client = client
53+
self._client = client._client # pylint: disable=protected-access
5454
self._response = initial_response
55-
self._url = initial_response.request.url
55+
self._url = initial_response.http_request.url
5656
self._deserialize = deserialization_callback
5757

5858
self._set_operation_status(initial_response)
@@ -84,13 +84,13 @@ def resource(self):
8484

8585
def _set_operation_status(self, response):
8686
AgentPoolStatus = self._cmd.get_models('ProvisioningState')
87-
if response.status_code == 200 or response.status_code == 404:
87+
if response.http_response.status_code == 200 or response.http_response.status_code == 404:
8888
self.operation_result = self._deserialize(response)
8989
self.operation_status = self.operation_result.provisioning_state or AgentPoolStatus.succeeded.value
9090
return
91-
raise CloudError(response)
91+
raise HttpResponseError(response)
9292

9393
def _update_status(self):
94-
self._response = self._client.send(
94+
self._response = self._client._pipeline.run( # pylint: disable=protected-access
9595
self._client.get(self._url), stream=False)
9696
self._set_operation_status(self._response)

‎src/azure-cli/azure/cli/command_modules/acr/_constants.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -42,22 +42,22 @@ def get_premium_sku(cmd):
4242

4343

4444
def get_valid_os(cmd):
45-
OS = cmd.get_models('OS')
45+
OS = cmd.get_models('OS', operation_group='task_runs')
4646
return [item.value.lower() for item in OS]
4747

4848

4949
def get_valid_architecture(cmd):
50-
Architecture = cmd.get_models('Architecture')
50+
Architecture = cmd.get_models('Architecture', operation_group='task_runs')
5151
return [item.value.lower() for item in Architecture]
5252

5353

5454
def get_valid_variant(cmd):
55-
Variant = cmd.get_models('Variant')
55+
Variant = cmd.get_models('Variant', operation_group='task_runs')
5656
return [item.value.lower() for item in Variant]
5757

5858

5959
def get_finished_run_status(cmd):
60-
RunStatus = cmd.get_models('RunStatus')
60+
RunStatus = cmd.get_models('RunStatus', operation_group='task_runs')
6161
return [RunStatus.succeeded.value,
6262
RunStatus.failed.value,
6363
RunStatus.canceled.value,
@@ -66,22 +66,22 @@ def get_finished_run_status(cmd):
6666

6767

6868
def get_succeeded_run_status(cmd):
69-
RunStatus = cmd.get_models('RunStatus')
69+
RunStatus = cmd.get_models('RunStatus', operation_group='task_runs')
7070
return [RunStatus.succeeded.value]
7171

7272

7373
def get_acr_task_models(cmd):
7474
from azure.cli.core.profiles import get_sdk
75-
return get_sdk(cmd.cli_ctx, ResourceType.MGMT_CONTAINERREGISTRY, 'models')
75+
return get_sdk(cmd.cli_ctx, ResourceType.MGMT_CONTAINERREGISTRY, 'models', operation_group='tasks')
7676

7777

7878
def get_succeeded_agentpool_status(cmd):
79-
AgentPoolStatus = cmd.get_models('ProvisioningState')
79+
AgentPoolStatus = cmd.get_models('ProvisioningState', operation_group='agent_pools')
8080
return [AgentPoolStatus.succeeded.value]
8181

8282

8383
def get_finished_agentpool_status(cmd):
84-
AgentPoolStatus = cmd.get_models('ProvisioningState')
84+
AgentPoolStatus = cmd.get_models('ProvisioningState', operation_group='agent_pools')
8585
return [AgentPoolStatus.succeeded.value,
8686
AgentPoolStatus.failed.value,
8787
AgentPoolStatus.canceled.value]

‎src/azure-cli/azure/cli/command_modules/acr/_params.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,13 @@
4747

4848

4949
def load_arguments(self, _): # pylint: disable=too-many-statements
50-
SkuName, PasswordName, DefaultAction, PolicyStatus, WebhookAction, WebhookStatus, TaskStatus, \
51-
BaseImageTriggerType, RunStatus, SourceRegistryLoginMode, UpdateTriggerPayloadType, \
50+
SkuName, PasswordName, DefaultAction, PolicyStatus, WebhookAction, WebhookStatus, \
5251
TokenStatus, ZoneRedundancy = self.get_models(
5352
'SkuName', 'PasswordName', 'DefaultAction', 'PolicyStatus', 'WebhookAction', 'WebhookStatus',
54-
'TaskStatus', 'BaseImageTriggerType', 'RunStatus', 'SourceRegistryLoginMode', 'UpdateTriggerPayloadType',
5553
'TokenStatus', 'ZoneRedundancy')
54+
TaskStatus, BaseImageTriggerType, SourceRegistryLoginMode, UpdateTriggerPayloadType = self.get_models(
55+
'TaskStatus', 'BaseImageTriggerType', 'SourceRegistryLoginMode', 'UpdateTriggerPayloadType', operation_group='tasks')
56+
RunStatus = self.get_models('RunStatus', operation_group='runs')
5657

5758
with self.argument_context('acr') as c:
5859
c.argument('tags', arg_type=tags_type)

‎src/azure-cli/azure/cli/command_modules/acr/_run_polling.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66
import time
77

8+
from azure.core.polling import PollingMethod, LROPoller
89
from msrest import Deserializer
9-
from msrest.polling import PollingMethod, LROPoller
1010
from msrestazure.azure_exceptions import CloudError
1111

1212
from ._constants import get_acr_task_models, get_finished_run_status, get_succeeded_run_status
@@ -26,7 +26,7 @@ def deserialize_run(response):
2626
return LROPoller(
2727
client=client,
2828
initial_response=client.get(
29-
resource_group_name, registry_name, run_id, raw=True),
29+
resource_group_name, registry_name, run_id, cls=lambda x, y, z: x),
3030
deserialization_callback=deserialize_run,
3131
polling_method=RunPolling(
3232
cmd=cmd,
@@ -50,9 +50,9 @@ def __init__(self, cmd, registry_name, run_id, timeout=30):
5050
self.operation_result = None
5151

5252
def initialize(self, client, initial_response, deserialization_callback):
53-
self._client = client
53+
self._client = client._client # pylint: disable=protected-access
5454
self._response = initial_response
55-
self._url = initial_response.request.url
55+
self._url = initial_response.http_request.url
5656
self._deserialize = deserialization_callback
5757

5858
self._set_operation_status(initial_response)
@@ -86,13 +86,13 @@ def resource(self):
8686

8787
def _set_operation_status(self, response):
8888
RunStatus = self._cmd.get_models('RunStatus')
89-
if response.status_code == 200:
89+
if response.http_response.status_code == 200:
9090
self.operation_result = self._deserialize(response)
9191
self.operation_status = self.operation_result.status or RunStatus.queued.value
9292
return
9393
raise CloudError(response)
9494

9595
def _update_status(self):
96-
self._response = self._client.send(
96+
self._response = self._client._pipeline.run( # pylint: disable=protected-access
9797
self._client.get(self._url), stream=False)
9898
self._set_operation_status(self._response)

‎src/azure-cli/azure/cli/command_modules/acr/_utils.py

+15-14
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
from knack.util import CLIError
1010
from knack.log import get_logger
1111

12-
from msrestazure.azure_exceptions import CloudError
1312
from azure.cli.core.commands import LongRunningOperation
1413
from azure.cli.core.commands.parameters import get_resources_in_subscription
14+
from azure.core.exceptions import ResourceNotFoundError
1515

1616
from ._constants import (
1717
REGISTRY_RESOURCE_TYPE,
@@ -198,7 +198,8 @@ def get_validate_platform(cmd, platform):
198198
"""Gets and validates the Platform from both flags
199199
:param str platform: The name of Platform passed by user in --platform flag
200200
"""
201-
OS, Architecture = cmd.get_models('OS', 'Architecture')
201+
OS, Architecture = cmd.get_models('OS', 'Architecture', operation_group='runs')
202+
202203
# Defaults
203204
platform_os = OS.linux.value
204205
platform_arch = Architecture.amd64.value
@@ -285,10 +286,14 @@ def get_custom_registry_credentials(cmd,
285286
:param str password: The password for custom registry (plain text or a key vault secret URI)
286287
:param str identity: The task managed identity used for the credential
287288
"""
289+
Credentials, SourceRegistryCredentials, CustomRegistryCredentials, SecretObject, \
290+
SecretObjectType = cmd.get_models(
291+
'Credentials', 'CustomRegistryCredentials', 'SourceRegistryCredentials', 'SecretObject',
292+
'SecretObjectType',
293+
operation_group='tasks')
288294

289295
source_registry_credentials = None
290296
if auth_mode:
291-
SourceRegistryCredentials = cmd.get_models('SourceRegistryCredentials')
292297
source_registry_credentials = SourceRegistryCredentials(
293298
login_mode=auth_mode)
294299

@@ -301,11 +306,6 @@ def get_custom_registry_credentials(cmd,
301306
if not username and not password:
302307
is_identity_credential = identity is not None
303308

304-
CustomRegistryCredentials, SecretObject, SecretObjectType = cmd.get_models(
305-
'CustomRegistryCredentials',
306-
'SecretObject',
307-
'SecretObjectType')
308-
309309
if not is_remove:
310310
if is_identity_credential:
311311
custom_reg_credential = CustomRegistryCredentials(
@@ -328,17 +328,15 @@ def get_custom_registry_credentials(cmd,
328328

329329
custom_registries = {login_server: custom_reg_credential}
330330

331-
Credentials = cmd.get_models('Credentials')
332331
return Credentials(
333332
source_registry=source_registry_credentials,
334333
custom_registries=custom_registries
335334
)
336335

337336

338337
def build_timers_info(cmd, schedules):
339-
TimerTrigger, TriggerStatus = cmd.get_models(
340-
'TimerTrigger', 'TriggerStatus')
341338
timer_triggers = []
339+
TriggerStatus, TimerTrigger = cmd.get_models('TriggerStatus', 'TimerTrigger', operation_group='tasks')
342340

343341
# Provide a default name for the timer if no name was provided.
344342
for index, schedule in enumerate(schedules, start=1):
@@ -507,11 +505,14 @@ def create_default_scope_map(cmd,
507505
raise CLIError('The default scope map was already configured with different repository permissions.' +
508506
'\nPlease use "az acr scope-map update -r {} -n {} --add <REPO> --remove <REPO>" to update.'
509507
.format(registry_name, scope_map_name))
510-
except CloudError:
508+
except ResourceNotFoundError:
511509
pass
512510
logger.info('Creating a scope map "%s" for provided permissions.', scope_map_name)
513-
poller = scope_map_client.create(resource_group_name, registry_name, scope_map_name,
514-
actions, scope_map_description)
511+
scope_map_request = {
512+
'actions': actions,
513+
'scope_map_description': scope_map_description
514+
}
515+
poller = scope_map_client.begin_create(resource_group_name, registry_name, scope_map_name, scope_map_request)
515516
scope_map = LongRunningOperation(cmd.cli_ctx)(poller)
516517
return scope_map
517518

‎src/azure-cli/azure/cli/command_modules/acr/agentpool.py

+16-12
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def acr_agentpool_create(cmd,
3232
registry, resource_group_name = get_registry_by_name(
3333
cmd.cli_ctx, registry_name, resource_group_name)
3434

35-
AgentPool = cmd.get_models('AgentPool')
35+
AgentPool = cmd.get_models('AgentPool', operation_group='agent_pools')
3636

3737
agentpool_create_parameters = AgentPool(
3838
location=registry.location,
@@ -43,10 +43,10 @@ def acr_agentpool_create(cmd,
4343
)
4444

4545
try:
46-
return client.create(resource_group_name=resource_group_name,
47-
registry_name=registry_name,
48-
agent_pool_name=agent_pool_name,
49-
agent_pool=agentpool_create_parameters)
46+
return client.begin_create(resource_group_name=resource_group_name,
47+
registry_name=registry_name,
48+
agent_pool_name=agent_pool_name,
49+
agent_pool=agentpool_create_parameters)
5050
except ValidationError as e:
5151
raise CLIError(e)
5252

@@ -61,11 +61,15 @@ def acr_agentpool_update(cmd,
6161
_, resource_group_name = validate_managed_registry(
6262
cmd, registry_name, resource_group_name)
6363

64+
AgentPoolUpdateParameters = cmd.get_models('AgentPoolUpdateParameters', operation_group='agent_pools')
65+
66+
update_parameters = AgentPoolUpdateParameters(count=count)
67+
6468
try:
65-
return client.update(resource_group_name=resource_group_name,
66-
registry_name=registry_name,
67-
agent_pool_name=agent_pool_name,
68-
count=count)
69+
return client.begin_update(resource_group_name=resource_group_name,
70+
registry_name=registry_name,
71+
agent_pool_name=agent_pool_name,
72+
update_parameters=update_parameters)
6973
except ValidationError as e:
7074
raise CLIError(e)
7175

@@ -84,9 +88,9 @@ def acr_agentpool_delete(cmd,
8488
user_confirmation("Are you sure you want to delete the agentpool '{}' in registry '{}'?".format(
8589
agent_pool_name, registry_name), yes)
8690
try:
87-
response = client.delete(resource_group_name=resource_group_name,
88-
registry_name=registry_name,
89-
agent_pool_name=agent_pool_name)
91+
response = client.begin_delete(resource_group_name=resource_group_name,
92+
registry_name=registry_name,
93+
agent_pool_name=agent_pool_name)
9094

9195
if no_wait:
9296
logger.warning("Started to delete the agent pool '%s': %s", agent_pool_name, response.status())

‎src/azure-cli/azure/cli/command_modules/acr/credential.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ def acr_credential_show(cmd, client, registry_name, resource_group_name=None):
1919

2020
def acr_credential_renew(cmd, client, registry_name, password_name, resource_group_name=None):
2121
registry, resource_group_name = get_registry_by_name(cmd.cli_ctx, registry_name, resource_group_name)
22-
22+
regenerate_credential_parameters = {'name': password_name}
2323
if registry.admin_user_enabled: # pylint: disable=no-member
2424
return client.regenerate_credential(
25-
resource_group_name, registry_name, password_name)
25+
resource_group_name, registry_name, regenerate_credential_parameters)
2626

2727
raise admin_not_enabled_error(registry_name)
2828

0 commit comments

Comments
 (0)
Please sign in to comment.