FAM-690 WIP

Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/5352e710
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/5352e710
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/5352e710

Branch: refs/heads/trunk
Commit: 5352e710350939539878aae879c2bd687f401c3d
Parents: 432145f
Author: mermoldy <s.ba...@scalr.com>
Authored: Thu Mar 9 14:19:59 2017 +0200
Committer: Anthony Shaw <anthonys...@apache.org>
Committed: Fri Aug 11 14:59:31 2017 +1000

----------------------------------------------------------------------
 libcloud/compute/drivers/azure_arm.py | 74 +++++++++++++++++-------------
 1 file changed, 41 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/5352e710/libcloud/compute/drivers/azure_arm.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/azure_arm.py 
b/libcloud/compute/drivers/azure_arm.py
index 375d432..3326a74 100644
--- a/libcloud/compute/drivers/azure_arm.py
+++ b/libcloud/compute/drivers/azure_arm.py
@@ -169,7 +169,6 @@ class AzureNodeDriver(NodeDriver):
     type = Provider.AZURE_ARM
     features = {'create_node': ['ssh_key', 'password']}
 
-
     # The API doesn't provide state or country information, so fill it in.
     # Information from https://azure.microsoft.com/en-us/regions/
     _location_to_country = {
@@ -397,7 +396,8 @@ class AzureNodeDriver(NodeDriver):
                     ex_nic=None,
                     ex_tags={},
                     ex_customdata="",
-                    ex_use_managed_disks=False):
+                    ex_use_managed_disks=False,
+                    ex_storage_account_type="Standard_LRS"):
         """Create a new node instance. This instance will be started
         automatically.
 
@@ -495,6 +495,10 @@ class AzureNodeDriver(NodeDriver):
             in all regions.
         :type ex_use_managed_disks: ``bool``
 
+        :param ex_storage_account_type: The Storage Account type,
+            ``Standard_LRS``(HDD disks) or ``Premium_LRS``(SSD disks).
+        :type ex_storage_account_type: str
+
         :return: The newly created node.
         :rtype: :class:`.Node`
         """
@@ -523,25 +527,25 @@ class AzureNodeDriver(NodeDriver):
                  "/Microsoft.Compute/virtualMachines/%s" % \
                  (self.subscription_id, ex_resource_group, name)
 
-        n = 0
-        while True:
-            try:
-                instance_vhd = "https://%s.blob%s"; \
-                               "/%s/%s-os_%i.vhd" \
-                               % (ex_storage_account,
-                                  self.connection.storage_suffix,
-                                  ex_blob_container,
-                                  name,
-                                  n)
-                self._ex_delete_old_vhd(ex_resource_group, instance_vhd)
-                break
-            except LibcloudError:
-                n += 1
+        def _get_instance_vhd():
+            n = 0
+            while True:
+                try:
+                    instance_vhd = "https://%s.blob.core.windows.net"; \
+                                   "/%s/%s-os_%i.vhd" \
+                                   % (ex_storage_account,
+                                      ex_blob_container,
+                                      name,
+                                      n)
+                    self._ex_delete_old_vhd(ex_resource_group, instance_vhd)
+                    return instance_vhd
+                except LibcloudError:
+                    n += 1
 
         if isinstance(image, AzureVhdImage):
             storage_profile = {
                 "osDisk": {
-                    "name": "virtualmachine-osDisk",
+                    "name": name,
                     "osType": "linux",
                     "caching": "ReadWrite",
                     "createOption": "FromImage",
@@ -549,10 +553,14 @@ class AzureNodeDriver(NodeDriver):
                         "uri": image.id
                     },
                     "vhd": {
-                        "uri": instance_vhd
+                        "uri": _get_instance_vhd(),
                     }
                 }
             }
+            if ex_use_managed_disks:
+                raise LibcloudError(
+                    "Creating managed OS disk from %s image "
+                    "type is not supported." % type(image))
         elif isinstance(image, AzureImage):
             storage_profile = {
                 "imageReference": {
@@ -562,25 +570,24 @@ class AzureNodeDriver(NodeDriver):
                     "version": image.version
                 },
                 "osDisk": {
-                    "name": "virtualmachine-osDisk",
-                    "vhd": {
-                        "uri": instance_vhd
-                    },
+                    "name": name,
+                    "osType": "linux",
                     "caching": "ReadWrite",
                     "createOption": "FromImage"
                 }
             }
             if ex_use_managed_disks:
-                storage_profile["osDisk"] = {
-                    "name": name,
-                    "createOption": "FromImage",
-                    "caching": "ReadWrite",
+                storage_profile["osDisk"]["managedDisk"] = {
+                    "storageAccountType": ex_storage_account_type
+                }
+            else:
+                storage_profile["osDisk"]["vhd"] = {
+                    "uri": _get_instance_vhd()
                 }
         else:
             raise LibcloudError(
-                "Unknown image type %s,"
-                "expected one of AzureImage, AzureVhdImage",
-                type(image))
+                "Unknown image type %s, expected one of AzureImage, "
+                "AzureVhdImage." % type(image))
 
         data = {
             "id": target,
@@ -636,10 +643,11 @@ class AzureNodeDriver(NodeDriver):
             raise ValueError(
                 "Must provide NodeAuthSSHKey or NodeAuthPassword in auth")
 
-        r = self.connection.request(target,
-                                    params={"api-version": 
RESOURCE_API_VERSION},
-                                    data=data,
-                                    method="PUT")
+        r = self.connection.request(
+            target,
+            params={"api-version": RESOURCE_API_VERSION},
+            data=data,
+            method="PUT")
 
         node = self._to_node(r.object)
         node.size = size

Reply via email to