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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/fog-azure-rm.gemspec +8 -8
- data/lib/fog/azurerm.rb +5 -0
- data/lib/fog/azurerm/async_response.rb +36 -0
- data/lib/fog/azurerm/compute.rb +15 -1
- data/lib/fog/azurerm/constants.rb +6 -0
- data/lib/fog/azurerm/docs/compute.md +145 -2
- data/lib/fog/azurerm/models/compute/creation_data.rb +21 -0
- data/lib/fog/azurerm/models/compute/disk_create_option.rb +16 -0
- data/lib/fog/azurerm/models/compute/encryption_settings.rb +29 -0
- data/lib/fog/azurerm/models/compute/image_disk_reference.rb +15 -0
- data/lib/fog/azurerm/models/compute/managed_disk.rb +77 -0
- data/lib/fog/azurerm/models/compute/managed_disks.rb +43 -0
- data/lib/fog/azurerm/models/compute/operation_status_response.rb +18 -0
- data/lib/fog/azurerm/models/compute/server.rb +12 -7
- data/lib/fog/azurerm/models/compute/servers.rb +6 -0
- data/lib/fog/azurerm/models/traffic_manager/traffic_manager_profile.rb +1 -0
- data/lib/fog/azurerm/requests/compute/check_managed_disk_exists.rb +33 -0
- data/lib/fog/azurerm/requests/compute/create_or_update_managed_disk.rb +121 -0
- data/lib/fog/azurerm/requests/compute/create_virtual_machine.rb +24 -11
- data/lib/fog/azurerm/requests/compute/delete_managed_disk.rb +29 -0
- data/lib/fog/azurerm/requests/compute/delete_virtual_machine.rb +1 -1
- data/lib/fog/azurerm/requests/compute/get_managed_disk.rb +64 -0
- data/lib/fog/azurerm/requests/compute/grant_access_to_managed_disk.rb +30 -0
- data/lib/fog/azurerm/requests/compute/list_managed_disks_by_rg.rb +66 -0
- data/lib/fog/azurerm/requests/compute/list_managed_disks_in_subscription.rb +66 -0
- data/lib/fog/azurerm/requests/compute/revoke_access_to_managed_disk.rb +33 -0
- data/lib/fog/azurerm/requests/dns/check_zone_exists.rb +5 -1
- data/lib/fog/azurerm/requests/network/check_net_sec_rule_exists.rb +1 -1
- data/lib/fog/azurerm/requests/network/check_subnet_exists.rb +1 -1
- data/lib/fog/azurerm/utilities/general.rb +13 -10
- data/lib/fog/azurerm/version.rb +1 -1
- data/test/api_stub.rb +2 -0
- data/test/api_stub/models/compute/managed_disk.rb +59 -0
- data/test/api_stub/requests/compute/managed_disk.rb +102 -0
- data/test/api_stub/requests/compute/virtual_machine.rb +6 -6
- data/test/integration/Virtual_network_gateway_connection.rb +0 -6
- data/test/integration/application_gateway.rb +1 -1
- data/test/integration/credentials/azure.yml +1 -1
- data/test/integration/managed_disk.rb +113 -0
- data/test/integration/server.rb +39 -1
- data/test/integration/traffic_manager.rb +2 -2
- data/test/models/compute/test_managed_disk.rb +61 -0
- data/test/models/compute/test_managed_disks.rb +68 -0
- data/test/models/compute/test_server.rb +7 -1
- data/test/models/compute/test_servers.rb +1 -0
- data/test/requests/compute/test_check_managed_disk_exists.rb +31 -0
- data/test/requests/compute/test_create_or_update_managed_disk.rb +38 -0
- data/test/requests/compute/test_create_virtual_machine.rb +27 -0
- data/test/requests/compute/test_delete_managed_disk.rb +23 -0
- data/test/requests/compute/test_get_managed_disk.rb +24 -0
- data/test/requests/compute/test_grant_access_to_managed_disk.rb +26 -0
- data/test/requests/compute/test_list_managed_disks_by_rg.rb +24 -0
- data/test/requests/compute/test_list_managed_disks_in_subscription.rb +24 -0
- data/test/requests/compute/test_revoke_access_to_managed_disk.rb +24 -0
- data/test/test_helper.rb +15 -1
- metadata +47 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 499bef52b07b1965693b2351d698143b41a8e63e
|
4
|
+
data.tar.gz: d609928c181f0d655a7b6c832a42f583f2a5c20e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55657900d7678d4fd9312f7a11ab4b5b486a674876d27742920b6cafd84879b4ace419fc55abb6d47af0d0dc791ebd80e85e947909a07e8cfd14c081b9b8bfd3
|
7
|
+
data.tar.gz: eb622b9ff7a636e64a5ee82ff6890f980be76a5553b00141211a972c2b609d0a06cf46047a3dd204b747a2fdce5e99230c5ba4725c42e4c2d4fb718672f9e280
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
## 0.3.0
|
2
|
+
|
3
|
+
**Added**
|
4
|
+
- Compute Service - Added support for Managed Disk
|
5
|
+
- Compute Service - Added async method of creating server(virtual machine)
|
6
|
+
|
7
|
+
**Changed:**
|
8
|
+
- Compute Service - Changed create server method to take multiple NICs instead of one
|
9
|
+
- Updated Azure SDK gems to v0.9.0
|
10
|
+
|
11
|
+
**Fixed:**
|
12
|
+
- Integration tests
|
13
|
+
|
1
14
|
## 0.2.7
|
2
15
|
|
3
16
|
**Changed:**
|
data/fog-azure-rm.gemspec
CHANGED
@@ -25,14 +25,14 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_dependency 'fog-core', '~> 1.43.0'
|
26
26
|
spec.add_dependency 'fog-json', '~> 1.0'
|
27
27
|
spec.add_dependency 'rest-client', '~> 2.0.0'
|
28
|
-
spec.add_dependency 'azure_mgmt_compute', '~> 0.
|
29
|
-
spec.add_dependency 'azure_mgmt_resources', '~> 0.
|
30
|
-
spec.add_dependency 'azure_mgmt_storage', '~> 0.
|
31
|
-
spec.add_dependency 'azure_mgmt_network', '~> 0.
|
32
|
-
spec.add_dependency 'azure_mgmt_dns', '~> 0.
|
33
|
-
spec.add_dependency 'azure_mgmt_traffic_manager', '~> 0.
|
34
|
-
spec.add_dependency 'azure_mgmt_sql', '~> 0.
|
35
|
-
spec.add_dependency 'azure_mgmt_key_vault', '~> 0.
|
28
|
+
spec.add_dependency 'azure_mgmt_compute', '~> 0.9.0'
|
29
|
+
spec.add_dependency 'azure_mgmt_resources', '~> 0.9.0'
|
30
|
+
spec.add_dependency 'azure_mgmt_storage', '~> 0.9.0'
|
31
|
+
spec.add_dependency 'azure_mgmt_network', '~> 0.9.0'
|
32
|
+
spec.add_dependency 'azure_mgmt_dns', '~> 0.9.0'
|
33
|
+
spec.add_dependency 'azure_mgmt_traffic_manager', '~> 0.9.0'
|
34
|
+
spec.add_dependency 'azure_mgmt_sql', '~> 0.9.0'
|
35
|
+
spec.add_dependency 'azure_mgmt_key_vault', '~> 0.9.0'
|
36
36
|
spec.add_dependency 'azure-storage', '~> 0.11.5.preview'
|
37
37
|
spec.add_dependency 'vhd', '0.0.4'
|
38
38
|
end
|
data/lib/fog/azurerm.rb
CHANGED
@@ -68,6 +68,11 @@ module Fog
|
|
68
68
|
autoload :AzureRM, File.expand_path('azurerm/key_vault', __dir__)
|
69
69
|
end
|
70
70
|
|
71
|
+
# Autoload Module for Response::Asynchronous
|
72
|
+
module AzureRM
|
73
|
+
autoload :AsyncResponse, File.expand_path('azurerm/async_response', __dir__)
|
74
|
+
end
|
75
|
+
|
71
76
|
# Main AzureRM fog Provider Module
|
72
77
|
module AzureRM
|
73
78
|
extend Fog::Provider
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Fog
|
2
|
+
module AzureRM
|
3
|
+
# class for Async Response
|
4
|
+
class AsyncResponse
|
5
|
+
def initialize(model, promise)
|
6
|
+
@fog_model = model
|
7
|
+
@promise = promise
|
8
|
+
end
|
9
|
+
|
10
|
+
def value
|
11
|
+
response = @promise.value.body
|
12
|
+
@fog_model.merge_attributes(@fog_model.class.parse(response))
|
13
|
+
end
|
14
|
+
|
15
|
+
def state
|
16
|
+
@promise.state
|
17
|
+
end
|
18
|
+
|
19
|
+
def reason
|
20
|
+
@promise.reason
|
21
|
+
end
|
22
|
+
|
23
|
+
def pending?
|
24
|
+
@promise.pending?
|
25
|
+
end
|
26
|
+
|
27
|
+
def fulfilled?
|
28
|
+
@promise.fulfilled?
|
29
|
+
end
|
30
|
+
|
31
|
+
def rejected?
|
32
|
+
@promise.rejected?
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/fog/azurerm/compute.rb
CHANGED
@@ -33,6 +33,14 @@ module Fog
|
|
33
33
|
request :delete_vm_extension
|
34
34
|
request :get_vm_extension
|
35
35
|
request :check_vm_extension_exists
|
36
|
+
request :create_or_update_managed_disk
|
37
|
+
request :delete_managed_disk
|
38
|
+
request :get_managed_disk
|
39
|
+
request :check_managed_disk_exists
|
40
|
+
request :list_managed_disks_by_rg
|
41
|
+
request :list_managed_disks_in_subscription
|
42
|
+
request :revoke_access_to_managed_disk
|
43
|
+
request :grant_access_to_managed_disk
|
36
44
|
|
37
45
|
model_path 'fog/azurerm/models/compute'
|
38
46
|
model :availability_set
|
@@ -41,6 +49,13 @@ module Fog
|
|
41
49
|
collection :servers
|
42
50
|
model :virtual_machine_extension
|
43
51
|
collection :virtual_machine_extensions
|
52
|
+
model :managed_disk
|
53
|
+
collection :managed_disks
|
54
|
+
model :creation_data
|
55
|
+
model :disk_create_option
|
56
|
+
model :encryption_settings
|
57
|
+
model :image_disk_reference
|
58
|
+
model :operation_status_response
|
44
59
|
|
45
60
|
# This class provides the mock implementation for unit tests.
|
46
61
|
class Mock
|
@@ -65,7 +80,6 @@ module Fog
|
|
65
80
|
raise e.message
|
66
81
|
end
|
67
82
|
|
68
|
-
|
69
83
|
options[:environment] = 'AzureCloud' if options[:environment].nil?
|
70
84
|
|
71
85
|
telemetry = "fog-azure-rm/#{Fog::AzureRM::VERSION}"
|
@@ -17,18 +17,24 @@ RESOURCE_PROVIDER_NAMESPACE = 6
|
|
17
17
|
RESOURCE_TYPE = 7
|
18
18
|
RESOURCE_NAME = 8
|
19
19
|
ENDPOINT_PREFIX = 'Microsoft.Network/trafficManagerProfiles'.freeze
|
20
|
+
DISK_PREFIX = 'Microsoft.Compute/disks'
|
20
21
|
AZURE_ENDPOINTS = 'azureEndpoints'.freeze
|
21
22
|
EXTERNAL_ENDPOINTS = 'externalEndpoints'.freeze
|
22
23
|
NESTED_ENDPOINTS = 'nestedEndpoints'.freeze
|
23
24
|
GLOBAL = 'global'.freeze
|
24
25
|
UPLOAD_BLOB_WORKER_THREAD_COUNT = 8
|
25
26
|
VM_NAME_POSITION = 8
|
27
|
+
PRIMARY_NIC_INDEX = 0
|
26
28
|
|
27
29
|
ENVIRONMENT_AZURE_CLOUD = 'AzureCloud'.freeze
|
28
30
|
ENVIRONMENT_AZURE_CHINA_CLOUD = 'AzureChinaCloud'.freeze
|
29
31
|
ENVIRONMENT_AZURE_US_GOVERNMENT = 'AzureUSGovernment'.freeze
|
30
32
|
ENVIRONMENT_AZURE_GERMAN_CLOUD = 'AzureGermanCloud'.freeze
|
31
33
|
|
34
|
+
# MsRestAzure::AzureOperationError class Error Codes
|
35
|
+
ERROR_CODE_RESOURCE_NOT_FOUND = 'ResourceNotFound'.freeze
|
36
|
+
ERROR_CODE_NOT_FOUND = 'NotFound'.freeze
|
37
|
+
|
32
38
|
PLATFORM_LINUX = 'linux'.freeze
|
33
39
|
|
34
40
|
# State of the copy operation
|
@@ -35,6 +35,9 @@ azure_compute_service.servers.check_vm_exists(<Resource Group name>, <VM Name>)
|
|
35
35
|
|
36
36
|
Create a new linux server
|
37
37
|
|
38
|
+
**Info:**
|
39
|
+
Attribute **network_interface_card_ids** is an array of NICs ids. The NIC id at index zero will become primary NIC of this server(virtual machine) by default.
|
40
|
+
|
38
41
|
```ruby
|
39
42
|
azure_compute_service.servers.create(
|
40
43
|
name: '<VM Name>',
|
@@ -45,7 +48,7 @@ Create a new linux server
|
|
45
48
|
username: '<Username for VM>',
|
46
49
|
password: '<Password for VM>', # Optional, if 'platform' partameter is 'Linux'.
|
47
50
|
disable_password_authentication: false,
|
48
|
-
|
51
|
+
network_interface_card_ids: ['/subscriptions/{Subscription-Id}/resourceGroups/{Resource-Group-Name}/providers/Microsoft.Network/networkInterfaces/{Network-Interface-Id}'],
|
49
52
|
publisher: 'Canonical', # Not required if custom image is being used
|
50
53
|
offer: 'UbuntuServer', # Not required if custom image is being used
|
51
54
|
sku: '14.04.2-LTS', # Not required if custom image is being used
|
@@ -69,7 +72,7 @@ Create a new windows server
|
|
69
72
|
username: '<Username for VM>',
|
70
73
|
password: '<Password for VM>',
|
71
74
|
disable_password_authentication: false,
|
72
|
-
|
75
|
+
network_interface_card_ids: ['/subscriptions/{Subscription-Id}/resourceGroups/{Resource-Group-Name}/providers/Microsoft.Network/networkInterfaces/{Network-Interface-Id}'],
|
73
76
|
publisher: 'MicrosoftWindowsServerEssentials', # Not required if custom image is being used
|
74
77
|
offer: 'WindowsServerEssentials', # Not required if custom image is being used
|
75
78
|
sku: 'WindowsServerEssentials', # Not required if custom image is being used
|
@@ -79,6 +82,61 @@ Create a new windows server
|
|
79
82
|
custom_data: 'echo customData' # Optional, if you want to add custom data in this VM.
|
80
83
|
)
|
81
84
|
```
|
85
|
+
|
86
|
+
## Create Server Asynchronously
|
87
|
+
|
88
|
+
Create a new linux server asynchronously
|
89
|
+
|
90
|
+
```ruby
|
91
|
+
async_response = azure_compute_service.servers.create_async(
|
92
|
+
name: '<VM Name>',
|
93
|
+
location: 'West US',
|
94
|
+
resource_group: '<Resource Group Name>',
|
95
|
+
vm_size: 'Basic_A0',
|
96
|
+
storage_account_name: '<Storage Account Name>',
|
97
|
+
username: '<Username for VM>',
|
98
|
+
password: '<Password for VM>', # Optional, if 'platform' partameter is 'Linux'.
|
99
|
+
disable_password_authentication: false,
|
100
|
+
network_interface_card_ids: ['/subscriptions/{Subscription-Id}/resourceGroups/{Resource-Group-Name}/providers/Microsoft.Network/networkInterfaces/{Network-Interface-Id}'],
|
101
|
+
publisher: 'Canonical', # Not required if custom image is being used
|
102
|
+
offer: 'UbuntuServer', # Not required if custom image is being used
|
103
|
+
sku: '14.04.2-LTS', # Not required if custom image is being used
|
104
|
+
version: 'latest', # Not required if custom image is being used
|
105
|
+
platform: 'Linux',
|
106
|
+
vhd_path: '<Path of VHD>', # Optional, if you want to create the VM from a custom image.
|
107
|
+
custom_data: 'echo customData', # Optional, if you want to add custom data in this VM.
|
108
|
+
os_disk_caching: Fog::ARM::Compute::Models::CachingTypes::None # Optional, can be one of None, ReadOnly, ReadWrite
|
109
|
+
)
|
110
|
+
```
|
111
|
+
Following methods are available to handle async respoonse:
|
112
|
+
- state
|
113
|
+
- pending?
|
114
|
+
- rejected?
|
115
|
+
- reason
|
116
|
+
- fulfilled?
|
117
|
+
- value
|
118
|
+
|
119
|
+
An example of handling async response is given below:
|
120
|
+
|
121
|
+
```ruby
|
122
|
+
while 1
|
123
|
+
puts async_response.state
|
124
|
+
|
125
|
+
if async_response.pending?
|
126
|
+
sleep(2)
|
127
|
+
end
|
128
|
+
|
129
|
+
if async_response.fulfilled?
|
130
|
+
puts async_response.value.inspect
|
131
|
+
break
|
132
|
+
end
|
133
|
+
|
134
|
+
if async_response.rejected?
|
135
|
+
puts async_response.reason.inspect
|
136
|
+
break
|
137
|
+
end
|
138
|
+
end
|
139
|
+
```
|
82
140
|
|
83
141
|
For more information about custom_data; see link: https://msdn.microsoft.com/en-us/library/azure/mt163591.aspx
|
84
142
|
|
@@ -247,5 +305,90 @@ Destroy the given extension from the virtual machine
|
|
247
305
|
vm_extension.destroy
|
248
306
|
```
|
249
307
|
|
308
|
+
|
309
|
+
## Create Managed Disk
|
310
|
+
|
311
|
+
Create a new Managed Disk
|
312
|
+
|
313
|
+
```ruby
|
314
|
+
azure_compute_service.managed_disks.create(
|
315
|
+
name: 'disk_name',
|
316
|
+
location: 'east us',
|
317
|
+
resource_group_name: 'resource_group_name',
|
318
|
+
account_type: 'Premium_LRS',
|
319
|
+
disk_size_gb: 1023,
|
320
|
+
creation_data: {
|
321
|
+
create_option: 'Empty'
|
322
|
+
}
|
323
|
+
)
|
324
|
+
```
|
325
|
+
|
326
|
+
## List Managed Disks in a Resource Group
|
327
|
+
|
328
|
+
List managed disks in a resource group
|
329
|
+
|
330
|
+
```ruby
|
331
|
+
managed_disks = azure_compute_service.managed_disks(resource_group: '<Resource Group name>')
|
332
|
+
mnaged_disks.each do |disk|
|
333
|
+
puts "#{disk.name}"
|
334
|
+
puts "#{disk.location}"
|
335
|
+
end
|
336
|
+
```
|
337
|
+
|
338
|
+
## List Managed Disks in a Subscription
|
339
|
+
|
340
|
+
List managed disks in a subscription
|
341
|
+
|
342
|
+
```ruby
|
343
|
+
azure_compute_service.managed_disks.each do |disk|
|
344
|
+
puts "#{disk.name}"
|
345
|
+
puts "#{disk.location}"
|
346
|
+
end
|
347
|
+
```
|
348
|
+
|
349
|
+
## Grant Access to a Managed Disk
|
350
|
+
|
351
|
+
Grant access to a managed disk
|
352
|
+
|
353
|
+
```ruby
|
354
|
+
access_sas = azure_compute_service.managed_disks.grant_access('<resource_group_name>', '<disk_name>', 'Read', 1000)
|
355
|
+
puts "Access SAS: #{access_sas}"
|
356
|
+
```
|
357
|
+
|
358
|
+
## Revoke Access from a Managed Disk
|
359
|
+
|
360
|
+
Revoke access from a managed disk
|
361
|
+
|
362
|
+
```ruby
|
363
|
+
response = azure_compute_service.managed_disks.revoke_access('<resource_group_name>', '<disk_name>')
|
364
|
+
puts "Revoke Access response status: #{response.status}"
|
365
|
+
```
|
366
|
+
|
367
|
+
## Check Managed Disk Existence
|
368
|
+
|
369
|
+
```ruby
|
370
|
+
azure_compute_service.managed_disks.check_managed_disk_exists(<Resource Group name>, <Disk name>)
|
371
|
+
```
|
372
|
+
|
373
|
+
## Retrieve a single Managed Disk
|
374
|
+
|
375
|
+
Get a single record of managed disks
|
376
|
+
|
377
|
+
```ruby
|
378
|
+
managed_disk = azure_compute_service
|
379
|
+
.managed_disks
|
380
|
+
.get('<Resource Group name>','<Disk name>')
|
381
|
+
puts "#{managed_disk.name}"
|
382
|
+
```
|
383
|
+
|
384
|
+
## Destroy a single Managed Disk
|
385
|
+
|
386
|
+
Get an managed disk object from the get method and then destroy that managed disk.
|
387
|
+
|
388
|
+
```ruby
|
389
|
+
managed_disk.destroy
|
390
|
+
```
|
391
|
+
|
392
|
+
|
250
393
|
## Support and Feedback
|
251
394
|
Your feedback is appreciated! If you have specific issues with the fog ARM, you should file an issue via Github.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class AzureRM
|
4
|
+
# CreationData model for Compute Service
|
5
|
+
class CreationData < Fog::Model
|
6
|
+
attribute :create_option
|
7
|
+
attribute :storage_account_id
|
8
|
+
attribute :source_uri
|
9
|
+
attribute :source_resource_id
|
10
|
+
attribute :image_reference
|
11
|
+
|
12
|
+
def self.parse(creation_data)
|
13
|
+
data = get_hash_from_object(creation_data)
|
14
|
+
image_reference = Fog::Compute::AzureRM::ImageDiskReference.new
|
15
|
+
data['image_reference'] = image_reference.merge_attributes(Fog::Compute::AzureRM::ImageDiskReference.parse(creation_data.image_reference))
|
16
|
+
data
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Fog
|
2
|
+
module ARM
|
3
|
+
module Compute
|
4
|
+
module Models
|
5
|
+
module DiskCreateOption
|
6
|
+
FromImage = 'fromImage'.freeze
|
7
|
+
Empty = 'empty'.freeze
|
8
|
+
Attach = 'attach'.freeze
|
9
|
+
Import = 'Import'.freeze
|
10
|
+
Copy = 'Copy'.freeze
|
11
|
+
Restore = 'Restore'.freeze
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class AzureRM
|
4
|
+
# EncryptionSettings model for Compute Service
|
5
|
+
class EncryptionSettings < Fog::Model
|
6
|
+
attribute :key_url
|
7
|
+
attribute :secret_url
|
8
|
+
attribute :enabled
|
9
|
+
attribute :key_source_vault_id
|
10
|
+
attribute :disk_source_vault_id
|
11
|
+
|
12
|
+
def self.parse(encryption_settings)
|
13
|
+
settings = {}
|
14
|
+
settings['enabled'] = encryption_settings.enabled
|
15
|
+
|
16
|
+
if encryption_settings.disk_encryption_key
|
17
|
+
settings['secret_url'] = encryption_settings.disk_encryption_key.secret_url
|
18
|
+
settings['disk_source_vault_id'] = encryption_settings.disk_encryption_key.source_vault.id
|
19
|
+
end
|
20
|
+
if encryption_settings.key_encryption_key
|
21
|
+
settings['key_url'] = encryption_settings.key_encryption_key.key_url
|
22
|
+
settings['key_source_vault_id'] = encryption_settings.key_encryption_key.source_vault.id
|
23
|
+
end
|
24
|
+
settings
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class AzureRM
|
4
|
+
# ImageReference model for Compute Service
|
5
|
+
class ImageDiskReference < Fog::Model
|
6
|
+
attribute :id
|
7
|
+
attribute :lun
|
8
|
+
|
9
|
+
def self.parse(image_reference)
|
10
|
+
get_hash_from_object(image_reference)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class AzureRM
|
4
|
+
# This class is giving implementation of create/save and
|
5
|
+
# delete/destroy for Managed Disk.
|
6
|
+
class ManagedDisk < Fog::Model
|
7
|
+
attribute :id
|
8
|
+
identity :name
|
9
|
+
attribute :resource_group_name
|
10
|
+
attribute :type
|
11
|
+
attribute :location
|
12
|
+
attribute :account_type
|
13
|
+
attribute :time_created
|
14
|
+
attribute :os_type
|
15
|
+
attribute :disk_size_gb
|
16
|
+
attribute :owner_id
|
17
|
+
attribute :provisioning_state
|
18
|
+
attribute :tags
|
19
|
+
attribute :creation_data
|
20
|
+
attribute :encryption_settings
|
21
|
+
|
22
|
+
def self.parse(managed_disk)
|
23
|
+
disk = get_hash_from_object(managed_disk)
|
24
|
+
|
25
|
+
unless managed_disk.creation_data.nil?
|
26
|
+
creation_data = Fog::Compute::AzureRM::CreationData.new
|
27
|
+
disk['creation_data'] = creation_data.merge_attributes(Fog::Compute::AzureRM::CreationData.parse(managed_disk.creation_data))
|
28
|
+
end
|
29
|
+
|
30
|
+
unless managed_disk.encryption_settings.nil?
|
31
|
+
encryption_settings = Fog::Compute::AzureRM::EncryptionSettings.new
|
32
|
+
disk['encryption_settings'] = encryption_settings.merge_attributes(Fog::Compute::AzureRM::EncryptionSettings.parse(managed_disk.encryption_settings))
|
33
|
+
end
|
34
|
+
|
35
|
+
disk['resource_group_name'] = get_resource_group_from_id(managed_disk.id)
|
36
|
+
|
37
|
+
disk
|
38
|
+
end
|
39
|
+
|
40
|
+
def save
|
41
|
+
requires :name, :location, :resource_group_name, :creation_data
|
42
|
+
requires :disk_size_gb if creation_data[:create_option] == 'Empty'
|
43
|
+
validate_creation_data_params(creation_data)
|
44
|
+
|
45
|
+
disk = service.create_or_update_managed_disk(managed_disk_params)
|
46
|
+
merge_attributes(Fog::Compute::AzureRM::ManagedDisk.parse(disk))
|
47
|
+
end
|
48
|
+
|
49
|
+
def destroy
|
50
|
+
service.delete_managed_disk(resource_group_name, name)
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def validate_creation_data_params(creation_data)
|
56
|
+
unless creation_data.key?(:create_option)
|
57
|
+
raise(ArgumentError, ':create_option is required for this operation')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def managed_disk_params
|
62
|
+
{
|
63
|
+
name: name,
|
64
|
+
location: location,
|
65
|
+
resource_group_name: resource_group_name,
|
66
|
+
account_type: account_type,
|
67
|
+
os_type: os_type,
|
68
|
+
disk_size_gb: disk_size_gb,
|
69
|
+
tags: tags,
|
70
|
+
creation_data: creation_data,
|
71
|
+
encryption_settings: encryption_settings
|
72
|
+
}
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|