azure-armrest 0.3.3 → 0.3.4

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a89bf6828ff100bbcff625f099a48ac04c9937b8
4
- data.tar.gz: 1cc4335de5c38155990f7c7d170752a092c5bd96
3
+ metadata.gz: 25599bb89027a9662c3f4b47a582db0bb112c9ef
4
+ data.tar.gz: 80c069a284b706e81c139f2c1ae64f276084aba5
5
5
  SHA512:
6
- metadata.gz: 4ddc35af1397dc283a18a44b0abbcfff389e135caa77b9d1540524708e1c760e7d97b15107c5779d6c7c13d0dd44142ee55940a08b584fbc68eb063305c790a0
7
- data.tar.gz: 31d18ab596d27b4da75555721e86d1ebf4fc798c543a775c0e380ff06ed64d5f100fbfe8f40d290f4ac157aa151a91de5785de7a68dbf3dc3d2498e4e41905d1
6
+ metadata.gz: a91dfecc724c56d950fd4b33a90a3efed24c1a58b22fa63b1ea003bf02c0594792978d8643ee97cc7897f04139f0e9ef1905de2c81774bc7f4d45ffb05ecba94
7
+ data.tar.gz: 9473b0a19e8275664d39afb7f264a37fbd47fdcccd7a93a7ef3fc2df36b446a5a8407efb7407eaab757d41297c5713c6d4016c09ab5f2cdb5b6d590938e03705
data/CHANGES CHANGED
@@ -1,3 +1,13 @@
1
+ = 0.3.4 - 9-Aug-2016
2
+ * Modified the StorageAccount#blobs and StorageAccount#containers method. Both
3
+ now accept a hash of options that you can use to modify the results. Also,
4
+ both now automatically handle continuation tokens to collect all results.
5
+ * The ResourceGroupBasedService#delete method now returns a ResponseHeaders
6
+ object instead of nil. Furthermore, it will raise an error on a 204 response
7
+ which indicates that the resource wasn't actually found.
8
+ * Added the Network::LoadBalancerService and Network::InboundNatService classes.
9
+ * Added the Network::RouteService and Network::RouteTableService classes.
10
+
1
11
  = 0.3.3 - 1-Aug-2016
2
12
  * Added the :max_threads configuration option. This is used internally wherever
3
13
  the Parallel gem is used.
@@ -39,6 +49,10 @@
39
49
  * StorageAccountService no longer does account type validation.
40
50
  * Added the StorageAccountService#list_all_private_images method.
41
51
 
52
+ = 0.2.8 - 22-Jul-2016
53
+ * Backported PR #188 (add list_all_private_images method).
54
+ * Backported PR #194 (updated .travis.yml).
55
+
42
56
  = 0.2.7 - 20-Jun-2016
43
57
  * All internal calls to rest-client are now explicitly URI.encoded.
44
58
 
@@ -40,10 +40,14 @@ require 'azure/armrest/resource_provider_service'
40
40
  require 'azure/armrest/insights/alert_service'
41
41
  require 'azure/armrest/insights/event_service'
42
42
  require 'azure/armrest/insights/metrics_service'
43
+ require 'azure/armrest/network/load_balancer_service'
44
+ require 'azure/armrest/network/inbound_nat_service'
43
45
  require 'azure/armrest/network/ip_address_service'
44
46
  require 'azure/armrest/network/network_interface_service'
45
47
  require 'azure/armrest/network/network_security_group_service'
46
48
  require 'azure/armrest/network/network_security_rule_service'
49
+ require 'azure/armrest/network/route_table_service'
50
+ require 'azure/armrest/network/route_service'
47
51
  require 'azure/armrest/network/virtual_network_service'
48
52
  require 'azure/armrest/network/subnet_service'
49
53
  require 'azure/armrest/role/assignment_service'
@@ -194,6 +194,8 @@ module Azure
194
194
  class Sku < BaseModel; end
195
195
  class Usage < BaseModel; end
196
196
 
197
+ class ResponseHeaders < BaseModel; end
198
+
197
199
  class StorageAccount < BaseModel; end
198
200
  class StorageAccountKey < StorageAccount
199
201
  def key1; key_name == 'key1' ? value : nil; end
@@ -222,10 +224,14 @@ module Azure
222
224
  end
223
225
 
224
226
  module Network
227
+ class LoadBalancer < BaseModel; end
228
+ class InboundNat < LoadBalancer; end
225
229
  class IpAddress < BaseModel; end
226
230
  class NetworkInterface < BaseModel; end
227
231
  class NetworkSecurityGroup < BaseModel; end
228
232
  class NetworkSecurityRule < NetworkSecurityGroup; end
233
+ class RouteTable < BaseModel; end
234
+ class Route < RouteTable; end
229
235
  class VirtualNetwork < BaseModel; end
230
236
  class Subnet < VirtualNetwork; end
231
237
  end
@@ -119,14 +119,51 @@ module Azure
119
119
  # If no key is provided, it is assumed that the StorageAccount object
120
120
  # includes the key1 property.
121
121
  #
122
- def containers(key = nil)
122
+ # # The following options are supported:
123
+ #
124
+ # * prefix
125
+ # * delimiter
126
+ # * maxresults
127
+ # * include
128
+ # * timeout
129
+ #
130
+ # By default Azure uses a value of 5000 for :maxresults.
131
+ #
132
+ # If the :include option is specified, it should contain an array of
133
+ # one element: metadata. More options may be added by Microsoft
134
+ # at a later date.
135
+ #
136
+ # Example:
137
+ #
138
+ # sas = Azure::Armrest::StorageAccountService.new(conf)
139
+ # key = sas.list_account_keys['key1']
140
+ # acct = sas.get('your_storage_account', 'your_resource_group')
141
+ #
142
+ # p acct.containers(key)
143
+ # p acct.containers(key, :include => ['metadata'])
144
+ # p acct.containers(key, :maxresults => 1)
145
+ #
146
+ # In cases where a NextMarker element is found in the original response,
147
+ # another call will automatically be made with the marker value included
148
+ # in the URL so that you don't have to perform such a step manually.
149
+ #
150
+ def containers(key = nil, options = {})
123
151
  key ||= properties.key1
124
152
 
125
- response = blob_response(key, "comp=list")
153
+ query = "comp=list"
154
+ options.each { |okey, ovalue| query += "&#{okey}=#{[ovalue].flatten.join(',')}" }
155
+
156
+ response = blob_response(key, query)
126
157
 
127
- Nokogiri::XML(response.body).xpath('//Containers/Container').map do |element|
158
+ doc = Nokogiri::XML(response.body)
159
+
160
+ results = doc.xpath('//Containers/Container').collect do |element|
128
161
  Container.new(Hash.from_xml(element.to_s)['Container'])
129
162
  end
163
+
164
+ results << next_marker_results(doc, :containers, key, options)
165
+
166
+ results.flatten
130
167
  end
131
168
 
132
169
  # Returns the properties for the given container +name+ using account +key+.
@@ -184,30 +221,52 @@ module Azure
184
221
  # Return a list of blobs for the given +container+ using the given +key+
185
222
  # or the key1 property of the StorageAccount object.
186
223
  #
187
- def blobs(container, key = nil, include_snapshot = false)
224
+ # The following options are supported:
225
+ #
226
+ # * prefix
227
+ # * delimiter
228
+ # * maxresults
229
+ # * include
230
+ # * timeout
231
+ #
232
+ # By default Azure uses a value of 5000 for :maxresults.
233
+ #
234
+ # If the :include option is specified, it should contain an array of
235
+ # one or more of the following values: snapshots, metadata, copy or
236
+ # uncommittedblobs.
237
+ #
238
+ # Example:
239
+ #
240
+ # sas = Azure::Armrest::StorageAccountService.new(conf)
241
+ # key = sas.list_account_keys['key1']
242
+ # acct = sas.get('your_storage_account', 'your_resource_group')
243
+ #
244
+ # p acct.blobs('vhds', key)
245
+ # p acct.blobs('vhds', key, :timeout => 30)
246
+ # p acct.blobs('vhds', key, :include => ['snapshots', 'metadata'])
247
+ #
248
+ # In cases where a NextMarker element is found in the original response,
249
+ # another call will automatically be made with the marker value included
250
+ # in the URL so that you don't have to perform such a step manually.
251
+ #
252
+ def blobs(container, key = nil, options = {})
188
253
  key ||= properties.key1
189
254
 
190
- url = File.join(properties.primary_endpoints.blob, container)
191
- url += "?restype=container&comp=list"
192
- url += "&include=snapshots" if include_snapshot
255
+ query = "restype=container&comp=list"
256
+ options.each { |okey, ovalue| query += "&#{okey}=#{[ovalue].flatten.join(',')}" }
193
257
 
194
- headers = build_headers(url, key)
195
-
196
- response = ArmrestService.send(
197
- :rest_get,
198
- :url => url,
199
- :headers => headers,
200
- :proxy => proxy,
201
- :ssl_version => ssl_version,
202
- :ssl_verify => ssl_verify
203
- )
258
+ response = blob_response(key, query, container)
204
259
 
205
260
  doc = Nokogiri::XML(response.body)
206
261
 
207
- doc.xpath('//Blobs/Blob').map do |node|
262
+ results = doc.xpath('//Blobs/Blob').collect do |node|
208
263
  hash = Hash.from_xml(node.to_s)['Blob'].merge(:container => container)
209
264
  hash.key?('Snapshot') ? BlobSnapshot.new(hash) : Blob.new(hash)
210
265
  end
266
+
267
+ results << next_marker_results(doc, :blobs, container, key, options)
268
+
269
+ results.flatten
211
270
  end
212
271
 
213
272
  # Returns an array of all blobs for all containers.
@@ -545,6 +604,21 @@ module Azure
545
604
 
546
605
  headers
547
606
  end
607
+
608
+ # Generic method to handle NextMarker token. The +doc+ should be an
609
+ # XML object that responds to .xpath, followed by a method name,
610
+ # followed by any arguments to pass to that method.
611
+ #
612
+ def next_marker_results(doc, method_name, *args)
613
+ xmarker = doc.xpath('//NextMarker').first # There is only one
614
+ if xmarker.children.empty?
615
+ return []
616
+ else
617
+ args = args.dup # Avoid modifying original argument
618
+ args.last[:marker] = xmarker.children.first.to_s
619
+ return send(method_name, *args)
620
+ end
621
+ end
548
622
  end
549
623
  end
550
624
  end
@@ -0,0 +1,12 @@
1
+ module Azure
2
+ module Armrest
3
+ module Network
4
+ # Base class for managing subnets
5
+ class InboundNatService < ResourceGroupBasedSubservice
6
+ def initialize(armrest_configuration, options = {})
7
+ super(armrest_configuration, 'loadBalancers', 'inboundNatRules', 'Microsoft.Network', options)
8
+ end
9
+ end
10
+ end # Network
11
+ end # Armrest
12
+ end # Azure
@@ -0,0 +1,14 @@
1
+ module Azure
2
+ module Armrest
3
+ module Network
4
+ # Class for managing load balancers
5
+ class LoadBalancerService < ResourceGroupBasedService
6
+ # Creates and returns a new LoadBalancerService instance.
7
+ #
8
+ def initialize(armrest_configuration, options = {})
9
+ super(armrest_configuration, 'loadBalancers', 'Microsoft.Network', options)
10
+ end
11
+ end
12
+ end # Network
13
+ end # Armrest
14
+ end # Azure
@@ -0,0 +1,12 @@
1
+ module Azure
2
+ module Armrest
3
+ module Network
4
+ # Base class for managing subnets
5
+ class RouteService < ResourceGroupBasedSubservice
6
+ def initialize(armrest_configuration, options = {})
7
+ super(armrest_configuration, 'routeTables', 'routes', 'Microsoft.Network', options)
8
+ end
9
+ end
10
+ end # Network
11
+ end # Armrest
12
+ end # Azure
@@ -0,0 +1,14 @@
1
+ module Azure
2
+ module Armrest
3
+ module Network
4
+ # Class for managing load balancers
5
+ class RouteTableService < ResourceGroupBasedService
6
+ # Creates and returns a new LoadBalancerService instance.
7
+ #
8
+ def initialize(armrest_configuration, options = {})
9
+ super(armrest_configuration, 'routeTables', 'Microsoft.Network', options)
10
+ end
11
+ end
12
+ end # Network
13
+ end # Armrest
14
+ end # Azure
@@ -50,14 +50,28 @@ module Azure
50
50
  model_class.new(response)
51
51
  end
52
52
 
53
+ # Delete the resource with the given +name+ for the provided +resource_group+,
54
+ # or the resource group specified in your original configuration object. If
55
+ # successful, returns a ResponseHeaders object.
56
+ #
57
+ # If the delete operation returns a 204 (no body), which is what the Azure
58
+ # REST API typically returns if the resource is not found, it is treated
59
+ # as an error and a ResourceNotFoundException is raised.
60
+ #
53
61
  def delete(name, rgroup = configuration.resource_group)
54
62
  validate_resource_group(rgroup)
55
63
  validate_resource(name)
56
64
 
57
65
  url = build_url(rgroup, name)
58
66
  url = yield(url) || url if block_given?
59
- rest_delete(url)
60
- nil
67
+ response = rest_delete(url)
68
+
69
+ if response.code == 204
70
+ msg = "#{self.class} resource #{rgroup}/#{name} not found"
71
+ raise Azure::Armrest::ResourceNotFoundException.new(response.code, msg, response)
72
+ end
73
+
74
+ Azure::Armrest::ResponseHeaders.new(response.headers)
61
75
  end
62
76
 
63
77
  private
@@ -1,5 +1,5 @@
1
1
  module Azure
2
2
  module Armrest
3
- VERSION = '0.3.3'.freeze
3
+ VERSION = '0.3.4'.freeze
4
4
  end
5
5
  end
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.3.3
4
+ version: 0.3.4
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: 2016-08-01 00:00:00.000000000 Z
14
+ date: 2016-08-09 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: json
@@ -230,10 +230,14 @@ files:
230
230
  - lib/azure/armrest/insights/metrics_service.rb
231
231
  - lib/azure/armrest/model/base_model.rb
232
232
  - lib/azure/armrest/model/storage_account.rb
233
+ - lib/azure/armrest/network/inbound_nat_service.rb
233
234
  - lib/azure/armrest/network/ip_address_service.rb
235
+ - lib/azure/armrest/network/load_balancer_service.rb
234
236
  - lib/azure/armrest/network/network_interface_service.rb
235
237
  - lib/azure/armrest/network/network_security_group_service.rb
236
238
  - lib/azure/armrest/network/network_security_rule_service.rb
239
+ - lib/azure/armrest/network/route_service.rb
240
+ - lib/azure/armrest/network/route_table_service.rb
237
241
  - lib/azure/armrest/network/subnet_service.rb
238
242
  - lib/azure/armrest/network/virtual_network_service.rb
239
243
  - lib/azure/armrest/resource_group_based_service.rb