Просмотр исходного кода

Instance type implemented with tests

jatin 9 лет назад
Родитель
Сommit
50ba56d219

+ 8 - 0
azure_integration_test/test_integration_azure_instance_type_service.py

@@ -11,10 +11,18 @@ class AzureIntegrationInstanceTypeServiceTestCase(ProviderTestBase):
         print("List Instance Types - " + str(instance_type_list))
         print("List Instance Type Properties - ")
         print("Name - " + str(instance_type_list[0].name))
+        print("Id - " + str(instance_type_list[0].id))
         print("vcpus - " + str(instance_type_list[0].vcpus))
+        print("size_root_disk - " +
+              str(instance_type_list[0].size_root_disk))
         print("ram - " + str(instance_type_list[0].ram))
         print("size_ephemeral_disks - " +
               str(instance_type_list[0].size_ephemeral_disks))
         print("num_ephemeral_disks - " +
               str(instance_type_list[0].num_ephemeral_disks))
         self.assertTrue(instance_type_list.total_results > 0)
+
+        # Test find
+        inst_type = self.provider.compute.instance_types.find(
+            name="Standard_DS1_v2")[0]
+        print(str(inst_type))

+ 7 - 0
azure_test/test_azure_instance_type_service.py

@@ -10,10 +10,17 @@ class AzureInstanceTypeServiceTestCase(ProviderTestBase):
         print("List Instance Types - " + str(instance_type_list))
         print("List Instance Type Properties - ")
         print("Name - " + str(instance_type_list[0].name))
+        print("Id - " + str(instance_type_list[0].id))
         print("vcpus - " + str(instance_type_list[0].vcpus))
+        print("size_root_disk - " +
+              str(instance_type_list[0].size_root_disk))
         print("ram - " + str(instance_type_list[0].ram))
         print("size_ephemeral_disks - " +
               str(instance_type_list[0].size_ephemeral_disks))
         print("num_ephemeral_disks - " +
               str(instance_type_list[0].num_ephemeral_disks))
+        print("Family - " +
+              str(instance_type_list[0].family))
+        print("Extra data - " +
+              str(instance_type_list[0].extra_data))
         self.assertTrue(instance_type_list.total_results > 0)

+ 24 - 1
cloudbridge/cloud/providers/azure/mock_azure_client.py

@@ -6,7 +6,9 @@ from io import BytesIO
 from azure.common import AzureException
 from azure.mgmt.compute.models import CreationData, DataDisk, \
     Disk, DiskCreateOption, Image, ManagedDiskParameters, \
-    Snapshot, StorageProfile, VirtualMachine
+    Snapshot, StorageProfile, VirtualMachine, \
+    VirtualMachineSize
+
 from azure.mgmt.network.models import NetworkSecurityGroup
 from azure.mgmt.network.models import SecurityRule
 from azure.mgmt.network.models import VirtualNetwork
@@ -227,6 +229,24 @@ class MockAzureClient:
 
     regions = [region1, region2, region3]
 
+    instance_type1 = VirtualMachineSize()
+    instance_type1.name = "instance_type1"
+    instance_type1.number_of_cores = 1
+    instance_type1.os_disk_size_in_mb = 100
+    instance_type1.resource_disk_size_in_mb = 100
+    instance_type1.memory_in_mb = 1000
+    instance_type1.max_data_disk_count = 1
+
+    instance_type2 = VirtualMachineSize()
+    instance_type2.name = "instance_type2"
+    instance_type2.number_of_cores = 2
+    instance_type2.os_disk_size_in_mb = 200
+    instance_type2.resource_disk_size_in_mb = 200
+    instance_type2.memory_in_mb = 2000
+    instance_type2.max_data_disk_count = 2
+
+    instance_types = [instance_type1, instance_type2]
+
     def __init__(self, provider):
         self._provider = provider
 
@@ -547,6 +567,9 @@ class MockAzureClient:
     def list_locations(self):
         return self.regions
 
+    def list_instance_types(self):
+        return self.instance_types
+
     def update_image_tags(self, name, tags):
         img = self.get_image(name)
         img.tags = tags

+ 45 - 1
cloudbridge/cloud/providers/azure/resources.py

@@ -7,7 +7,8 @@ import json
 from azure.common import AzureException
 
 from cloudbridge.cloud.base.resources import BaseAttachmentInfo, \
-    BaseBucket, BaseBucketObject, BaseMachineImage, BaseNetwork, \
+    BaseBucket, BaseBucketObject, BaseInstanceType,\
+    BaseMachineImage, BaseNetwork, \
     BasePlacementZone, BaseRegion, BaseSecurityGroup, BaseSecurityGroupRule, \
     BaseSnapshot, BaseVolume, ClientPagedResultList
 from cloudbridge.cloud.interfaces import VolumeState
@@ -956,3 +957,46 @@ class AzurePlacementZone(BasePlacementZone):
             cloud middleware
         """
         return self._azure_region
+
+
+class AzureInstanceType(BaseInstanceType):
+
+    def __init__(self, provider, instance_type):
+        super(AzureInstanceType, self).__init__(provider)
+        self._inst_type = instance_type
+
+    @property
+    def id(self):
+        return self._inst_type.name
+
+    @property
+    def name(self):
+        return self._inst_type.name
+
+    @property
+    def family(self):
+        return "Unknown"
+
+    @property
+    def vcpus(self):
+        return self._inst_type.number_of_cores
+
+    @property
+    def ram(self):
+        return self._inst_type.memory_in_mb
+
+    @property
+    def size_root_disk(self):
+        return self._inst_type.os_disk_size_in_mb / 1024
+
+    @property
+    def size_ephemeral_disks(self):
+        return self._inst_type.resource_disk_size_in_mb / 1024
+
+    @property
+    def num_ephemeral_disks(self):
+        return 1
+
+    @property
+    def extra_data(self):
+        return None

+ 43 - 7
cloudbridge/cloud/providers/azure/services.py

@@ -5,8 +5,10 @@ from azure.common import AzureException
 
 from cloudbridge.cloud.base.resources import ClientPagedResultList
 from cloudbridge.cloud.base.services import BaseBlockStoreService, \
-    BaseComputeService, BaseImageService, BaseNetworkService, \
-    BaseObjectStoreService, BaseRegionService, BaseSecurityGroupService, \
+    BaseComputeService, BaseImageService, \
+    BaseInstanceTypesService, BaseNetworkService, \
+    BaseObjectStoreService, BaseRegionService, \
+    BaseSecurityGroupService, \
     BaseSecurityService, BaseSnapshotService, BaseVolumeService
 from cloudbridge.cloud.interfaces.resources import PlacementZone, \
     Snapshot, Volume
@@ -14,8 +16,10 @@ from cloudbridge.cloud.providers.azure import helpers as azure_helpers
 
 from msrestazure.azure_exceptions import CloudError
 
-from .resources import AzureBucket, AzureMachineImage, \
-    AzureNetwork, AzureRegion, AzureSecurityGroup, \
+from .resources import AzureBucket, \
+    AzureInstanceType, AzureMachineImage, \
+    AzureNetwork, AzureRegion, \
+    AzureSecurityGroup, \
     AzureSnapshot, AzureVolume, \
     IMAGE_NAME, IMAGE_RESOURCE_ID, \
     NETWORK_NAME, NETWORK_RESOURCE_ID, \
@@ -301,7 +305,7 @@ class AzureSnapshotService(BaseSnapshotService):
 class AzureComputeService(BaseComputeService):
     def __init__(self, provider):
         super(AzureComputeService, self).__init__(provider)
-        # self._instance_type_svc = AzureInstanceTypesService(self.provider)
+        self._instance_type_svc = AzureInstanceTypesService(self.provider)
         # self._instance_svc = AzureInstanceService(self.provider)
         self._region_svc = AzureRegionService(self.provider)
         self._images_svc = AzureImageService(self.provider)
@@ -312,8 +316,7 @@ class AzureComputeService(BaseComputeService):
 
     @property
     def instance_types(self):
-        raise NotImplementedError('AzureComputeService not '
-                                  'implemented this method')
+        return self._instance_type_svc
 
     @property
     def instances(self):
@@ -359,6 +362,26 @@ class AzureImageService(BaseImageService):
                                      limit=limit, marker=marker)
 
 
+class AzureInstanceTypesService(BaseInstanceTypesService):
+
+    def __init__(self, provider):
+        super(AzureInstanceTypesService, self).__init__(provider)
+
+    @property
+    def instance_data(self):
+        """
+        Fetch info about the available instances.
+        """
+        r = self.provider.azure_client.list_instance_types()
+        return r
+
+    def list(self, limit=None, marker=None):
+        inst_types = [AzureInstanceType(self.provider, inst_type)
+                      for inst_type in self.instance_data]
+        return ClientPagedResultList(self.provider, inst_types,
+                                     limit=limit, marker=marker)
+
+
 class AzureNetworkService(BaseNetworkService):
     def __init__(self, provider):
         super(AzureNetworkService, self).__init__(provider)
@@ -422,6 +445,18 @@ class AzureNetworkService(BaseNetworkService):
         raise NotImplementedError('AzureNetworkService '
                                   'not implemented this method')
 
+    def delete(self, network_id):
+        """
+                Delete an existing network.
+                """
+        try:
+            params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
+            network = self.provider.azure_client. \
+                delete_network(params.get(NETWORK_NAME))
+            return True if network else False
+        except CloudError as cloudError:
+            log.exception(cloudError.message)
+            return False
 
 class AzureRegionService(BaseRegionService):
     def __init__(self, provider):
@@ -453,3 +488,4 @@ class AzureRegionService(BaseRegionService):
                 region = AzureRegion(self.provider, azureRegion)
                 break
         return region
+