Skip to content

Commit e6caf4a

Browse files
[ACR] az acr create/check-name: Add parameter --dnl-scope for domain name label hash (#30638)
* DNL cli implementation * whitespace * whitespace * whitespace * whitespace * whitespace * run tests * Revert "run tests" This reverts commit f0901ad. * DNL cli implementation * whitespace * whitespace * whitespace * whitespace * whitespace * run tests * Revert "run tests" This reverts commit f0901ad. * address comments * backtick * ws * DNL cli implementation * whitespace * whitespace * whitespace * whitespace * whitespace * run tests * Revert "run tests" This reverts commit f0901ad. * address comments * backtick * ws * change to check-name model * spacing * fix cache test * fix cache test * fix cmk test * fix cmk test * Update azure-mgmt-containerservice to version 34.2.0 * Resolve failing test by accounting for previous api versions without access to DNL model * walrus operator * Delete src/azure-cli/azure/cli/command_modules/acr/tests/.vscode/settings.json * Update recordings * mask secrets * fix CMK test * rerun test * Modify tests and mask secrets, switch to personal sub instead of teamwide sub to prevent long recordings * allow large responses * managed registry live only * removed acr credential test from core_registry_scenario * fix test * Update versions on tokens and scopemaps on client factory * Fix * Mask passwords in test recordings to 52 char * mask secret to 52 char * make containerapp live only * Add live_only decorator to test method make repository token live only * add missing end " * remove live_only from repository token create * address comments * d * Address code style and make task live_only * remove secrets * rerun tests --------- Co-authored-by: Saravanan Varadharajan <[email protected]>
1 parent 0538e58 commit e6caf4a

File tree

63 files changed

+26521
-25105
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+26521
-25105
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ def default_api_version(self):
195195
'role_definitions': '2022-05-01-preview',
196196
'provider_operations_metadata': '2018-01-01-preview'
197197
}),
198-
ResourceType.MGMT_CONTAINERREGISTRY: SDKProfile('2023-11-01-preview', {
198+
ResourceType.MGMT_CONTAINERREGISTRY: SDKProfile('2024-11-01-preview', {
199199
'agent_pools': '2019-06-01-preview',
200200
'tasks': '2019-06-01-preview',
201201
'task_runs': '2019-06-01-preview',
@@ -439,6 +439,7 @@ def default_api_version(self):
439439
'VERSION_2021_08_01_PREVIEW': "2021-08-01-preview",
440440
'VERSION_2022_02_01_PREVIEW': "2022-02-01-preview",
441441
'VERSION_2023_11_01_PREVIEW': "2023-11-01-preview",
442+
'VERSION_2024_11_01_PREVIEW': "2024-11-01-preview",
442443
},
443444
ResourceType.MGMT_CONTAINERSERVICE: {
444445
# src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py:50

src/azure-cli/azure/cli/command_modules/acr/_client_factory.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
VERSION_2021_08_01_PREVIEW = "2021-08-01-preview"
1212
VERSION_2022_02_01_PREVIEW = "2022-02-01-preview"
1313
VERSION_2023_01_01_PREVIEW = "2023-01-01-preview"
14+
VERSION_2024_11_01_PREVIEW = "2024-11-01-preview"
1415

1516

1617
def get_acr_service_client(cli_ctx, api_version=None):
@@ -65,15 +66,15 @@ def cf_acr_runs(cli_ctx, *_):
6566

6667

6768
def cf_acr_scope_maps(cli_ctx, *_):
68-
return get_acr_service_client(cli_ctx, VERSION_2020_11_01_PREVIEW).scope_maps
69+
return get_acr_service_client(cli_ctx, VERSION_2024_11_01_PREVIEW).scope_maps
6970

7071

7172
def cf_acr_tokens(cli_ctx, *_):
72-
return get_acr_service_client(cli_ctx, VERSION_2020_11_01_PREVIEW).tokens
73+
return get_acr_service_client(cli_ctx, VERSION_2024_11_01_PREVIEW).tokens
7374

7475

7576
def cf_acr_token_credentials(cli_ctx, *_):
76-
return get_acr_service_client(cli_ctx, VERSION_2020_11_01_PREVIEW).registries
77+
return get_acr_service_client(cli_ctx, VERSION_2024_11_01_PREVIEW).registries
7778

7879

7980
def cf_acr_agentpool(cli_ctx, *_):

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@
7373

7474
def load_arguments(self, _): # pylint: disable=too-many-statements
7575
PasswordName, DefaultAction, PolicyStatus, WebhookAction, WebhookStatus, \
76-
TokenStatus, ZoneRedundancy = self.get_models(
76+
TokenStatus, ZoneRedundancy, AutoGeneratedDomainNameLabelScope = self.get_models(
7777
'PasswordName', 'DefaultAction', 'PolicyStatus', 'WebhookAction', 'WebhookStatus',
78-
'TokenStatus', 'ZoneRedundancy')
78+
'TokenStatus', 'ZoneRedundancy', 'AutoGeneratedDomainNameLabelScope')
7979
TaskStatus, BaseImageTriggerType, SourceRegistryLoginMode, UpdateTriggerPayloadType = self.get_models(
8080
'TaskStatus', 'BaseImageTriggerType', 'SourceRegistryLoginMode', 'UpdateTriggerPayloadType', operation_group='tasks')
8181
RunStatus = self.get_models('RunStatus', operation_group='runs')
@@ -121,6 +121,9 @@ def load_arguments(self, _): # pylint: disable=too-many-statements
121121
with self.argument_context('acr create') as c:
122122
c.argument('allow_metadata_search', arg_type=get_three_state_flag(), is_preview=True, help="Enable or disable the metadata-search feature for the registry. If not specified, this is set to disabled by default.")
123123

124+
with self.argument_context('acr create') as c:
125+
c.argument('dnl_scope', options_list=['--dnl-scope'], help='Domain name label scope will add a hash to the resource name. The resulting login server name will be in the format `registryname`-`hash`.azurecr-io. Default is Unsecure.', is_preview=True, arg_type=get_enum_type(AutoGeneratedDomainNameLabelScope))
126+
124127
with self.argument_context('acr update', arg_group='Network Rule') as c:
125128
c.argument('data_endpoint_enabled', get_three_state_flag(), help="Enable dedicated data endpoint for client firewall configuration")
126129

@@ -269,6 +272,7 @@ def load_arguments(self, _): # pylint: disable=too-many-statements
269272

270273
with self.argument_context('acr check-name') as c:
271274
c.argument('registry_name', completer=None, validator=None)
275+
c.argument('dnl_scope', options_list=['--dnl-scope'], help='Domain name label scope will add a hash to the resource name . The resulting login server name will be in the format `registry-name`-`hash`.azurecr-io. Default is Unsecure.', is_preview=True, arg_type=get_enum_type(AutoGeneratedDomainNameLabelScope))
272276

273277
with self.argument_context('acr webhook') as c:
274278
c.argument('registry_name', options_list=['--registry', '-r'])

src/azure-cli/azure/cli/command_modules/acr/custom.py

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import re
1010
from knack.util import CLIError
1111
from knack.log import get_logger
12-
from azure.cli.core.azclierror import InvalidArgumentValueError
12+
from azure.cli.core.azclierror import InvalidArgumentValueError, RequiredArgumentMissingError
1313
from azure.cli.core.util import user_confirmation
1414
from ._constants import get_managed_sku, get_premium_sku
1515
from ._utils import (
@@ -26,14 +26,26 @@
2626
DEF_DIAG_SETTINGS_NAME_TEMPLATE = '{}-diagnostic-settings'
2727
SYSTEM_ASSIGNED_IDENTITY_ALIAS = '[system]'
2828
DENY_ACTION = 'Deny'
29-
30-
31-
def acr_check_name(client, registry_name):
32-
registry = {
33-
'name': registry_name,
34-
'type': 'Microsoft.ContainerRegistry/registries'
35-
}
36-
return client.check_name_availability(registry)
29+
DOMAIN_NAME_LABEL_SCOPE_UNSECURE = 'Unsecure'
30+
DOMAIN_NAME_LABEL_SCOPE_RESOURCE_GROUP_REUSE = 'ResourceGroupReuse'
31+
32+
33+
def acr_check_name(cmd, client, registry_name, resource_group_name=None, dnl_scope=DOMAIN_NAME_LABEL_SCOPE_UNSECURE):
34+
if dnl_scope.lower() == DOMAIN_NAME_LABEL_SCOPE_RESOURCE_GROUP_REUSE.lower() and resource_group_name is None:
35+
raise RequiredArgumentMissingError("Resource group name is required for domain name label scope " +
36+
DOMAIN_NAME_LABEL_SCOPE_RESOURCE_GROUP_REUSE)
37+
domain_name_label_scope = _get_domain_name_label_scope(cmd, dnl_scope)
38+
if domain_name_label_scope:
39+
RegistryNameCheckRequest = cmd.get_models('RegistryNameCheckRequest')
40+
registry_check_name_request = RegistryNameCheckRequest(
41+
name=registry_name,
42+
type='Microsoft.ContainerRegistry/registries',
43+
resource_group_name=resource_group_name,
44+
auto_generated_domain_name_label_scope=domain_name_label_scope)
45+
else:
46+
raise RequiredArgumentMissingError("Invalid domain name label scope. The allowed values are 'Unsecure'," +
47+
" 'TenantReuse', 'SubscriptionReuse', 'ResourceGroupReuse' or 'NoReuse'.")
48+
return client.check_name_availability(registry_check_name_request)
3749

3850

3951
def acr_list(client, resource_group_name=None):
@@ -58,7 +70,8 @@ def acr_create(cmd,
5870
allow_trusted_services=None,
5971
allow_exports=None,
6072
tags=None,
61-
allow_metadata_search=None):
73+
allow_metadata_search=None,
74+
dnl_scope=None):
6275

6376
if default_action and sku not in get_premium_sku(cmd):
6477
raise CLIError(NETWORK_RULE_NOT_SUPPORTED)
@@ -87,6 +100,9 @@ def acr_create(cmd,
87100
if allow_metadata_search is not None:
88101
_configure_metadata_search(cmd, registry, allow_metadata_search)
89102

103+
if dnl_scope is not None:
104+
_configure_domain_name_label_scope(cmd, registry, dnl_scope)
105+
90106
_handle_network_bypass(cmd, registry, allow_trusted_services)
91107
_handle_export_policy(cmd, registry, allow_exports)
92108

@@ -630,3 +646,13 @@ def list_private_link_resources(cmd, client, registry_name, resource_group_name=
630646
def _configure_metadata_search(cmd, registry, enabled):
631647
MetadataSearch = cmd.get_models('MetadataSearch')
632648
registry.metadata_search = (MetadataSearch.enabled if enabled else MetadataSearch.disabled)
649+
650+
651+
def _configure_domain_name_label_scope(cmd, registry, scope):
652+
registry.auto_generated_domain_name_label_scope = _get_domain_name_label_scope(cmd, scope)
653+
654+
655+
def _get_domain_name_label_scope(cmd, scope):
656+
if DomainNameLabelScope := cmd.get_models('AutoGeneratedDomainNameLabelScope'):
657+
return DomainNameLabelScope(scope).value
658+
return DOMAIN_NAME_LABEL_SCOPE_UNSECURE

0 commit comments

Comments
 (0)