Skip to content

Commit

Permalink
arm-tools
Browse files Browse the repository at this point in the history
  • Loading branch information
jiasli committed Sep 25, 2024
1 parent a0acfb3 commit 8b22351
Show file tree
Hide file tree
Showing 155 changed files with 360 additions and 344 deletions.
2 changes: 1 addition & 1 deletion src/azure-cli-core/azure/cli/core/_profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ def login(self,

def login_with_managed_identity(self, identity_id=None, allow_no_subscriptions=None):
import jwt
from azure.mgmt.core.tools import is_valid_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id
from azure.cli.core.auth.adal_authentication import MSIAuthenticationWrapper
resource = self.cli_ctx.cloud.endpoints.active_directory_resource_id

Expand Down
2 changes: 1 addition & 1 deletion src/azure-cli-core/azure/cli/core/aaz/_arg_fmt.py
Original file line number Diff line number Diff line change
Expand Up @@ -669,7 +669,7 @@ def __init__(self, template=None):
self._template = self._Template(template)

def __call__(self, ctx, value):
from azure.mgmt.core.tools import parse_resource_id
from azure.cli.core.arm_tools import parse_resource_id

assert isinstance(value, AAZSimpleValue)

Expand Down
16 changes: 16 additions & 0 deletions src/azure-cli-core/azure/cli/core/arm_tools.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------

"""
This file contains util tools for working with ARM resources.
Initially, they were from msrestazure.tools. Now we import them from azure.mgmt.core.tools.
In the future, we many consider vendoring them or providing our own implementations.
"""

# ATTENTION: Importing from azure.mgmt.core is time-consuming. Only import this file when necessary.

from azure.mgmt.core.tools import parse_resource_id, is_valid_resource_id, resource_id
6 changes: 3 additions & 3 deletions src/azure-cli-core/azure/cli/core/commands/arm.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ def deployment_validate_table_format(result):
class ResourceId(str):

def __new__(cls, val):
from azure.mgmt.core.tools import is_valid_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id
if not is_valid_resource_id(val):
raise ValueError()
return str.__new__(cls, val)
Expand Down Expand Up @@ -316,7 +316,7 @@ def assemble_json(ids):
if full_id_list:
setattr(namespace, '_ids', full_id_list)

from azure.mgmt.core.tools import parse_resource_id, is_valid_resource_id
from azure.cli.core.arm_tools import parse_resource_id, is_valid_resource_id
for val in full_id_list:
if not is_valid_resource_id(val):
raise CLIError('invalid resource ID: {}'.format(val))
Expand Down Expand Up @@ -786,7 +786,7 @@ def _gen_guid():


def get_arm_resource_by_id(cli_ctx, arm_id, api_version=None):
from azure.mgmt.core.tools import parse_resource_id, is_valid_resource_id
from azure.cli.core.arm_tools import parse_resource_id, is_valid_resource_id

if not is_valid_resource_id(arm_id):
raise CLIError("'{}' is not a valid ID.".format(arm_id))
Expand Down
4 changes: 2 additions & 2 deletions src/azure-cli-core/azure/cli/core/commands/template_create.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def get_folded_parameter_help_string(
def _validate_name_or_id(
cli_ctx, resource_group_name, property_value, property_type, parent_value, parent_type):
from azure.cli.core.commands.client_factory import get_subscription_id
from azure.mgmt.core.tools import parse_resource_id, is_valid_resource_id
from azure.cli.core.arm_tools import parse_resource_id, is_valid_resource_id
has_parent = parent_type is not None
if is_valid_resource_id(property_value):
resource_id_parts = parse_resource_id(property_value)
Expand Down Expand Up @@ -95,7 +95,7 @@ def get_folded_parameter_validator(

# construct the validator
def validator(cmd, namespace):
from azure.mgmt.core.tools import resource_id
from azure.cli.core.arm_tools import resource_id
type_field_name = '{}_type'.format(property_name)
property_val = getattr(namespace, property_name, None)
parent_val = getattr(namespace, parent_name, None) if parent_name else None
Expand Down
2 changes: 1 addition & 1 deletion src/azure-cli/azure/cli/command_modules/acr/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -587,7 +587,7 @@ def get_scope_map_from_id(cmd, scope_map_id):
def resolve_identity_client_id(cli_ctx, managed_identity_resource_id):
from azure.mgmt.msi import ManagedServiceIdentityClient
from azure.cli.core.commands.client_factory import get_mgmt_service_client
from msrestazure.tools import parse_resource_id
from azure.cli.core.arm_tools import parse_resource_id

res = parse_resource_id(managed_identity_resource_id)
client = get_mgmt_service_client(cli_ctx, ManagedServiceIdentityClient, subscription_id=res['subscription'])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ def _check_registry_health(cmd, registry_name, ignore_errors):

def _check_private_endpoint(cmd, registry_name, vnet_of_private_endpoint): # pylint: disable=too-many-locals, too-many-statements
import socket
from msrestazure.tools import parse_resource_id, is_valid_resource_id, resource_id
from azure.cli.core.arm_tools import parse_resource_id, is_valid_resource_id, resource_id

if registry_name is None:
raise CLIError("Registry name must be provided to verify DNS routings of its private endpoints")
Expand Down
4 changes: 2 additions & 2 deletions src/azure-cli/azure/cli/command_modules/acr/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ def acr_create(cmd,
lro_poller = client.begin_create(resource_group_name, registry_name, registry)

if workspace:
from msrestazure.tools import is_valid_resource_id, resource_id
from azure.cli.core.arm_tools import is_valid_resource_id, resource_id
from azure.cli.core.commands import LongRunningOperation
from azure.cli.core.commands.client_factory import get_subscription_id
acr = LongRunningOperation(cmd.cli_ctx)(lro_poller)
Expand Down Expand Up @@ -609,7 +609,7 @@ def _analyze_identities(identities):


def _ensure_identity_resource_id(subscription_id, resource_group, resource):
from msrestazure.tools import resource_id, is_valid_resource_id
from azure.cli.core.arm_tools import resource_id, is_valid_resource_id
if is_valid_resource_id(resource):
return resource
return resource_id(subscription=subscription_id,
Expand Down
2 changes: 1 addition & 1 deletion src/azure-cli/azure/cli/command_modules/acr/import.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from knack.util import CLIError
from knack.log import get_logger
from msrestazure.tools import is_valid_resource_id, parse_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id, parse_resource_id
from azure.cli.command_modules.acr._docker_utils import get_login_server_suffix
from azure.cli.core.commands import LongRunningOperation
from azure.cli.core.util import sdk_no_wait
Expand Down
4 changes: 2 additions & 2 deletions src/azure-cli/azure/cli/command_modules/acr/network_rule.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,13 +122,13 @@ def acr_network_rule_remove(cmd,


def _validate_subnet(cli_ctx, subnet, vnet_name, resource_group_name):
from msrestazure.tools import is_valid_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id
subnet_is_id = is_valid_resource_id(subnet)

if subnet_is_id and not vnet_name:
return subnet
if subnet and not subnet_is_id and vnet_name:
from msrestazure.tools import resource_id
from azure.cli.core.arm_tools import resource_id
from azure.cli.core.commands.client_factory import get_subscription_id
return resource_id(
subscription=get_subscription_id(cli_ctx),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,7 @@ def ensure_aks_acr_role_assignment(cmd, assignee, registry_id, detach=False, is_

# pylint: disable=unused-argument
def ensure_aks_acr(cmd, assignee, acr_name_or_id, subscription_id, detach=False, is_service_principal=True):
from msrestazure.tools import is_valid_resource_id, parse_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id, parse_resource_id

# Check if the ACR exists by resource ID.
if is_valid_resource_id(acr_name_or_id):
Expand Down
20 changes: 10 additions & 10 deletions src/azure-cli/azure/cli/command_modules/acs/_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ def validate_pod_subnet_id(namespace):
def _validate_subnet_id(subnet_id, name):
if subnet_id is None or subnet_id == '':
return
from msrestazure.tools import is_valid_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id
if not is_valid_resource_id(subnet_id):
raise InvalidArgumentValueError(name + " is not a valid Azure resource ID.")

Expand All @@ -374,7 +374,7 @@ def validate_ppg(namespace):
if namespace.ppg is not None:
if namespace.ppg == '':
return
from msrestazure.tools import is_valid_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id
if not is_valid_resource_id(namespace.ppg):
raise CLIError("--ppg is not a valid Azure resource ID.")

Expand Down Expand Up @@ -478,7 +478,7 @@ def validate_assign_identity(namespace):
if namespace.assign_identity is not None:
if namespace.assign_identity == '':
return
from msrestazure.tools import is_valid_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id
if not is_valid_resource_id(namespace.assign_identity):
raise InvalidArgumentValueError("--assign-identity is not a valid Azure resource ID.")

Expand All @@ -487,35 +487,35 @@ def validate_assign_kubelet_identity(namespace):
if namespace.assign_kubelet_identity is not None:
if namespace.assign_kubelet_identity == '':
return
from msrestazure.tools import is_valid_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id
if not is_valid_resource_id(namespace.assign_kubelet_identity):
raise InvalidArgumentValueError("--assign-kubelet-identity is not a valid Azure resource ID.")


def validate_nodepool_id(namespace):
from msrestazure.tools import is_valid_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id
if not is_valid_resource_id(namespace.nodepool_id):
raise InvalidArgumentValueError("--nodepool-id is not a valid Azure resource ID.")


def validate_snapshot_id(namespace):
if namespace.snapshot_id:
from msrestazure.tools import is_valid_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id
if not is_valid_resource_id(namespace.snapshot_id):
raise InvalidArgumentValueError("--snapshot-id is not a valid Azure resource ID.")


def validate_host_group_id(namespace):
if namespace.host_group_id:
from msrestazure.tools import is_valid_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id
if not is_valid_resource_id(namespace.host_group_id):
raise InvalidArgumentValueError("--host-group-id is not a valid Azure resource ID.")


def validate_crg_id(namespace):
if namespace.crg_id is None:
return
from msrestazure.tools import is_valid_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id
if not is_valid_resource_id(namespace.crg_id):
raise InvalidArgumentValueError(
"--crg-id is not a valid Azure resource ID.")
Expand Down Expand Up @@ -630,7 +630,7 @@ def validate_azure_keyvault_kms_key_vault_resource_id(namespace):
key_vault_resource_id = namespace.azure_keyvault_kms_key_vault_resource_id
if key_vault_resource_id is None or key_vault_resource_id == '':
return
from msrestazure.tools import is_valid_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id
if not is_valid_resource_id(key_vault_resource_id):
raise InvalidArgumentValueError("--azure-keyvault-kms-key-vault-resource-id is not a valid Azure resource ID.")

Expand Down Expand Up @@ -792,7 +792,7 @@ def validate_application_security_groups(namespace):
if not asg_ids:
return

from msrestazure.tools import is_valid_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id
for asg in asg_ids:
if not is_valid_resource_id(asg):
raise InvalidArgumentValueError(asg + " is not a valid Azure resource ID.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
from azure.cli.core.util import send_raw_request
from azure.core.exceptions import HttpResponseError
from knack.log import get_logger
from msrestazure.tools import parse_resource_id, resource_id
from azure.cli.core.arm_tools import parse_resource_id, resource_id

logger = get_logger(__name__)
# mapping for azure public cloud
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

def get_amw_region(cmd, azure_monitor_workspace_resource_id):
import re
from msrestazure.tools import parse_resource_id
from azure.cli.core.arm_tools import parse_resource_id
# Define the allowed characters in the final string
allowed_chars = re.compile(r'[^a-zA-Z0-9]')

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ def register_rps(cmd, subscription_id, rp_namespaces, user_agent):


def rp_registrations(cmd, cluster_subscription_id, raw_parameters):
from msrestazure.tools import parse_resource_id
from azure.cli.core.arm_tools import parse_resource_id
cluster_rp_namespaces = {
"microsoft.insights": False,
"microsoft.alertsmanagement": False
Expand Down
2 changes: 1 addition & 1 deletion src/azure-cli/azure/cli/command_modules/acs/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -3189,7 +3189,7 @@ def aks_approuting_zone_list(
resource_group_name,
name
):
from msrestazure.tools import parse_resource_id
from azure.cli.core.arm_tools import parse_resource_id
mc = client.get(resource_group_name, name)

if mc.ingress_profile and mc.ingress_profile.web_app_routing and mc.ingress_profile.web_app_routing.enabled:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@
from knack.prompting import NoTTYException, prompt, prompt_pass, prompt_y_n
from knack.util import CLIError
from msrestazure.azure_exceptions import CloudError
from msrestazure.tools import is_valid_resource_id, parse_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id, parse_resource_id

logger = get_logger(__name__)

Expand Down Expand Up @@ -6796,7 +6796,7 @@ def postprocessing_after_mc_created(self, cluster: ManagedCluster) -> None:
# mdm metrics is supported only in azure public cloud, so add the role assignment only in this cloud
cloud_name = self.cmd.cli_ctx.cloud.name
if cloud_name.lower() == "azurecloud":
from msrestazure.tools import resource_id
from azure.cli.core.arm_tools import resource_id

cluster_resource_id = resource_id(
subscription=self.context.get_subscription_id(),
Expand Down Expand Up @@ -8559,7 +8559,7 @@ def postprocessing_after_mc_created(self, cluster: ManagedCluster) -> None:
# mdm metrics is supported only in azure public cloud, so add the role assignment only in this cloud
cloud_name = self.cmd.cli_ctx.cloud.name
if cloud_name.lower() == "azurecloud":
from msrestazure.tools import resource_id
from azure.cli.core.arm_tools import resource_id

cluster_resource_id = resource_id(
subscription=self.context.get_subscription_id(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3663,7 +3663,7 @@ def test_aks_byo_appgw_with_ingress_appgw_addon(self, resource_group, resource_g
self.cmd(create_appgw)

# construct group id
from msrestazure.tools import parse_resource_id, resource_id
from azure.cli.core.arm_tools import parse_resource_id, resource_id
parsed_vnet_id = parse_resource_id(vnet_id)
group_id = resource_id(subscription=parsed_vnet_id["subscription"],
resource_group=parsed_vnet_id["resource_group"])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def test_sanitize_resource_id(self):
# Test case where resource_id needs leading slash and trailing slash removed
self.assertEqual(sanitize_resource_id("test/resource/"), "/test/resource")

@patch('msrestazure.tools.parse_resource_id')
@patch('azure.cli.core.arm_tools.parse_resource_id')
@patch('azure.cli.command_modules.acs.azuremonitormetrics.helper.register_rps')
def test_subscription_id_selection(self, mock_register_rps, mock_parse_resource_id):
# Mocking return value of parse_resource_id
Expand Down
2 changes: 1 addition & 1 deletion src/azure-cli/azure/cli/command_modules/ams/_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
def validate_storage_account_id(cmd, namespace):
"""Validate storage account name"""
from azure.cli.core.commands.client_factory import get_subscription_id
from msrestazure.tools import is_valid_resource_id, resource_id
from azure.cli.core.arm_tools import is_valid_resource_id, resource_id

if namespace.storage_account:
if not is_valid_resource_id(namespace.storage_account):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ def __init__(self, cli_ctx, resource_group_name, account_name):
self.access_token = self._get_v2_access_token()

def _get_v2_api_endpoint(self, cli_ctx, resource_group_name, account_name):
from msrestazure.tools import resource_id
from azure.cli.core.arm_tools import resource_id
from azure.cli.command_modules.ams._sdk_utils import (get_media_namespace, get_media_type)

access_token = self.profile.get_raw_token()[0][2].get('accessToken')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# --------------------------------------------------------------------------------------------

from azure.cli.testsdk import ScenarioTest, ResourceGroupPreparer, StorageAccountPreparer
from msrestazure.tools import resource_id
from azure.cli.core.arm_tools import resource_id

class AmsAccountIdentityTests(ScenarioTest):
@ResourceGroupPreparer()
Expand Down Expand Up @@ -78,4 +78,4 @@ def test_ams_add_user_identity(self, resource_group, storage_account_for_create)
self.check('identity.type', 'UserAssigned')
])

self.cmd('az ams account delete -n {amsname} -g {rg}')
self.cmd('az ams account delete -n {amsname} -g {rg}')
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ def validate_export(namespace):

def validate_appservice_name_or_id(cmd, namespace):
from azure.cli.core.commands.client_factory import get_subscription_id
from msrestazure.tools import is_valid_resource_id, parse_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id, parse_resource_id
if namespace.appservice_account:
if not is_valid_resource_id(namespace.appservice_account):
config_store_name = ""
Expand Down Expand Up @@ -219,7 +219,7 @@ def validate_identity(namespace):
return

for identity in identities:
from msrestazure.tools import is_valid_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id
if identity == '[all]' and subcommand == 'remove':
continue

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from azure.cli.core.commands.validators import validate_tags

from knack.log import get_logger
from msrestazure.tools import is_valid_resource_id, parse_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id, parse_resource_id

from ._appservice_utils import _generic_site_operation
from ._client_factory import web_client_factory
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from azure.mgmt.web.models import IpSecurityRestriction
from importlib import import_module
from knack.log import get_logger
from msrestazure.tools import is_valid_resource_id, resource_id, parse_resource_id
from azure.cli.core.arm_tools import is_valid_resource_id, resource_id, parse_resource_id

from ._appservice_utils import _generic_site_operation
from .custom import get_site_configs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
MutuallyExclusiveArgumentError)
from importlib import import_module
from knack.log import get_logger
from msrestazure.tools import (parse_resource_id, is_valid_resource_id, resource_id)
from azure.cli.core.arm_tools import (parse_resource_id, is_valid_resource_id, resource_id)

VERSION_2019_08_01 = "2019-08-01"
VERSION_2019_10_01 = "2019-10-01"
Expand Down
Loading

0 comments on commit 8b22351

Please sign in to comment.