azure-armrest 0.3.1 → 0.3.2

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: 81c1664938977f85f9b79045d208233777851e8a
4
- data.tar.gz: 4418b381009c2c0274e7fd45f217ca114a44ae8e
3
+ metadata.gz: ea7b40c1bcbf87f8a1a90bd6de8b3a8b91009319
4
+ data.tar.gz: 7c01a3f8b1e329c8897b7079bf776e2fa7f09633
5
5
  SHA512:
6
- metadata.gz: b101ce1ef690827027dfd59ab2c509064afd8f488cc96b6879466ae29d9dca2b699a4fa6227022b5594e8f575f173f14e1a6c66805baa0d8cbdeee377c9ea236
7
- data.tar.gz: 274f153ce11e6628d91bdf0bc21ef0dc15ad88c2bdf801705a5cdc14d159d3fff5ef1a61dbe370fb57d8a56b61facee9d67d89569fc9be0e6cc2a661bf1dd1a7
6
+ metadata.gz: f64da1aa17e62f474c429bca7ec0fa0923e0f80511f54209a6847402f3fb37aaa4ff1d22d5f8892d7d7525f422d89b7efebd44bde8e1fc86b95f6c224aec9956
7
+ data.tar.gz: ea7848938983ce162de715df0d8982b09dab459443861fa1aee3344c6aa127b53cff0133f23d38b104f3e99b437f7a036193419b84875539802112ccc9dbb486
data/CHANGES CHANGED
@@ -1,3 +1,14 @@
1
+ = 0.3.2 - 21-Jul-2016
2
+ * The subscription ID is now automatically validated in the
3
+ Azure::Armrest::Configuration constructor.
4
+ * Added a Hakiri badge to the README.
5
+ * There have been some minor updates to the dependencies to enforce
6
+ more recent versions of external gems, as suggested by Hakiri,
7
+ for security reasons.
8
+ * The ResourceGroupBasedService#list_all method (and all subclasses)
9
+ now supports an optional hash that can be used to automatically
10
+ filter result sets.
11
+
1
12
  = 0.3.1 - 14-Jul-2016
2
13
  * Now uses the parallel gem and thread pools for those few methods where
3
14
  we were using threaded methods internally in order to reduce errors
data/README.md CHANGED
@@ -7,6 +7,7 @@ A Ruby interface for Azure using the new REST API.
7
7
  [![Code Climate](https://codeclimate.com/github/ManageIQ/azure-armrest/badges/gpa.svg)](https://codeclimate.com/github/ManageIQ/azure-armrest)
8
8
  [![Test Coverage](https://codeclimate.com/github/ManageIQ/azure-armrest/badges/coverage.svg)](https://codeclimate.com/github/ManageIQ/azure-armrest/coverage)
9
9
  [![Dependency Status](https://gemnasium.com/ManageIQ/azure-armrest.svg)](https://gemnasium.com/ManageIQ/azure-armrest)
10
+ [![Security](https://hakiri.io/github/ManageIQ/azure-armrest/master.svg)](https://hakiri.io/github/ManageIQ/azure-armrest/master)
10
11
 
11
12
  ## Synopsis
12
13
 
@@ -19,12 +19,12 @@ different than the current azure gem, which uses the older (XML) interface
19
19
  behind the scenes.
20
20
  EOF
21
21
 
22
- spec.add_dependency 'json'
22
+ spec.add_dependency 'json', '~> 2.0.1'
23
23
  spec.add_dependency 'rest-client', '~> 2.0.0'
24
24
  spec.add_dependency 'cache_method', '~> 0.2.7'
25
- spec.add_dependency 'azure-signature', '~> 0.2.0'
26
- spec.add_dependency 'activesupport', '>= 1.2.0'
27
- spec.add_dependency 'nokogiri', '~> 1.6.0'
25
+ spec.add_dependency 'azure-signature', '~> 0.2.3'
26
+ spec.add_dependency 'activesupport', '>= 4.2.2'
27
+ spec.add_dependency 'nokogiri', '~> 1.6.8'
28
28
  spec.add_dependency 'addressable', '~> 2.4.0'
29
29
  spec.add_dependency 'parallel', '~> 1.9.0'
30
30
 
@@ -80,6 +80,10 @@ module Azure
80
80
  # Although you can specify an :api_version, it is typically overridden
81
81
  # by individual service classes.
82
82
  #
83
+ # Note that while the constructor will fail if invalid credentials are
84
+ # supplied, it does not validate your subscription ID. If you want to
85
+ # validate your subscription ID as well, use the validate_subscription! method.
86
+ #
83
87
  def initialize(args)
84
88
  # Use defaults, and override with provided arguments
85
89
  options = {
@@ -100,6 +104,8 @@ module Azure
100
104
  raise ArgumentError, "client_id, client_key, tenant_id and subscription_id must all be specified"
101
105
  end
102
106
 
107
+ validate_subscription
108
+
103
109
  if user_token && user_token_expiration
104
110
  set_token(user_token, user_token_expiration)
105
111
  elsif user_token || user_token_expiration
@@ -170,6 +176,48 @@ module Azure
170
176
 
171
177
  private
172
178
 
179
+ # Validate the subscription ID for the given credentials.
180
+ #
181
+ # If the subscription ID that was provided in the constructor cannot
182
+ # be found within the list of valid subscriptions, then an error is
183
+ # raised.
184
+ #
185
+ # If the subscription ID that was provided is found but disabled
186
+ # then a warning will be issued, but no error will be raised.
187
+ #
188
+ def validate_subscription
189
+ url = File.join(Azure::Armrest::RESOURCE, 'subscriptions') + "?api-version=#{api_version}"
190
+
191
+ options = {
192
+ :url => url,
193
+ :proxy => proxy,
194
+ :ssl_version => ssl_version,
195
+ :ssl_verify => ssl_verify,
196
+ :headers => {
197
+ :accept => accept,
198
+ :content_type => content_type,
199
+ :authorization => token
200
+ }
201
+ }
202
+
203
+ response = Azure::Armrest::ArmrestService.send(:rest_get, options)
204
+ json = JSON.parse(response.body)['value']
205
+
206
+ subscriptions = json.map { |hash| [hash['subscriptionId'], hash['state']] }
207
+
208
+ found = subscriptions.find { |array| array.first == subscription_id }
209
+
210
+ unless found
211
+ raise ArgumentError, "Subscription ID '#{subscription_id}' not found"
212
+ end
213
+
214
+ if found.last.casecmp("enabled") != 0
215
+ warn "Subscription '#{found.first}' found but not enabled."
216
+ end
217
+
218
+ true
219
+ end
220
+
173
221
  def ensure_token
174
222
  @token, @token_expiration = self.class.retrieve_token(self) if @token.nil?
175
223
  fetch_token if @token.nil? || Time.now.utc > @token_expiration
@@ -23,11 +23,21 @@ module Azure
23
23
  JSON.parse(response)['value'].map { |hash| model_class.new(hash) }
24
24
  end
25
25
 
26
- def list_all
26
+ # Use a single call to get all resources for the service. You may
27
+ # optionally provide a filter on various properties to limit the
28
+ # result set.
29
+ #
30
+ # Example:
31
+ #
32
+ # vms = Azure::Armrest::VirtualMachineService.new(conf)
33
+ # vms.list_all(:location => "eastus", :resource_group => "rg1")
34
+ #
35
+ def list_all(filter = {})
27
36
  url = build_url
28
37
  url = yield(url) || url if block_given?
29
38
  response = rest_get(url)
30
- JSON.parse(response)['value'].map { |hash| model_class.new(hash) }
39
+ results = JSON.parse(response)['value'].map { |hash| model_class.new(hash) }
40
+ filter.empty? ? results : results.select { |obj| filter.all? { |k, v| obj.public_send(k) == v } }
31
41
  end
32
42
 
33
43
  def get(name, rgroup = configuration.resource_group)
@@ -1,5 +1,5 @@
1
1
  module Azure
2
2
  module Armrest
3
- VERSION = '0.3.1'.freeze
3
+ VERSION = '0.3.2'.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.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel J. Berger
@@ -11,22 +11,22 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-07-14 00:00:00.000000000 Z
14
+ date: 2016-07-21 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: json
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - ">="
20
+ - - "~>"
21
21
  - !ruby/object:Gem::Version
22
- version: '0'
22
+ version: 2.0.1
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: '0'
29
+ version: 2.0.1
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: rest-client
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -61,42 +61,42 @@ dependencies:
61
61
  requirements:
62
62
  - - "~>"
63
63
  - !ruby/object:Gem::Version
64
- version: 0.2.0
64
+ version: 0.2.3
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
69
  - - "~>"
70
70
  - !ruby/object:Gem::Version
71
- version: 0.2.0
71
+ version: 0.2.3
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: activesupport
74
74
  requirement: !ruby/object:Gem::Requirement
75
75
  requirements:
76
76
  - - ">="
77
77
  - !ruby/object:Gem::Version
78
- version: 1.2.0
78
+ version: 4.2.2
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
83
  - - ">="
84
84
  - !ruby/object:Gem::Version
85
- version: 1.2.0
85
+ version: 4.2.2
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: nokogiri
88
88
  requirement: !ruby/object:Gem::Requirement
89
89
  requirements:
90
90
  - - "~>"
91
91
  - !ruby/object:Gem::Version
92
- version: 1.6.0
92
+ version: 1.6.8
93
93
  type: :runtime
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - "~>"
98
98
  - !ruby/object:Gem::Version
99
- version: 1.6.0
99
+ version: 1.6.8
100
100
  - !ruby/object:Gem::Dependency
101
101
  name: addressable
102
102
  requirement: !ruby/object:Gem::Requirement