avst-cloud 0.1.14 → 0.1.17

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OGZhMjQwZjMyYjg1Y2I1OTQ4MWViOWZmZDNhOWZhZTMyOTEwYzBkYw==
4
+ MzFkODdkZDM1M2NiZTcxNDkxMTEzN2E3N2U5OWU3NjE1NTU0ZDE3OQ==
5
5
  data.tar.gz: !binary |-
6
- NjUzMWY4MTg1ZDdhZWZhM2JiMjdhYTZiMDc3YjlhZWJkOTBiNzEyNw==
6
+ MjUyZTIwYzMyNTA1Mzk1MGZjZWYxZTU5MzQ1OTk4MDY1MmNmNWZjNA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NjRkZTQ4NmUwNjQxNzA2OWJkMTNiNGRmYTk0ZTQ0YzM0MzVmYjEyYjZjMDc5
10
- Y2FhOTAwMmE2MTE5OGFlOWE4NzYzZjVhODJlOTQzZDUzYTMwMDhhNTVmYTE4
11
- YjRkYjQ3MmI5N2NlNTY5MTczMDQ3OGQ4YjVkYmE0MzA4NDJjMTY=
9
+ MjM5ZTZjY2RhZjMzNDliOGVmMDBhNzljOWNiODY0MDhjZmJmZmJhMzZmMWU1
10
+ NTk3YTdmOWYyYzVjMTgzZDZhODIyNGJlMTAxYThhMzc2NmZjNjVhNjk2YTA5
11
+ ZWRjYzgwODc1OTViYzM0OTljYzM1ZGVlNjJhZjgyY2ZjOWZhNDI=
12
12
  data.tar.gz: !binary |-
13
- YzllYTEzYzgyYTcyOWVjOGFhMjA5YWM0MjVkZTRjZWQ1MzYyNTlmM2JiYzc4
14
- ZjliY2ZjOTRiZmI2NzQ4YzlmYzM3OGZjODAyZDkwNmQ4ZTZiZTAwM2I4ODYx
15
- OTk4MzBkZDhmYmExYzRlMDBmMzMxNTFkOWY2M2FmZjBjNzIzYTg=
13
+ NTFlOTI3ZDYyZWQ0NTdjYzNhMjRkYzA2NGNhNDk2Yzc0MzUyN2IzYzU3OWNm
14
+ MTgzMjNiODE4NzA2NTc5ZTY3NmZmODkyZDA5Mzg4YjI5ZWQ5YjY0YTUyOWVm
15
+ Zjc3ZmY1NDlhYTEzZGY3YjVhOTcyNDY0MWI4MzMzZmZkOTllNWY=
data/avst-cloud.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "avst-cloud"
7
- spec.version = '0.1.14'
7
+ spec.version = '0.1.17'
8
8
  spec.authors = ["Martin Brehovsky", "Jon Bevan", "Matthew Hope"]
9
9
  spec.email = ["mbrehovsky@adaptavist.com", "jbevan@adaptavist.com", "mhope@adaptavist.com"]
10
10
  spec.summary = %q{Automated creation, bootstrapping and provisioning of servers }
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.add_development_dependency "rake"
21
21
  spec.add_dependency "fog"
22
22
  spec.add_dependency "fog-azure"
23
- spec.add_dependency "fog-azure-rm"
23
+ spec.add_dependency "fog-azure-rm", "0.0.3"
24
24
  spec.add_dependency "azure"
25
25
  spec.add_dependency "capistrano", "3.2.1"
26
26
  spec.add_dependency "capistrano-rvm"
@@ -35,7 +35,7 @@ publisher = 'Canonical'
35
35
  offer = 'UbuntuServer'
36
36
  sku = '14.04.2-LTS'
37
37
  version = 'latest'
38
-
38
+ platform = nil # defaults to Linux
39
39
  server_name = "hostname1"
40
40
  user = "ubuntu"
41
41
  # Must comply to Azure pass guidelines
@@ -55,6 +55,7 @@ dns_list = nil
55
55
  network_address_list = nil
56
56
  address_prefix = nil
57
57
  use_public_ip = true # will return public ip, if set to false, private will be used by bootstrap
58
+ create_public_ip_configuration = true # in case you do not want to create public ip config set to false, ip_configuration_name needs to be set anyway, defaults to true
58
59
  serv = conn.create_server(server_name,
59
60
  user,
60
61
  password,
@@ -62,7 +63,8 @@ serv = conn.create_server(server_name,
62
63
  offer,
63
64
  sku,
64
65
  version,
65
- location,
66
+ platform,
67
+ location,
66
68
  resource_group,
67
69
  vm_size,
68
70
  storage_account_name,
@@ -76,7 +78,8 @@ serv = conn.create_server(server_name,
76
78
  dns_list,
77
79
  network_address_list,
78
80
  address_prefix,
79
- use_public_ip)
81
+ use_public_ip,
82
+ create_public_ip_configuration)
80
83
 
81
84
  # serv = conn.server(server_name, resource_group ,user, password)
82
85
  # puts serv.inspect
@@ -27,7 +27,7 @@ module AvstCloud
27
27
  @subscription_id = subscription_id
28
28
  end
29
29
 
30
- def server(server_name, resource_group, root_user, root_password, use_public_ip=true)
30
+ def server(server_name, resource_group, root_user, root_password, use_public_ip=true, network_interface_resource_group=nil, public_ip_resource_group=nil )
31
31
  server = find_fog_server(server_name, resource_group)
32
32
  if !root_user
33
33
  root_user = get_root_user
@@ -35,22 +35,24 @@ module AvstCloud
35
35
  ip_address = nil
36
36
  if (server.network_interface_card_id)
37
37
  network_interface_card_name = server.network_interface_card_id.split("/")[-1]
38
- nic = connect_to_networks.network_interfaces(resource_group: resource_group).get(network_interface_card_name)
38
+ network_interface_resource_group = resource_group unless network_interface_resource_group
39
+ nic = connect_to_networks.network_interfaces(resource_group: network_interface_resource_group).get(network_interface_card_name)
39
40
  if nic
40
41
  if use_public_ip
41
42
  if nic.public_ip_address_id
42
43
  ip_configuration_name = nic.public_ip_address_id.split("/")[-1]
43
- pip = connect_to_networks.public_ips(resource_group: resource_group).get(ip_configuration_name)
44
+ public_ip_resource_group = network_interface_resource_group unless public_ip_resource_group
45
+ pip = connect_to_networks.public_ips(resource_group: public_ip_resource_group).get(ip_configuration_name)
44
46
  ip_address = pip.ip_address
45
47
  else
46
- logger.debug "Can not find public ip for server #{server_name} in resource_group #{resource_group}"
48
+ logger.debug "Can not find public ip for server #{server_name} in resource_group #{public_ip_resource_group}"
47
49
  raise "Can not find public ip"
48
50
  end
49
51
  else
50
52
  ip_address = nic.private_ip_address
51
53
  end
52
54
  else
53
- logger.debug "Can not find network interface card for server #{server_name} in resource_group #{resource_group}"
55
+ logger.debug "Can not find network interface card for server #{server_name} in resource_group #{network_interface_resource_group}"
54
56
  raise "Can not find network interface card"
55
57
  end
56
58
  else
@@ -68,6 +70,7 @@ module AvstCloud
68
70
  offer,
69
71
  sku,
70
72
  version,
73
+ platform,
71
74
  location,
72
75
  resource_group,
73
76
  vm_size,
@@ -82,12 +85,19 @@ module AvstCloud
82
85
  dns_list,
83
86
  network_address_list,
84
87
  address_prefix,
85
- use_public_ip)
88
+ use_public_ip,
89
+ create_public_ip_configuration,
90
+ storage_account_resource_group=nil,
91
+ virtual_network_resource_group=nil,
92
+ network_interface_resource_group=nil,
93
+ public_ip_resource_group=nil,
94
+ subnet_resource_group=nil
95
+ )
86
96
 
87
97
  location = location || 'West Europe'
88
98
  user = user || get_root_user
89
99
  vm_size = vm_size || "Basic_A0"
90
-
100
+ platform = platform || "Linux"
91
101
  # Check that resource_group exists if not create one
92
102
  check_create_resource_group(resource_group, location)
93
103
 
@@ -108,13 +118,26 @@ module AvstCloud
108
118
  logger.debug "offer - #{offer}"
109
119
  logger.debug "sku - #{sku}"
110
120
  logger.debug "version - #{version}"
121
+ logger.debug "platform - #{platform}"
122
+
123
+ storage_account_resource_group = resource_group unless storage_account_resource_group
124
+ virtual_network_resource_group = resource_group unless virtual_network_resource_group
125
+ network_interface_resource_group = virtual_network_resource_group unless network_interface_resource_group
126
+ public_ip_resource_group = virtual_network_resource_group unless public_ip_resource_group
127
+ subnet_resource_group = virtual_network_resource_group unless subnet_resource_group
128
+
129
+ logger.debug "storage_account_resource_group - #{storage_account_resource_group}"
130
+ logger.debug "network_interface_resource_group - #{network_interface_resource_group}"
131
+ logger.debug "virtual_network_resource_group - #{virtual_network_resource_group}"
132
+ logger.debug "public_ip_resource_group - #{public_ip_resource_group}"
133
+ logger.debug "subnet_resource_group - #{subnet_resource_group}"
111
134
 
112
135
  # Check that storage_account exists if not create one
113
- check_create_storage_account(storage_account_name, location, resource_group)
136
+ check_create_storage_account(storage_account_name, location, storage_account_resource_group)
114
137
 
115
138
  # Check if network_interface_card_id exists if not create one
116
139
  # If not, create one for virtual network provided with subnet, security group and also public ip name
117
- ip_address = check_create_network_interface(network_interface_name, resource_group, location, virtual_network_name, subnet_name, ip_configuration_name, private_ip_allocation_method, public_ip_allocation_method, subnet_address_list, dns_list, network_address_list, address_prefix, use_public_ip)
140
+ ip_address = check_create_network_interface(network_interface_name, network_interface_resource_group, location, virtual_network_name, subnet_name, ip_configuration_name, private_ip_allocation_method, public_ip_allocation_method, subnet_address_list, dns_list, network_address_list, address_prefix, use_public_ip, create_public_ip_configuration, virtual_network_resource_group, public_ip_resource_group, subnet_resource_group)
118
141
 
119
142
  # create server
120
143
  server = connect.servers.create(
@@ -126,11 +149,12 @@ module AvstCloud
126
149
  username: user,
127
150
  password: password,
128
151
  disable_password_authentication: false,
129
- network_interface_card_id: "/subscriptions/#{@subscription_id}/resourceGroups/#{resource_group}/providers/Microsoft.Network/networkInterfaces/#{network_interface_name}",
152
+ network_interface_card_id: "/subscriptions/#{@subscription_id}/resourceGroups/#{network_interface_resource_group}/providers/Microsoft.Network/networkInterfaces/#{network_interface_name}",
130
153
  publisher: publisher,
131
154
  offer: offer,
132
155
  sku: sku,
133
- version: version
156
+ version: version,
157
+ platform: platform
134
158
  )
135
159
 
136
160
  result_server = AvstCloud::AzureRmServer.new(server, server_name, ip_address, user, password)
@@ -147,18 +171,27 @@ module AvstCloud
147
171
  logger.debug "#{storage_acc.inspect}"
148
172
  end
149
173
 
150
- def check_create_network_interface(network_interface_name, resource_group, location, virtual_network_name, subnet_name, ip_configuration_name, private_ip_allocation_method="Dynamic", public_ip_allocation_method="Static", subnet_address_list=nil, dns_list=nil, network_address_list=nil, address_prefix=nil, use_public_ip=true)
174
+ def check_create_network_interface(network_interface_name, resource_group, location, virtual_network_name, subnet_name, ip_configuration_name, private_ip_allocation_method="Dynamic", public_ip_allocation_method="Static", subnet_address_list=nil, dns_list=nil, network_address_list=nil, address_prefix=nil, use_public_ip=true, create_public_ip_configuration=true, virtual_network_resource_group=nil, public_ip_resource_group=nil, subnet_resource_group=nil)
151
175
  nic = connect_to_networks.network_interfaces(resource_group: resource_group).get(network_interface_name)
152
176
 
153
177
  # check/create ip_configuration_name exists
154
- public_ip = check_create_ip_configuration(ip_configuration_name, resource_group, location, public_ip_allocation_method)
178
+ if create_public_ip_configuration
179
+ public_ip_resource_group = resource_group unless public_ip_resource_group
180
+ public_ip = check_create_ip_configuration(ip_configuration_name, public_ip_resource_group, location, public_ip_allocation_method)
181
+ public_ip_address_id = "/subscriptions/#{@subscription_id}/resourceGroups/#{public_ip_resource_group}/providers/Microsoft.Network/publicIPAddresses/#{ip_configuration_name}"
182
+ else
183
+ use_public_ip = false
184
+ end
155
185
  unless nic
186
+ # default virtual_network_resource_group to network interface resource group
187
+ virtual_network_resource_group = resource_group unless virtual_network_resource_group
156
188
  # check/create virtual_network exists
157
- vnet = check_create_virtual_network(virtual_network_name, resource_group, location, subnet_address_list, dns_list, network_address_list)
189
+ vnet = check_create_virtual_network(virtual_network_name, virtual_network_resource_group, location, subnet_address_list, dns_list, network_address_list)
158
190
 
191
+ subnet_resource_group = virtual_network_resource_group unless subnet_resource_group
159
192
  # check if provided subnet exists, if nil then use default one
160
- unless subnet_name
161
- subnets = connect_to_networks.subnets(resource_group: resource_group, virtual_network_name: virtual_network_name)
193
+ unless subnet_name
194
+ subnets = connect_to_networks.subnets(resource_group: subnet_resource_group, virtual_network_name: virtual_network_name)
162
195
  if subnets.length == 0
163
196
  raise "Can not decide what subnet to choose. There are no subnets for virtual network #{virtual_network_name}."
164
197
  elsif subnets.length != 1
@@ -167,16 +200,16 @@ module AvstCloud
167
200
  subnet_name = subnets[0].name
168
201
  logger.debug "Using subnet #{subnet_name}"
169
202
  end
170
-
171
203
  nic = connect_to_networks.network_interfaces.create(
172
204
  name: network_interface_name,
173
205
  resource_group: resource_group,
174
206
  location: location,
175
- subnet_id: "/subscriptions/#{@subscription_id}/resourceGroups/#{resource_group}/providers/Microsoft.Network/virtualNetworks/#{virtual_network_name}/subnets/#{subnet_name}",
176
- public_ip_address_id: "/subscriptions/#{@subscription_id}/resourceGroups/#{resource_group}/providers/Microsoft.Network/publicIPAddresses/#{ip_configuration_name}",
207
+ subnet_id: "/subscriptions/#{@subscription_id}/resourceGroups/#{subnet_resource_group}/providers/Microsoft.Network/virtualNetworks/#{virtual_network_name}/subnets/#{subnet_name}",
208
+ public_ip_address_id: public_ip_address_id,
177
209
  ip_configuration_name: ip_configuration_name,
178
210
  private_ip_allocation_method: private_ip_allocation_method
179
211
  )
212
+
180
213
  end
181
214
  if use_public_ip
182
215
  public_ip
@@ -185,12 +218,13 @@ module AvstCloud
185
218
  end
186
219
  end
187
220
 
188
- def find_network_interface_for_server(server_name, resource_group, should_fail=false)
221
+ def find_network_interface_for_server(server_name, resource_group, should_fail=false, network_interface_resource_group=nil)
189
222
  server = find_fog_server(server_name, resource_group)
190
223
  network_interface = nil
191
224
  if (server and server.network_interface_card_id)
192
225
  network_interface_card_name = server.network_interface_card_id.split("/")[-1]
193
- network_interface = connect_to_networks.network_interfaces(resource_group: resource_group).get(network_interface_card_name)
226
+ network_interface_resource_group = resource_group unless network_interface_resource_group
227
+ network_interface = connect_to_networks.network_interfaces(resource_group: network_interface_resource_group).get(network_interface_card_name)
194
228
  else
195
229
  logger.debug "Can not find network interface card for server #{server_name} in resource_group #{resource_group}"
196
230
  raise "Can not find network interface card" if should_fail
@@ -240,21 +274,23 @@ module AvstCloud
240
274
  logger.debug "Public IP deleted"
241
275
  end
242
276
 
243
- def destroy_ip_configuration_for_server(server_name, resource_group, should_fail=false)
277
+ def destroy_ip_configuration_for_server(server_name, resource_group, should_fail=false, network_interface_resource_group=nil, public_ip_resource_group=nil)
244
278
  server = find_fog_server(server_name, resource_group)
245
279
  if (server.network_interface_card_id)
246
280
  network_interface_card_name = server.network_interface_card_id.split("/")[-1]
247
- nic = connect_to_networks.network_interfaces(resource_group: resource_group).get(network_interface_card_name)
281
+ network_interface_resource_group = resource_group unless network_interface_resource_group
282
+ nic = connect_to_networks.network_interfaces(resource_group: network_interface_resource_group).get(network_interface_card_name)
248
283
  if nic
249
284
  if nic.public_ip_address_id
250
285
  ip_configuration_name = nic.public_ip_address_id.split("/")[-1]
251
- destroy_ip_configuration(ip_configuration_name, resource_group)
286
+ public_ip_resource_group = network_interface_resource_group unless public_ip_resource_group
287
+ destroy_ip_configuration(ip_configuration_name, public_ip_resource_group)
252
288
  else
253
- logger.debug "Can not find public ip for server #{server_name} in resource_group #{resource_group}"
289
+ logger.debug "Can not find public ip for server #{server_name} in resource_group #{network_interface_resource_group}"
254
290
  raise "Can not find public ip" if should_fail
255
291
  end
256
292
  else
257
- logger.debug "Can not find network interface card for server #{server_name} in resource_group #{resource_group}"
293
+ logger.debug "Can not find network interface card for server #{server_name} in resource_group #{network_interface_resource_group}"
258
294
  raise "Can not find network interface card" if should_fail
259
295
  end
260
296
  else
@@ -286,22 +322,24 @@ module AvstCloud
286
322
  logger.debug "Subnet deleted"
287
323
  end
288
324
 
289
- def destroy_subnet_for_server(server_name, resource_group, should_fail=false)
325
+ def destroy_subnet_for_server(server_name, resource_group, should_fail=false, network_interface_resource_group=nil, subnet_resource_group=nil)
290
326
  server = find_fog_server(server_name, resource_group)
291
327
  if (server.network_interface_card_id)
292
328
  network_interface_card_name = server.network_interface_card_id.split("/")[-1]
293
- nic = connect_to_networks.network_interfaces(resource_group: resource_group).get(network_interface_card_name)
329
+ network_interface_resource_group = resource_group unless network_interface_resource_group
330
+ nic = connect_to_networks.network_interfaces(resource_group: network_interface_resource_group).get(network_interface_card_name)
294
331
  if nic
295
332
  if nic.subnet_id
296
333
  subnet_id_name = nic.subnet_id.split("/")[-1]
297
334
  virtual_network_name = nic.subnet_id.split("virtualNetworks/")[-1].split("/")[0]
335
+ subnet_resource_group = network_interface_resource_group unless subnet_resource_group
298
336
  destroy_subnet(subnet_id_name, resource_group, virtual_network_name)
299
337
  else
300
- logger.debug "Can not find subnet for server #{server_name} in resource_group #{resource_group}"
338
+ logger.debug "Can not find subnet for server #{server_name} in resource_group #{network_interface_resource_group}"
301
339
  raise "Can not find subnet" if should_fail
302
340
  end
303
341
  else
304
- logger.debug "Can not find network interface card for server #{server_name} in resource_group #{resource_group}"
342
+ logger.debug "Can not find network interface card for server #{server_name} in resource_group #{network_interface_resource_group}"
305
343
  raise "Can not find network interface card" if should_fail
306
344
  end
307
345
  else
@@ -330,21 +368,23 @@ module AvstCloud
330
368
  vnet
331
369
  end
332
370
 
333
- def destroy_virtual_network_for_server(server_name, resource_group, should_fail=false)
371
+ def destroy_virtual_network_for_server(server_name, resource_group, should_fail=false, network_interface_resource_group=nil, subnet_resource_group=nil)
334
372
  server = find_fog_server(server_name, resource_group)
335
373
  if (server.network_interface_card_id)
336
374
  network_interface_card_name = server.network_interface_card_id.split("/")[-1]
337
- nic = connect_to_networks.network_interfaces(resource_group: resource_group).get(network_interface_card_name)
375
+ network_interface_resource_group = resource_group unless network_interface_resource_group
376
+ nic = connect_to_networks.network_interfaces(resource_group: network_interface_resource_group).get(network_interface_card_name)
338
377
  if nic
339
378
  if nic.subnet_id
340
379
  virtual_network_name = nic.subnet_id.split("virtualNetworks/")[-1].split("/")[0]
380
+ subnet_resource_group = virtual_network_resource_group unless subnet_resource_group
341
381
  destroy_virtual_network(virtual_network_name, resource_group)
342
382
  else
343
- logger.debug "Can not find virtual network for server #{server_name} in resource_group #{resource_group}"
383
+ logger.debug "Can not find virtual network for server #{server_name} in resource_group #{virtual_network_resource_group}"
344
384
  raise "Can not find subnet" if should_fail
345
385
  end
346
386
  else
347
- logger.debug "Can not find network interface card for server #{server_name} in resource_group #{resource_group}"
387
+ logger.debug "Can not find network interface card for server #{server_name} in resource_group #{virtual_network_resource_group}"
348
388
  raise "Can not find network interface card" if should_fail
349
389
  end
350
390
  else
@@ -381,14 +421,22 @@ module AvstCloud
381
421
  if (server and server.storage_account_name)
382
422
  storage_account_name = server.storage_account_name
383
423
  end
424
+ # storage account name not provided as part of server, trying to get it from os_disk_vhd_uri
425
+ unless storage_account_name
426
+ if server.os_disk_vhd_uri != nil
427
+ # os_disk_vhd_uri="http://storage_account_name.blob.core.windows.net/vhds/servername_os_disk.vhd"
428
+ storage_account_name = server.os_disk_vhd_uri.split(".")[0].split("/")[-1]
429
+ end
430
+ end
384
431
  storage_account_name
385
432
  end
386
433
 
387
- def destroy_storage_account_for_server(server_name, resource_group, should_fail=false)
434
+ def destroy_storage_account_for_server(server_name, resource_group, should_fail=false, storage_account_resource_group=nil)
388
435
  server = find_fog_server(server_name, resource_group)
389
436
  if (server.storage_account_name)
390
437
  storage_account_name = server.storage_account_name
391
- destroy_storage_account(storage_account_name, resource_group)
438
+ storage_account_resource_group = resource_group unless storage_account_resource_group
439
+ destroy_storage_account(storage_account_name, storage_account_resource_group)
392
440
  else
393
441
  logger.debug "Can not find storage account for server #{server_name} in resource_group #{resource_group}"
394
442
  raise "Can not find storage account" if should_fail
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avst-cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.14
4
+ version: 0.1.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Brehovsky
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-06-16 00:00:00.000000000 Z
13
+ date: 2016-07-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -72,16 +72,16 @@ dependencies:
72
72
  name: fog-azure-rm
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - ! '>='
75
+ - - '='
76
76
  - !ruby/object:Gem::Version
77
- version: '0'
77
+ version: 0.0.3
78
78
  type: :runtime
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - ! '>='
82
+ - - '='
83
83
  - !ruby/object:Gem::Version
84
- version: '0'
84
+ version: 0.0.3
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: azure
87
87
  requirement: !ruby/object:Gem::Requirement