azure-armrest 0.9.1 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES +11 -0
- data/azure-armrest.gemspec +1 -2
- data/lib/azure/armrest/armrest_service.rb +3 -1
- data/lib/azure/armrest/model/base_model.rb +3 -1
- data/lib/azure/armrest/model/storage_account.rb +65 -49
- data/lib/azure/armrest/resource_group_based_service.rb +2 -2
- data/lib/azure/armrest/storage_account_service.rb +1 -1
- data/lib/azure/armrest/version.rb +1 -1
- metadata +5 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b445a2a57cca396bfb03a3f62393f4c0669f708
|
4
|
+
data.tar.gz: 9a4984a64e5db8057e7c018b8f9730134735dd6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aefd6f6a4936e5f93e6144f4dec4d841f6335dc65542c0ad00fdb881a3153ca9e2abd163b527633cc4a1eba09495b93917d97f6ecbbf23bd2f01a0c0a6373c0a
|
7
|
+
data.tar.gz: e7338c46f28895160763f8bc1df1b9c0118fa16830435c1fdd90f5d62bdb3bce01595a78e0aa292ea55f8a5887de8a0dfab7dd395ed3e2ba38d63b0f29372167
|
data/CHANGES
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
= 0.9.2 - 31-Oct-2017
|
2
|
+
* Fixed a bug in the StorageAccountService#list_private_images method. It
|
3
|
+
now accepts an option to skip accessor definitions.
|
4
|
+
* Fixed a caller bug that caused tests to fail on Windows.
|
5
|
+
* Fixed a bug where an argument to a sleep call could be a string by mistake.
|
6
|
+
* Fixed issues with continuation results for list methods in the
|
7
|
+
StorageAccount model class.
|
8
|
+
* The json dependency restriction was loosened to 1.anything.
|
9
|
+
* The nokogiri dependency was removed. We now rely on Hash#from_xml courtesy
|
10
|
+
of activesupport, which we were already using.
|
11
|
+
|
1
12
|
= 0.9.1 - 9-Oct-2017
|
2
13
|
* Fixed an issue where hash properties that contain a '$' sign would fail
|
3
14
|
when we attempted to convert them to model objects. They are now converted
|
data/azure-armrest.gemspec
CHANGED
@@ -17,12 +17,11 @@ different than the current azure gem, which uses the older (XML) interface
|
|
17
17
|
behind the scenes.
|
18
18
|
EOF
|
19
19
|
|
20
|
-
spec.add_dependency 'json', '~> 2
|
20
|
+
spec.add_dependency 'json', '~> 2'
|
21
21
|
spec.add_dependency 'rest-client', '~> 2.0.0'
|
22
22
|
spec.add_dependency 'memoist', '~> 0.15.0'
|
23
23
|
spec.add_dependency 'azure-signature', '~> 0.2.3'
|
24
24
|
spec.add_dependency 'activesupport', '>= 4.2.2'
|
25
|
-
spec.add_dependency 'nokogiri', '>= 1.8.1', '~> 1.8'
|
26
25
|
spec.add_dependency 'addressable', '~> 2.4.0'
|
27
26
|
spec.add_dependency 'parallel', '~> 1.12.0'
|
28
27
|
|
@@ -216,7 +216,9 @@ module Azure
|
|
216
216
|
if tries <= max_retries
|
217
217
|
msg = "A rate limit or server side issue has occurred [#{err.http_code}]. Retry number #{tries}."
|
218
218
|
Azure::Armrest::Configuration.log.try(:log, Logger::WARN, msg)
|
219
|
-
sleep_time = err.response.headers[:retry_after] || 30
|
219
|
+
sleep_time = (err.response.headers[:retry_after] || 30).to_i
|
220
|
+
sleep_time = 5 if sleep_time < 5 # 5 second minimum
|
221
|
+
sleep_time = 120 if sleep_time > 120 # 2 minute maximum
|
220
222
|
sleep(sleep_time)
|
221
223
|
retry
|
222
224
|
end
|
@@ -56,7 +56,9 @@ module Azure
|
|
56
56
|
# #=> "123.123.123.123"
|
57
57
|
#
|
58
58
|
def self.attr_from_hash(attrs = {})
|
59
|
-
|
59
|
+
location = caller_locations(1, 1).first
|
60
|
+
file, line = location.path, location.lineno
|
61
|
+
|
60
62
|
attrs.each do |attr_name, keys|
|
61
63
|
keys = Array(keys)
|
62
64
|
first_key = keys.shift
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'azure-signature'
|
2
2
|
require 'active_support/core_ext/hash/conversions'
|
3
|
-
require 'nokogiri'
|
4
3
|
|
5
4
|
module Azure
|
6
5
|
module Armrest
|
@@ -194,27 +193,43 @@ module Azure
|
|
194
193
|
# * marker
|
195
194
|
# * maxresults
|
196
195
|
# * timeout
|
196
|
+
# * all
|
197
|
+
#
|
198
|
+
# If the :all option is set to true, then this method will collect all
|
199
|
+
# records. Otherwise, it is capped at 5000 records by Azure, or whatever
|
200
|
+
# you set :maxresults to. If you set both the :all option and the :maxresults
|
201
|
+
# option, then all records will be collected in :maxresults batches.
|
197
202
|
#
|
198
203
|
def files(share, key = access_key, options = {})
|
199
204
|
raise ArgumentError, "No access key specified" unless key
|
200
205
|
|
201
|
-
query =
|
206
|
+
query = "comp=list&restype=directory"
|
207
|
+
|
208
|
+
skip_defs = options[:skip_accessors_definition]
|
209
|
+
|
210
|
+
options.each do |okey, ovalue|
|
211
|
+
unless okey == :skip_accessors_definition
|
212
|
+
query += "&#{okey}=#{[ovalue].flatten.join(',')}"
|
213
|
+
end
|
214
|
+
end
|
202
215
|
|
203
216
|
response = file_response(key, query, 'get', nil, share)
|
204
217
|
|
205
|
-
|
218
|
+
hash = Hash.from_xml(response.body)['EnumerationResults']['Entries']
|
206
219
|
results = []
|
207
220
|
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
end
|
221
|
+
if hash && hash['Directory']
|
222
|
+
Array.wrap(hash['Directory']).each { |dir| results << ShareDirectory.new(dir, skip_defs) }
|
223
|
+
end
|
224
|
+
|
225
|
+
if hash && hash['File']
|
226
|
+
Array.wrap(hash['File']).each { |file| results << ShareFile.new(file, skip_defs) }
|
215
227
|
end
|
216
228
|
|
217
|
-
|
229
|
+
if options[:all] && hash['NextMarker']
|
230
|
+
options[:marker] = hash['NextMarker']
|
231
|
+
results.concat(files(share, key, options))
|
232
|
+
end
|
218
233
|
|
219
234
|
results
|
220
235
|
end
|
@@ -407,6 +422,7 @@ module Azure
|
|
407
422
|
# * maxresults
|
408
423
|
# * include
|
409
424
|
# * timeout
|
425
|
+
# * all
|
410
426
|
#
|
411
427
|
# By default Azure uses a value of 5000 for :maxresults.
|
412
428
|
#
|
@@ -414,6 +430,11 @@ module Azure
|
|
414
430
|
# one element: metadata. More options may be added by Microsoft
|
415
431
|
# at a later date.
|
416
432
|
#
|
433
|
+
# If the :all option is set to true, then this method will collect all
|
434
|
+
# records. Otherwise, it is capped at 5000 records by Azure, or whatever
|
435
|
+
# you set :maxresults to. If you set both the :all option and the :maxresults
|
436
|
+
# option, then all records will be collected in :maxresults batches.
|
437
|
+
#
|
417
438
|
# Example:
|
418
439
|
#
|
419
440
|
# sas = Azure::Armrest::StorageAccountService.new(conf)
|
@@ -424,10 +445,6 @@ module Azure
|
|
424
445
|
# p acct.containers(key, :include => ['metadata'])
|
425
446
|
# p acct.containers(key, :maxresults => 1)
|
426
447
|
#
|
427
|
-
# In cases where a NextMarker element is found in the original response,
|
428
|
-
# another call will automatically be made with the marker value included
|
429
|
-
# in the URL so that you don't have to perform such a step manually.
|
430
|
-
#
|
431
448
|
def containers(key = access_key, options = {})
|
432
449
|
raise ArgumentError, "No access key specified" unless key
|
433
450
|
|
@@ -442,13 +459,19 @@ module Azure
|
|
442
459
|
|
443
460
|
response = blob_response(key, query)
|
444
461
|
|
445
|
-
|
462
|
+
hash = Hash.from_xml(response.body)['EnumerationResults']['Containers']
|
463
|
+
results = []
|
464
|
+
|
465
|
+
if hash && hash['Container']
|
466
|
+
Array.wrap(hash['Container']).each { |c| results << Container.new(c, skip_defs) }
|
467
|
+
end
|
446
468
|
|
447
|
-
|
448
|
-
|
469
|
+
if options[:all] && hash['NextMarker']
|
470
|
+
options[:marker] = hash['NextMarker']
|
471
|
+
results.concat(containers(key, options))
|
449
472
|
end
|
450
473
|
|
451
|
-
results
|
474
|
+
results
|
452
475
|
end
|
453
476
|
|
454
477
|
# Returns the properties for the given container +name+ using account +key+.
|
@@ -555,6 +578,11 @@ module Azure
|
|
555
578
|
# one or more of the following values: snapshots, metadata, copy or
|
556
579
|
# uncommittedblobs.
|
557
580
|
#
|
581
|
+
# If the :all option is set to true, then this method will collect all
|
582
|
+
# records. Otherwise, it is capped at 5000 records by Azure, or whatever
|
583
|
+
# you set :maxresults to. If you set both the :all option and the :maxresults
|
584
|
+
# option, then all records will be collected in :maxresults batches.
|
585
|
+
#
|
558
586
|
# Example:
|
559
587
|
#
|
560
588
|
# sas = Azure::Armrest::StorageAccountService.new(conf)
|
@@ -565,10 +593,6 @@ module Azure
|
|
565
593
|
# p acct.blobs('vhds', key, :timeout => 30)
|
566
594
|
# p acct.blobs('vhds', key, :include => ['snapshots', 'metadata'])
|
567
595
|
#
|
568
|
-
# In cases where a NextMarker element is found in the original response,
|
569
|
-
# another call will automatically be made with the marker value included
|
570
|
-
# in the URL so that you don't have to perform such a step manually.
|
571
|
-
#
|
572
596
|
def blobs(container, key = access_key, options = {})
|
573
597
|
raise ArgumentError, "No access key specified" unless key
|
574
598
|
|
@@ -583,14 +607,23 @@ module Azure
|
|
583
607
|
|
584
608
|
response = blob_response(key, query, container)
|
585
609
|
|
586
|
-
|
610
|
+
hash = Hash.from_xml(response.body)['EnumerationResults']['Blobs']
|
611
|
+
results = []
|
612
|
+
|
613
|
+
if hash && hash['Blob']
|
614
|
+
Array.wrap(hash['Blob']).each do |h|
|
615
|
+
h[:container] = container
|
616
|
+
object = h.key?('Snapshot') ? BlobSnapshot.new(h, skip_defs) : Blob.new(h, skip_defs)
|
617
|
+
results << object
|
618
|
+
end
|
619
|
+
end
|
587
620
|
|
588
|
-
|
589
|
-
|
590
|
-
|
621
|
+
if options[:all] && hash['NextMarker']
|
622
|
+
options[:marker] = hash['NextMarker']
|
623
|
+
results.concat(blobs(container, key, options))
|
591
624
|
end
|
592
625
|
|
593
|
-
results
|
626
|
+
results
|
594
627
|
end
|
595
628
|
|
596
629
|
# Returns an array of all blobs for all containers. The +options+ hash
|
@@ -625,10 +658,9 @@ module Azure
|
|
625
658
|
raise ArgumentError, "No access key specified" unless key
|
626
659
|
|
627
660
|
response = blob_response(key, "restype=service&comp=properties")
|
628
|
-
|
661
|
+
hash = Hash.from_xml(response.body)['StorageServiceProperties']
|
629
662
|
|
630
|
-
|
631
|
-
BlobServiceProperty.new(Hash.from_xml(doc.to_s)[toplevel])
|
663
|
+
BlobServiceProperty.new(hash)
|
632
664
|
end
|
633
665
|
|
634
666
|
# Return metadata for the given +blob+ within +container+. You may
|
@@ -653,10 +685,9 @@ module Azure
|
|
653
685
|
raise ArgumentError, "No access key specified" unless key
|
654
686
|
|
655
687
|
response = blob_response(key, "restype=service&comp=stats")
|
656
|
-
toplevel = 'StorageServiceStats'
|
657
688
|
|
658
|
-
|
659
|
-
BlobServiceStat.new(
|
689
|
+
hash = Hash.from_xml(response.body)['StorageServiceStats']
|
690
|
+
BlobServiceStat.new(hash)
|
660
691
|
end
|
661
692
|
|
662
693
|
# Copy the blob from the source container/blob to the destination container/blob.
|
@@ -1045,21 +1076,6 @@ module Azure
|
|
1045
1076
|
|
1046
1077
|
headers
|
1047
1078
|
end
|
1048
|
-
|
1049
|
-
# Generic method to handle NextMarker token. The +doc+ should be an
|
1050
|
-
# XML object that responds to .xpath, followed by a method name,
|
1051
|
-
# followed by any arguments to pass to that method.
|
1052
|
-
#
|
1053
|
-
def next_marker_results(doc, method_name, *args)
|
1054
|
-
xmarker = doc.xpath('//NextMarker').first # There is only one
|
1055
|
-
if xmarker.children.empty?
|
1056
|
-
return []
|
1057
|
-
else
|
1058
|
-
args = args.dup # Avoid modifying original argument
|
1059
|
-
args.last[:marker] = xmarker.children.first.to_s
|
1060
|
-
return send(method_name, *args)
|
1061
|
-
end
|
1062
|
-
end
|
1063
1079
|
end
|
1064
1080
|
end
|
1065
1081
|
end
|
@@ -72,14 +72,14 @@ module Azure
|
|
72
72
|
# Returns an ArmrestCollection, with the response headers set
|
73
73
|
# for the operation as a whole.
|
74
74
|
#
|
75
|
-
def list(rgroup = configuration.resource_group)
|
75
|
+
def list(rgroup = configuration.resource_group, skip_accessors_definition = false)
|
76
76
|
validate_resource_group(rgroup)
|
77
77
|
|
78
78
|
url = build_url(rgroup)
|
79
79
|
url = yield(url) || url if block_given?
|
80
80
|
response = rest_get(url)
|
81
81
|
|
82
|
-
get_all_results(response)
|
82
|
+
get_all_results(response, skip_accessors_definition)
|
83
83
|
end
|
84
84
|
|
85
85
|
# Use a single call to get all resources for the service. You may
|
@@ -18,7 +18,7 @@ module Azure
|
|
18
18
|
|
19
19
|
# Same as other resource based list methods, but also sets the proxy on each model object.
|
20
20
|
#
|
21
|
-
def list(resource_group = configuration.resource_group)
|
21
|
+
def list(resource_group = configuration.resource_group, skip_accessors_definition = false)
|
22
22
|
super.each { |model| model.configuration = configuration }
|
23
23
|
end
|
24
24
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: azure-armrest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2017-10-
|
14
|
+
date: 2017-10-31 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: json
|
@@ -19,14 +19,14 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - "~>"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 2
|
22
|
+
version: '2'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 2
|
29
|
+
version: '2'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: rest-client
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,26 +83,6 @@ dependencies:
|
|
83
83
|
- - ">="
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: 4.2.2
|
86
|
-
- !ruby/object:Gem::Dependency
|
87
|
-
name: nokogiri
|
88
|
-
requirement: !ruby/object:Gem::Requirement
|
89
|
-
requirements:
|
90
|
-
- - ">="
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
version: 1.8.1
|
93
|
-
- - "~>"
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: '1.8'
|
96
|
-
type: :runtime
|
97
|
-
prerelease: false
|
98
|
-
version_requirements: !ruby/object:Gem::Requirement
|
99
|
-
requirements:
|
100
|
-
- - ">="
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: 1.8.1
|
103
|
-
- - "~>"
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
version: '1.8'
|
106
86
|
- !ruby/object:Gem::Dependency
|
107
87
|
name: addressable
|
108
88
|
requirement: !ruby/object:Gem::Requirement
|
@@ -308,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
308
288
|
version: '0'
|
309
289
|
requirements: []
|
310
290
|
rubyforge_project:
|
311
|
-
rubygems_version: 2.6.
|
291
|
+
rubygems_version: 2.6.14
|
312
292
|
signing_key:
|
313
293
|
specification_version: 4
|
314
294
|
summary: An interface for ARM/JSON Azure REST API
|