azure-armrest 0.2.2 → 0.2.3

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: 66ad3b28db9c9e766b9478976f5ce8cee9fbd7ca
4
- data.tar.gz: 93138a489336f2fce48586f747070bfde8ffad1a
3
+ metadata.gz: 46e8ae9e1b26fc145c1e030083f6a37ec0873e68
4
+ data.tar.gz: 23c5fbe41693e3e7d9ba42d91c3fa9da85692e0d
5
5
  SHA512:
6
- metadata.gz: 0846c292bcc14278a94d945bd722f09ba77ae985b166ef8934508184cbcca94740136cb7d506694a6588b9e7d3608d5074b415dd9840b6f299fb77e4e5855d83
7
- data.tar.gz: 662536278f9302dfad6d2649e56e50fab0383f440df210eadaffd7c0005f0ee7bfd2050b11320fccf14d7825ce17e0938ab3540ae67874d997916aa956f3a0ee
6
+ metadata.gz: c4211477e10c08afe35c587f1f7d6d95505f58ac1f3bcb56b44582459f75cecd2dae7456bb5e78ceca2e2beaa1f21617f4ae530049faa909a50ff7b29d7e2f82
7
+ data.tar.gz: c2550408054f12e2ecf56204f5413892d2de5c1501b69ce819cc8c28930cc72b27508f9e617f48ec68f039ddfcc91fa0b14d5a659940b6e411c9e73143461162
data/CHANGES CHANGED
@@ -1,3 +1,13 @@
1
+ = 0.2.3 - 29-Mar-2016
2
+ * Fixed the VirtualMachineImageService class.
3
+ * Added an Insights::MetricsService class and support models.
4
+ * Added a singleton method to clear some internal class variable caches that
5
+ we use. This is primarily meant for testing.
6
+ * Added a customs collection class that will eventually be used for better
7
+ handling of skip tokens (paging).
8
+ * Updated the Insights::Event class, modifying the list method's prototype,
9
+ and now it returns our custom collection class.
10
+
1
11
  = 0.2.2 - 16-Mar-2016
2
12
  * Fixed a potential name collision issue for nested objects.
3
13
 
@@ -0,0 +1,9 @@
1
+ # Custom array class we use in order to track extra attributes
2
+ # on a collection of results.
3
+ module Azure
4
+ module Armrest
5
+ class ArmrestCollection < Array
6
+ attr_accessor :skip_token
7
+ end
8
+ end
9
+ end
@@ -84,11 +84,14 @@ module Azure
84
84
  # The SSL version used for each request. The default is TLSv1.
85
85
  attr_accessor :ssl_version
86
86
 
87
- @@providers_hash = {} # Set in constructor
88
-
89
- @@tokens = {} # token caches
87
+ # Clear class level caches.
88
+ def self.clear_caches
89
+ @@providers_hash = {} # Set in constructor
90
+ @@tokens = {} # token caches
91
+ @@subscriptions = {} # subscription caches
92
+ end
90
93
 
91
- @@subscriptions = {} # subscription caches
94
+ clear_caches
92
95
 
93
96
  # Create a configuration object based on input options.
94
97
  # This object can be used to create service objects.
@@ -498,6 +501,12 @@ module Azure
498
501
  configuration.api_version
499
502
  end
500
503
  end
504
+
505
+ # Parse the skip token value out of the nextLink attribute from a response.
506
+ def parse_skip_token(json)
507
+ return nil unless json['nextLink']
508
+ json['nextLink'][/.*?skipToken=(.*?)$/i, 1]
509
+ end
501
510
  end # ArmrestService
502
511
  end # Armrest
503
512
  end # Azure
@@ -14,6 +14,7 @@ module Azure
14
14
  end
15
15
 
16
16
  # Returns a list of management events for the current subscription.
17
+ #
17
18
  # The +filter+ option can be used to filter the result set. Additionally,
18
19
  # you may restrict the results to only return certain fields using
19
20
  # the +select+ option. The possible fields for both filtering and selection
@@ -24,6 +25,17 @@ module Azure
24
25
  # operationName, properties, resourceGroupName, resourceProviderName,
25
26
  # resourceUri, status, submissionTimestamp, subStatus and subscriptionId.
26
27
  #
28
+ # The +skip_token+ option can be used to grab the next batch of events
29
+ # when the first call reaches the maximum number of events that the API
30
+ # can return in one batch (API default 200). You may also set the :all
31
+ # option to true, in which case all batches will automatically be
32
+ # collected for you.
33
+ #
34
+ # In practice you should always set a filter for eventTimestamp because
35
+ # you are restricted to 90 days worth of events. If you do not set the
36
+ # filter and/or you try to retrieve more than 90 days worth of events
37
+ # then you will get an error. This is a limitation of the Azure API.
38
+ #
27
39
  # Example:
28
40
  #
29
41
  # ies = Azure::Armrest::Insights::EventService.new(conf)
@@ -32,19 +44,34 @@ module Azure
32
44
  # filter = "eventTimestamp ge #{date} and eventChannels eq 'Admin, Operation'"
33
45
  # select = "resourceGroupName, operationName"
34
46
  #
35
- # ies.list(filter, select).each{ |event|
47
+ # ies.list(:filter => filter, :select => select, :all => true).events.each{ |event|
36
48
  # p event
37
49
  # }
38
50
  #
39
- def list(filter = nil, select = nil)
40
- url = build_url(filter, select)
51
+ def list(options = {})
52
+ url = build_url(options)
41
53
  response = rest_get(url)
42
- JSON.parse(response.body)['value'].map{ |e| Azure::Armrest::Insights::Event.new(e) }
54
+ json_response = JSON.parse(response.body)
55
+
56
+ events = ArmrestCollection.new(
57
+ json_response['value'].map do |hash|
58
+ Azure::Armrest::Insights::Event.new(hash)
59
+ end
60
+ )
61
+
62
+ events.skip_token = parse_skip_token(json_response)
63
+
64
+ if options[:all] && events.skip_token
65
+ events.push(*list(options.merge(:skip_token => events.skip_token)))
66
+ events.skip_token = nil # Clear when finished
67
+ end
68
+
69
+ events
43
70
  end
44
71
 
45
72
  private
46
73
 
47
- def build_url(filter = nil, select = nil)
74
+ def build_url(options = {})
48
75
  sub_id = armrest_configuration.subscription_id
49
76
 
50
77
  url =
@@ -59,8 +86,9 @@ module Azure
59
86
  )
60
87
 
61
88
  url << "?api-version=#{@api_version}"
62
- url << "&$filter=#{filter}" if filter
63
- url << "&$select=#{select}" if select
89
+ url << "&$filter=#{options[:filter]}" if options[:filter]
90
+ url << "&$select=#{options[:select]}" if options[:select]
91
+ url << "&$skipToken=#{options[:skip_token]}" if options[:skip_token]
64
92
 
65
93
  url
66
94
  end
@@ -0,0 +1,59 @@
1
+ module Azure
2
+ module Armrest
3
+ module Insights
4
+ class MetricsService < ArmrestService
5
+ # Creates and returns a new MetricsService object.
6
+ #
7
+ def initialize(armrest_configuration, options = {})
8
+ options['api_version'] = '2014-04-01' # Must hard code for now
9
+ super(armrest_configuration, 'metricDefinitions', 'Microsoft.Insights', options)
10
+ end
11
+
12
+ # Return the metric definitions for the given +provider+, +resource_type+,
13
+ # and +resource_name+ for +resource_group+. You may pass a :filter option as well.
14
+ #
15
+ # Example:
16
+ #
17
+ # metrics = Azure::Armrest::Insights::MetricsService.new(conf)
18
+ #
19
+ # metrics.list('Microsoft.SQL', 'servers', 'myServer/databases/myDB', 'mygroup')
20
+ # metrics.list('Microsoft.Compute', 'virtualMachines', 'myVm', 'mygroup')
21
+ #
22
+ def list(provider, resource_type, resource_name, resource_group = nil, options = {})
23
+ resource_group ||= configuration.resource_group
24
+
25
+ raise ArgumentError, "no resource group provided" unless resource_group
26
+
27
+ url = build_url(provider, resource_type, resource_name, resource_group, options)
28
+
29
+ response = rest_get(url)
30
+
31
+ JSON.parse(response)['value'].map { |hash| Azure::Armrest::Insights::Metric.new(hash) }
32
+ end
33
+
34
+ private
35
+
36
+ def build_url(provider, resource_type, resource_name, resource_group, options)
37
+ sub_id = configuration.subscription_id
38
+
39
+ url = File.join(
40
+ Azure::Armrest::COMMON_URI,
41
+ sub_id,
42
+ 'resourceGroups',
43
+ resource_group,
44
+ 'providers',
45
+ provider,
46
+ resource_type,
47
+ resource_name,
48
+ 'metricDefinitions'
49
+ )
50
+
51
+ url << "?api-version=#{@api_version}"
52
+ url << "&$filter=#{options[:filter]}" if options[:filter]
53
+
54
+ url
55
+ end
56
+ end # MetricsService
57
+ end # Insights
58
+ end # Armrest
59
+ end # Azure
@@ -167,9 +167,13 @@ module Azure
167
167
 
168
168
  class AvailabilitySet < BaseModel; end
169
169
  class Event < BaseModel; end
170
+ class ImageVersion < BaseModel; end
171
+ class Offer < BaseModel; end
172
+ class Publisher < BaseModel; end
170
173
  class Resource < BaseModel; end
171
174
  class ResourceGroup < BaseModel; end
172
175
  class ResourceProvider < BaseModel; end
176
+ class Sku < BaseModel; end
173
177
  class StorageAccount < BaseModel; end
174
178
  class Subscription < BaseModel; end
175
179
  class Tag < BaseModel; end
@@ -188,6 +192,7 @@ module Azure
188
192
  module Insights
189
193
  class Alert < BaseModel; end
190
194
  class Event < BaseModel; end
195
+ class Metric < BaseModel; end
191
196
  end
192
197
 
193
198
  module Network
@@ -1,5 +1,5 @@
1
1
  module Azure
2
2
  module Armrest
3
- VERSION = '0.2.2'
3
+ VERSION = '0.2.3'
4
4
  end
5
5
  end
@@ -10,26 +10,23 @@ module Azure
10
10
  # The publisher used in requests when gathering VM image information.
11
11
  attr_accessor :publisher
12
12
 
13
- # Create and return a new VirtualMachineImageService (VMIM) instance.
13
+ # Create and return a new VirtualMachineImageService instance.
14
14
  #
15
15
  # This subclass accepts the additional :location, :provider, and
16
- # :publisher options as well. The default provider is set to
17
- # 'Microsoft.Compute'.
16
+ # :publisher options as well.
18
17
  #
19
18
  def initialize(configuration, options = {})
20
- super(configuration, nil, 'Microsoft.Compute', options)
19
+ super(configuration, 'locations/publishers', 'Microsoft.Compute', options)
21
20
 
22
21
  @location = options[:location]
23
22
  @publisher = options[:publisher]
24
-
25
- set_service_api_version(options, 'locations/publishers')
26
23
  end
27
24
 
28
25
  # Return a list of VM image offers from the given +publisher+ and +location+.
29
26
  #
30
27
  # Example:
31
28
  #
32
- # vmim.offers('eastus', 'Canonical')
29
+ # vmis.offers('eastus', 'Canonical')
33
30
  #
34
31
  def offers(location = @location, publisher = @publisher)
35
32
  raise ArgumentError, "No location specified" unless location
@@ -37,21 +34,21 @@ module Azure
37
34
 
38
35
  url = build_url(location, 'publishers', publisher, 'artifacttypes', 'vmimage', 'offers')
39
36
 
40
- JSON.parse(rest_get(url)).map{ |element| element['name'] }
37
+ JSON.parse(rest_get(url)).map { |hash| Azure::Armrest::Offer.new(hash) }
41
38
  end
42
39
 
43
40
  # Return a list of VM image publishers for the given +location+.
44
41
  #
45
42
  # Example:
46
43
  #
47
- # vmim.publishers('eastus')
44
+ # vmis.publishers('eastus')
48
45
  #
49
46
  def publishers(location = @location)
50
47
  raise ArgumentError, "No location specified" unless location
51
48
 
52
49
  url = build_url(location, 'publishers')
53
50
 
54
- JSON.parse(rest_get(url)).map{ |element| element['name'] }
51
+ JSON.parse(rest_get(url)).map { |hash| Azure::Armrest::Publisher.new(hash) }
55
52
  end
56
53
 
57
54
  # Return a list of VM image skus for the given +offer+, +location+,
@@ -59,7 +56,7 @@ module Azure
59
56
  #
60
57
  # Example:
61
58
  #
62
- # vmim.skus('UbuntuServer', 'eastus', 'Canonical')
59
+ # vmis.skus('UbuntuServer', 'eastus', 'Canonical')
63
60
  #
64
61
  def skus(offer, location = @location, publisher = @publisher)
65
62
  raise ArgumentError, "No location specified" unless location
@@ -70,7 +67,7 @@ module Azure
70
67
  'vmimage', 'offers', offer, 'skus'
71
68
  )
72
69
 
73
- JSON.parse(rest_get(url)).map{ |element| element['name'] }
70
+ JSON.parse(rest_get(url)).map { |hash| Azure::Armrest::Sku.new(hash) }
74
71
  end
75
72
 
76
73
  # Return a list of VM image versions for the given +sku+, +offer+,
@@ -78,21 +75,21 @@ module Azure
78
75
  #
79
76
  # Example:
80
77
  #
81
- # vmim.versions('14.04.2', 'UbuntuServer', 'eastus', 'Canonical')
78
+ # vmis.versions('15.10', 'UbuntuServer', 'eastus', 'Canonical').map(&:name)
82
79
  #
83
80
  # # sample output
84
- # => ["14.04.201503090", "14.04.201505060", "14.04.201506100", "14.04.201507060"]
81
+ # => ["15.10.201511111", "15.10.201511161", "15.10.201512030"]
85
82
  #
86
83
  def versions(sku, offer, location = @location, publisher = @publisher)
87
84
  raise ArgumentError, "No location specified" unless location
88
85
  raise ArgumentError, "No publisher specified" unless publisher
89
86
 
90
87
  url = build_url(
91
- location, 'publishers', publisher, 'artifacttypes', 'vmimage',
92
- 'offers', offer, 'skus', sku, 'versions'
88
+ location, 'publishers', publisher, 'artifacttypes',
89
+ 'vmimage', 'offers', offer, 'skus', sku, 'versions'
93
90
  )
94
91
 
95
- JSON.parse(rest_get(url)).map{ |element| element['name'] }
92
+ JSON.parse(rest_get(url)).map { |hash| Azure::Armrest::ImageVersion.new(hash) }
96
93
  end
97
94
 
98
95
  private
@@ -113,7 +110,6 @@ module Azure
113
110
  url = File.join(url, *args) unless args.empty?
114
111
  url << "?api-version=#{@api_version}"
115
112
  end
116
-
117
113
  end # VirtualMachineImageService
118
114
  end # Armrest
119
115
  end # Azure
data/lib/azure/armrest.rb CHANGED
@@ -22,6 +22,7 @@ end
22
22
 
23
23
  require 'azure/armrest/version'
24
24
  require 'azure/armrest/exception'
25
+ require 'azure/armrest/armrest_collection'
25
26
  require 'azure/armrest/armrest_service'
26
27
  require 'azure/armrest/resource_group_based_service'
27
28
  require 'azure/armrest/resource_group_based_subservice'
@@ -36,6 +37,7 @@ require 'azure/armrest/resource_group_service'
36
37
  require 'azure/armrest/resource_provider_service'
37
38
  require 'azure/armrest/insights/alert_service'
38
39
  require 'azure/armrest/insights/event_service'
40
+ require 'azure/armrest/insights/metrics_service'
39
41
  require 'azure/armrest/network/ip_address_service'
40
42
  require 'azure/armrest/network/network_interface_service'
41
43
  require 'azure/armrest/network/network_security_group_service'
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.2.2
4
+ version: 0.2.3
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-03-16 00:00:00.000000000 Z
14
+ date: 2016-03-29 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: json
@@ -191,11 +191,13 @@ files:
191
191
  - azure-armrest.gemspec
192
192
  - lib/azure-armrest.rb
193
193
  - lib/azure/armrest.rb
194
+ - lib/azure/armrest/armrest_collection.rb
194
195
  - lib/azure/armrest/armrest_service.rb
195
196
  - lib/azure/armrest/availability_set_service.rb
196
197
  - lib/azure/armrest/exception.rb
197
198
  - lib/azure/armrest/insights/alert_service.rb
198
199
  - lib/azure/armrest/insights/event_service.rb
200
+ - lib/azure/armrest/insights/metrics_service.rb
199
201
  - lib/azure/armrest/model/base_model.rb
200
202
  - lib/azure/armrest/model/storage_account.rb
201
203
  - lib/azure/armrest/network/ip_address_service.rb