File: test_mgmt_machinelearningcompute.py

package info (click to toggle)
python-azure 20181112%2Bgit-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 407,300 kB
  • sloc: python: 717,190; makefile: 201; sh: 76
file content (128 lines) | stat: -rw-r--r-- 7,455 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
from azure.mgmt.resource import ResourceManagementClient
from devtools_testutils import AzureMgmtTestCase, ResourceGroupPreparer, AzureMgmtPreparer
from devtools_testutils.resource_testcase import RESOURCE_GROUP_PARAM
from azure.mgmt.machinelearningcompute import models, MachineLearningComputeManagementClient

NAME_PREFIX = 'mlcrp-python-test'
RESOURCE_GROUP_LOCATION = 'eastus2'

class OperationalizationClusterPreparer(AzureMgmtPreparer):
    def __init__(self, name_prefix='', location='East US 2 EUAP', cluster_type='ACS',
                 description='Deployed for testing.', orchestrator_type='Kubernetes',
                 random_name_length=24, resource_group_parameter_name=RESOURCE_GROUP_PARAM,
                 parameter_name='cluster_name', disable_recording=True,
                 playback_fake_resource=None):
        super(OperationalizationClusterPreparer, self).__init__(name_prefix,
                                                                random_name_length,
                                                                disable_recording=disable_recording,
                                                                playback_fake_resource=playback_fake_resource)
        self.location = location
        self.cluster_type = cluster_type
        self.description = description
        self.orchestrator_type = orchestrator_type
        self.resource_group_parameter_name = resource_group_parameter_name
        self.parameter_name = parameter_name

    def create_resource(self, name, **kwargs):
        if self.is_live:
            self.client = self.create_mgmt_client(MachineLearningComputeManagementClient)
            group = self._get_resource_group(**kwargs)

            from devtools_testutils.mgmt_settings_real import CLIENT_ID, CLIENT_SECRET

            temp_cluster_properties = models.OperationalizationCluster(
                location = self.location,
                cluster_type = self.cluster_type,
                description = self.description,
                container_service = models.AcsClusterProperties(
                    orchestrator_type = self.orchestrator_type,
                    orchestrator_properties = models.KubernetesClusterProperties(
                        service_principal = models.ServicePrincipalProperties(
                            client_id = CLIENT_ID,
                            secret = CLIENT_SECRET
                        )
                    )
                )
            )

            self.client.operationalization_clusters.create_or_update(group.name, name, 
                                                                     temp_cluster_properties).result()

        return {self.parameter_name: name}

    def remove_resource(self, name, **kwargs):
        if self.is_live:
            group = self._get_resource_group(**kwargs)
            self.client.operationalization_clusters.delete(group.name, name)

    def _get_resource_group(self, **kwargs):
        try:
            return kwargs.get(self.resource_group_parameter_name)
        except KeyError:
            template = 'To create an operationalization cluster a resource group is required. ' \
                       'Please add decorator @{} in front of this storage account preparer.'
            raise AzureTestError(template.format(ResourceGroupPreparer.__name__))


class MgmtMachineLearningComputeTest(AzureMgmtTestCase):
    FILTER_HEADERS = AzureMgmtTestCase.FILTER_HEADERS + ["strict-transport-security"]

    def setUp(self):
        super(MgmtMachineLearningComputeTest, self).setUp()
        self.client = self.create_mgmt_client(MachineLearningComputeManagementClient)

    @ResourceGroupPreparer(name_prefix=NAME_PREFIX + '-get', location=RESOURCE_GROUP_LOCATION, parameter_name='group')
    @OperationalizationClusterPreparer(name_prefix=NAME_PREFIX + '-get',
                                       resource_group_parameter_name='group')
    def test_get(self, group, cluster_name):
        fetched_cluster = self.client.operationalization_clusters.get(group.name, cluster_name)
        self.assertEqual(fetched_cluster.name, cluster_name)

    @ResourceGroupPreparer(name_prefix=NAME_PREFIX + '-keys', location=RESOURCE_GROUP_LOCATION, parameter_name='group')
    @OperationalizationClusterPreparer(name_prefix=NAME_PREFIX + '-keys',
                                       resource_group_parameter_name='group')
    def test_list_keys(self, group, cluster_name):
        keys = self.client.operationalization_clusters.list_keys(group.name, cluster_name)

        self.assertIsNotNone(keys.storage_account.resource_id)
        self.assertIsNotNone(keys.storage_account.primary_key)
        self.assertIsNotNone(keys.storage_account.secondary_key)
        self.assertIsNotNone(keys.container_registry.login_server)
        self.assertIsNotNone(keys.container_registry.password)
        self.assertIsNotNone(keys.container_registry.password2)
        self.assertIsNotNone(keys.container_service.acs_kube_config)
        self.assertIsNotNone(keys.container_service.image_pull_secret_name)

    @ResourceGroupPreparer(name_prefix=NAME_PREFIX + '-list', location=RESOURCE_GROUP_LOCATION, parameter_name='group')
    @OperationalizationClusterPreparer(name_prefix=NAME_PREFIX + '-list',
                                       resource_group_parameter_name='group')
    def test_list_clusters(self, group, cluster_name):
        clusters_in_resource_group = [c.name for c in list(self.client.operationalization_clusters.list_by_resource_group(group.name))]
        self.assertTrue(cluster_name in clusters_in_resource_group)

        clusters_in_subscription = [c.name for c in list(self.client.operationalization_clusters.list_by_subscription_id())]
        self.assertTrue(cluster_name in clusters_in_subscription)

    @ResourceGroupPreparer(name_prefix=NAME_PREFIX + '-delete', location=RESOURCE_GROUP_LOCATION, parameter_name='group')
    @OperationalizationClusterPreparer(name_prefix=NAME_PREFIX + '-delete',
                                       resource_group_parameter_name='group')
    def test_delete(self, group, cluster_name):
        self.client.operationalization_clusters.delete(group.name, cluster_name).result()
        clusters_in_subscription = [c.name for c in list(self.client.operationalization_clusters.list_by_subscription_id())]

        self.assertTrue(cluster_name not in clusters_in_subscription)

    @ResourceGroupPreparer(name_prefix=NAME_PREFIX + '-update', location=RESOURCE_GROUP_LOCATION, parameter_name='group')
    @OperationalizationClusterPreparer(name_prefix=NAME_PREFIX + '-update',
                                       resource_group_parameter_name='group')
    def test_system_services_update(self, group, cluster_name):
        updates_available = self.client.operationalization_clusters.check_system_services_updates_available(group.name, cluster_name)        
        self.assertIsNotNone(updates_available)

        update_result = self.client.operationalization_clusters.update_system_services(group.name, cluster_name).result()
        self.assertEqual("Succeeded", update_result.update_status)
        self.assertIsNotNone(update_result.update_started_on)
        self.assertIsNotNone(update_result.update_completed_on)

        updates_available = self.client.operationalization_clusters.check_system_services_updates_available(group.name, cluster_name)
        self.assertEqual("No", updates_available.updates_available)