azure-armrest 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES +5 -0
- data/README.md +10 -13
- data/lib/azure/armrest.rb +3 -0
- data/lib/azure/armrest/insights/alert_service.rb +23 -0
- data/lib/azure/armrest/insights/event_service.rb +76 -0
- data/lib/azure/armrest/model/base_model.rb +6 -0
- data/lib/azure/armrest/model/storage_account.rb +70 -6
- data/lib/azure/armrest/network/network_security_rule_service.rb +47 -0
- data/lib/azure/armrest/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f8b26339221636eee239e6934d67cf0c4ee3bbb9
|
4
|
+
data.tar.gz: 1a6c35bd8f5a4af7ec2bd68d3734978add667981
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a130d2af6d31ca1b55b40dbe528103b359022ac7a9b685d4954ea3144f1ec6bbc5be7247aaa9f2e23963819d308d322159f46d3390b74c81caf3ee8c3dec7fc
|
7
|
+
data.tar.gz: fe7a7347b7bd16877848d8125ff496504d2e96822487ba0a70f62fc157798373767b9852ba5b89d3a0314e797803493745c77697b2b373eea86716e6b4086e52
|
data/CHANGES
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
= 0.0.9 - 17-Dec-2015
|
2
|
+
* Added AlertService and EventService classes.
|
3
|
+
* Added tables, table_info and table_data methods to the StorageAccount model.
|
4
|
+
* Updates to the README.
|
5
|
+
|
1
6
|
= 0.0.8 - 10-Nov-2015
|
2
7
|
* Added the list_private_images method to the StorageAccountService class.
|
3
8
|
* Added the list_all method to the ResourceGroupService class.
|
data/README.md
CHANGED
@@ -15,6 +15,7 @@ require 'azure/armrest'
|
|
15
15
|
|
16
16
|
# Create a configuration object. All service objects will then use the
|
17
17
|
# information you set here.
|
18
|
+
#
|
18
19
|
# A token will be retrieved based on the information you provided
|
19
20
|
|
20
21
|
conf = Azure::Armrest::ArmrestService.configure(
|
@@ -28,23 +29,19 @@ conf = Azure::Armrest::ArmrestService.configure(
|
|
28
29
|
# You can add other options specific to the service to be created
|
29
30
|
vms = Azure::Armrest::VirtualMachineService.new(conf, options)
|
30
31
|
|
31
|
-
#
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
:admin_password => 'adminxxxxxx',
|
39
|
-
:os_disk => {:name => 'disk_name1', :os_type => 'Linux', :caching => 'read'},
|
40
|
-
:data_disks => {:name => 'data_disk1', :lun => 0, :caching => 'read'}
|
41
|
-
)
|
32
|
+
# List all virtual machines for a given resource group:
|
33
|
+
vms.list(some_group).each do |vm|
|
34
|
+
puts vm.name
|
35
|
+
puts vm.resource_group
|
36
|
+
puts vm.location
|
37
|
+
puts vm.properties.hardware_profile.vm_size
|
38
|
+
end
|
42
39
|
```
|
43
40
|
|
44
41
|
## Subscriptions
|
45
42
|
|
46
|
-
If you do not provide a subscription ID
|
47
|
-
subscription ID returned from a REST call will be used.
|
43
|
+
If you do not provide a subscription ID in your configuration object, then the
|
44
|
+
first subscription ID returned from a REST call will be used.
|
48
45
|
|
49
46
|
## Notes
|
50
47
|
|
data/lib/azure/armrest.rb
CHANGED
@@ -33,9 +33,12 @@ require 'azure/armrest/template_deployment_service'
|
|
33
33
|
require 'azure/armrest/resource_service'
|
34
34
|
require 'azure/armrest/resource_group_service'
|
35
35
|
require 'azure/armrest/resource_provider_service'
|
36
|
+
require 'azure/armrest/insights/alert_service'
|
37
|
+
require 'azure/armrest/insights/event_service'
|
36
38
|
require 'azure/armrest/network/ip_address_service'
|
37
39
|
require 'azure/armrest/network/network_interface_service'
|
38
40
|
require 'azure/armrest/network/network_security_group_service'
|
41
|
+
require 'azure/armrest/network/network_security_rule_service'
|
39
42
|
require 'azure/armrest/network/virtual_network_service'
|
40
43
|
require 'azure/armrest/network/subnet_service'
|
41
44
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Azure namespace
|
2
|
+
module Azure
|
3
|
+
# Armrest namespace
|
4
|
+
module Armrest
|
5
|
+
# Insights namesspace
|
6
|
+
module Insights
|
7
|
+
# Base class for managing alert rules.
|
8
|
+
class AlertService < ResourceGroupBasedService
|
9
|
+
# The provider used in requests when gathering Alert information.
|
10
|
+
attr_reader :provider
|
11
|
+
|
12
|
+
# Create and return a new AlertService instance.
|
13
|
+
#
|
14
|
+
def initialize(_armrest_configuration, options = {})
|
15
|
+
super
|
16
|
+
@provider = options[:provider] || 'Microsoft.Insights'
|
17
|
+
set_service_api_version(options, 'alertrules')
|
18
|
+
@service_name = 'alertRules'
|
19
|
+
end
|
20
|
+
end # AlertService
|
21
|
+
end # Insights
|
22
|
+
end # Armrest
|
23
|
+
end # Azure
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# Azure namespace
|
2
|
+
module Azure
|
3
|
+
# Armrest namespace
|
4
|
+
module Armrest
|
5
|
+
# Insights namespace
|
6
|
+
module Insights
|
7
|
+
|
8
|
+
# Base class for managing events.
|
9
|
+
class EventService < ArmrestService
|
10
|
+
# The provider used in requests when gathering Event information.
|
11
|
+
attr_reader :provider
|
12
|
+
|
13
|
+
# Create and return a new EventService instance.
|
14
|
+
#
|
15
|
+
def initialize(_armrest_configuration, options = {})
|
16
|
+
super
|
17
|
+
@provider = options[:provider] || 'Microsoft.Insights'
|
18
|
+
set_service_api_version(options, 'eventtypes')
|
19
|
+
@service_name = 'eventTypes'
|
20
|
+
end
|
21
|
+
|
22
|
+
# Returns a list of management events for the current subscription.
|
23
|
+
# The +filter+ option can be used to filter the result set. Additionally,
|
24
|
+
# you may restrict the results to only return certain fields using
|
25
|
+
# the +select+ option. The possible fields for both filtering and selection
|
26
|
+
# are:
|
27
|
+
#
|
28
|
+
# authorization, channels, claims, correlationId, description, eventDataId,
|
29
|
+
# eventName, eventSource, eventTimestamp, httpRequest, level, operationId,
|
30
|
+
# operationName, properties, resourceGroupName, resourceProviderName,
|
31
|
+
# resourceUri, status, submissionTimestamp, subStatus and subscriptionId.
|
32
|
+
#
|
33
|
+
# Example:
|
34
|
+
#
|
35
|
+
# ies = Azure::Armrest::Insights::EventService.new(conf)
|
36
|
+
#
|
37
|
+
# date = (Time.now - 86400).httpdate
|
38
|
+
# filter = "eventTimestamp ge #{date} and eventChannels eq 'Admin, Operation'"
|
39
|
+
# select = "resourceGroupName, operationName"
|
40
|
+
#
|
41
|
+
# ies.list(filter, select).each{ |event|
|
42
|
+
# p event
|
43
|
+
# }
|
44
|
+
#
|
45
|
+
def list(filter = nil, select = nil)
|
46
|
+
url = build_url(filter, select)
|
47
|
+
response = rest_get(url)
|
48
|
+
JSON.parse(response.body)['value'].map{ |e| Azure::Armrest::Insights::Event.new(e) }
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def build_url(filter = nil, select = nil)
|
54
|
+
sub_id = armrest_configuration.subscription_id
|
55
|
+
|
56
|
+
url = File.join(
|
57
|
+
Azure::Armrest::COMMON_URI,
|
58
|
+
sub_id,
|
59
|
+
'providers',
|
60
|
+
@provider,
|
61
|
+
'eventtypes',
|
62
|
+
'management',
|
63
|
+
'values'
|
64
|
+
)
|
65
|
+
|
66
|
+
url << "?api-version=#{@api_version}"
|
67
|
+
url << "&$filter=#{filter}" if filter
|
68
|
+
url << "&$select=#{select}" if select
|
69
|
+
|
70
|
+
url
|
71
|
+
end
|
72
|
+
end # EventService
|
73
|
+
|
74
|
+
end # Insights
|
75
|
+
end # Armrest
|
76
|
+
end # Azure
|
@@ -182,10 +182,16 @@ module Azure
|
|
182
182
|
class VirtualMachineImage < BaseModel; end
|
183
183
|
class VirtualMachineSize < BaseModel; end
|
184
184
|
|
185
|
+
module Insights
|
186
|
+
class Alert < BaseModel; end
|
187
|
+
class Event < BaseModel; end
|
188
|
+
end
|
189
|
+
|
185
190
|
module Network
|
186
191
|
class IpAddress < BaseModel; end
|
187
192
|
class NetworkInterface < BaseModel; end
|
188
193
|
class NetworkSecurityGroup < BaseModel; end
|
194
|
+
class NetworkSecurityRule < NetworkSecurityGroup; end
|
189
195
|
class VirtualNetwork < BaseModel; end
|
190
196
|
class Subnet < VirtualNetwork; end
|
191
197
|
end
|
@@ -15,6 +15,10 @@ module Azure
|
|
15
15
|
class BlobServiceStat < BaseModel; end
|
16
16
|
class BlobMetadata < BaseModel; end
|
17
17
|
|
18
|
+
# Classes used to wrap table information
|
19
|
+
class Table < BaseModel; end
|
20
|
+
class TableData < BaseModel; end
|
21
|
+
|
18
22
|
# The version string used in headers sent as part any internal http
|
19
23
|
# request. The default is 2015-02-21.
|
20
24
|
attr_accessor :storage_api_version
|
@@ -24,6 +28,52 @@ module Azure
|
|
24
28
|
@storage_api_version = '2015-02-21'
|
25
29
|
end
|
26
30
|
|
31
|
+
# Returns a list of tables for the given storage account +key+. Note
|
32
|
+
# that full metadata is returned.
|
33
|
+
#
|
34
|
+
def tables(key = nil)
|
35
|
+
key ||= properties.key1
|
36
|
+
response = table_response(key, nil, "Tables")
|
37
|
+
JSON.parse(response.body)['value'].map{ |t| Table.new(t) }
|
38
|
+
end
|
39
|
+
|
40
|
+
# Return information about a single table for the given storage
|
41
|
+
# account +key+. If you are looking for the entities within the
|
42
|
+
# table, use the table_data method instead.
|
43
|
+
#
|
44
|
+
def table_info(table, key = nil)
|
45
|
+
key ||= properties.key1
|
46
|
+
response = table_response(key, nil, "Tables('#{table}')")
|
47
|
+
Table.new(response.body)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Returns a list of TableData objects for the given table +name+ using
|
51
|
+
# account +key+. The exact nature of the TableData object depends on the
|
52
|
+
# type of table that it is.
|
53
|
+
#
|
54
|
+
def table_data(name, key = nil, options = {})
|
55
|
+
key ||= properties.key1
|
56
|
+
|
57
|
+
query = ""
|
58
|
+
|
59
|
+
hash = {
|
60
|
+
"$filter=" => options[:filter],
|
61
|
+
"$select=" => options[:select],
|
62
|
+
"$top=" => options[:top]
|
63
|
+
}
|
64
|
+
|
65
|
+
hash.each do |key, value|
|
66
|
+
if query.include?("$")
|
67
|
+
query << "&#{key}#{value}" if value
|
68
|
+
else
|
69
|
+
query << "#{key}#{value}" if value
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
response = table_response(key, query, name)
|
74
|
+
JSON.parse(response.body)['value'].map{ |t| TableData.new(t) }
|
75
|
+
end
|
76
|
+
|
27
77
|
# Return a list of container names for the given storage account +key+.
|
28
78
|
# If no key is provided, it is assumed that the StorageAccount object
|
29
79
|
# includes the key1 property.
|
@@ -76,7 +126,7 @@ module Azure
|
|
76
126
|
url = File.join(properties.primary_endpoints.blob, container, blob)
|
77
127
|
url += "?snapshot=" + options[:date] if options[:date]
|
78
128
|
|
79
|
-
headers = build_headers(url, key, :verb => 'HEAD')
|
129
|
+
headers = build_headers(url, key, :blob, :verb => 'HEAD')
|
80
130
|
response = RestClient.head(url, headers)
|
81
131
|
|
82
132
|
BlobProperty.new(response.headers)
|
@@ -174,7 +224,7 @@ module Azure
|
|
174
224
|
|
175
225
|
options = {'x-ms-copy-source' => src_url, 'If-None-Match' => '*', :verb => 'PUT'}
|
176
226
|
|
177
|
-
headers = build_headers(dst_url, key, options)
|
227
|
+
headers = build_headers(dst_url, key, :blob, options)
|
178
228
|
|
179
229
|
# RestClient will set the Content-Type to application/x-www-form-urlencoded.
|
180
230
|
# We must override this setting or the request will fail.
|
@@ -193,7 +243,7 @@ module Azure
|
|
193
243
|
url = File.join(properties.primary_endpoints.blob, container, blob)
|
194
244
|
url += "?snapshot=" + options[:date] if options[:date]
|
195
245
|
|
196
|
-
headers = build_headers(url, key, :verb => 'DELETE')
|
246
|
+
headers = build_headers(url, key, :blob, :verb => 'DELETE')
|
197
247
|
response = RestClient.delete(url, headers)
|
198
248
|
|
199
249
|
true
|
@@ -206,14 +256,28 @@ module Azure
|
|
206
256
|
#
|
207
257
|
def blob_response(key, query, *args)
|
208
258
|
url = File.join(properties.primary_endpoints.blob, *args) + "?#{query}"
|
209
|
-
headers = build_headers(url, key)
|
259
|
+
headers = build_headers(url, key, 'blob')
|
260
|
+
RestClient.get(url, headers)
|
261
|
+
end
|
262
|
+
|
263
|
+
# Using the blob primary endpoint as a base, join any arguments to the
|
264
|
+
# the url and submit an http request.
|
265
|
+
def table_response(key, query = nil, *args)
|
266
|
+
url = File.join(properties.primary_endpoints.table, *args)
|
267
|
+
|
268
|
+
headers = build_headers(url, key, 'table')
|
269
|
+
headers['Accept'] = 'application/json;odata=fullmetadata'
|
270
|
+
|
271
|
+
url << "?#{query}" if query # Must happen after headers are built
|
272
|
+
|
210
273
|
RestClient.get(url, headers)
|
211
274
|
end
|
212
275
|
|
213
276
|
# Set the headers needed, including the Authorization header.
|
214
277
|
#
|
215
|
-
def build_headers(url, key, additional_headers = {})
|
278
|
+
def build_headers(url, key, sig_type = nil, additional_headers = {})
|
216
279
|
sig = Signature.new(url, key)
|
280
|
+
sig_type ||= 'blob'
|
217
281
|
|
218
282
|
headers = {
|
219
283
|
'x-ms-date' => Time.now.httpdate,
|
@@ -222,7 +286,7 @@ module Azure
|
|
222
286
|
}
|
223
287
|
|
224
288
|
headers.merge!(additional_headers)
|
225
|
-
headers['Authorization'] = sig.
|
289
|
+
headers['Authorization'] = sig.signature(sig_type, headers)
|
226
290
|
|
227
291
|
headers
|
228
292
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Azure
|
2
|
+
module Armrest
|
3
|
+
module Network
|
4
|
+
# Base class for managing securityRules
|
5
|
+
class NetworkSecurityRuleService < NetworkSecurityGroupService
|
6
|
+
# Creates a new +rule_name+ on +security_group+ using the given +options+.
|
7
|
+
def create(rule_name, security_group, resource_group = armrest_configuration.resource_group, options = {})
|
8
|
+
super(combine(security_group, rule_name), resource_group, options)
|
9
|
+
end
|
10
|
+
|
11
|
+
alias update create
|
12
|
+
|
13
|
+
# Deletes the given +rule_name+ in +security_group+.
|
14
|
+
#
|
15
|
+
def delete(rule_name, security_group, resource_group = armrest_configuration.resource_group)
|
16
|
+
super(combine(security_group, rule_name), resource_group)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Retrieves information for the provided +rule_name+ in +security_group+ for
|
20
|
+
# the current subscription.
|
21
|
+
#
|
22
|
+
def get(rule_name, security_group, resource_group = armrest_configuration.resource_group)
|
23
|
+
super(combine(security_group, rule_name), resource_group)
|
24
|
+
end
|
25
|
+
|
26
|
+
# List available security rules on +security_group+ for the given +resource_group+.
|
27
|
+
#
|
28
|
+
def list(security_group, resource_group = armrest_configuration.resource_group)
|
29
|
+
raise ArgumentError, "must specify resource group" unless resource_group
|
30
|
+
raise ArgumentError, "must specify name of the resource" unless security_group
|
31
|
+
|
32
|
+
url = build_url(resource_group, security_group, 'securityRules')
|
33
|
+
response = rest_get(url)
|
34
|
+
JSON.parse(response)['value'].map{ |hash| model_class.new(hash) }
|
35
|
+
end
|
36
|
+
|
37
|
+
alias list_all list
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def combine(virtual_network, subnet)
|
42
|
+
File.join(virtual_network, 'securityRules', subnet)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end # Network
|
46
|
+
end # Armrest
|
47
|
+
end # Azure
|
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.0.
|
4
|
+
version: 0.0.9
|
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: 2015-
|
14
|
+
date: 2015-12-17 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: json
|
@@ -194,11 +194,14 @@ files:
|
|
194
194
|
- lib/azure/armrest/armrest_service.rb
|
195
195
|
- lib/azure/armrest/availability_set_service.rb
|
196
196
|
- lib/azure/armrest/exception.rb
|
197
|
+
- lib/azure/armrest/insights/alert_service.rb
|
198
|
+
- lib/azure/armrest/insights/event_service.rb
|
197
199
|
- lib/azure/armrest/model/base_model.rb
|
198
200
|
- lib/azure/armrest/model/storage_account.rb
|
199
201
|
- lib/azure/armrest/network/ip_address_service.rb
|
200
202
|
- lib/azure/armrest/network/network_interface_service.rb
|
201
203
|
- lib/azure/armrest/network/network_security_group_service.rb
|
204
|
+
- lib/azure/armrest/network/network_security_rule_service.rb
|
202
205
|
- lib/azure/armrest/network/subnet_service.rb
|
203
206
|
- lib/azure/armrest/network/virtual_network_service.rb
|
204
207
|
- lib/azure/armrest/resource_group_based_service.rb
|
@@ -231,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
231
234
|
version: '0'
|
232
235
|
requirements: []
|
233
236
|
rubyforge_project:
|
234
|
-
rubygems_version: 2.5.
|
237
|
+
rubygems_version: 2.5.1
|
235
238
|
signing_key:
|
236
239
|
specification_version: 4
|
237
240
|
summary: An interface for ARM/JSON Azure REST API
|