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

Fix Azure volume attach by using DataDisk model

The data disk payload was a raw dict with snake_case keys
(create_option, managed_disk), which newer Azure SDK versions reject
because dict literals are passed through verbatim without snake_case
to camelCase conversion. Using the DataDisk and ManagedDiskParameters
model classes lets the SDK serializer emit the correct camelCase JSON.
Nuwan Goonasekera 1 день назад
Родитель
Сommit
31a1eabfef
1 измененных файлов с 8 добавлено и 9 удалено
  1. 8 9
      cloudbridge/providers/azure/resources.py

+ 8 - 9
cloudbridge/providers/azure/resources.py

@@ -23,7 +23,8 @@ from cloudbridge.interfaces.resources import (Instance, MachineImageState,
 
 
 from azure.common import AzureException
 from azure.common import AzureException
 from azure.core.exceptions import ResourceNotFoundError
 from azure.core.exceptions import ResourceNotFoundError
-from azure.mgmt.compute.models import SubResource as ComputeSubResource
+from azure.mgmt.compute.models import (DataDisk, ManagedDiskParameters,
+                                       SubResource as ComputeSubResource)
 from azure.mgmt.devtestlabs.models import GalleryImageReference
 from azure.mgmt.devtestlabs.models import GalleryImageReference
 from azure.mgmt.network.models import NetworkSecurityGroup
 from azure.mgmt.network.models import NetworkSecurityGroup
 
 
@@ -428,14 +429,12 @@ class AzureVolume(BaseVolume):
             Instance) else instance
             Instance) else instance
         vm = self._provider.azure_client.get_vm(instance_id)
         vm = self._provider.azure_client.get_vm(instance_id)
 
 
-        vm.storage_profile.data_disks.append({
-            'lun': len(vm.storage_profile.data_disks),
-            'name': self._volume.name,
-            'create_option': 'attach',
-            'managed_disk': {
-                'id': self.resource_id
-            }
-        })
+        vm.storage_profile.data_disks.append(DataDisk(
+            lun=len(vm.storage_profile.data_disks),
+            name=self._volume.name,
+            create_option='attach',
+            managed_disk=ManagedDiskParameters(id=self.resource_id)
+        ))
         self._provider.azure_client.update_vm(instance_id, vm)
         self._provider.azure_client.update_vm(instance_id, vm)
 
 
     def detach(self, force=False):
     def detach(self, force=False):