From 5d0587d627f86a05dbd732f3433c22b530d14393 Mon Sep 17 00:00:00 2001 From: Chenyi Zhang Date: Sun, 2 Feb 2020 16:52:59 +0000 Subject: [PATCH 1/3] adding vsubnet validation --- .../command_modules/acs/_client_factory.py | 2 ++ .../azure/cli/command_modules/acs/_params.py | 4 ++-- .../cli/command_modules/acs/_validators.py | 5 +++++ .../acs/tests/latest/test_validators.py | 19 +++++++++++++++++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/acs/_client_factory.py b/src/azure-cli/azure/cli/command_modules/acs/_client_factory.py index b3cadcf34de..b65b233f1df 100644 --- a/src/azure-cli/azure/cli/command_modules/acs/_client_factory.py +++ b/src/azure-cli/azure/cli/command_modules/acs/_client_factory.py @@ -52,6 +52,8 @@ def get_auth_management_client(cli_ctx, scope=None, **_): matched = re.match('/subscriptions/(?P[^/]*)/', scope) if matched: subscription_id = matched.groupdict()['subscription'] + else: + raise CLIError("{} does not contain subscription Id.".format(scope)) return get_mgmt_service_client(cli_ctx, ResourceType.MGMT_AUTHORIZATION, subscription_id=subscription_id) diff --git a/src/azure-cli/azure/cli/command_modules/acs/_params.py b/src/azure-cli/azure/cli/command_modules/acs/_params.py index 6bdce4ca095..14bf5818e2d 100644 --- a/src/azure-cli/azure/cli/command_modules/acs/_params.py +++ b/src/azure-cli/azure/cli/command_modules/acs/_params.py @@ -20,7 +20,7 @@ validate_create_parameters, validate_k8s_client_version, validate_k8s_version, validate_linux_host_name, validate_list_of_integers, validate_ssh_key, validate_connector_name, validate_max_pods, validate_nodes_count, validate_nodepool_name, validate_vm_set_type, validate_load_balancer_sku, validate_load_balancer_outbound_ips, - validate_load_balancer_outbound_ip_prefixes, validate_taints, validate_ip_ranges, validate_acr) + validate_load_balancer_outbound_ip_prefixes, validate_taints, validate_ip_ranges, validate_acr, validate_vnet_subnet_id) aci_connector_os_type = ['Windows', 'Linux', 'Both'] @@ -190,7 +190,7 @@ def load_arguments(self, _): c.argument('no_ssh_key', options_list=['--no-ssh-key', '-x']) c.argument('pod_cidr') c.argument('service_cidr') - c.argument('vnet_subnet_id') + c.argument('vnet_subnet_id', type=str, validator=validate_vnet_subnet_id) c.argument('workspace_resource_id') c.argument('skip_subnet_role_assignment', action='store_true') c.argument('api_server_authorized_ip_ranges', type=str, validator=validate_ip_ranges) diff --git a/src/azure-cli/azure/cli/command_modules/acs/_validators.py b/src/azure-cli/azure/cli/command_modules/acs/_validators.py index 064672d5ef7..534174ecd36 100644 --- a/src/azure-cli/azure/cli/command_modules/acs/_validators.py +++ b/src/azure-cli/azure/cli/command_modules/acs/_validators.py @@ -224,3 +224,8 @@ def validate_taints(namespace): def validate_acr(namespace): if namespace.attach_acr and namespace.detach_acr: raise CLIError('Cannot specify "--attach-acr" and "--detach-acr" at the same time.') + +def validate_vnet_subnet_id(namespace): + from msrestazure.tools import is_valid_resource_id + if not is_valid_resource_id(namespace.vnet_subnet_id): + raise CLIError("--vnet-subnet-id is not a valid Azure resource ID.") diff --git a/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_validators.py b/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_validators.py index 246588e7ea1..b6b0d1e115c 100644 --- a/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_validators.py +++ b/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_validators.py @@ -64,3 +64,22 @@ def test_IPv6(self): class Namespace: def __init__(self, api_server_authorized_ip_ranges): self.api_server_authorized_ip_ranges = api_server_authorized_ip_ranges + +class TestVNetSubnetId(unittest.TestCase): + def test_invalid_vnet_subnet_id(self): + invalid_vnet_subnet_id = "dummy subnet id" + namespace = VnetSubnetIdNamespace(invalid_vnet_subnet_id) + err = ("--vnet-subnet-id is not a valid Azure resource ID.") + + with self.assertRaises(CLIError) as cm: + validators.validate_vnet_subnet_id(namespace) + self.assertEqual(str(cm.exception), err) + + def test_valid_vnet_subnet_id(self): + invalid_vnet_subnet_id = "/subscriptions/testid/resourceGroups/MockedResourceGroup/providers/Microsoft.Network/virtualNetworks/MockedNetworkId/subnets/MockedSubNetId" + namespace = VnetSubnetIdNamespace(invalid_vnet_subnet_id) + validators.validate_vnet_subnet_id(namespace) + +class VnetSubnetIdNamespace: + def __init__(self, vnet_subnet_id): + self.vnet_subnet_id = vnet_subnet_id From ef4b31680266be7cf4af14a917dc2f9f393ac6d5 Mon Sep 17 00:00:00 2001 From: Chenyi Zhang Date: Tue, 4 Feb 2020 14:27:00 +0000 Subject: [PATCH 2/3] add null test --- .../azure/cli/command_modules/acs/_validators.py | 9 ++++++--- .../acs/tests/latest/test_validators.py | 11 +++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/acs/_validators.py b/src/azure-cli/azure/cli/command_modules/acs/_validators.py index 534174ecd36..41e574357a7 100644 --- a/src/azure-cli/azure/cli/command_modules/acs/_validators.py +++ b/src/azure-cli/azure/cli/command_modules/acs/_validators.py @@ -226,6 +226,9 @@ def validate_acr(namespace): raise CLIError('Cannot specify "--attach-acr" and "--detach-acr" at the same time.') def validate_vnet_subnet_id(namespace): - from msrestazure.tools import is_valid_resource_id - if not is_valid_resource_id(namespace.vnet_subnet_id): - raise CLIError("--vnet-subnet-id is not a valid Azure resource ID.") + if namespace.vnet_subnet_id is not None: + if namespace.vnet_subnet_id == '': + return + from msrestazure.tools import is_valid_resource_id + if not is_valid_resource_id(namespace.vnet_subnet_id): + raise CLIError("--vnet-subnet-id is not a valid Azure resource ID.") diff --git a/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_validators.py b/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_validators.py index b6b0d1e115c..d936af83272 100644 --- a/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_validators.py +++ b/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_validators.py @@ -79,6 +79,17 @@ def test_valid_vnet_subnet_id(self): invalid_vnet_subnet_id = "/subscriptions/testid/resourceGroups/MockedResourceGroup/providers/Microsoft.Network/virtualNetworks/MockedNetworkId/subnets/MockedSubNetId" namespace = VnetSubnetIdNamespace(invalid_vnet_subnet_id) validators.validate_vnet_subnet_id(namespace) + + def test_none_vnet_subnet_id(self): + invalid_vnet_subnet_id = None + namespace = VnetSubnetIdNamespace(invalid_vnet_subnet_id) + validators.validate_vnet_subnet_id(namespace) + + def test_empty_vnet_subnet_id(self): + invalid_vnet_subnet_id = "" + namespace = VnetSubnetIdNamespace(invalid_vnet_subnet_id) + validators.validate_vnet_subnet_id(namespace) + class VnetSubnetIdNamespace: def __init__(self, vnet_subnet_id): From 6c5f3604f292118dd2ba9488fb7b198efdeef475 Mon Sep 17 00:00:00 2001 From: Chenyi Zhang Date: Tue, 4 Feb 2020 15:15:06 +0000 Subject: [PATCH 3/3] add empty lines --- src/azure-cli/azure/cli/command_modules/acs/_validators.py | 1 + .../cli/command_modules/acs/tests/latest/test_validators.py | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/acs/_validators.py b/src/azure-cli/azure/cli/command_modules/acs/_validators.py index 41e574357a7..3a384f2190d 100644 --- a/src/azure-cli/azure/cli/command_modules/acs/_validators.py +++ b/src/azure-cli/azure/cli/command_modules/acs/_validators.py @@ -225,6 +225,7 @@ def validate_acr(namespace): if namespace.attach_acr and namespace.detach_acr: raise CLIError('Cannot specify "--attach-acr" and "--detach-acr" at the same time.') + def validate_vnet_subnet_id(namespace): if namespace.vnet_subnet_id is not None: if namespace.vnet_subnet_id == '': diff --git a/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_validators.py b/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_validators.py index d936af83272..dad693afbd3 100644 --- a/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_validators.py +++ b/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_validators.py @@ -65,6 +65,7 @@ class Namespace: def __init__(self, api_server_authorized_ip_ranges): self.api_server_authorized_ip_ranges = api_server_authorized_ip_ranges + class TestVNetSubnetId(unittest.TestCase): def test_invalid_vnet_subnet_id(self): invalid_vnet_subnet_id = "dummy subnet id" @@ -79,12 +80,12 @@ def test_valid_vnet_subnet_id(self): invalid_vnet_subnet_id = "/subscriptions/testid/resourceGroups/MockedResourceGroup/providers/Microsoft.Network/virtualNetworks/MockedNetworkId/subnets/MockedSubNetId" namespace = VnetSubnetIdNamespace(invalid_vnet_subnet_id) validators.validate_vnet_subnet_id(namespace) - + def test_none_vnet_subnet_id(self): invalid_vnet_subnet_id = None namespace = VnetSubnetIdNamespace(invalid_vnet_subnet_id) validators.validate_vnet_subnet_id(namespace) - + def test_empty_vnet_subnet_id(self): invalid_vnet_subnet_id = "" namespace = VnetSubnetIdNamespace(invalid_vnet_subnet_id)