You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2022/09/25 10:04:31 UTC
[libcloud] 01/04: Azure: Add the ability to use Ultra SSDs
This is an automated email from the ASF dual-hosted git repository.
tomaz pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/libcloud.git
commit aba66415df8dc3f1c002c921d94085d85d5ee817
Author: John Wren Kennedy <jo...@delphix.com>
AuthorDate: Mon Aug 8 13:55:49 2022 -0600
Azure: Add the ability to use Ultra SSDs
This change adds a function to update additional_capabilities so that
Ultra SSDs can be added. Additional changes allow specific provisioned
IOPS and throughput.
---
libcloud/compute/drivers/azure_arm.py | 56 ++++++++++++++++++++++
...roviders_Microsoft_Compute_virtualMachines.json | 6 ++-
libcloud/test/compute/test_azure_arm.py | 19 ++++++++
3 files changed, 80 insertions(+), 1 deletion(-)
diff --git a/libcloud/compute/drivers/azure_arm.py b/libcloud/compute/drivers/azure_arm.py
index 40243102a..984cebb0b 100644
--- a/libcloud/compute/drivers/azure_arm.py
+++ b/libcloud/compute/drivers/azure_arm.py
@@ -898,6 +898,8 @@ class AzureNodeDriver(NodeDriver):
ex_sku_name=None,
ex_tags=None,
ex_zones=None,
+ ex_iops=None,
+ ex_throughput=None,
):
"""
Create a new managed volume.
@@ -929,6 +931,12 @@ class AzureNodeDriver(NodeDriver):
in. Options are any or all of ["1", "2", "3"]. (optional)
:type ex_zones: ``list`` of ``str``
+ :param ex_iops: The max IOPS this volume is capable of.
+ :type ex_iops: ``int``
+
+ :param ex_throughput: The max throughput of this volume in MBps.
+ :type ex_throughput: ``int``
+
:return: The newly created volume.
:rtype: :class:`StorageVolume`
"""
@@ -964,6 +972,12 @@ class AzureNodeDriver(NodeDriver):
if ex_zones is not None:
data["zones"] = ex_zones
+ if ex_iops is not None:
+ data["properties"]["diskIopsReadWrite"] = ex_iops
+
+ if ex_throughput is not None:
+ data["properties"]["diskMBpsReadWrite"] = ex_throughput
+
response = self.connection.request(
action,
method="PUT",
@@ -2022,6 +2036,48 @@ class AzureNodeDriver(NodeDriver):
method="PATCH",
)
+ def ex_create_additional_capabilities(
+ self, node, additional_capabilities, resource_group,
+ ):
+ """
+ Set the additional capabilities on a stopped node.
+
+ :param node: The node to be updated
+ :type node: ``str``
+
+ :param ex_additional_capabilities: Optional additional capabilities
+ allowing Ultra SSD and hibernation on this node.
+ :type ex_additional_capabilities: ``dict``
+
+ :param resource_group: The resource group of the node to be updated
+ :type resource_group: ``str``
+
+ :return: True if the update was successful, otherwise False
+ :rtype: ``bool``
+ """
+
+ target = (
+ "/subscriptions/%s/resourceGroups/%s/providers"
+ "/Microsoft.Compute/virtualMachines/%s"
+ % (self.subscription_id, resource_group, node.name)
+ )
+
+ data = {
+ "location": node.extra["location"],
+ "properties": {
+ "additionalCapabilities": additional_capabilities
+ }
+ }
+
+ r = self.connection.request(
+ target,
+ data=data,
+ params={"api-version": VM_API_VERSION},
+ method="PUT",
+ )
+
+ return r.status in [200, 202, 204]
+
def start_node(self, node):
"""
Start a stopped node.
diff --git a/libcloud/test/compute/fixtures/azure_arm/_subscriptions_99999999_providers_Microsoft_Compute_virtualMachines.json b/libcloud/test/compute/fixtures/azure_arm/_subscriptions_99999999_providers_Microsoft_Compute_virtualMachines.json
index 8973cf9c9..019c5c7b2 100644
--- a/libcloud/test/compute/fixtures/azure_arm/_subscriptions_99999999_providers_Microsoft_Compute_virtualMachines.json
+++ b/libcloud/test/compute/fixtures/azure_arm/_subscriptions_99999999_providers_Microsoft_Compute_virtualMachines.json
@@ -3,6 +3,10 @@
{
"properties": {
"vmId": "CCEEBF63-E92B-4A50-9949-6E44BFC61D3F",
+ "additionalCapabilities": {
+ "ultraSSDEnabled": "False",
+ "hibernationEnabled": "False"
+ },
"hardwareProfile": {
"vmSize": "Standard_A1"
},
@@ -49,4 +53,4 @@
"name": "test-node-1"
}
]
-}
\ No newline at end of file
+}
diff --git a/libcloud/test/compute/test_azure_arm.py b/libcloud/test/compute/test_azure_arm.py
index b157b0e34..8763f4921 100644
--- a/libcloud/test/compute/test_azure_arm.py
+++ b/libcloud/test/compute/test_azure_arm.py
@@ -479,6 +479,8 @@ class AzureNodeDriverTests(LibcloudTestCase):
ex_resource_group="000000",
ex_tags={"description": "MyVolume"},
ex_zones=["1", "2", "3"],
+ ex_iops=12345,
+ ex_throughput=6789,
)
self.assertEqual(volume.size, 2)
@@ -492,6 +494,8 @@ class AzureNodeDriverTests(LibcloudTestCase):
self.assertEqual(volume.extra["properties"]["diskState"], "Attached")
self.assertEqual(volume.state, StorageVolumeState.INUSE)
self.assertEqual(volume.extra["zones"], ["1", "2", "3"])
+ self.assertEqual(volume.extra["properties"]["diskIopsReadWrite"], 12345)
+ self.assertEqual(volume.extra["properties"]["diskMBpsReadWrite"], 6789)
def test_create_volume__with_snapshot(self):
location = self.driver.list_locations()[0]
@@ -777,6 +781,21 @@ class AzureNodeDriverTests(LibcloudTestCase):
name="test1", ex_resource_group="000000", ex_storage_account="sga1"
)
+ def test_ex_create_additional_capabilities(self):
+ add_cap = {
+ "ultraSSDEnabled": True,
+ "hibernationEnabled": True,
+ }
+
+ node = self.driver.list_nodes()[0]
+ self.driver.ex_create_additional_capabilities(node, add_cap, "000000")
+ self.assertTrue(
+ node.extra["properties"]["additionalCapabilities"]["ultraSSDEnabled"]
+ )
+ self.assertTrue(
+ node.extra["properties"]["additionalCapabilities"]["hibernationEnabled"]
+ )
+
class AzureMockHttp(MockHttp):
fixtures = ComputeFileFixtures("azure_arm")