From 0a9f4da0ddf06b172c5c0d4e826cca83e16279c2 Mon Sep 17 00:00:00 2001 From: nshankar13 Date: Fri, 4 Jun 2021 11:46:23 -0400 Subject: [PATCH 1/8] Add distro validation for osm-arc removed release-train logic --- .../partner_extensions/AzureMLKubernetes.py | 2 +- .../partner_extensions/OpenServiceMesh.py | 91 +++++++++---------- .../latest/test_k8s_extension_scenario.py | 2 +- .../tests/latest/test_open_service_mesh.py | 11 +-- src/k8s-extension/setup.py | 4 +- .../public/AzureMLKubernetes.Tests.ps1 | 71 +++++++++++++++ 6 files changed, 126 insertions(+), 55 deletions(-) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/AzureMLKubernetes.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/AzureMLKubernetes.py index 9f6aff45aac..89126971692 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/AzureMLKubernetes.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/AzureMLKubernetes.py @@ -232,7 +232,7 @@ def __validate_scoring_fe_settings(self, configuration_settings, configuration_p if feIsNodePort and feIsInternalLoadBalancer: raise MutuallyExclusiveArgumentError( "Specify either privateEndpointNodeport=true or privateEndpointILB=true, but not both.") - if feIsNodePort: + elif feIsNodePort: configuration_settings['scoringFe.serviceType.nodePort'] = feIsNodePort elif feIsInternalLoadBalancer: configuration_settings['scoringFe.serviceType.internalLoadBalancer'] = feIsInternalLoadBalancer diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py index 048dfe58637..e786d0ad455 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py @@ -12,6 +12,8 @@ from azure.cli.core.azclierror import InvalidArgumentValueError, RequiredArgumentMissingError from azure.cli.core.commands.client_factory import get_subscription_id +from pyhelm.chartbuilder import ChartBuilder +from pyhelm.repo import VersionError from packaging import version import yaml @@ -67,7 +69,7 @@ def Create(self, cmd, client, resource_group_name, cluster_name, name, cluster_t # NOTE-2: Return a valid ExtensionInstance object, Instance name and flag for Identity create_identity = False - # _validate_tested_distro(cmd, resource_group_name, cluster_name, version) + _validate_tested_distro(cmd, resource_group_name, cluster_name, version) extension_instance = ExtensionInstance( extension_type=extension_type, @@ -101,62 +103,59 @@ def Update(self, extension, auto_upgrade_minor_version, release_train, version): version=version ) - def Delete(self, client, resource_group_name, cluster_name, name, cluster_type): - pass +def _validate_tested_distro(cmd, cluster_resource_group_name, cluster_name, extension_version): -# def _validate_tested_distro(cmd, cluster_resource_group_name, cluster_name, extension_version): + field_unavailable_error = '\"testedDistros\" field unavailable for version {0} of microsoft.openservicemesh, ' \ + 'cannot determine if this Kubernetes distribution has been properly tested'.format(extension_version) -# field_unavailable_error = '\"testedDistros\" field unavailable for version {0} of microsoft.openservicemesh, ' \ -# 'cannot determine if this Kubernetes distribution has been properly tested'.format(extension_version) + if version.parse(str(extension_version)) <= version.parse("0.8.3"): + logger.warning(field_unavailable_error) + return -# if version.parse(str(extension_version)) <= version.parse("0.8.3"): -# logger.warning(field_unavailable_error) -# return + subscription_id = get_subscription_id(cmd.cli_ctx) + resources = cf_resources(cmd.cli_ctx, subscription_id) -# subscription_id = get_subscription_id(cmd.cli_ctx) -# resources = cf_resources(cmd.cli_ctx, subscription_id) + cluster_resource_id = '/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Kubernetes' \ + '/connectedClusters/{2}'.format(subscription_id, cluster_resource_group_name, cluster_name) -# cluster_resource_id = '/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Kubernetes' \ -# '/connectedClusters/{2}'.format(subscription_id, cluster_resource_group_name, cluster_name) + resource = resources.get_by_id(cluster_resource_id, '2020-01-01-preview') + cluster_distro = resource.properties['distribution'].lower() -# resource = resources.get_by_id(cluster_resource_id, '2020-01-01-preview') -# cluster_distro = resource.properties['distribution'].lower() + if cluster_distro == "general": + logger.warning('Unable to determine if distro has been tested for microsoft.openservicemesh, ' + 'kubernetes distro: \"general\"') + return -# if cluster_distro == "general": -# logger.warning('Unable to determine if distro has been tested for microsoft.openservicemesh, ' -# 'kubernetes distro: \"general\"') -# return + tested_distros = _get_tested_distros(extension_version) -# tested_distros = _get_tested_distros(extension_version) + if tested_distros is None: + logger.warning(field_unavailable_error) + elif cluster_distro not in tested_distros.split(): + logger.warning('Untested kubernetes distro for microsoft.openservicemesh, Kubernetes distro is %s', + cluster_distro) -# if tested_distros is None: -# logger.warning(field_unavailable_error) -# elif cluster_distro not in tested_distros.split(): -# logger.warning('Untested kubernetes distro for microsoft.openservicemesh, Kubernetes distro is %s', -# cluster_distro) +def _get_tested_distros(chart_version): -# def _get_tested_distros(chart_version): - -# try: -# chart_arc = ChartBuilder({ -# "name": OpenServiceMesh.CHART_NAME, -# "version": str(chart_version), -# "source": { -# "type": "repo", -# "location": OpenServiceMesh.CHART_LOCATION -# } -# }) -# except VersionError: -# raise InvalidArgumentValueError( -# "Invalid version '{}' for microsoft.openservicemesh".format(chart_version) -# ) + try: + chart_arc = ChartBuilder({ + "name": OpenServiceMesh.CHART_NAME, + "version": str(chart_version), + "source": { + "type": "repo", + "location": OpenServiceMesh.CHART_LOCATION + } + }) + except VersionError: + raise InvalidArgumentValueError( + "Invalid version '{}' for microsoft.openservicemesh".format(chart_version) + ) -# values = chart_arc.get_values() -# values_yaml = yaml.load(values.raw, Loader=yaml.FullLoader) + values = chart_arc.get_values() + values_yaml = yaml.load(values.raw, Loader=yaml.FullLoader) -# try: -# return values_yaml['OpenServiceMesh']['testedDistros'] -# except KeyError: -# return None + try: + return values_yaml['OpenServiceMesh']['testedDistros'] + except KeyError: + return None diff --git a/src/k8s-extension/azext_k8s_extension/tests/latest/test_k8s_extension_scenario.py b/src/k8s-extension/azext_k8s_extension/tests/latest/test_k8s_extension_scenario.py index 53db4ce2c2d..70abc2286e7 100644 --- a/src/k8s-extension/azext_k8s_extension/tests/latest/test_k8s_extension_scenario.py +++ b/src/k8s-extension/azext_k8s_extension/tests/latest/test_k8s_extension_scenario.py @@ -6,7 +6,7 @@ # pylint: disable=line-too-long import os -from azure.cli.testsdk import (ScenarioTest, record_only) +from azure.cli.testsdk import (ScenarioTest, ResourceGroupPreparer, record_only) TEST_DIR = os.path.abspath(os.path.join(os.path.abspath(__file__), '..')) diff --git a/src/k8s-extension/azext_k8s_extension/tests/latest/test_open_service_mesh.py b/src/k8s-extension/azext_k8s_extension/tests/latest/test_open_service_mesh.py index 61b774045ce..b908f6859c2 100644 --- a/src/k8s-extension/azext_k8s_extension/tests/latest/test_open_service_mesh.py +++ b/src/k8s-extension/azext_k8s_extension/tests/latest/test_open_service_mesh.py @@ -15,9 +15,8 @@ class TestOpenServiceMesh(unittest.TestCase): def test_bad_osm_arc_version(self): - # version = "0.7.1" - # err = "Invalid version \'" + str(version) + "\' for microsoft.openservicemesh" - # with self.assertRaises(InvalidArgumentValueError) as argError: - # _get_tested_distros(version) - # self.assertEqual(str(argError.exception), err) - pass + version = "0.7.1" + err = "Invalid version \'" + str(version) + "\' for microsoft.openservicemesh" + with self.assertRaises(InvalidArgumentValueError) as argError: + _get_tested_distros(version) + self.assertEqual(str(argError.exception), err) diff --git a/src/k8s-extension/setup.py b/src/k8s-extension/setup.py index 6efb1bc5a59..fb4426bc9c5 100644 --- a/src/k8s-extension/setup.py +++ b/src/k8s-extension/setup.py @@ -30,7 +30,9 @@ ] # TODO: Add any additional SDK dependencies here -DEPENDENCIES = [] +DEPENDENCIES = [ + 'pyhelm' +] VERSION = "0.6.0" diff --git a/testing/test/extensions/public/AzureMLKubernetes.Tests.ps1 b/testing/test/extensions/public/AzureMLKubernetes.Tests.ps1 index 4625ff0016a..a072e6a156f 100644 --- a/testing/test/extensions/public/AzureMLKubernetes.Tests.ps1 +++ b/testing/test/extensions/public/AzureMLKubernetes.Tests.ps1 @@ -109,6 +109,7 @@ Describe 'AzureML Kubernetes Testing' { $extensionExists | Should -BeNullOrEmpty } +<<<<<<< HEAD # It 'Creates the extension and checks that it onboards correctly with training enabled' { # Invoke-Expression "az $Env:K8sExtensionName create -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters --extension-type $extensionType -n $extensionName --release-train staging --config enableTraining=true" -ErrorVariable badOut # $badOut | Should -BeNullOrEmpty @@ -175,6 +176,76 @@ Describe 'AzureML Kubernetes Testing' { # $n += 1 # } while ($n -le $MAX_RETRY_ATTEMPTS) # $n | Should -BeLessOrEqual $MAX_RETRY_ATTEMPTS +======= + It 'Creates the extension and checks that it onboards correctly with inference enabled' { + Invoke-Expression "az $Env:K8sExtensionName create -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters --extension-type $extensionType -n $extensionName --release-train staging --config enableInference=true identity.proxy.remoteEnabled=True identity.proxy.remoteHost=https://master.experiments.azureml-test.net allowInsecureConnections=True inferenceLoadBalancerHA=false" -ErrorVariable badOut + $badOut | Should -BeNullOrEmpty + + $output = Invoke-Expression "az $Env:K8sExtensionName show -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName" -ErrorVariable badOut + $badOut | Should -BeNullOrEmpty + + $isAutoUpgradeMinorVersion = ($output | ConvertFrom-Json).autoUpgradeMinorVersion + $isAutoUpgradeMinorVersion.ToString() -eq "True" | Should -BeTrue + + # Loop and retry until the extension installs + $n = 0 + do + { + if (Get-ExtensionStatus $extensionName -eq $SUCCESS_MESSAGE) { + break + } + Start-Sleep -Seconds 20 + $n += 1 + } while ($n -le $MAX_RETRY_ATTEMPTS) + $n | Should -BeLessOrEqual $MAX_RETRY_ATTEMPTS + + # check if relay is populated + $relayResourceID = Get-ExtensionConfigurationSettings $extensionName $relayResourceIDKey + $relayResourceID | Should -Not -BeNullOrEmpty + } + + It "Deletes the extension from the cluster with inference enabled" { + # cleanup the relay and servicebus + $relayResourceID = Get-ExtensionConfigurationSettings $extensionName $relayResourceIDKey + $serviceBusResourceID = Get-ExtensionConfigurationSettings $extensionName $serviceBusResourceIDKey + $relayNamespaceName = $relayResourceID.split("/")[8] + $serviceBusNamespaceName = $serviceBusResourceID.split("/")[8] + az relay namespace delete --resource-group $ENVCONFIG.resourceGroup --name $relayNamespaceName + az servicebus namespace delete --resource-group $ENVCONFIG.resourceGroup --name $serviceBusNamespaceName + + $output = Invoke-Expression "az $Env:K8sExtensionName delete -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName" -ErrorVariable badOut + $badOut | Should -BeNullOrEmpty + + # Extension should not be found on the cluster + $output = Invoke-Expression "az $Env:K8sExtensionName show -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName" -ErrorVariable badOut + $badOut | Should -Not -BeNullOrEmpty + $output | Should -BeNullOrEmpty + } + + It 'Creates the extension and checks that it onboards correctly with inference and SSL enabled' { + $sslKeyPemFile = Join-Path (Join-Path (Join-Path (Split-Path $PSScriptRoot -Parent) "data") "azure_ml") "test_key.pem" + $sslCertPemFile = Join-Path (Join-Path (Join-Path (Split-Path $PSScriptRoot -Parent) "data") "azure_ml") "test_cert.pem" + Invoke-Expression "az $Env:K8sExtensionName create -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters --extension-type $extensionType -n $extensionName --release-train staging --config enableInference=true identity.proxy.remoteEnabled=True identity.proxy.remoteHost=https://master.experiments.azureml-test.net inferenceLoadBalancerHA=False --config-protected sslKeyPemFile=$sslKeyPemFile sslCertPemFile=$sslCertPemFile" -ErrorVariable badOut + $badOut | Should -BeNullOrEmpty + + $output = Invoke-Expression "az $Env:K8sExtensionName show -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName" -ErrorVariable badOut + $badOut | Should -BeNullOrEmpty + + $isAutoUpgradeMinorVersion = ($output | ConvertFrom-Json).autoUpgradeMinorVersion + $isAutoUpgradeMinorVersion.ToString() -eq "True" | Should -BeTrue + + # Loop and retry until the extension installs + $n = 0 + do + { + if (Get-ExtensionStatus $extensionName -eq $SUCCESS_MESSAGE) { + break + } + Start-Sleep -Seconds 20 + $n += 1 + } while ($n -le $MAX_RETRY_ATTEMPTS) + $n | Should -BeLessOrEqual $MAX_RETRY_ATTEMPTS +>>>>>>> 683019d4 (Add distro validation for osm-arc) # # check if relay is populated # $relayResourceID = Get-ExtensionConfigurationSettings $extensionName $relayResourceIDKey From 8ca9e860a930dda0956defdc2b1595a1baccf40f Mon Sep 17 00:00:00 2001 From: nshankar13 Date: Mon, 12 Jul 2021 16:26:36 -0400 Subject: [PATCH 2/8] Readd osm_arc distro validation --- .../partner_extensions/OpenServiceMesh.py | 24 ++++--------------- .../tests/latest/test_open_service_mesh.py | 2 +- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py index e786d0ad455..1c1395af91d 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py @@ -30,12 +30,12 @@ from .._client_factory import cf_resources +import requests + logger = get_logger(__name__) class OpenServiceMesh(PartnerExtensionModel): - CHART_NAME = "osm-arc" - CHART_LOCATION = "https://azure.github.io/osm-azure" def Create(self, cmd, client, resource_group_name, cluster_name, name, cluster_type, extension_type, scope, auto_upgrade_minor_version, release_train, version, target_namespace, @@ -103,7 +103,6 @@ def Update(self, extension, auto_upgrade_minor_version, release_train, version): version=version ) - def _validate_tested_distro(cmd, cluster_resource_group_name, cluster_name, extension_version): field_unavailable_error = '\"testedDistros\" field unavailable for version {0} of microsoft.openservicemesh, ' \ @@ -135,25 +134,12 @@ def _validate_tested_distro(cmd, cluster_resource_group_name, cluster_name, exte logger.warning('Untested kubernetes distro for microsoft.openservicemesh, Kubernetes distro is %s', cluster_distro) - def _get_tested_distros(chart_version): - try: - chart_arc = ChartBuilder({ - "name": OpenServiceMesh.CHART_NAME, - "version": str(chart_version), - "source": { - "type": "repo", - "location": OpenServiceMesh.CHART_LOCATION - } - }) - except VersionError: - raise InvalidArgumentValueError( - "Invalid version '{}' for microsoft.openservicemesh".format(chart_version) - ) + chart_url = 'https://raw.githubusercontent.com/Azure/osm-azure/v{0}/charts/osm-arc/values.yaml'.format(chart_version) + chart_request = requests.get(url = chart_url) - values = chart_arc.get_values() - values_yaml = yaml.load(values.raw, Loader=yaml.FullLoader) + values_yaml = yaml.load(chart_request.text, Loader=yaml.FullLoader) try: return values_yaml['OpenServiceMesh']['testedDistros'] diff --git a/src/k8s-extension/azext_k8s_extension/tests/latest/test_open_service_mesh.py b/src/k8s-extension/azext_k8s_extension/tests/latest/test_open_service_mesh.py index b908f6859c2..72e94a06831 100644 --- a/src/k8s-extension/azext_k8s_extension/tests/latest/test_open_service_mesh.py +++ b/src/k8s-extension/azext_k8s_extension/tests/latest/test_open_service_mesh.py @@ -9,7 +9,7 @@ import unittest from azure.cli.core.azclierror import InvalidArgumentValueError -# from azext_k8s_extension.partner_extensions.OpenServiceMesh import _get_tested_distros +from azext_k8s_extension.partner_extensions.OpenServiceMesh import _get_tested_distros TEST_DIR = os.path.abspath(os.path.join(os.path.abspath(__file__), '..')) From 87fbf33688bb9034f2348dc4ecd7541b3dd6c073 Mon Sep 17 00:00:00 2001 From: nshankar13 Date: Mon, 12 Jul 2021 16:28:45 -0400 Subject: [PATCH 3/8] Fix style --- .../partner_extensions/OpenServiceMesh.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py index 1c1395af91d..4f92a09d80d 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py @@ -16,6 +16,7 @@ from pyhelm.repo import VersionError from packaging import version import yaml +import requests from ..partner_extensions import PartnerExtensionModel @@ -30,7 +31,6 @@ from .._client_factory import cf_resources -import requests logger = get_logger(__name__) @@ -136,8 +136,9 @@ def _validate_tested_distro(cmd, cluster_resource_group_name, cluster_name, exte def _get_tested_distros(chart_version): - chart_url = 'https://raw.githubusercontent.com/Azure/osm-azure/v{0}/charts/osm-arc/values.yaml'.format(chart_version) - chart_request = requests.get(url = chart_url) + chart_url = 'https://raw.githubusercontent.com/Azure/osm-azure/' \ + 'v{0}/charts/osm-arc/values.yaml'.format(chart_version) + chart_request = requests.get(url=chart_url) values_yaml = yaml.load(chart_request.text, Loader=yaml.FullLoader) From 793df314fc9b1ac23e5a839e9c07e39d2caa74c5 Mon Sep 17 00:00:00 2001 From: nshankar13 Date: Mon, 12 Jul 2021 16:31:07 -0400 Subject: [PATCH 4/8] Rm space --- .../azext_k8s_extension/partner_extensions/OpenServiceMesh.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py index 4f92a09d80d..f9c7dd01ec7 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py @@ -31,7 +31,6 @@ from .._client_factory import cf_resources - logger = get_logger(__name__) From 6e7b9a9884eb13a9add13c105c54d72d8786ad83 Mon Sep 17 00:00:00 2001 From: nshankar13 Date: Tue, 20 Jul 2021 22:53:45 -0400 Subject: [PATCH 5/8] Edit test --- .../partner_extensions/OpenServiceMesh.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py index f9c7dd01ec7..36d815c8e81 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py @@ -139,6 +139,11 @@ def _get_tested_distros(chart_version): 'v{0}/charts/osm-arc/values.yaml'.format(chart_version) chart_request = requests.get(url=chart_url) + if chart_request.status_code == 404: + raise InvalidArgumentValueError( + "Invalid version '{}' for microsoft.openservicemesh".format(chart_version) + ) + values_yaml = yaml.load(chart_request.text, Loader=yaml.FullLoader) try: From 21cc2189b717d84e5665854a2033d0edd74d0a8b Mon Sep 17 00:00:00 2001 From: nshankar13 Date: Tue, 20 Jul 2021 23:03:43 -0400 Subject: [PATCH 6/8] Fixed tests and error logic --- .../partner_extensions/AzureMLKubernetes.py | 2 +- .../azext_k8s_extension/partner_extensions/OpenServiceMesh.py | 4 ++-- .../tests/latest/test_k8s_extension_scenario.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/AzureMLKubernetes.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/AzureMLKubernetes.py index 89126971692..9f6aff45aac 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/AzureMLKubernetes.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/AzureMLKubernetes.py @@ -232,7 +232,7 @@ def __validate_scoring_fe_settings(self, configuration_settings, configuration_p if feIsNodePort and feIsInternalLoadBalancer: raise MutuallyExclusiveArgumentError( "Specify either privateEndpointNodeport=true or privateEndpointILB=true, but not both.") - elif feIsNodePort: + if feIsNodePort: configuration_settings['scoringFe.serviceType.nodePort'] = feIsNodePort elif feIsInternalLoadBalancer: configuration_settings['scoringFe.serviceType.internalLoadBalancer'] = feIsInternalLoadBalancer diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py index 36d815c8e81..40b31cc0fd1 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py @@ -12,8 +12,6 @@ from azure.cli.core.azclierror import InvalidArgumentValueError, RequiredArgumentMissingError from azure.cli.core.commands.client_factory import get_subscription_id -from pyhelm.chartbuilder import ChartBuilder -from pyhelm.repo import VersionError from packaging import version import yaml import requests @@ -102,6 +100,7 @@ def Update(self, extension, auto_upgrade_minor_version, release_train, version): version=version ) + def _validate_tested_distro(cmd, cluster_resource_group_name, cluster_name, extension_version): field_unavailable_error = '\"testedDistros\" field unavailable for version {0} of microsoft.openservicemesh, ' \ @@ -133,6 +132,7 @@ def _validate_tested_distro(cmd, cluster_resource_group_name, cluster_name, exte logger.warning('Untested kubernetes distro for microsoft.openservicemesh, Kubernetes distro is %s', cluster_distro) + def _get_tested_distros(chart_version): chart_url = 'https://raw.githubusercontent.com/Azure/osm-azure/' \ diff --git a/src/k8s-extension/azext_k8s_extension/tests/latest/test_k8s_extension_scenario.py b/src/k8s-extension/azext_k8s_extension/tests/latest/test_k8s_extension_scenario.py index 70abc2286e7..53db4ce2c2d 100644 --- a/src/k8s-extension/azext_k8s_extension/tests/latest/test_k8s_extension_scenario.py +++ b/src/k8s-extension/azext_k8s_extension/tests/latest/test_k8s_extension_scenario.py @@ -6,7 +6,7 @@ # pylint: disable=line-too-long import os -from azure.cli.testsdk import (ScenarioTest, ResourceGroupPreparer, record_only) +from azure.cli.testsdk import (ScenarioTest, record_only) TEST_DIR = os.path.abspath(os.path.join(os.path.abspath(__file__), '..')) From e579586ef1a439045d5f96da7ef391871ae676be Mon Sep 17 00:00:00 2001 From: nshankar13 Date: Tue, 20 Jul 2021 23:06:15 -0400 Subject: [PATCH 7/8] Remove dependency --- src/k8s-extension/setup.py | 4 +- .../public/AzureMLKubernetes.Tests.ps1 | 71 ------------------- 2 files changed, 1 insertion(+), 74 deletions(-) diff --git a/src/k8s-extension/setup.py b/src/k8s-extension/setup.py index fb4426bc9c5..6efb1bc5a59 100644 --- a/src/k8s-extension/setup.py +++ b/src/k8s-extension/setup.py @@ -30,9 +30,7 @@ ] # TODO: Add any additional SDK dependencies here -DEPENDENCIES = [ - 'pyhelm' -] +DEPENDENCIES = [] VERSION = "0.6.0" diff --git a/testing/test/extensions/public/AzureMLKubernetes.Tests.ps1 b/testing/test/extensions/public/AzureMLKubernetes.Tests.ps1 index a072e6a156f..4625ff0016a 100644 --- a/testing/test/extensions/public/AzureMLKubernetes.Tests.ps1 +++ b/testing/test/extensions/public/AzureMLKubernetes.Tests.ps1 @@ -109,7 +109,6 @@ Describe 'AzureML Kubernetes Testing' { $extensionExists | Should -BeNullOrEmpty } -<<<<<<< HEAD # It 'Creates the extension and checks that it onboards correctly with training enabled' { # Invoke-Expression "az $Env:K8sExtensionName create -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters --extension-type $extensionType -n $extensionName --release-train staging --config enableTraining=true" -ErrorVariable badOut # $badOut | Should -BeNullOrEmpty @@ -176,76 +175,6 @@ Describe 'AzureML Kubernetes Testing' { # $n += 1 # } while ($n -le $MAX_RETRY_ATTEMPTS) # $n | Should -BeLessOrEqual $MAX_RETRY_ATTEMPTS -======= - It 'Creates the extension and checks that it onboards correctly with inference enabled' { - Invoke-Expression "az $Env:K8sExtensionName create -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters --extension-type $extensionType -n $extensionName --release-train staging --config enableInference=true identity.proxy.remoteEnabled=True identity.proxy.remoteHost=https://master.experiments.azureml-test.net allowInsecureConnections=True inferenceLoadBalancerHA=false" -ErrorVariable badOut - $badOut | Should -BeNullOrEmpty - - $output = Invoke-Expression "az $Env:K8sExtensionName show -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName" -ErrorVariable badOut - $badOut | Should -BeNullOrEmpty - - $isAutoUpgradeMinorVersion = ($output | ConvertFrom-Json).autoUpgradeMinorVersion - $isAutoUpgradeMinorVersion.ToString() -eq "True" | Should -BeTrue - - # Loop and retry until the extension installs - $n = 0 - do - { - if (Get-ExtensionStatus $extensionName -eq $SUCCESS_MESSAGE) { - break - } - Start-Sleep -Seconds 20 - $n += 1 - } while ($n -le $MAX_RETRY_ATTEMPTS) - $n | Should -BeLessOrEqual $MAX_RETRY_ATTEMPTS - - # check if relay is populated - $relayResourceID = Get-ExtensionConfigurationSettings $extensionName $relayResourceIDKey - $relayResourceID | Should -Not -BeNullOrEmpty - } - - It "Deletes the extension from the cluster with inference enabled" { - # cleanup the relay and servicebus - $relayResourceID = Get-ExtensionConfigurationSettings $extensionName $relayResourceIDKey - $serviceBusResourceID = Get-ExtensionConfigurationSettings $extensionName $serviceBusResourceIDKey - $relayNamespaceName = $relayResourceID.split("/")[8] - $serviceBusNamespaceName = $serviceBusResourceID.split("/")[8] - az relay namespace delete --resource-group $ENVCONFIG.resourceGroup --name $relayNamespaceName - az servicebus namespace delete --resource-group $ENVCONFIG.resourceGroup --name $serviceBusNamespaceName - - $output = Invoke-Expression "az $Env:K8sExtensionName delete -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName" -ErrorVariable badOut - $badOut | Should -BeNullOrEmpty - - # Extension should not be found on the cluster - $output = Invoke-Expression "az $Env:K8sExtensionName show -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName" -ErrorVariable badOut - $badOut | Should -Not -BeNullOrEmpty - $output | Should -BeNullOrEmpty - } - - It 'Creates the extension and checks that it onboards correctly with inference and SSL enabled' { - $sslKeyPemFile = Join-Path (Join-Path (Join-Path (Split-Path $PSScriptRoot -Parent) "data") "azure_ml") "test_key.pem" - $sslCertPemFile = Join-Path (Join-Path (Join-Path (Split-Path $PSScriptRoot -Parent) "data") "azure_ml") "test_cert.pem" - Invoke-Expression "az $Env:K8sExtensionName create -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters --extension-type $extensionType -n $extensionName --release-train staging --config enableInference=true identity.proxy.remoteEnabled=True identity.proxy.remoteHost=https://master.experiments.azureml-test.net inferenceLoadBalancerHA=False --config-protected sslKeyPemFile=$sslKeyPemFile sslCertPemFile=$sslCertPemFile" -ErrorVariable badOut - $badOut | Should -BeNullOrEmpty - - $output = Invoke-Expression "az $Env:K8sExtensionName show -c $($ENVCONFIG.arcClusterName) -g $($ENVCONFIG.resourceGroup) --cluster-type connectedClusters -n $extensionName" -ErrorVariable badOut - $badOut | Should -BeNullOrEmpty - - $isAutoUpgradeMinorVersion = ($output | ConvertFrom-Json).autoUpgradeMinorVersion - $isAutoUpgradeMinorVersion.ToString() -eq "True" | Should -BeTrue - - # Loop and retry until the extension installs - $n = 0 - do - { - if (Get-ExtensionStatus $extensionName -eq $SUCCESS_MESSAGE) { - break - } - Start-Sleep -Seconds 20 - $n += 1 - } while ($n -le $MAX_RETRY_ATTEMPTS) - $n | Should -BeLessOrEqual $MAX_RETRY_ATTEMPTS ->>>>>>> 683019d4 (Add distro validation for osm-arc) # # check if relay is populated # $relayResourceID = Get-ExtensionConfigurationSettings $extensionName $relayResourceIDKey From 87beb0fd163126f1e763b8f5da58d4367f81ff51 Mon Sep 17 00:00:00 2001 From: nshankar13 Date: Wed, 21 Jul 2021 17:20:05 -0400 Subject: [PATCH 8/8] Add delete method --- .../azext_k8s_extension/partner_extensions/OpenServiceMesh.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py index 40b31cc0fd1..ff65193b3dd 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/OpenServiceMesh.py @@ -100,6 +100,9 @@ def Update(self, extension, auto_upgrade_minor_version, release_train, version): version=version ) + def Delete(self, client, resource_group_name, cluster_name, name, cluster_type): + pass + def _validate_tested_distro(cmd, cluster_resource_group_name, cluster_name, extension_version):