Skip to content

Commit d49ff50

Browse files
committed
Enhance request attach disk to take more than one disk
1 parent 1fde7d8 commit d49ff50

File tree

4 files changed

+54
-13
lines changed

4 files changed

+54
-13
lines changed

lib/fog/azurerm/models/compute/server.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,11 @@ def detach_data_disk(disk_name, async = false)
174174
end
175175

176176
def attach_managed_disk(disk_name, disk_resource_group, async = false)
177-
response = service.attach_data_disk_to_vm(data_disk_params(disk_name, nil, nil, disk_resource_group), async)
177+
attach_managed_disks(disk_name, async)
178+
end
179+
180+
def attach_managed_disks(disk_names, disk_resource_group, async = false)
181+
response = service.attach_data_disk_to_vm(data_disk_params(disk_names, nil, nil, disk_resource_group), async)
178182
async ? create_fog_async_response(response) : merge_attributes(Fog::Compute::AzureRM::Server.parse(response))
179183
end
180184

lib/fog/azurerm/requests/compute/attach_data_disk_to_vm.rb

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,25 @@ def attach_data_disk_to_vm(disk_params, async)
77
# Variable un-packing for easy access
88
vm_name = disk_params[:vm_name]
99
vm_resource_group = disk_params[:vm_resource_group]
10-
disk_name = disk_params[:disk_name]
10+
disk_names = disk_params[:disk_name]
1111
disk_resource_group = disk_params[:disk_resource_group]
1212
disk_size = disk_params[:disk_size_gb]
1313
storage_account_name = disk_params[:storage_account_name]
1414

15-
msg = "Attaching Data Disk #{disk_name} to Virtual Machine #{vm_name} in Resource Group #{vm_resource_group}"
15+
disk_names = disk_names.is_a?(Array) ? disk_names : [disk_names]
16+
17+
msg = "Attaching Data Disk #{disk_names.join(', ')} to Virtual Machine #{vm_name} in Resource Group #{vm_resource_group}"
1618
Fog::Logger.debug msg
1719
vm = get_virtual_machine_instance(vm_resource_group, vm_name)
1820
lun = get_logical_unit_number(vm.storage_profile.data_disks)
21+
access_key = get_storage_access_key(vm_resource_group, storage_account_name) if storage_account_name
22+
23+
data_disks = get_list_data_disks(disk_names, disk_size, lun, storage_account_name, access_key, disk_resource_group)
1924

20-
# Attach data disk to VM
21-
if storage_account_name
22-
# Un-managed data disk
23-
access_key = get_storage_access_key(vm_resource_group, storage_account_name)
24-
data_disk = get_unmanaged_disk_object(disk_name, disk_size, lun, storage_account_name, access_key)
25-
elsif disk_resource_group
26-
# Managed data disk
27-
data_disk = get_data_disk_object(disk_resource_group, disk_name, lun)
25+
data_disks.each do |data_disk|
26+
vm.storage_profile.data_disks.push(data_disk)
2827
end
29-
vm.storage_profile.data_disks.push(data_disk)
28+
3029
begin
3130
if async
3231
response = @compute_mgmt_client.virtual_machines.create_or_update_async(vm_resource_group, vm_name, vm)
@@ -43,13 +42,29 @@ def attach_data_disk_to_vm(disk_params, async)
4342
if async
4443
response
4544
else
46-
Fog::Logger.debug "Data Disk #{disk_name} attached to Virtual Machine #{vm_name} successfully."
45+
Fog::Logger.debug "Data Disk #{disk_names.join(', ')} attached to Virtual Machine #{vm_name} successfully."
4746
virtual_machine
4847
end
4948
end
5049

5150
private
5251

52+
def get_list_data_disks(disk_names, disk_size, lun, storage_account_name, access_key, disk_resource_group)
53+
data_disks = []
54+
disk_names.each do |disk_name|
55+
# Attach data disk to VM
56+
if storage_account_name
57+
# Un-managed data disk
58+
data_disk = get_unmanaged_disk_object(disk_name, disk_size, lun, storage_account_name, access_key)
59+
elsif disk_resource_group
60+
# Managed data disk
61+
data_disk = get_data_disk_object(disk_resource_group, disk_name, lun)
62+
end
63+
data_disks += [data_disk]
64+
end
65+
data_disks
66+
end
67+
5368
def get_virtual_machine_instance(resource_group, vm_name)
5469
msg = "Getting Virtual Machine #{vm_name} from Resource Group #{resource_group}"
5570
Fog::Logger.debug msg

test/models/compute/test_server.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,4 +234,15 @@ def test_detach_managed_disk_response
234234
assert_instance_of Fog::AzureRM::AsyncResponse, @server.detach_managed_disk('managed_disk_name', true)
235235
end
236236
end
237+
238+
def test_attach_managed_disks_response
239+
response = ApiStub::Models::Compute::Server.create_linux_virtual_machine_response(@compute_client)
240+
@service.stub :attach_data_disk_to_vm, response do
241+
assert_instance_of Fog::Compute::AzureRM::Server, @server.attach_managed_disks(%w(managed_disk_name1 managed_disk_name2), 'resoure_group')
242+
end
243+
async_response = Concurrent::Promise.execute { 10 }
244+
@service.stub :attach_data_disk_to_vm, async_response do
245+
assert_instance_of Fog::AzureRM::AsyncResponse, @server.attach_managed_disks(%w(managed_disk_name1 managed_disk_name2), 'resoure_group', true)
246+
end
247+
end
237248
end

test/requests/compute/test_attach_data_disk_to_vm.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,15 @@ def test_get_storage_key_failure
102102
end
103103
end
104104
end
105+
106+
def test_detach_multiple_data_disks_from_vm_success
107+
@virtual_machines.stub :get, @get_vm_response do
108+
@disks.stub :get, @get_managed_disk_response do
109+
@virtual_machines.stub :create_or_update, @get_vm_managed_disk_response do
110+
input_params = { vm_name: 'fog-test-vm', vm_resource_group: 'fog-test-rg', disk_name: %w(mydatadisk1 mydatadisk2), disk_size_gb: nil, storage_account_name: nil }
111+
assert_equal @service.attach_data_disk_to_vm(input_params, false), @get_vm_managed_disk_response
112+
end
113+
end
114+
end
115+
end
105116
end

0 commit comments

Comments
 (0)