fog-azure-rm 0.2.7 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/fog-azure-rm.gemspec +8 -8
  4. data/lib/fog/azurerm.rb +5 -0
  5. data/lib/fog/azurerm/async_response.rb +36 -0
  6. data/lib/fog/azurerm/compute.rb +15 -1
  7. data/lib/fog/azurerm/constants.rb +6 -0
  8. data/lib/fog/azurerm/docs/compute.md +145 -2
  9. data/lib/fog/azurerm/models/compute/creation_data.rb +21 -0
  10. data/lib/fog/azurerm/models/compute/disk_create_option.rb +16 -0
  11. data/lib/fog/azurerm/models/compute/encryption_settings.rb +29 -0
  12. data/lib/fog/azurerm/models/compute/image_disk_reference.rb +15 -0
  13. data/lib/fog/azurerm/models/compute/managed_disk.rb +77 -0
  14. data/lib/fog/azurerm/models/compute/managed_disks.rb +43 -0
  15. data/lib/fog/azurerm/models/compute/operation_status_response.rb +18 -0
  16. data/lib/fog/azurerm/models/compute/server.rb +12 -7
  17. data/lib/fog/azurerm/models/compute/servers.rb +6 -0
  18. data/lib/fog/azurerm/models/traffic_manager/traffic_manager_profile.rb +1 -0
  19. data/lib/fog/azurerm/requests/compute/check_managed_disk_exists.rb +33 -0
  20. data/lib/fog/azurerm/requests/compute/create_or_update_managed_disk.rb +121 -0
  21. data/lib/fog/azurerm/requests/compute/create_virtual_machine.rb +24 -11
  22. data/lib/fog/azurerm/requests/compute/delete_managed_disk.rb +29 -0
  23. data/lib/fog/azurerm/requests/compute/delete_virtual_machine.rb +1 -1
  24. data/lib/fog/azurerm/requests/compute/get_managed_disk.rb +64 -0
  25. data/lib/fog/azurerm/requests/compute/grant_access_to_managed_disk.rb +30 -0
  26. data/lib/fog/azurerm/requests/compute/list_managed_disks_by_rg.rb +66 -0
  27. data/lib/fog/azurerm/requests/compute/list_managed_disks_in_subscription.rb +66 -0
  28. data/lib/fog/azurerm/requests/compute/revoke_access_to_managed_disk.rb +33 -0
  29. data/lib/fog/azurerm/requests/dns/check_zone_exists.rb +5 -1
  30. data/lib/fog/azurerm/requests/network/check_net_sec_rule_exists.rb +1 -1
  31. data/lib/fog/azurerm/requests/network/check_subnet_exists.rb +1 -1
  32. data/lib/fog/azurerm/utilities/general.rb +13 -10
  33. data/lib/fog/azurerm/version.rb +1 -1
  34. data/test/api_stub.rb +2 -0
  35. data/test/api_stub/models/compute/managed_disk.rb +59 -0
  36. data/test/api_stub/requests/compute/managed_disk.rb +102 -0
  37. data/test/api_stub/requests/compute/virtual_machine.rb +6 -6
  38. data/test/integration/Virtual_network_gateway_connection.rb +0 -6
  39. data/test/integration/application_gateway.rb +1 -1
  40. data/test/integration/credentials/azure.yml +1 -1
  41. data/test/integration/managed_disk.rb +113 -0
  42. data/test/integration/server.rb +39 -1
  43. data/test/integration/traffic_manager.rb +2 -2
  44. data/test/models/compute/test_managed_disk.rb +61 -0
  45. data/test/models/compute/test_managed_disks.rb +68 -0
  46. data/test/models/compute/test_server.rb +7 -1
  47. data/test/models/compute/test_servers.rb +1 -0
  48. data/test/requests/compute/test_check_managed_disk_exists.rb +31 -0
  49. data/test/requests/compute/test_create_or_update_managed_disk.rb +38 -0
  50. data/test/requests/compute/test_create_virtual_machine.rb +27 -0
  51. data/test/requests/compute/test_delete_managed_disk.rb +23 -0
  52. data/test/requests/compute/test_get_managed_disk.rb +24 -0
  53. data/test/requests/compute/test_grant_access_to_managed_disk.rb +26 -0
  54. data/test/requests/compute/test_list_managed_disks_by_rg.rb +24 -0
  55. data/test/requests/compute/test_list_managed_disks_in_subscription.rb +24 -0
  56. data/test/requests/compute/test_revoke_access_to_managed_disk.rb +24 -0
  57. data/test/test_helper.rb +15 -1
  58. metadata +47 -18
@@ -0,0 +1,43 @@
1
+ module Fog
2
+ module Compute
3
+ class AzureRM
4
+ # This class is giving implementation of all/list, get and
5
+ # check existence for managed disk.
6
+ class ManagedDisks < Fog::Collection
7
+ model Fog::Compute::AzureRM::ManagedDisk
8
+ attribute :resource_group
9
+ def all
10
+ if !resource_group.nil?
11
+ requires :resource_group
12
+ disks = service.list_managed_disks_by_rg(resource_group)
13
+ else
14
+ disks = service.list_managed_disks_in_subscription
15
+ end
16
+ managed_disks = disks.map { |disk| Fog::Compute::AzureRM::ManagedDisk.parse(disk) }
17
+
18
+ load(managed_disks)
19
+ end
20
+
21
+ def get(resource_group_name, disk_name)
22
+ disk = service.get_managed_disk(resource_group_name, disk_name)
23
+ managed_disk_fog = Fog::Compute::AzureRM::ManagedDisk.new(service: service)
24
+ managed_disk_fog.merge_attributes(Fog::Compute::AzureRM::ManagedDisk.parse(disk))
25
+ end
26
+
27
+ def check_managed_disk_exists(resource_group, disk_name)
28
+ service.check_managed_disk_exists(resource_group, disk_name)
29
+ end
30
+
31
+ def grant_access(resource_group_name, disk_name, access_type, duration_in_sec)
32
+ service.grant_access_to_managed_disk(resource_group_name, disk_name, access_type, duration_in_sec)
33
+ end
34
+
35
+ def revoke_access(resource_group_name, disk_name)
36
+ response = service.revoke_access_to_managed_disk(resource_group_name, disk_name)
37
+ operation_status_response = Fog::Compute::AzureRM::OperationStatusResponse.new(service: service)
38
+ operation_status_response.merge_attributes(Fog::Compute::AzureRM::OperationStatusResponse.parse(response))
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,18 @@
1
+ module Fog
2
+ module Compute
3
+ class AzureRM
4
+ # OperationStatusResponse model for Compute Service
5
+ class OperationStatusResponse < Fog::Model
6
+ attribute :name
7
+ attribute :status
8
+ attribute :start_time
9
+ attribute :end_time
10
+ attribute :error
11
+
12
+ def self.parse(operation_status_response)
13
+ get_hash_from_object(operation_status_response)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -26,7 +26,7 @@ module Fog
26
26
  attribute :platform
27
27
  attribute :provision_vm_agent
28
28
  attribute :enable_automatic_updates
29
- attribute :network_interface_card_id
29
+ attribute :network_interface_card_ids
30
30
  attribute :availability_set_id
31
31
  attribute :custom_data
32
32
  attribute :vhd_path
@@ -67,15 +67,15 @@ module Fog
67
67
  hash['provision_vm_agent'] = vm.os_profile.windows_configuration.provision_vmagent
68
68
  hash['enable_automatic_updates'] = vm.os_profile.windows_configuration.enable_automatic_updates
69
69
  end
70
- hash['network_interface_card_id'] = vm.network_profile.network_interfaces[0].id
70
+ hash['network_interface_card_ids'] = vm.network_profile.network_interfaces.map(&:id)
71
71
  hash['availability_set_id'] = vm.availability_set.id unless vm.availability_set.nil?
72
72
 
73
73
  hash
74
74
  end
75
75
 
76
- def save
76
+ def save(async = false)
77
77
  requires :name, :location, :resource_group, :vm_size, :storage_account_name,
78
- :username, :network_interface_card_id
78
+ :username, :network_interface_card_ids
79
79
  requires :publisher, :offer, :sku, :version if vhd_path.nil?
80
80
 
81
81
  if platform_is_linux?(platform)
@@ -85,8 +85,13 @@ module Fog
85
85
  end
86
86
 
87
87
  ssh_key_path = "/home/#{username}/.ssh/authorized_keys" unless ssh_key_data.nil?
88
- vm = service.create_virtual_machine(virtual_machine_params(ssh_key_path))
89
- merge_attributes(Server.parse(vm))
88
+
89
+ if async
90
+ service.create_virtual_machine(virtual_machine_params(ssh_key_path), true)
91
+ else
92
+ vm = service.create_virtual_machine(virtual_machine_params(ssh_key_path))
93
+ merge_attributes(Fog::Compute::AzureRM::Server.parse(vm))
94
+ end
90
95
  end
91
96
 
92
97
  def destroy
@@ -153,7 +158,7 @@ module Fog
153
158
  disable_password_authentication: disable_password_authentication,
154
159
  ssh_key_path: ssh_key_path,
155
160
  ssh_key_data: ssh_key_data,
156
- network_interface_card_id: network_interface_card_id,
161
+ network_interface_card_ids: network_interface_card_ids,
157
162
  availability_set_id: availability_set_id,
158
163
  publisher: publisher,
159
164
  offer: offer,
@@ -16,6 +16,12 @@ module Fog
16
16
  load(virtual_machines)
17
17
  end
18
18
 
19
+ def create_async(attributes = {})
20
+ server = new(attributes)
21
+ async_response = server.save(true)
22
+ Fog::AzureRM::AsyncResponse.new(server, async_response)
23
+ end
24
+
19
25
  def get(resource_group_name, virtual_machine_name)
20
26
  virtual_machine = service.get_virtual_machine(resource_group_name, virtual_machine_name)
21
27
  virtual_machine_fog = Fog::Compute::AzureRM::Server.new(service: service)
@@ -55,6 +55,7 @@ module Fog
55
55
 
56
56
  def update(profile_params)
57
57
  validate_input(profile_params)
58
+ profile_params[:endpoints] = endpoints.map { |endpoint| get_hash_from_object(endpoint)['attributes'] }
58
59
  merge_attributes(profile_params)
59
60
  profile = service.create_or_update_traffic_manager_profile(traffic_manager_profile_hash)
60
61
  merge_attributes(Fog::TrafficManager::AzureRM::TrafficManagerProfile.parse(profile))
@@ -0,0 +1,33 @@
1
+ module Fog
2
+ module Compute
3
+ class AzureRM
4
+ # Real class for Compute Request
5
+ class Real
6
+ def check_managed_disk_exists(resource_group_name, disk_name)
7
+ msg = "Checking if Managed Disk: #{disk_name} exists"
8
+ Fog::Logger.debug msg
9
+ begin
10
+ @compute_mgmt_client.disks.get(resource_group_name, disk_name)
11
+ Fog::Logger.debug "Managed Disk #{disk_name} exist."
12
+ true
13
+ rescue MsRestAzure::AzureOperationError => e
14
+ if e.error_code == 'ResourceNotFound'
15
+ Fog::Logger.debug "Managed Disk #{disk_name} doesn't exist."
16
+ false
17
+ else
18
+ raise_azure_exception(e, msg)
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ # Mock class for Compute Request
25
+ class Mock
26
+ def check_managed_disk_exists(*)
27
+ Fog::Logger.debug 'Managed Disk test-disk from Resource group fog-rg is available.'
28
+ true
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,121 @@
1
+ module Fog
2
+ module Compute
3
+ class AzureRM
4
+ # Real class for Compute Request
5
+ class Real
6
+ def create_or_update_managed_disk(managed_disk_params)
7
+ msg = "Creating/Updating Managed Disk: #{managed_disk_params[:name]}"
8
+ Fog::Logger.debug msg
9
+ disk = get_managed_disk_object(managed_disk_params)
10
+ begin
11
+ managed_disk = @compute_mgmt_client.disks.create_or_update(managed_disk_params[:resource_group_name], managed_disk_params[:name], disk)
12
+ rescue MsRestAzure::AzureOperationError => e
13
+ raise_azure_exception(e, msg)
14
+ end
15
+ Fog::Logger.debug "Managed Disk #{managed_disk_params[:name]} created/updated successfully."
16
+ managed_disk
17
+ end
18
+
19
+ private
20
+
21
+ def get_managed_disk_object(managed_disk_params)
22
+ managed_disk = Azure::ARM::Compute::Models::Disk.new
23
+ managed_disk.name = managed_disk_params[:name]
24
+ managed_disk.type = DISK_PREFIX
25
+ managed_disk.location = managed_disk_params[:location]
26
+ managed_disk.account_type = managed_disk_params[:account_type]
27
+ managed_disk.os_type = managed_disk_params[:os_type]
28
+ managed_disk.disk_size_gb = managed_disk_params[:disk_size_gb]
29
+ managed_disk.tags = managed_disk_params[:tags] if managed_disk.tags.nil?
30
+
31
+ creation_data = managed_disk_params[:creation_data]
32
+ managed_disk.creation_data = get_creation_data_object(creation_data) unless creation_data.nil?
33
+
34
+ encryption_settings = managed_disk_params[:encryption_settings]
35
+ managed_disk.encryption_settings = get_encryption_settings_object(encryption_settings) unless encryption_settings.nil?
36
+
37
+ managed_disk
38
+ end
39
+
40
+ def get_creation_data_object(data)
41
+ creation_data = Azure::ARM::Compute::Models::CreationData.new
42
+ creation_data.create_option = data[:create_option]
43
+ creation_data.storage_account_id = data[:storage_account_id]
44
+ creation_data.source_uri = data[:source_uri]
45
+ creation_data.source_resource_id = data[:source_resource_id]
46
+
47
+ image_reference = data[:image_reference]
48
+ unless image_reference.nil?
49
+ image_disk_reference = Azure::ARM::Compute::Models::ImageDiskReference.new
50
+ image_disk_reference.id = image_reference[:id]
51
+ image_disk_reference.lun = image_reference[:lun]
52
+
53
+ creation_data.image_reference = image_disk_reference
54
+ end
55
+ creation_data
56
+ end
57
+
58
+ def get_encryption_settings_object(settings)
59
+ encryption_settings = Azure::ARM::Compute::Models::EncryptionSettings.new
60
+ disk_encryption_key = Azure::ARM::Compute::Models::KeyVaultAndSecretReference.new
61
+ disk_encryption_key.secret_url = settings[:secret_url]
62
+ disk_encryption_key.source_vault.id = settings[:disk_source_vault_id]
63
+ encryption_settings.disk_encryption_key = disk_encryption_key
64
+
65
+ encryption_settings.enabled = settings[:enabled]
66
+
67
+ key_encryption_key = Azure::ARM::Compute::Models::KeyVaultAndKeyReference.new
68
+ key_encryption_key.key_url = settings[:key_uri]
69
+ key_encryption_key.source_vault = settings[:key_source_vault_id]
70
+ encryption_settings.key_encryption_key = key_encryption_key
71
+
72
+ encryption_settings
73
+ end
74
+ end
75
+
76
+ # Mock class for Compute Request
77
+ class Mock
78
+ def create_or_update_managed_disk(*)
79
+ disk = {
80
+ 'accountType' => 'Standard_LRS',
81
+ 'properties' => {
82
+ 'osType' => 'Windows',
83
+ 'creationData' => {
84
+ 'createOption' => 'Empty'
85
+ },
86
+ 'diskSizeGB' => 10,
87
+ 'encryptionSettings' => {
88
+ 'enabled' => true,
89
+ 'diskEncryptionKey' => {
90
+ 'sourceVault' => {
91
+ 'id' => '/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/myVMVault'
92
+ },
93
+ 'secretUrl' => 'https://myvmvault.vault-int.azure-int.net/secrets/{secret}'
94
+ },
95
+ 'keyEncryptionKey' => {
96
+ 'sourceVault' => {
97
+ 'id' => '/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/myVMVault'
98
+ },
99
+ 'keyUrl' => 'https://myvmvault.vault-int.azure-int.net/keys/{key}'
100
+ }
101
+ },
102
+ 'timeCreated' => '2016-12-28T02:46:21.3322041+00:00',
103
+ 'provisioningState' => 'Succeeded',
104
+ 'diskState' => 'Unattached'
105
+ },
106
+ 'type' => 'Microsoft.Compute/disks',
107
+ 'location' => 'westus',
108
+ 'tags' => {
109
+ 'department' => 'Development',
110
+ 'project' => 'ManagedDisks'
111
+ },
112
+ 'id' => '/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myManagedDisk1',
113
+ 'name' => 'myManagedDisk1'
114
+ }
115
+ disk_mapper = Azure::ARM::Compute::Models::Disk.mapper
116
+ @compute_mgmt_client.deserialize(disk_mapper, disk, 'result.body')
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end
@@ -6,7 +6,7 @@ module Fog
6
6
  class AzureRM
7
7
  # This class provides the actual implementation for service calls.
8
8
  class Real
9
- def create_virtual_machine(vm_hash)
9
+ def create_virtual_machine(vm_hash, async = false)
10
10
  msg = "Creating Virtual Machine #{vm_hash[:name]} in Resource Group #{vm_hash[:resource_group]}."
11
11
  Fog::Logger.debug msg
12
12
  virtual_machine = Azure::ARM::Compute::Models::VirtualMachine.new
@@ -48,15 +48,19 @@ module Fog
48
48
  vm_hash[:ssh_key_data],
49
49
  encoded_data)
50
50
  end
51
- virtual_machine.network_profile = define_network_profile(vm_hash[:network_interface_card_id])
51
+ virtual_machine.network_profile = define_network_profile(vm_hash[:network_interface_card_ids])
52
52
  virtual_machine.location = vm_hash[:location]
53
53
  begin
54
- vm = @compute_mgmt_client.virtual_machines.create_or_update(vm_hash[:resource_group], vm_hash[:name], virtual_machine)
54
+ response = if async
55
+ @compute_mgmt_client.virtual_machines.create_or_update_async(vm_hash[:resource_group], vm_hash[:name], virtual_machine)
56
+ else
57
+ @compute_mgmt_client.virtual_machines.create_or_update(vm_hash[:resource_group], vm_hash[:name], virtual_machine)
58
+ end
55
59
  rescue MsRestAzure::AzureOperationError => e
56
60
  raise_azure_exception(e, msg)
57
61
  end
58
- Fog::Logger.debug "Virtual Machine #{vm_hash[:name]} Created Successfully."
59
- vm
62
+ Fog::Logger.debug "Virtual Machine #{vm_hash[:name]} Created Successfully." unless async
63
+ response
60
64
  end
61
65
 
62
66
  private
@@ -119,14 +123,17 @@ module Fog
119
123
  os_disk.name = "#{vm_name}_os_disk"
120
124
  os_disk.vhd = vhd
121
125
  os_disk.create_option = Azure::ARM::Compute::Models::DiskCreateOptionTypes::FromImage
122
- os_disk.caching = case os_disk_caching
126
+ os_disk.caching = unless os_disk_caching.nil?
127
+ case os_disk_caching
123
128
  when 'None'
124
129
  Azure::ARM::Compute::Models::CachingTypes::None
125
130
  when 'ReadOnly'
126
131
  Azure::ARM::Compute::Models::CachingTypes::ReadOnly
127
132
  when 'ReadWrite'
128
133
  Azure::ARM::Compute::Models::CachingTypes::ReadWrite
129
- end unless os_disk_caching.nil?
134
+ end
135
+ end
136
+
130
137
  storage_profile.os_disk = os_disk
131
138
  storage_profile
132
139
  end
@@ -167,11 +174,17 @@ module Fog
167
174
  os_profile
168
175
  end
169
176
 
170
- def define_network_profile(network_interface_card_id)
177
+ def define_network_profile(network_interface_card_ids)
178
+ network_interface_cards = []
179
+ network_interface_card_ids.each_with_index do |id, index|
180
+ nic = Azure::ARM::Compute::Models::NetworkInterfaceReference .new
181
+ nic.id = id
182
+ nic.primary = index == PRIMARY_NIC_INDEX ? true : false
183
+ network_interface_cards << nic
184
+ end
185
+
171
186
  network_profile = Azure::ARM::Compute::Models::NetworkProfile.new
172
- nic = Azure::ARM::Compute::Models::NetworkInterfaceReference .new
173
- nic.id = network_interface_card_id
174
- network_profile.network_interfaces = [nic]
187
+ network_profile.network_interfaces = network_interface_cards
175
188
  network_profile
176
189
  end
177
190
  end
@@ -0,0 +1,29 @@
1
+
2
+ module Fog
3
+ module Compute
4
+ class AzureRM
5
+ # Real class for Compute Request
6
+ class Real
7
+ def delete_managed_disk(resource_group_name, disk_name)
8
+ msg = "Deleting Managed Disk: #{disk_name}"
9
+ Fog::Logger.debug msg
10
+ begin
11
+ @compute_mgmt_client.disks.delete(resource_group_name, disk_name)
12
+ rescue MsRestAzure::AzureOperationError => e
13
+ raise_azure_exception(e, msg)
14
+ end
15
+ Fog::Logger.debug "Managed Disk #{disk_name} deleted successfully."
16
+ true
17
+ end
18
+ end
19
+
20
+ # Mock class for Compute Request
21
+ class Mock
22
+ def delete_managed_disk(*)
23
+ Fog::Logger.debug 'Managed Disk test-disk from Resource group fog-test-rg deleted successfully.'
24
+ true
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -8,7 +8,7 @@ module Fog
8
8
  Fog::Logger.debug msg
9
9
  begin
10
10
  @compute_mgmt_client.virtual_machines.delete(resource_group, name)
11
- rescue MsRestAzure::AzureOperationError => e
11
+ rescue MsRestAzure::AzureOperationError => e
12
12
  raise_azure_exception(e, msg)
13
13
  end
14
14
  Fog::Logger.debug "Virtual Machine #{name} Deleted Successfully."
@@ -0,0 +1,64 @@
1
+ module Fog
2
+ module Compute
3
+ class AzureRM
4
+ # Real class for Compute Request
5
+ class Real
6
+ def get_managed_disk(resource_group_name, disk_name)
7
+ msg = "Getting Managed Disk: #{disk_name}"
8
+ Fog::Logger.debug msg
9
+ begin
10
+ managed_disk = @compute_mgmt_client.disks.get(resource_group_name, disk_name)
11
+ rescue MsRestAzure::AzureOperationError => e
12
+ raise_azure_exception(e, msg)
13
+ end
14
+ Fog::Logger.debug "Managed Disk #{disk_name} returned successfully."
15
+ managed_disk
16
+ end
17
+ end
18
+
19
+ # Mock class for Compute Request
20
+ class Mock
21
+ def get_managed_disk(*)
22
+ disk = {
23
+ 'accountType' => 'Standard_LRS',
24
+ 'properties' => {
25
+ 'osType' => 'Windows',
26
+ 'creationData' => {
27
+ 'createOption' => 'Empty'
28
+ },
29
+ 'diskSizeGB' => 10,
30
+ 'encryptionSettings' => {
31
+ 'enabled' => true,
32
+ 'diskEncryptionKey' => {
33
+ 'sourceVault' => {
34
+ 'id' => '/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/myVMVault'
35
+ },
36
+ 'secretUrl' => 'https://myvmvault.vault-int.azure-int.net/secrets/{secret}'
37
+ },
38
+ 'keyEncryptionKey' => {
39
+ 'sourceVault' => {
40
+ 'id' => '/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/myVMVault'
41
+ },
42
+ 'keyUrl' => 'https://myvmvault.vault-int.azure-int.net/keys/{key}'
43
+ }
44
+ },
45
+ 'timeCreated' => '2016-12-28T02:46:21.3322041+00:00',
46
+ 'provisioningState' => 'Succeeded',
47
+ 'diskState' => 'Unattached'
48
+ },
49
+ 'type' => 'Microsoft.Compute/disks',
50
+ 'location' => 'westus',
51
+ 'tags' => {
52
+ 'department' => 'Development',
53
+ 'project' => 'ManagedDisks'
54
+ },
55
+ 'id' => '/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myManagedDisk1',
56
+ 'name' => 'myManagedDisk1'
57
+ }
58
+ disk_mapper = Azure::ARM::Compute::Models::Disk.mapper
59
+ @compute_mgmt_client.deserialize(disk_mapper, disk, 'result.body')
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end