azure-armrest 0.3.13 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b520aacacd8fdef3e6e2ac80c456d2abcb283bd
4
- data.tar.gz: 0a566e5530a3f87f153775905767cdab27eb1644
3
+ metadata.gz: 27744a66e69a816479bb6dc1d7a2bb5070d42717
4
+ data.tar.gz: b1ded209d9ff4e9c8bde0981e55c5b95586a4511
5
5
  SHA512:
6
- metadata.gz: 89e70a7bc4e5e822fe239260a5cc0f17b5e6bb06dec78373c64ab6f0a84b44f5a95295e257429fd29c64b5dbe3fe43675bc9fb86b6e26d7d7e83f459ff8f0260
7
- data.tar.gz: d1dd5813b5681bfea7ffdb2a92e3d5265e49a3a451a5142a534e341c8e2d9d7d59bbcaf83ccfcd2dc6b3183c89cca2b32372d6c0f0e7cd4b0a3dd0ce369d4b44
6
+ metadata.gz: 6aaa5ae7fd87a32a0727e0965e84ece73ae426159ce9f49c54c6cd90e23ddc6f4939df8eda1f45ee5a8543f0fce7399dd5870fbddf87f556aa38ea3ec93fe5d3
7
+ data.tar.gz: 8dc378aa589e06f5d45c387356d83f23ed489796bab3289c9443344514d3726d467b6085047c37260235bee908857280739f3efa9bae59f0e340d141cda7199b
data/CHANGES CHANGED
@@ -1,3 +1,12 @@
1
+ = 0.4.0 - 8-Dec-2016
2
+ * The Configuration constructor no longer requires a subscription ID. However,
3
+ the presence of a subscription ID is still required for almost all Service
4
+ classes. The verification now happens later, within the Service constructor.
5
+ * Added the SubscriptionService class. This does not require a subscription ID
6
+ in advance, so you can get a list of subscriptions for a tenant.
7
+ * The Configuration#subscription_id= and Configuration#proxy= writer methods
8
+ now have custom implementations.
9
+
1
10
  = 0.3.13 - 30-Nov-2016
2
11
  * Fixed the Billing::Usage model class name.
3
12
  * Updated the Billing::Usage#list method so that it returns an ArmrestCollection
data/lib/azure/armrest.rb CHANGED
@@ -27,6 +27,7 @@ require 'azure/armrest/configuration'
27
27
  require 'azure/armrest/exception'
28
28
  require 'azure/armrest/armrest_collection'
29
29
  require 'azure/armrest/armrest_service'
30
+ require 'azure/armrest/subscription_service'
30
31
  require 'azure/armrest/resource_group_based_service'
31
32
  require 'azure/armrest/resource_group_based_subservice'
32
33
  require 'azure/armrest/storage_account_service'
@@ -41,6 +41,10 @@ module Azure
41
41
  @service_name = service_name
42
42
  @provider = options[:provider] || default_provider
43
43
 
44
+ if configuration.subscription_id.nil?
45
+ raise ArgumentError, 'subscription_id must be specified for this Service class'
46
+ end
47
+
44
48
  # Base URL used for REST calls. Modify within method calls as needed.
45
49
  @base_url = Azure::Armrest::RESOURCE
46
50
 
@@ -84,12 +88,9 @@ module Azure
84
88
  list.collect { |rp| rp.resource_types.map(&:locations) }.flatten.uniq.sort
85
89
  end
86
90
 
87
- # Returns a list of Subscription objects for the tenant.
88
- #
91
+ # Returns a list of subscriptions for the current tenant.
89
92
  def list_subscriptions
90
- url = url_with_api_version(configuration.api_version, @base_url, 'subscriptions')
91
- response = rest_get(url)
92
- JSON.parse(response.body)['value'].map { |hash| Azure::Armrest::Subscription.new(hash) }
93
+ Azure::Armrest::SubscriptionService.new(configuration).list
93
94
  end
94
95
 
95
96
  alias subscriptions list_subscriptions
@@ -100,15 +101,8 @@ module Azure
100
101
  # specified.
101
102
  #
102
103
  def get_subscription(subscription_id = configuration.subscription_id)
103
- url = url_with_api_version(
104
- configuration.api_version,
105
- @base_url,
106
- 'subscriptions',
107
- subscription_id
108
- )
109
-
110
- response = rest_get(url)
111
- Azure::Armrest::Subscription.new(response.body)
104
+ subs = Azure::Armrest::SubscriptionService.new(configuration)
105
+ subs.get(subscription_id)
112
106
  end
113
107
 
114
108
  alias subscription_info get_subscription
@@ -35,7 +35,7 @@ module Azure
35
35
  attr_accessor :tenant_id
36
36
 
37
37
  # The subscription ID used for each http request.
38
- attr_accessor :subscription_id
38
+ attr_reader :subscription_id
39
39
 
40
40
  # The resource group used for http requests.
41
41
  attr_accessor :resource_group
@@ -50,7 +50,7 @@ module Azure
50
50
  attr_accessor :accept
51
51
 
52
52
  # Proxy to be used for all http requests.
53
- attr_accessor :proxy
53
+ attr_reader :proxy
54
54
 
55
55
  # SSL version to be used for all http requests.
56
56
  attr_accessor :ssl_version
@@ -65,8 +65,8 @@ module Azure
65
65
  attr_accessor :max_threads
66
66
 
67
67
  # Yields a new Azure::Armrest::Configuration objects. Note that you must
68
- # specify a client_id, client_key, tenant_id and subscription_id. All other
69
- # parameters are optional.
68
+ # specify a client_id, client_key, tenant_id. The subscription_id is optional
69
+ # but should be specified in most cases. All other parameters are optional.
70
70
  #
71
71
  # Example:
72
72
  #
@@ -84,9 +84,8 @@ module Azure
84
84
  # Although you can specify an :api_version, it is typically overridden
85
85
  # by individual service classes.
86
86
  #
87
- # Note that while the constructor will fail if invalid credentials are
88
- # supplied, it does not validate your subscription ID. If you want to
89
- # validate your subscription ID as well, use the validate_subscription! method.
87
+ # The constructor will also validate that the subscription ID is valid
88
+ # if present.
90
89
  #
91
90
  def initialize(args)
92
91
  # Use defaults, and override with provided arguments
@@ -106,31 +105,46 @@ module Azure
106
105
  user_token = options.delete(:token)
107
106
  user_token_expiration = options.delete(:token_expiration)
108
107
 
109
- options.each { |key, value| send("#{key}=", value) }
108
+ # We need to ensure these are set before subscription_id=
109
+ @tenant_id = options.delete(:tenant_id)
110
+ @client_id = options.delete(:client_id)
111
+ @client_key = options.delete(:client_key)
110
112
 
111
- unless client_id && client_key && tenant_id && subscription_id
112
- raise ArgumentError, "client_id, client_key, tenant_id and subscription_id must all be specified"
113
+ unless client_id && client_key && tenant_id
114
+ raise ArgumentError, "client_id, client_key, and tenant_id must all be specified"
113
115
  end
114
116
 
115
- # Allows for URI objects or Strings.
116
- @proxy = @proxy.to_s if @proxy
117
-
118
- validate_subscription
117
+ # Then set the remaining options automatically
118
+ options.each { |key, value| send("#{key}=", value) }
119
119
 
120
120
  if user_token && user_token_expiration
121
121
  set_token(user_token, user_token_expiration)
122
122
  elsif user_token || user_token_expiration
123
123
  raise ArgumentError, "token and token_expiration must be both specified"
124
124
  end
125
-
126
- @providers = fetch_providers
127
- set_provider_api_versions
128
125
  end
129
126
 
130
127
  def hash
131
128
  [tenant_id, client_id, client_key].join('_').hash
132
129
  end
133
130
 
131
+ # Allow for strings or URI objects when assigning a proxy.
132
+ #
133
+ def proxy=(value)
134
+ @proxy = value ? value.to_s : value
135
+ end
136
+
137
+ # Set the subscription ID, and validate the value. This also sets
138
+ # provider information.
139
+ #
140
+ def subscription_id=(value)
141
+ @subscription_id = value
142
+ validate_subscription
143
+ @providers = fetch_providers
144
+ set_provider_api_versions
145
+ value
146
+ end
147
+
134
148
  def eql?(other)
135
149
  return true if equal?(other)
136
150
  return false unless self.class == other.class
@@ -186,9 +200,16 @@ module Azure
186
200
  RestClient.log = output
187
201
  end
188
202
 
203
+ # Returns a list of subscriptions for the current configuration object.
204
+ #
205
+ def subscriptions
206
+ Azure::Armrest::SubscriptionService.new(self).list
207
+ end
208
+
189
209
  private
190
210
 
191
- # Validate the subscription ID for the given credentials.
211
+ # Validate the subscription ID for the given credentials. Returns the
212
+ # subscription ID if valid.
192
213
  #
193
214
  # If the subscription ID that was provided in the constructor cannot
194
215
  # be found within the list of valid subscriptions, then an error is
@@ -198,36 +219,15 @@ module Azure
198
219
  # then a warning will be issued, but no error will be raised.
199
220
  #
200
221
  def validate_subscription
201
- url = File.join(Azure::Armrest::RESOURCE, 'subscriptions') + "?api-version=#{api_version}"
202
-
203
- options = {
204
- :url => url,
205
- :proxy => proxy,
206
- :ssl_version => ssl_version,
207
- :ssl_verify => ssl_verify,
208
- :headers => {
209
- :accept => accept,
210
- :content_type => content_type,
211
- :authorization => token
212
- }
213
- }
214
-
215
- response = Azure::Armrest::ArmrestService.send(:rest_get, options)
216
- json = JSON.parse(response.body)['value']
217
-
218
- subscriptions = json.map { |hash| [hash['subscriptionId'], hash['state']] }
219
-
220
- found = subscriptions.find { |array| array.first == subscription_id }
222
+ found = subscriptions.find { |sub| sub.subscription_id == subscription_id }
221
223
 
222
224
  unless found
223
225
  raise ArgumentError, "Subscription ID '#{subscription_id}' not found"
224
226
  end
225
227
 
226
- if found.last.casecmp("enabled") != 0
227
- warn "Subscription '#{found.first}' found but not enabled."
228
+ if found.state.casecmp('enabled') != 0
229
+ warn "Subscription '#{found.subscription_id}' found but not enabled."
228
230
  end
229
-
230
- true
231
231
  end
232
232
 
233
233
  def ensure_token
@@ -0,0 +1,35 @@
1
+ module Azure
2
+ module Armrest
3
+ class SubscriptionService < ArmrestService
4
+ # This overrides the typical constructor for an ArmrestService subclass
5
+ # because it does not have a service name or a provider.
6
+ def initialize(configuration, options = {})
7
+ @armrest_configuration = configuration
8
+ @api_version = options[:api_version] || '2016-06-01'
9
+ end
10
+
11
+ # Returns a list of Subscription objects for the current tenant, one for
12
+ # each subscription ID.
13
+ #
14
+ def list
15
+ url = subscriptions_url + "?api-version=#{api_version}"
16
+ response = rest_get(url)
17
+ Azure::Armrest::ArmrestCollection.create_from_response(response, Azure::Armrest::Subscription)
18
+ end
19
+
20
+ # Returns a Subscription object for the given +subscription_id+.
21
+ #
22
+ def get(subscription_id)
23
+ url = File.join(subscriptions_url, subscription_id) + "?api-version=#{api_version}"
24
+ response = rest_get(url)
25
+ Azure::Armrest::Subscription.new(response)
26
+ end
27
+
28
+ private
29
+
30
+ def subscriptions_url
31
+ File.join(Azure::Armrest::RESOURCE, 'subscriptions')
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,5 +1,5 @@
1
1
  module Azure
2
2
  module Armrest
3
- VERSION = '0.3.13'.freeze
3
+ VERSION = '0.4.0'.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.13
4
+ version: 0.4.0
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-11-30 00:00:00.000000000 Z
14
+ date: 2016-12-08 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: json
@@ -265,6 +265,7 @@ files:
265
265
  - lib/azure/armrest/sql/sql_database_service.rb
266
266
  - lib/azure/armrest/sql/sql_server_service.rb
267
267
  - lib/azure/armrest/storage_account_service.rb
268
+ - lib/azure/armrest/subscription_service.rb
268
269
  - lib/azure/armrest/template_deployment_service.rb
269
270
  - lib/azure/armrest/version.rb
270
271
  - lib/azure/armrest/virtual_machine_extension_service.rb
@@ -290,7 +291,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
290
291
  version: '0'
291
292
  requirements: []
292
293
  rubyforge_project:
293
- rubygems_version: 2.6.6
294
+ rubygems_version: 2.6.8
294
295
  signing_key:
295
296
  specification_version: 4
296
297
  summary: An interface for ARM/JSON Azure REST API