avst-cloud 0.1.14 → 0.1.17

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