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

Updated instance service to use root disk size from launch config

vikramdoda 9 лет назад
Родитель
Сommit
94f984aaa4

+ 0 - 4
cloudbridge/cloud/providers/azure/resources.py

@@ -1570,10 +1570,6 @@ class AzureKeyPair(BaseKeyPair):
     def name(self):
         return self._key_pair.Name
 
-    @property
-    def key(self):
-        return self._key_pair.Key
-
     @property
     def material(self):
         """

+ 14 - 4
cloudbridge/cloud/providers/azure/services.py

@@ -450,7 +450,8 @@ class AzureInstanceService(BaseInstanceService):
             key_pair = (self.provider.security.key_pairs.get(key_pair)
                         if isinstance(key_pair, str) else key_pair)
         else:
-            raise Exception("Keypair required")
+            raise Exception("Can not create instance in azure "
+                            "without public key. Keypair required")
 
         image = (self.provider.compute.images.get(image)
                  if isinstance(image, str) else image)
@@ -470,10 +471,12 @@ class AzureInstanceService(BaseInstanceService):
             self._resolve_launch_options(subnet, zone_id, security_groups)
 
         if launch_config:
-            disks = self._process_block_device_mappings(launch_config,
-                                                        name, zone_id)
+            disks, root_disk_size = \
+                self._process_block_device_mappings(launch_config,
+                                                    name, zone_id)
         else:
             disks = None
+            root_disk_size = None
 
         instance_name = "{0}-{1}".format(name, uuid.uuid4().hex[:6])
 
@@ -538,6 +541,10 @@ class AzureInstanceService(BaseInstanceService):
         if key_pair:
             params['tags'].update(Key_Pair=key_pair.name)
 
+        if root_disk_size:
+            params['storage_profile']['os_disk']['disk_size_gb'] = \
+                root_disk_size
+
         self.provider.azure_client.create_vm(instance_name, params)
         vm = self._provider.azure_client.get_vm(instance_name)
         return AzureInstance(self.provider, vm)
@@ -590,6 +597,7 @@ class AzureInstanceService(BaseInstanceService):
         """
         disks = []
         volumes_count = 0
+        root_disk_size = None
 
         def attach_volume(volume, delete_on_terminate):
             disks.append({
@@ -644,12 +652,14 @@ class AzureInstanceService(BaseInstanceService):
                             zone)
                         attach_volume(new_vol, device.delete_on_terminate)
                     volumes_count += 1
+                else:
+                    root_disk_size = device.size
 
             else:  # device is ephemeral
                 # in azure we cannot add the ephemeral disks explicitly
                 pass
 
-        return disks
+        return disks, root_disk_size
 
     def create_launch_config(self):
         return AzureLaunchConfig(self.provider)

+ 2 - 0
test/helpers.py

@@ -130,6 +130,8 @@ def delete_test_network(network):
 def create_test_instance(
         provider, instance_name, subnet, zone=None, launch_config=None,
         key_pair=None, security_groups=None):
+    if not key_pair and provider.PROVIDER_ID == 'azure':
+        key_pair = provider.security.key_pairs.create(name=instance_name)
     return provider.compute.instances.create(
         instance_name,
         get_provider_test_data(provider, 'image'),

+ 2 - 2
test/test_compute_service.py

@@ -181,7 +181,7 @@ class CloudComputeServiceTestCase(ProviderTestBase):
         lc.add_volume_device(
             is_root=True,
             source=img,
-            size=img.min_disk if img and img.min_disk else 2,
+            size=img.min_disk if img and img.min_disk else 50,
             delete_on_terminate=True)
 
         # Attempting to add more than one root volume should raise an
@@ -261,7 +261,7 @@ class CloudComputeServiceTestCase(ProviderTestBase):
                 lc.add_volume_device(
                     is_root=True,
                     source=img,
-                    size=img.min_disk if img and img.min_disk else 2,
+                    size=img.min_disk if img and img.min_disk else 50,
                     delete_on_terminate=True)
 
                 # Add all available ephemeral devices