fog-azure-rm 0.3.9 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2518251d501b6a297a475f1cd38f62b83fc87ffbf49ddce2aa8d8340780c1b4
4
- data.tar.gz: b88856beb8dd8ddae666b39acedff8b671dd4bdbefd18b2e3cef8d3084349f4e
3
+ metadata.gz: 7a19921af4507084f3170dd448ce4193f7bcd9075b0fca9376b0270324a70664
4
+ data.tar.gz: f44723252fdfa0cafb164e416643c04e5b212d6954cec36572408c461add8b5d
5
5
  SHA512:
6
- metadata.gz: 470b6100a51b5f65a916932a49da01f4bc17fc94fefe38773ff01e99c9b18f5623528efb54906d83992e6e56c14546d2fb1430a7b45b8279a23c4aa18f74458f
7
- data.tar.gz: 7c7f7d4288daeb1132735c61e8314f373ca97841156335f358b884d44e9f8e72fd84405f830ac4dc964ff37ac9af1d3cfec3511815f95ee20b05fd3a44aab959
6
+ metadata.gz: 9102c6cb48c96fa42d47b38ae5d5b73843bc63640e43178e78059fead565569847d65d628a84aefeae61be8a56abd6cf8eee28dbeff5118a90a3a5e3708ec069
7
+ data.tar.gz: fc2ecb7465efca20e516a19ca555bf97f77aa50eee8bfd2b68a31f8fb59d6cbbb3e8d2031ab06f13cd5268a85243badb799aa30ff791e560c081e6bccc4cf419
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.4.0
2
+
3
+ **Added**
4
+ - Support added for custom vm image reference
5
+
1
6
  ## 0.3.9
2
7
 
3
8
  **Changed**
@@ -41,8 +41,9 @@ module Fog
41
41
  request :list_managed_disks_in_subscription
42
42
  request :revoke_access_to_managed_disk
43
43
  request :grant_access_to_managed_disk
44
- request :create_generalized_image
45
- request :delete_generalized_image
44
+ request :create_image
45
+ request :delete_image
46
+ request :get_image
46
47
 
47
48
  model_path 'fog/azurerm/models/compute'
48
49
  model :availability_set
@@ -38,7 +38,6 @@ fog_compute_service.servers.check_vm_exists('<Resource Group Name>', '<VM Name>'
38
38
  - To create VM with managed OS disk, use the _managed_disk_storage_type_ argument
39
39
  - To create VM with unmanaged OS disk, use the _storage_account_name_ argument
40
40
 
41
-
42
41
  ### Virtual Machine (Managed OS Disk)
43
42
 
44
43
  ```ruby
@@ -66,6 +65,42 @@ fog_compute_service.servers.create(
66
65
  )
67
66
  ```
68
67
 
68
+ **Info:**
69
+
70
+ - To create VM from Image, pass in the Image ID in `image_ref` attribute
71
+
72
+ **Limitation:**
73
+
74
+ - Image should be in the same region
75
+ - ONLY managed VM can be created from image
76
+
77
+ ### Virtual Machine (Managed OS Disk from Image)
78
+
79
+ ```ruby
80
+ fog_compute_service.servers.create(
81
+ name: '<VM Name>',
82
+ location: '<Location>',
83
+ resource_group: '<Resource Group Name>',
84
+ tags: { key1: 'value1', key2: 'value2', keyN: 'valueN' },
85
+ vm_size: '<Virtual Machine Size>',
86
+ username: '<Username>',
87
+ disable_password_authentication: <True/False>,
88
+ network_interface_card_ids: ['/subscriptions/<Subscription Id>/resourceGroups/<Resource Group Name>/providers/Microsoft.Network/networkInterfaces/<Network Interface Id>'],
89
+ publisher: '<Publisher Name>', # Not required if custom image is being used
90
+ offer: '<Offer Name>', # Not required if custom image is being used
91
+ sku: '<SKU Name>', # Not required if custom image is being used
92
+ version: '<Version>', # Not required if custom image is being used
93
+ platform: '<OS Type>',
94
+ availability_set_id: '<Availability Set Id>', # [Optional]
95
+ password: '<Password>', # [Optional], if 'platform' partameter is 'Linux'.
96
+ image_ref: '<Image ID>', # [Optional], if you want to create the VM from a custom image.
97
+ custom_data: '<Custom Data Value>', # [Optional], if you want to add custom data in this VM.
98
+ os_disk_caching: '<Caching Type>', # [Optional], can be one of None, ReadOnly, ReadWrite
99
+ managed_disk_storage_type: '<Storage Account Type>', # [Optional], if storage_account_name is passed, can be StandardLRS or PremiumLRS
100
+ os_disk_size: <Disk Size> # [Optional], size of the os disk in GB (upto 1023)
101
+ )
102
+ ```
103
+
69
104
  ### Virtual Machine (Unmanaged OS Disk)
70
105
 
71
106
  ```ruby
@@ -35,6 +35,7 @@ module Fog
35
35
  attribute :tags
36
36
  attribute :platform_update_domain
37
37
  attribute :platform_fault_domain
38
+ attribute :image_ref
38
39
 
39
40
  def self.parse(vm)
40
41
  hash = {}
@@ -92,7 +93,7 @@ module Fog
92
93
 
93
94
  def save(async = false)
94
95
  requires :name, :location, :resource_group, :vm_size, :username, :network_interface_card_ids
95
- requires :publisher, :offer, :sku, :version if vhd_path.nil? && managed_disk_storage_type.nil?
96
+ requires :publisher, :offer, :sku, :version if vhd_path.nil? && image_ref.nil?
96
97
  requires :storage_account_name if managed_disk_storage_type.nil?
97
98
  requires :managed_disk_storage_type if storage_account_name.nil?
98
99
 
@@ -179,7 +180,7 @@ module Fog
179
180
 
180
181
  def delete_extra_resources
181
182
  unless vhd_path.nil? || !managed_disk_storage_type.nil?
182
- service.delete_generalized_image(resource_group, name)
183
+ service.delete_image(resource_group, name)
183
184
  delete_storage_account_or_container(resource_group, storage_account_name, name)
184
185
  end
185
186
  end
@@ -226,7 +227,8 @@ module Fog
226
227
  os_disk_caching: os_disk_caching,
227
228
  managed_disk_storage_type: managed_disk_storage_type,
228
229
  os_disk_size: os_disk_size,
229
- tags: tags
230
+ tags: tags,
231
+ image_ref: image_ref
230
232
  }
231
233
  end
232
234
 
@@ -242,8 +244,11 @@ module Fog
242
244
  end
243
245
 
244
246
  def delete_storage_account_or_container(resource_group, storage_account_name, vm_name)
245
- delete_storage_account(resource_group) if storage_account_name.nil?
246
- delete_storage_container(resource_group, storage_account_name, vm_name) unless storage_account_name.nil?
247
+ if storage_account_name.nil?
248
+ delete_storage_account(resource_group)
249
+ else
250
+ delete_storage_container(resource_group, storage_account_name, vm_name)
251
+ end
247
252
  end
248
253
 
249
254
  def delete_storage_container(resource_group, storage_account_name, vm_name)
@@ -3,32 +3,32 @@ module Fog
3
3
  class AzureRM
4
4
  # This class provides the actual implementation for service calls.
5
5
  class Real
6
- def create_generalized_image(image_config)
7
- msg = "Creating/Updating Generalized Image: #{image_config[:vm_name]}-osImage"
6
+ def create_image(image_config)
7
+ msg = "Creating/Updating Image: #{image_config[:vm_name]}-osImage"
8
8
  Fog::Logger.debug msg
9
9
  image_name = "#{image_config[:vm_name]}-osImage"
10
- image = setup_image_params(image_config)
10
+ image = setup_params(image_config)
11
11
  begin
12
12
  image_obj = @compute_mgmt_client.images.create_or_update(image_config[:resource_group], image_name, image)
13
13
  rescue MsRestAzure::AzureOperationError => e
14
14
  raise_azure_exception(e, msg)
15
15
  end
16
- Fog::Logger.debug "Generalized Image #{image_name} created/updated successfully."
16
+ Fog::Logger.debug "Image #{image_name} created/updated successfully."
17
17
  image_obj
18
18
  end
19
19
 
20
20
  private
21
21
 
22
- def setup_image_params(image_config)
22
+ def setup_params(image_config)
23
23
  storage_profile_image = Azure::ARM::Compute::Models::ImageStorageProfile.new
24
- storage_profile_image.os_disk = create_os_disk_image(image_config)
24
+ storage_profile_image.os_disk = create_generalized_os_disk_image(image_config)
25
25
  image = Azure::ARM::Compute::Models::Image.new
26
26
  image.storage_profile = storage_profile_image
27
27
  image.location = image_config[:location]
28
28
  image
29
29
  end
30
30
 
31
- def create_os_disk_image(image_config)
31
+ def create_generalized_os_disk_image(image_config)
32
32
  os_disk_image = Azure::ARM::Compute::Models::ImageOSDisk.new
33
33
  os_disk_image.os_type = image_config[:platform]
34
34
  os_disk_image.os_state = 'Generalized'
@@ -37,9 +37,10 @@ module Fog
37
37
  os_disk_image
38
38
  end
39
39
  end
40
+
40
41
  # This class provides the mock implementation for unit tests.
41
42
  class Mock
42
- def create_generalized_image(*)
43
+ def create_image(*)
43
44
  image_obj = {
44
45
  'location' => 'West US',
45
46
  'tags' => {
@@ -1,4 +1,5 @@
1
1
  require 'base64'
2
+
2
3
  WHITE_SPACE = ' '.freeze
3
4
 
4
5
  module Fog
@@ -7,122 +8,237 @@ module Fog
7
8
  # This class provides the actual implementation for service calls.
8
9
  class Real
9
10
  def create_virtual_machine(vm_config, async = false)
10
- msg = "Creating Virtual Machine #{vm_config[:name]} in Resource Group #{vm_config[:resource_group]}."
11
+ vm_name = vm_config[:name]
12
+ rg_name = vm_config[:resource_group]
13
+
14
+ msg = "Creating Virtual Machine '#{vm_name}' in Resource Group '#{rg_name}'..."
11
15
  Fog::Logger.debug msg
12
- virtual_machine = Azure::ARM::Compute::Models::VirtualMachine.new
13
16
 
14
- unless vm_config[:availability_set_id].nil?
15
- sub_resource = MsRestAzure::SubResource.new
16
- sub_resource.id = vm_config[:availability_set_id]
17
- virtual_machine.availability_set = sub_resource
18
- end
17
+ vm = Azure::ARM::Compute::Models::VirtualMachine.new
18
+ vm.location = vm_config[:location]
19
+ vm.tags = vm_config[:tags]
20
+ vm.availability_set = get_vm_availability_set(vm_config[:availability_set_id])
21
+ vm.hardware_profile = get_hardware_profile(vm_config[:vm_size])
22
+ vm.os_profile = get_os_profile(vm_config)
23
+ vm.network_profile = get_network_profile(vm_config[:network_interface_card_ids])
24
+ vm.storage_profile = get_storage_profile(vm_config)
19
25
 
20
- string_data = vm_config[:custom_data]
21
- string_data = WHITE_SPACE if string_data.nil?
22
- encoded_data = Base64.strict_encode64(string_data)
23
- virtual_machine.hardware_profile = define_hardware_profile(vm_config[:vm_size])
24
- virtual_machine.storage_profile = define_storage_profile(vm_config[:name],
25
- vm_config[:storage_account_name],
26
- vm_config[:publisher],
27
- vm_config[:offer],
28
- vm_config[:sku],
29
- vm_config[:version],
30
- vm_config[:vhd_path],
31
- vm_config[:os_disk_caching],
32
- vm_config[:platform],
33
- vm_config[:resource_group],
34
- vm_config[:managed_disk_storage_type],
35
- vm_config[:os_disk_size],
36
- vm_config[:location])
37
-
38
- virtual_machine.os_profile = if vm_config[:platform].casecmp(WINDOWS).zero?
39
- define_windows_os_profile(vm_config[:name],
40
- vm_config[:username],
41
- vm_config[:password],
42
- vm_config[:provision_vm_agent],
43
- vm_config[:enable_automatic_updates],
44
- encoded_data)
45
- else
46
- define_linux_os_profile(vm_config[:name],
47
- vm_config[:username],
48
- vm_config[:password],
49
- vm_config[:disable_password_authentication],
50
- vm_config[:ssh_key_path],
51
- vm_config[:ssh_key_data],
52
- encoded_data)
53
- end
54
- virtual_machine.network_profile = define_network_profile(vm_config[:network_interface_card_ids])
55
- virtual_machine.location = vm_config[:location]
56
- virtual_machine.tags = vm_config[:tags]
57
26
  begin
58
27
  response = if async
59
- @compute_mgmt_client.virtual_machines.create_or_update_async(vm_config[:resource_group], vm_config[:name], virtual_machine)
28
+ @compute_mgmt_client.virtual_machines.create_or_update_async(rg_name, vm_name, vm)
60
29
  else
61
- @compute_mgmt_client.virtual_machines.create_or_update(vm_config[:resource_group], vm_config[:name], virtual_machine)
30
+ @compute_mgmt_client.virtual_machines.create_or_update(rg_name, vm_name, vm)
62
31
  end
63
32
  rescue MsRestAzure::AzureOperationError => e
64
33
  raise_azure_exception(e, msg)
65
34
  end
35
+
66
36
  unless async
67
37
  unless vm_config[:vhd_path].nil? || vm_config[:managed_disk_storage_type].nil?
68
- delete_generalized_image(vm_config[:resource_group], vm_config[:name])
69
- delete_storage_account_or_container(vm_config[:resource_group], vm_config[:storage_account_name], vm_config[:name])
38
+ delete_image(rg_name, vm_name)
39
+ delete_storage_account_or_container(rg_name, vm_config[:storage_account_name], vm_name)
70
40
  end
71
41
  end
72
- Fog::Logger.debug "Virtual Machine #{vm_config[:name]} Created Successfully." unless async
42
+
43
+ Fog::Logger.debug "Virtual Machine #{vm_name} created successfully!" unless async
73
44
  response
74
45
  end
75
46
 
76
47
  private
77
48
 
78
- def define_hardware_profile(vm_size)
49
+ def get_vm_availability_set(availability_set_id)
50
+ sub_resource = nil
51
+ unless availability_set_id.nil?
52
+ sub_resource = MsRestAzure::SubResource.new
53
+ sub_resource.id = availability_set_id
54
+ end
55
+ sub_resource
56
+ end
57
+
58
+ def get_hardware_profile(vm_size)
79
59
  hw_profile = Azure::ARM::Compute::Models::HardwareProfile.new
80
60
  hw_profile.vm_size = vm_size
81
61
  hw_profile
82
62
  end
83
63
 
84
- def image_reference(publisher, offer, sku, version)
85
- image_reference = Azure::ARM::Compute::Models::ImageReference.new
86
- image_reference.publisher = publisher
87
- image_reference.offer = offer
88
- image_reference.sku = sku
89
- image_reference.version = version
90
- image_reference
64
+ def get_os_profile(vm_config)
65
+ # Arguments unpacking
66
+ platform = vm_config[:platform]
67
+ vm_name = vm_config[:name]
68
+ username = vm_config[:username]
69
+ password = vm_config[:password]
70
+ custom_data = vm_config[:custom_data]
71
+ provision_vm_agent = vm_config[:provision_vm_agent]
72
+ enable_automatic_updates = vm_config[:enable_automatic_updates]
73
+ disable_password_auth = vm_config[:disable_password_authentication]
74
+ ssh_key_path = vm_config[:ssh_key_path]
75
+ ssh_key_data = vm_config[:ssh_key_data]
76
+
77
+ # Build and return os profile object
78
+ os_profile = Azure::ARM::Compute::Models::OSProfile.new
79
+ os_profile.computer_name = vm_name
80
+ os_profile.admin_username = username
81
+ os_profile.admin_password = password
82
+ os_profile.custom_data = Base64.strict_encode64(custom_data.nil? ? WHITE_SPACE : custom_data)
83
+
84
+ if platform.casecmp(WINDOWS).zero?
85
+ os_profile.windows_configuration = get_windows_config(provision_vm_agent, enable_automatic_updates)
86
+ else
87
+ os_profile.linux_configuration = get_linux_config(disable_password_auth, ssh_key_path, ssh_key_data)
88
+ end
89
+
90
+ os_profile
91
+ end
92
+
93
+ def get_windows_config(provision_vm_agent, enable_automatic_updates)
94
+ windows_config = Azure::ARM::Compute::Models::WindowsConfiguration.new
95
+ windows_config.provision_vmagent = provision_vm_agent
96
+ windows_config.enable_automatic_updates = enable_automatic_updates
97
+ windows_config
91
98
  end
92
99
 
93
- def define_storage_profile(vm_name, storage_account_name, publisher, offer, sku, version, vhd_path, os_disk_caching, platform, resource_group, managed_disk_storage_type, os_disk_size, location)
100
+ def get_linux_config(disable_password_auth, ssh_key_path, ssh_key_data)
101
+ linux_config = Azure::ARM::Compute::Models::LinuxConfiguration.new
102
+ linux_config.disable_password_authentication = disable_password_auth
103
+
104
+ unless ssh_key_path.nil? || ssh_key_data.nil?
105
+ ssh_config = Azure::ARM::Compute::Models::SshConfiguration.new
106
+ ssh_public_key = Azure::ARM::Compute::Models::SshPublicKey.new
107
+ ssh_public_key.path = ssh_key_path
108
+ ssh_public_key.key_data = ssh_key_data
109
+ ssh_config.public_keys = [ssh_public_key]
110
+ linux_config.ssh = ssh_config
111
+ end
112
+
113
+ linux_config
114
+ end
115
+
116
+ def get_network_profile(network_interface_card_ids)
117
+ network_interface_cards = []
118
+ network_interface_card_ids.each_with_index do |id, index|
119
+ nic = Azure::ARM::Compute::Models::NetworkInterfaceReference.new
120
+ nic.id = id
121
+ nic.primary = index == PRIMARY_NIC_INDEX
122
+ network_interface_cards << nic
123
+ end
124
+
125
+ network_profile = Azure::ARM::Compute::Models::NetworkProfile.new
126
+ network_profile.network_interfaces = network_interface_cards
127
+ network_profile
128
+ end
129
+
130
+ def get_storage_profile(vm_config)
131
+ # Arguments unpacking
132
+ managed_disk_storage_type = vm_config[:managed_disk_storage_type]
133
+
134
+ storage_profile = if managed_disk_storage_type.nil?
135
+ get_unmanaged_vm_storage_profile(vm_config)
136
+ else
137
+ get_managed_vm_storage_profile(vm_config)
138
+ end
139
+ storage_profile
140
+ end
141
+
142
+ def get_unmanaged_vm_storage_profile(vm_config)
143
+ # Arguments unpacking
144
+ vm_name = vm_config[:name]
145
+ storage_account_name = vm_config[:storage_account_name]
146
+ publisher = vm_config[:publisher]
147
+ offer = vm_config[:offer]
148
+ sku = vm_config[:sku]
149
+ version = vm_config[:version]
150
+ vhd_path = vm_config[:vhd_path]
151
+ os_disk_caching = vm_config[:os_disk_caching]
152
+ platform = vm_config[:platform]
153
+ resource_group = vm_config[:resource_group]
154
+ os_disk_size = vm_config[:os_disk_size]
155
+ location = vm_config[:location]
156
+ image_ref = vm_config[:image_ref]
157
+
94
158
  storage_profile = Azure::ARM::Compute::Models::StorageProfile.new
95
- storage_profile.image_reference = image_reference(publisher, offer, sku, version) if vhd_path.nil?
159
+ # Set OS disk VHD path
96
160
  os_disk = Azure::ARM::Compute::Models::OSDisk.new
161
+ vhd = Azure::ARM::Compute::Models::VirtualHardDisk.new
162
+ vhd.uri = get_blob_endpoint(storage_account_name) + "/vhds/#{vm_name}_os_disk.vhd"
163
+ os_disk.vhd = vhd
164
+
165
+ if vhd_path.nil? && image_ref.nil?
166
+ # Marketplace
167
+ storage_profile.image_reference = image_reference(publisher, offer, sku, version)
168
+ elsif !vhd_path.nil? && image_ref.nil?
169
+ # VHD
170
+ new_vhd_path = copy_vhd_to_storage_account(resource_group, storage_account_name, vhd_path, location, vm_name)
171
+ img_vhd = Azure::ARM::Compute::Models::VirtualHardDisk.new
172
+ img_vhd.uri = new_vhd_path
173
+ os_disk.image = img_vhd
174
+ else
175
+ # Image
176
+ image_resource_group = get_resource_group_from_id(image_ref)
177
+ image_name = get_image_name(image_ref)
178
+ image = get_image(image_resource_group, image_name)
179
+ storage_profile.image_reference = Azure::ARM::Compute::Models::ImageReference.new
180
+ storage_profile.image_reference.id = image.id
181
+ end
97
182
 
98
- new_vhd_path = copy_vhd_to_storage_account(resource_group, storage_account_name, vhd_path, location, vm_name) unless vhd_path.nil?
183
+ storage_profile.os_disk = configure_os_disk_object(os_disk, os_disk_caching, os_disk_size, platform, vm_name)
184
+ storage_profile
185
+ end
99
186
 
100
- if managed_disk_storage_type.nil?
101
- vhd = Azure::ARM::Compute::Models::VirtualHardDisk.new
102
- vhd.uri = get_blob_endpoint(storage_account_name) + "/vhds/#{vm_name}_os_disk.vhd"
187
+ def get_managed_vm_storage_profile(vm_config)
188
+ # Argument unpacking
189
+ managed_disk_storage_type = vm_config[:managed_disk_storage_type]
190
+ vhd_path = vm_config[:vhd_path]
191
+ resource_group = vm_config[:resource_group]
192
+ storage_account_name = vm_config[:storage_account_name]
193
+ location = vm_config[:location]
194
+ publisher = vm_config[:publisher]
195
+ offer = vm_config[:offer]
196
+ sku = vm_config[:sku]
197
+ version = vm_config[:version]
198
+ os_disk_caching = vm_config[:os_disk_caching]
199
+ os_disk_size = vm_config[:os_disk_size]
200
+ platform = vm_config[:platform]
201
+ vm_name = vm_config[:name]
202
+ image_ref = vm_config[:image_ref]
103
203
 
104
- unless vhd_path.nil?
105
- img_vhd = Azure::ARM::Compute::Models::VirtualHardDisk.new
106
- img_vhd.uri = new_vhd_path
107
- os_disk.image = img_vhd
108
- end
204
+ # Build storage profile
205
+ storage_profile = Azure::ARM::Compute::Models::StorageProfile.new
206
+ os_disk = Azure::ARM::Compute::Models::OSDisk.new
207
+ managed_disk = Azure::ARM::Compute::Models::ManagedDiskParameters.new
208
+ managed_disk.storage_account_type = managed_disk_storage_type
209
+ os_disk.managed_disk = managed_disk
109
210
 
110
- os_disk.vhd = vhd
211
+ if vhd_path.nil? && image_ref.nil?
212
+ # Marketplace
213
+ storage_profile.image_reference = image_reference(publisher, offer, sku, version)
214
+ elsif !vhd_path.nil? && image_ref.nil?
215
+ # VHD
216
+ new_vhd_path = copy_vhd_to_storage_account(resource_group, storage_account_name, vhd_path, location, vm_name)
217
+ image = create_image(image_config_params(location, new_vhd_path, platform, resource_group, vm_name))
218
+ storage_profile.image_reference = Azure::ARM::Compute::Models::ImageReference.new
219
+ storage_profile.image_reference.id = image.id
111
220
  else
112
- unless vhd_path.nil?
113
- image_obj = create_generalized_image(image_config_params(location, new_vhd_path, platform, resource_group, vm_name))
114
- storage_profile.image_reference = Azure::ARM::Compute::Models::ImageReference.new
115
- storage_profile.image_reference.id = image_obj.id
116
- end
117
-
118
- managed_disk = Azure::ARM::Compute::Models::ManagedDiskParameters.new
119
- managed_disk.storage_account_type = managed_disk_storage_type
120
- os_disk.managed_disk = managed_disk
221
+ # Image
222
+ image_resource_group = get_resource_group_from_id(image_ref)
223
+ image_name = get_image_name(image_ref)
224
+ image = get_image(image_resource_group, image_name)
225
+ storage_profile.image_reference = Azure::ARM::Compute::Models::ImageReference.new
226
+ storage_profile.image_reference.id = image.id
121
227
  end
228
+
122
229
  storage_profile.os_disk = configure_os_disk_object(os_disk, os_disk_caching, os_disk_size, platform, vm_name)
123
230
  storage_profile
124
231
  end
125
232
 
233
+ def image_reference(publisher, offer, sku, version)
234
+ image_reference = Azure::ARM::Compute::Models::ImageReference.new
235
+ image_reference.publisher = publisher
236
+ image_reference.offer = offer
237
+ image_reference.sku = sku
238
+ image_reference.version = version
239
+ image_reference
240
+ end
241
+
126
242
  def image_config_params(location, new_vhd_path, platform, resource_group, vm_name)
127
243
  {
128
244
  location: location,
@@ -151,54 +267,19 @@ module Fog
151
267
  os_disk
152
268
  end
153
269
 
154
- def define_windows_os_profile(vm_name, username, password, provision_vm_agent, enable_automatic_updates, encoded_data)
155
- os_profile = Azure::ARM::Compute::Models::OSProfile.new
156
- windows_config = Azure::ARM::Compute::Models::WindowsConfiguration.new
157
- windows_config.provision_vmagent = provision_vm_agent
158
- windows_config.enable_automatic_updates = enable_automatic_updates
159
- os_profile.windows_configuration = windows_config
160
- os_profile.computer_name = vm_name
161
- os_profile.admin_username = username
162
- os_profile.admin_password = password
163
- os_profile.custom_data = encoded_data
164
- os_profile
165
- end
166
-
167
- def define_linux_os_profile(vm_name, username, password, disable_password_authentication, ssh_key_path, ssh_key_data, encoded_data)
168
- os_profile = Azure::ARM::Compute::Models::OSProfile.new
169
- linux_config = Azure::ARM::Compute::Models::LinuxConfiguration.new
170
-
171
- unless ssh_key_path.nil? || ssh_key_data.nil?
172
- ssh_config = Azure::ARM::Compute::Models::SshConfiguration.new
173
- ssh_public_key = Azure::ARM::Compute::Models::SshPublicKey.new
174
- ssh_public_key.path = ssh_key_path
175
- ssh_public_key.key_data = ssh_key_data
176
- ssh_config.public_keys = [ssh_public_key]
177
- linux_config.ssh = ssh_config
178
- end
179
-
180
- linux_config.disable_password_authentication = disable_password_authentication
181
- os_profile.linux_configuration = linux_config
182
- os_profile.computer_name = vm_name
183
- os_profile.admin_username = username
184
- os_profile.admin_password = password
185
- os_profile.custom_data = encoded_data
186
- os_profile
187
- end
188
-
189
270
  def copy_vhd_to_storage_account(resource_group, storage_account_name, vhd_path, location, vm_name)
190
271
  # Copy if VHD does not exist belongs to same storage account.
191
- vhd_storage_account = (vhd_path.split('/')[2]).split('.')[0]
192
- if storage_account_name != vhd_storage_account
272
+ vhd_storage_account_name = (vhd_path.split('/')[2]).split('.')[0]
273
+ if storage_account_name != vhd_storage_account_name
193
274
  if storage_account_name.nil?
194
275
  new_time = current_time
195
276
  storage_account_name = "sa#{new_time}"
196
- storage_account = @storage_service.storage_accounts.create(
197
- storage_account_config_params(location, resource_group, storage_account_name)
198
- )
277
+ storage_account_config = storage_account_config_params(location, resource_group, storage_account_name)
278
+ storage_account = @storage_service.storage_accounts.create(storage_account_config)
199
279
  else
200
280
  storage_account = @storage_service.storage_accounts.get(resource_group, storage_account_name)
201
281
  end
282
+
202
283
  access_key = storage_account.get_access_keys.first.value
203
284
  storage_data = Fog::Storage::AzureRM.new(azure_storage_account_name: storage_account_name, azure_storage_access_key: access_key)
204
285
  new_time = current_time
@@ -206,15 +287,18 @@ module Fog
206
287
  blob_name = "vhd_image#{new_time}.vhd"
207
288
  storage_data.directories.create(key: container_name)
208
289
  storage_data.copy_blob_from_uri(container_name, blob_name, vhd_path)
290
+
209
291
  until storage_data.get_blob_properties(container_name, blob_name).properties[:copy_status] == 'success'
210
292
  Fog::Logger.debug 'Waiting disk to ready'
211
293
  sleep(10)
212
294
  end
295
+
213
296
  new_vhd_path = get_blob_endpoint(storage_account_name) + "/#{container_name}/#{blob_name}"
214
297
  Fog::Logger.debug "Path:#{new_vhd_path}. | Copy done"
215
298
  else
216
299
  new_vhd_path = vhd_path
217
300
  end
301
+
218
302
  new_vhd_path
219
303
  end
220
304
 
@@ -232,20 +316,6 @@ module Fog
232
316
  }
233
317
  end
234
318
 
235
- def define_network_profile(network_interface_card_ids)
236
- network_interface_cards = []
237
- network_interface_card_ids.each_with_index do |id, index|
238
- nic = Azure::ARM::Compute::Models::NetworkInterfaceReference .new
239
- nic.id = id
240
- nic.primary = index == PRIMARY_NIC_INDEX
241
- network_interface_cards << nic
242
- end
243
-
244
- network_profile = Azure::ARM::Compute::Models::NetworkProfile.new
245
- network_profile.network_interfaces = network_interface_cards
246
- network_profile
247
- end
248
-
249
319
  def delete_storage_account_or_container(resource_group, storage_account_name, vm_name)
250
320
  delete_storage_account(resource_group) if storage_account_name.nil?
251
321
  delete_storage_container(resource_group, storage_account_name, vm_name) unless storage_account_name.nil?
@@ -258,9 +328,12 @@ module Fog
258
328
  end
259
329
 
260
330
  def delete_storage_account(resource_group)
261
- @storage_service.storage_accounts.delete_storage_account_from_tag(resource_group, TEMPORARY_STORAGE_ACCOUNT_TAG_KEY, TEMPORARY_STORAGE_ACCOUNT_TAG_VALUE)
331
+ @storage_service.storage_accounts.delete_storage_account_from_tag(resource_group,
332
+ TEMPORARY_STORAGE_ACCOUNT_TAG_KEY,
333
+ TEMPORARY_STORAGE_ACCOUNT_TAG_VALUE)
262
334
  end
263
335
  end
336
+
264
337
  # This class provides the mock implementation for unit tests.
265
338
  class Mock
266
339
  def create_virtual_machine(*)
@@ -320,6 +393,7 @@ module Fog
320
393
  'provisioningState' => 'Succeeded'
321
394
  }
322
395
  }
396
+
323
397
  vm_mapper = Azure::ARM::Compute::Models::VirtualMachine.mapper
324
398
  @compute_mgmt_client.deserialize(vm_mapper, vm, 'result.body')
325
399
  end
@@ -3,8 +3,8 @@ module Fog
3
3
  class AzureRM
4
4
  # This class provides the actual implementation for service calls.
5
5
  class Real
6
- def delete_generalized_image(resource_group, vm_name)
7
- msg = "Deleting Generalized Image: #{vm_name}-osImage"
6
+ def delete_image(resource_group, vm_name)
7
+ msg = "Deleting Image: #{vm_name}-osImage"
8
8
  Fog::Logger.debug msg
9
9
  image_name = "#{vm_name}-osImage"
10
10
  begin
@@ -12,14 +12,14 @@ module Fog
12
12
  rescue MsRestAzure::AzureOperationError => e
13
13
  raise_azure_exception(e, msg)
14
14
  end
15
- Fog::Logger.debug "Generalized Image #{image_name} deleted successfully."
15
+ Fog::Logger.debug "Image #{image_name} deleted successfully."
16
16
  true
17
17
  end
18
18
  end
19
19
 
20
20
  # This class provides the mock implementation for unit tests.
21
21
  class Mock
22
- def delete_generalized_image(*)
22
+ def delete_image(*)
23
23
  Fog::Logger.debug 'Image fog-test-server-osImage from Resource group fog-test-rg deleted successfully.'
24
24
  true
25
25
  end
@@ -0,0 +1,45 @@
1
+ module Fog
2
+ module Compute
3
+ class AzureRM
4
+ # Real class for Compute Request
5
+ class Real
6
+ def get_image(resource_group_name, image_name)
7
+ msg = "Getting Image #{image_name} in Resource Group #{resource_group_name}"
8
+ Fog::Logger.debug msg
9
+ begin
10
+ image = @compute_mgmt_client.images.get(resource_group_name, image_name)
11
+ rescue MsRestAzure::AzureOperationError => e
12
+ raise_azure_exception(e, msg)
13
+ end
14
+ Fog::Logger.debug "#{msg} successful"
15
+ image
16
+ end
17
+ end
18
+
19
+ # Mock class for Compute Request
20
+ class Mock
21
+ def get_image(*)
22
+ body = {
23
+ 'id' => '/subscriptions/########-####-####-####-############/resourceGroups/TestRG/providers/Microsoft.Compute/images/TestImage',
24
+ 'name' => 'TestImage',
25
+ 'resource_group' => 'TestRG',
26
+ 'location' => 'West US',
27
+ 'storage_profile' => {
28
+ 'os_disk' => {
29
+ 'os_type' => 'Linux',
30
+ 'os_state' => 'Generalized',
31
+ 'blob_uri' => 'https://myblob.blob.core.windows.net/images/testimage.vhd',
32
+ 'caching' => 'ReadWrite',
33
+ 'disk_size_gb' => '5'
34
+ },
35
+ 'data_disks' => []
36
+ },
37
+ 'provisioning_state' => 'Succeeded'
38
+ }
39
+ image_mapper = Azure::ARM::Compute::Models::Image.mapper
40
+ @compute_mgmt_client.deserialize(image_mapper, body, 'result.body')
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -166,3 +166,7 @@ def parse_storage_object(object)
166
166
  data['etag'].delete!('"')
167
167
  data
168
168
  end
169
+
170
+ def get_image_name(id)
171
+ id.split('/').last
172
+ end
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module AzureRM
3
- VERSION = '0.3.9'.freeze
3
+ VERSION = '0.4.0'.freeze
4
4
  end
5
5
  end
data/test/api_stub.rb CHANGED
@@ -78,7 +78,7 @@ module ApiStub
78
78
  autoload :VirtualMachine, File.expand_path('api_stub/requests/compute/virtual_machine', __dir__)
79
79
  autoload :VirtualMachineExtension, File.expand_path('api_stub/requests/compute/virtual_machine_extension', __dir__)
80
80
  autoload :ManagedDisk, File.expand_path('api_stub/requests/compute/managed_disk', __dir__)
81
- autoload :GeneralizedImage, File.expand_path('api_stub/requests/compute/generalized_image', __dir__)
81
+ autoload :Image, File.expand_path('api_stub/requests/compute/image', __dir__)
82
82
  end
83
83
 
84
84
  # Load test Resources requests
@@ -2,8 +2,8 @@ module ApiStub
2
2
  module Requests
3
3
  module Compute
4
4
  # Mock class for Virtual Machine Requests
5
- class GeneralizedImage
6
- def self.generalized_image_params
5
+ class Image
6
+ def self.image_params
7
7
  {
8
8
  resource_group: 'fog-test-rg',
9
9
  vm_name: 'fog-test-server',
@@ -13,7 +13,7 @@ module ApiStub
13
13
  }
14
14
  end
15
15
 
16
- def self.create_generalized_image(compute_client)
16
+ def self.create_image(compute_client)
17
17
  body = {
18
18
  'location' => 'West US',
19
19
  'tags' => {
@@ -57,10 +57,10 @@ begin
57
57
  )
58
58
 
59
59
  network.virtual_networks.create(
60
- name: 'testVnet',
61
- location: LOCATION,
62
- resource_group: 'TestRG-VM',
63
- network_address_list: '10.1.0.0/16,10.2.0.0/16'
60
+ name: 'testVnet',
61
+ location: LOCATION,
62
+ resource_group: 'TestRG-VM',
63
+ network_address_list: '10.1.0.0/16,10.2.0.0/16'
64
64
  )
65
65
 
66
66
  network.subnets.create(
@@ -79,7 +79,6 @@ begin
79
79
  private_ip_allocation_method: Fog::ARM::Network::Models::IPAllocationMethod::Dynamic
80
80
  )
81
81
 
82
- # TODO: Create new NIC for managed VM
83
82
  network.network_interfaces.create(
84
83
  name: 'NetInt2',
85
84
  resource_group: 'TestRG-VM',
@@ -94,12 +93,14 @@ begin
94
93
  ########################################################################################################################
95
94
 
96
95
  flag = compute.servers.check_vm_exists('TestRG-VM', 'TestVM')
97
- puts "Virtual Machine doesn't exist." unless flag
96
+ puts 'Virtual Machine does NOT exist!' unless flag
98
97
 
99
98
  ########################################################################################################################
100
99
  ###################### Create Server ######################
101
100
  ########################################################################################################################
102
101
 
102
+ puts 'Creating un-managed Virtual Machine...'
103
+
103
104
  tags = { key1: 'value1', key2: 'value2' }
104
105
 
105
106
  virtual_machine = compute.servers.create(
@@ -126,6 +127,9 @@ begin
126
127
  ########################################################################################################################
127
128
  ###################### Create Managed Server ######################
128
129
  ########################################################################################################################
130
+
131
+ puts 'Creating managed Virtual Machine...'
132
+
129
133
  managed_vm = compute.servers.create(
130
134
  name: 'TestVM-Managed',
131
135
  location: LOCATION,
@@ -151,6 +155,8 @@ begin
151
155
  ###################### Create Server Async ####################
152
156
  ########################################################################################################################
153
157
 
158
+ print 'Creating Virtual Machine asynchronously...'
159
+
154
160
  async_response = compute.servers.create_async(
155
161
  name: 'TestVM',
156
162
  location: LOCATION,
@@ -172,17 +178,18 @@ begin
172
178
  )
173
179
 
174
180
  loop do
175
- puts async_response.state
176
-
177
- sleep(2) if async_response.pending?
181
+ if async_response.pending?
182
+ sleep(2)
183
+ print '.'
184
+ end
178
185
 
179
186
  if async_response.fulfilled?
180
- puts async_response.value.inspect
187
+ puts "\nCreated VM asynchronously! [#{async_response.value.name}]"
181
188
  break
182
189
  end
183
190
 
184
191
  if async_response.rejected?
185
- puts async_response.reason.inspect
192
+ puts "\nERROR: Async VM creation failed!\n#{async_response.reason.inspect}"
186
193
  break
187
194
  end
188
195
  end
@@ -193,7 +200,7 @@ begin
193
200
 
194
201
  virtual_machine = compute.servers.get('TestRG-VM', 'TestVM')
195
202
  virtual_machine.attach_data_disk('datadisk1', 10, storage_account_name)
196
- puts 'Attached Data Disk to VM'
203
+ puts 'Attached Data Disk to VM!'
197
204
 
198
205
  ########################################################################################################################
199
206
  ###################### Detach Data Disk from VM ######################
@@ -201,7 +208,7 @@ begin
201
208
 
202
209
  virtual_machine = compute.servers.get('TestRG-VM', 'TestVM')
203
210
  virtual_machine.detach_data_disk('datadisk1')
204
- puts 'Detached Data Disk from VM'
211
+ puts 'Detached Data Disk from VM!'
205
212
 
206
213
  ########################################################################################################################
207
214
  ###################### Delete Data Disk ######################
@@ -218,6 +225,7 @@ begin
218
225
  ########################################################################################################################
219
226
  ###################### Create a Managed Data Disk ######################
220
227
  ########################################################################################################################
228
+
221
229
  managed_disk = compute.managed_disks.create(
222
230
  name: 'ManagedDataDisk',
223
231
  location: LOCATION,
@@ -233,30 +241,32 @@ begin
233
241
  ########################################################################################################################
234
242
  ###################### Attach Managed Data Disk to VM ######################
235
243
  ########################################################################################################################
244
+
236
245
  managed_vm.attach_managed_disk('ManagedDataDisk', 'TestRG-VM')
237
- puts 'Attached Managed Data Disk to VM'
246
+ puts 'Attached Managed Data Disk to VM!'
238
247
 
239
248
  ########################################################################################################################
240
249
  ###################### Detach Data Disk from VM ######################
241
250
  ########################################################################################################################
242
251
 
243
252
  managed_vm.detach_managed_disk('ManagedDataDisk')
244
- puts 'Detached Managed Data Disk from VM'
253
+ puts 'Detached Managed Data Disk from VM!'
245
254
 
246
255
  ########################################################################################################################
247
256
  ###################### Delete Managed Data Disk ######################
248
257
  ########################################################################################################################
258
+
249
259
  managed_disk.destroy
250
- puts 'Deleted managed data disk'
260
+ puts 'Deleted managed data disk!'
251
261
 
252
262
  ########################################################################################################################
253
263
  ###################### List VM in a resource group ######################
254
264
  ########################################################################################################################
255
265
 
256
266
  virtual_machines = compute.servers(resource_group: 'TestRG-VM')
257
- puts 'List virtual machines ina resource group:'
258
- virtual_machines.each do |a_virtual_machine|
259
- puts a_virtual_machine.name
267
+ puts 'List virtual machines in a resource group:'
268
+ virtual_machines.each do |vm|
269
+ puts "- #{vm.name}"
260
270
  end
261
271
 
262
272
  #######################################################################################################################
@@ -270,10 +280,10 @@ begin
270
280
  ###################### List available sizes in VM ######################
271
281
  ########################################################################################################################
272
282
 
283
+ puts 'List of available sizes for Virtual Machine:'
273
284
  available_sizes_for_vm = virtual_machine.list_available_sizes
274
- puts 'List available sizes in virtual machines:'
275
285
  available_sizes_for_vm.each do |available_size|
276
- puts available_size.inspect
286
+ puts "- #{available_size.name}"
277
287
  end
278
288
 
279
289
  ########################################################################################################################
@@ -295,7 +305,7 @@ begin
295
305
  ########################################################################################################################
296
306
 
297
307
  virtual_machine.deallocate
298
- puts 'Virtual machine deallocated!'
308
+ puts 'Virtual machine de-allocated!'
299
309
 
300
310
  ########################################################################################################################
301
311
  ###################### Start VM ######################
@@ -316,12 +326,14 @@ begin
316
326
  ########################################################################################################################
317
327
 
318
328
  puts "Deleted virtual machine: #{virtual_machine.destroy}"
319
- puts "Deleted virutal machine: #{managed_vm.destroy}"
329
+ puts "Deleted virtual machine: #{managed_vm.destroy}"
320
330
 
321
331
  ########################################################################################################################
322
332
  ###################### CleanUp ######################
323
333
  ########################################################################################################################
324
334
 
335
+ puts 'Cleaning up...'
336
+
325
337
  nic = network.network_interfaces.get('TestRG-VM', 'NetInt')
326
338
  nic.destroy
327
339
 
@@ -337,8 +349,8 @@ begin
337
349
  resource_group = rs.resource_groups.get('TestRG-VM')
338
350
  resource_group.destroy
339
351
 
340
- puts 'Integration Test for virtual machine ran successfully'
352
+ puts 'Integration Test for virtual machine ran successfully!'
341
353
  rescue
342
- puts 'Integration Test for virtual machine is failing'
354
+ puts 'Integration Test for virtual machine is failing!'
343
355
  resource_group.destroy unless resource_group.nil?
344
356
  end
@@ -59,10 +59,10 @@ begin
59
59
  )
60
60
 
61
61
  network.virtual_networks.create(
62
- name: 'testVnet',
63
- location: LOCATION,
64
- resource_group: RG_NAME,
65
- network_address_list: '10.1.0.0/16,10.2.0.0/16'
62
+ name: 'testVnet',
63
+ location: LOCATION,
64
+ resource_group: RG_NAME,
65
+ network_address_list: '10.1.0.0/16,10.2.0.0/16'
66
66
  )
67
67
 
68
68
  network.subnets.create(
@@ -103,6 +103,8 @@ begin
103
103
  ###################### Create Server ######################
104
104
  ########################################################################################################################
105
105
 
106
+ vhd_path = 'https://myblob.blob.core.windows.net/vhds/my_vhd.vhd'.freeze
107
+
106
108
  custom_image_virtual_machine = compute.servers.create(
107
109
  name: 'TestVM',
108
110
  location: LOCATION,
@@ -114,7 +116,7 @@ begin
114
116
  disable_password_authentication: false,
115
117
  network_interface_card_ids: ["/subscriptions/#{azure_credentials['subscription_id']}/resourceGroups/#{RG_NAME}/providers/Microsoft.Network/networkInterfaces/NetInt"],
116
118
  platform: 'linux',
117
- vhd_path: 'https://myblob.blob.core.windows.net/vhds/my_vhd.vhd'
119
+ vhd_path: vhd_path
118
120
  )
119
121
 
120
122
  puts "Created custom image un-managed virtual machine: #{custom_image_virtual_machine.name}"
@@ -134,7 +136,7 @@ begin
134
136
  disable_password_authentication: false,
135
137
  network_interface_card_ids: ["/subscriptions/#{azure_credentials['subscription_id']}/resourceGroups/#{RG_NAME}/providers/Microsoft.Network/networkInterfaces/NetInt2"],
136
138
  platform: 'linux',
137
- vhd_path: 'https://myblob.blob.core.windows.net/vhds/my_vhd.vhd',
139
+ vhd_path: vhd_path,
138
140
  managed_disk_storage_type: Azure::ARM::Compute::Models::StorageAccountTypes::StandardLRS
139
141
  )
140
142
 
@@ -144,6 +146,8 @@ begin
144
146
  ############## Create Managed Server Async ################
145
147
  ########################################################################################################################
146
148
 
149
+ print 'Creating Virtual Machine asynchronously...'
150
+
147
151
  async_response = compute.servers.create_async(
148
152
  name: 'TestVM-ManagedAsync',
149
153
  location: LOCATION,
@@ -155,22 +159,23 @@ begin
155
159
  disable_password_authentication: false,
156
160
  network_interface_card_ids: ["/subscriptions/#{azure_credentials['subscription_id']}/resourceGroups/#{RG_NAME}/providers/Microsoft.Network/networkInterfaces/NetInt3"],
157
161
  platform: 'linux',
158
- vhd_path: 'https://myblob.blob.core.windows.net/vhds/my_vhd.vhd',
162
+ vhd_path: vhd_path,
159
163
  managed_disk_storage_type: Azure::ARM::Compute::Models::StorageAccountTypes::StandardLRS
160
164
  )
161
165
 
162
166
  loop do
163
- puts async_response.state
164
-
165
- sleep(2) if async_response.pending?
167
+ if async_response.pending?
168
+ sleep(2)
169
+ print '.'
170
+ end
166
171
 
167
172
  if async_response.fulfilled?
168
- puts "Created custom image managed virtual machine: #{async_response.value.name}"
173
+ puts "\nCreated custom image managed virtual machine: #{async_response.value.name}"
169
174
  break
170
175
  end
171
176
 
172
177
  if async_response.rejected?
173
- puts async_response.reason.inspect
178
+ puts "\nERROR: Async VM creation failed!\n#{async_response.reason.inspect}"
174
179
  break
175
180
  end
176
181
  end
@@ -195,6 +200,8 @@ begin
195
200
  ###################### CleanUp ######################
196
201
  ########################################################################################################################
197
202
 
203
+ puts 'Cleaning up...'
204
+
198
205
  nic = network.network_interfaces.get(RG_NAME, 'NetInt')
199
206
  nic.destroy
200
207
 
@@ -212,6 +219,8 @@ begin
212
219
 
213
220
  resource_group = rs.resource_groups.get(RG_NAME)
214
221
  resource_group.destroy
222
+
223
+ puts 'Integration Test for virtual machine ran successfully!'
215
224
  rescue
216
225
  puts 'Integration Test for custom image virtual machine is failing'
217
226
  resource_group.destroy unless resource_group.nil?
@@ -0,0 +1,27 @@
1
+ require File.expand_path('../../test_helper', __dir__)
2
+
3
+ # Test class for Create Image Request
4
+ class TestCreateImage < Minitest::Test
5
+ def setup
6
+ @service = Fog::Compute::AzureRM.new(credentials)
7
+ compute_client = @service.instance_variable_get(:@compute_mgmt_client)
8
+ @image = compute_client.images
9
+ @response = ApiStub::Requests::Compute::Image.create_image(compute_client)
10
+ @input_params = ApiStub::Requests::Compute::Image.image_params
11
+ end
12
+
13
+ def test_create_image_success
14
+ @image.stub :create_or_update, @response do
15
+ assert_equal @service.create_image(@input_params), @response
16
+ end
17
+ end
18
+
19
+ def test_create_image_failure
20
+ response = proc { raise MsRestAzure::AzureOperationError.new(nil, nil, 'error' => { 'message' => 'mocked exception' }) }
21
+ @image.stub :create_or_update, response do
22
+ assert_raises RuntimeError do
23
+ @service.create_image(@input_params)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ require File.expand_path('../../test_helper', __dir__)
2
+
3
+ # Test class for Delete Image Request
4
+ class TestDeleteImage < Minitest::Test
5
+ def setup
6
+ @service = Fog::Compute::AzureRM.new(credentials)
7
+ compute_client = @service.instance_variable_get(:@compute_mgmt_client)
8
+ @image = compute_client.images
9
+ end
10
+
11
+ def test_delete_image_success
12
+ @image.stub :delete, true do
13
+ assert @service.delete_image('fog-test-rg', 'fog-test-server-osImage')
14
+ end
15
+ end
16
+
17
+ def test_delete_image_failure
18
+ response = proc { raise MsRestAzure::AzureOperationError.new(nil, nil, 'error' => { 'message' => 'mocked exception' }) }
19
+ @image.stub :delete, response do
20
+ assert_raises(RuntimeError) { @service.delete_image('fog-test-rg', 'fog-test-server-osImage') }
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ require File.expand_path('../../test_helper', __dir__)
2
+
3
+ # Test class for Get Image Request
4
+ class TestGetImage < Minitest::Test
5
+ def setup
6
+ @service = Fog::Compute::AzureRM.new(credentials)
7
+ compute_client = @service.instance_variable_get(:@compute_mgmt_client)
8
+ @image = compute_client.images
9
+ end
10
+
11
+ def test_get_image_success
12
+ @image.stub :get, true do
13
+ assert @service.get_image('fog-test-rg', 'TestImage')
14
+ end
15
+ end
16
+
17
+ def test_get_image_failure
18
+ response = proc { raise MsRestAzure::AzureOperationError.new(nil, nil, 'error' => { 'message' => 'mocked exception' }) }
19
+ @image.stub :get, response do
20
+ assert_raises(RuntimeError) { @service.get_image('fog-test-rg', 'TestImage') }
21
+ end
22
+ end
23
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fog-azure-rm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.9
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shaffan Chaudhry
@@ -18,7 +18,7 @@ authors:
18
18
  autorequire:
19
19
  bindir: bin
20
20
  cert_chain: []
21
- date: 2017-11-30 00:00:00.000000000 Z
21
+ date: 2017-12-12 00:00:00.000000000 Z
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
24
  name: rake
@@ -422,19 +422,20 @@ files:
422
422
  - lib/fog/azurerm/requests/compute/check_vm_extension_exists.rb
423
423
  - lib/fog/azurerm/requests/compute/check_vm_status.rb
424
424
  - lib/fog/azurerm/requests/compute/create_availability_set.rb
425
- - lib/fog/azurerm/requests/compute/create_generalized_image.rb
425
+ - lib/fog/azurerm/requests/compute/create_image.rb
426
426
  - lib/fog/azurerm/requests/compute/create_or_update_managed_disk.rb
427
427
  - lib/fog/azurerm/requests/compute/create_or_update_vm_extension.rb
428
428
  - lib/fog/azurerm/requests/compute/create_virtual_machine.rb
429
429
  - lib/fog/azurerm/requests/compute/deallocate_virtual_machine.rb
430
430
  - lib/fog/azurerm/requests/compute/delete_availability_set.rb
431
- - lib/fog/azurerm/requests/compute/delete_generalized_image.rb
431
+ - lib/fog/azurerm/requests/compute/delete_image.rb
432
432
  - lib/fog/azurerm/requests/compute/delete_managed_disk.rb
433
433
  - lib/fog/azurerm/requests/compute/delete_virtual_machine.rb
434
434
  - lib/fog/azurerm/requests/compute/delete_vm_extension.rb
435
435
  - lib/fog/azurerm/requests/compute/detach_data_disk_from_vm.rb
436
436
  - lib/fog/azurerm/requests/compute/generalize_virtual_machine.rb
437
437
  - lib/fog/azurerm/requests/compute/get_availability_set.rb
438
+ - lib/fog/azurerm/requests/compute/get_image.rb
438
439
  - lib/fog/azurerm/requests/compute/get_managed_disk.rb
439
440
  - lib/fog/azurerm/requests/compute/get_virtual_machine.rb
440
441
  - lib/fog/azurerm/requests/compute/get_vm_extension.rb
@@ -677,7 +678,7 @@ files:
677
678
  - test/api_stub/models/traffic_manager/traffic_manager_profile.rb
678
679
  - test/api_stub/requests/application_gateway/gateway.rb
679
680
  - test/api_stub/requests/compute/availability_set.rb
680
- - test/api_stub/requests/compute/generalized_image.rb
681
+ - test/api_stub/requests/compute/image.rb
681
682
  - test/api_stub/requests/compute/managed_disk.rb
682
683
  - test/api_stub/requests/compute/virtual_machine.rb
683
684
  - test/api_stub/requests/compute/virtual_machine_extension.rb
@@ -821,18 +822,19 @@ files:
821
822
  - test/requests/compute/test_check_vm_exists.rb
822
823
  - test/requests/compute/test_check_vm_extension_exists.rb
823
824
  - test/requests/compute/test_create_availability_set.rb
824
- - test/requests/compute/test_create_generalized_image.rb
825
+ - test/requests/compute/test_create_image.rb
825
826
  - test/requests/compute/test_create_or_update_managed_disk.rb
826
827
  - test/requests/compute/test_create_virtual_machine.rb
827
828
  - test/requests/compute/test_create_vm_extension.rb
828
829
  - test/requests/compute/test_deallocate_virtual_machine.rb
829
830
  - test/requests/compute/test_delete_availability_set.rb
830
- - test/requests/compute/test_delete_generalized_image.rb
831
+ - test/requests/compute/test_delete_image.rb
831
832
  - test/requests/compute/test_delete_managed_disk.rb
832
833
  - test/requests/compute/test_delete_virtual_machine.rb
833
834
  - test/requests/compute/test_detach_data_disk_from_vm.rb
834
835
  - test/requests/compute/test_generalize_virtual_machine.rb
835
836
  - test/requests/compute/test_get_availability_set.rb
837
+ - test/requests/compute/test_get_image.rb
836
838
  - test/requests/compute/test_get_managed_disk.rb
837
839
  - test/requests/compute/test_get_virtual_machine.rb
838
840
  - test/requests/compute/test_get_vm_extension.rb
@@ -1,27 +0,0 @@
1
- require File.expand_path '../../test_helper', __dir__
2
-
3
- # Test class for Create Virtual Machine Request
4
- class TestCreateGeneralizedImage < Minitest::Test
5
- def setup
6
- @service = Fog::Compute::AzureRM.new(credentials)
7
- compute_client = @service.instance_variable_get(:@compute_mgmt_client)
8
- @image = compute_client.images
9
- @response = ApiStub::Requests::Compute::GeneralizedImage.create_generalized_image(compute_client)
10
- @input_params = ApiStub::Requests::Compute::GeneralizedImage.generalized_image_params
11
- end
12
-
13
- def test_create_generalized_image_success
14
- @image.stub :create_or_update, @response do
15
- assert_equal @service.create_generalized_image(@input_params), @response
16
- end
17
- end
18
-
19
- def test_create_generalized_image_failure
20
- response = proc { raise MsRestAzure::AzureOperationError.new(nil, nil, 'error' => { 'message' => 'mocked exception' }) }
21
- @image.stub :create_or_update, response do
22
- assert_raises RuntimeError do
23
- @service.create_generalized_image(@input_params)
24
- end
25
- end
26
- end
27
- end
@@ -1,23 +0,0 @@
1
- require File.expand_path '../../test_helper', __dir__
2
-
3
- # Test class for Delete Virtual Machine Request
4
- class TestDeleteGeneralizedImage < Minitest::Test
5
- def setup
6
- @service = Fog::Compute::AzureRM.new(credentials)
7
- compute_client = @service.instance_variable_get(:@compute_mgmt_client)
8
- @generalized_image = compute_client.images
9
- end
10
-
11
- def test_delete_generalized_image_success
12
- @generalized_image.stub :delete, true do
13
- assert @service.delete_generalized_image('fog-test-rg', 'fog-test-server-osImage')
14
- end
15
- end
16
-
17
- def test_delete_generalized_image_failure
18
- response = proc { raise MsRestAzure::AzureOperationError.new(nil, nil, 'error' => { 'message' => 'mocked exception' }) }
19
- @generalized_image.stub :delete, response do
20
- assert_raises(RuntimeError) { @service.delete_generalized_image('fog-test-rg', 'fog-test-server-osImage') }
21
- end
22
- end
23
- end