fog-azure-rm 0.2.7 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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