azure-armrest 0.0.3 → 0.0.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 +4 -4
- data/CHANGES +19 -0
- data/azure-armrest.gemspec +10 -7
- data/lib/azure/armrest.rb +2 -1
- data/lib/azure/armrest/armrest_service.rb +84 -25
- data/lib/azure/armrest/availability_set_service.rb +6 -82
- data/lib/azure/armrest/exception.rb +45 -0
- data/lib/azure/armrest/model/base_model.rb +54 -31
- data/lib/azure/armrest/model/storage_account.rb +140 -0
- data/lib/azure/armrest/network/ip_address_service.rb +5 -82
- data/lib/azure/armrest/network/network_interface_service.rb +3 -110
- data/lib/azure/armrest/network/network_security_group_service.rb +3 -82
- data/lib/azure/armrest/network/subnet_service.rb +14 -29
- data/lib/azure/armrest/network/virtual_network_service.rb +3 -100
- data/lib/azure/armrest/resource_group_based_service.rb +94 -0
- data/lib/azure/armrest/resource_group_service.rb +3 -3
- data/lib/azure/armrest/resource_provider_service.rb +4 -4
- data/lib/azure/armrest/resource_service.rb +1 -1
- data/lib/azure/armrest/storage_account_service.rb +35 -139
- data/lib/azure/armrest/template_deployment_service.rb +34 -87
- data/lib/azure/armrest/version.rb +1 -1
- data/lib/azure/armrest/virtual_machine_extension_service.rb +109 -35
- data/lib/azure/armrest/virtual_machine_service.rb +30 -187
- metadata +51 -6
@@ -2,94 +2,15 @@ module Azure
|
|
2
2
|
module Armrest
|
3
3
|
module Network
|
4
4
|
# Class for managing network security groups.
|
5
|
-
class NetworkSecurityGroupService <
|
5
|
+
class NetworkSecurityGroupService < ResourceGroupBasedService
|
6
6
|
|
7
7
|
# Creates and returns a new NetworkSecurityGroupService instance.
|
8
8
|
#
|
9
9
|
def initialize(_armrest_configuration, options = {})
|
10
10
|
super
|
11
11
|
@provider = options[:provider] || 'Microsoft.Network'
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
# Return information for the given network security group name for the
|
16
|
-
# provided +resource_group+. If no group is specified, it will use the
|
17
|
-
# resource group set in the constructor.
|
18
|
-
#
|
19
|
-
# Example:
|
20
|
-
#
|
21
|
-
# # Where 'your_security_group' is likely same as the name of a VM.
|
22
|
-
# nsg.get('your_security_group', 'your_resource_group')
|
23
|
-
#
|
24
|
-
def get(ns_group_name, resource_group = armrest_configuration.resource_group)
|
25
|
-
raise ArgumentError, "must specify resource group" unless resource_group
|
26
|
-
url = build_url(resource_group, ns_group_name)
|
27
|
-
JSON.parse(rest_get(url))
|
28
|
-
end
|
29
|
-
|
30
|
-
# Returns a list of available network security groups for the given subscription
|
31
|
-
# for the provided +group+, or for all resource groups if no group is specified.
|
32
|
-
#
|
33
|
-
def list(group = nil)
|
34
|
-
if group
|
35
|
-
url = build_url(group)
|
36
|
-
JSON.parse(rest_get(url))['value']
|
37
|
-
else
|
38
|
-
array = []
|
39
|
-
threads = []
|
40
|
-
mutex = Mutex.new
|
41
|
-
|
42
|
-
resource_groups.each do |rg|
|
43
|
-
threads << Thread.new(rg['name']) do |group|
|
44
|
-
url = build_url(group)
|
45
|
-
response = rest_get(url)
|
46
|
-
results = JSON.parse(response)['value']
|
47
|
-
if results && !results.empty?
|
48
|
-
mutex.synchronize{
|
49
|
-
results.each{ |hash| hash['resourceGroup'] = group }
|
50
|
-
array << results
|
51
|
-
}
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
threads.each(&:join)
|
57
|
-
|
58
|
-
array.flatten
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
# List all network security groups for the current subscription.
|
63
|
-
#
|
64
|
-
def list_all_for_subscription
|
65
|
-
sub_id = armrest_configuration.subscription_id
|
66
|
-
url = File.join(
|
67
|
-
Azure::Armrest::COMMON_URI, sub_id, 'providers',
|
68
|
-
@provider, 'networkSecurityGroups'
|
69
|
-
)
|
70
|
-
url << "?api-version=#{@api_version}"
|
71
|
-
JSON.parse(rest_get(url))['value']
|
72
|
-
end
|
73
|
-
|
74
|
-
alias list_all list_all_for_subscription
|
75
|
-
|
76
|
-
private
|
77
|
-
|
78
|
-
# Builds a URL based on subscription_id an resource_group and any other
|
79
|
-
# arguments provided, and appends it with the api-version.
|
80
|
-
def build_url(resource_group, *args)
|
81
|
-
url = File.join(
|
82
|
-
Azure::Armrest::COMMON_URI,
|
83
|
-
armrest_configuration.subscription_id,
|
84
|
-
'resourceGroups',
|
85
|
-
resource_group,
|
86
|
-
'providers',
|
87
|
-
@provider,
|
88
|
-
'networkSecurityGroups',
|
89
|
-
)
|
90
|
-
|
91
|
-
url = File.join(url, *args) unless args.empty?
|
92
|
-
url << "?api-version=#{@api_version}"
|
12
|
+
@service_name = 'networkSecurityGroups'
|
13
|
+
set_service_api_version(options, @service_name)
|
93
14
|
end
|
94
15
|
end
|
95
16
|
end # Network
|
@@ -3,16 +3,6 @@ module Azure
|
|
3
3
|
module Network
|
4
4
|
# Base class for managing subnets
|
5
5
|
class SubnetService < VirtualNetworkService
|
6
|
-
|
7
|
-
# Create and return a new SubnetService instance. Most methods for a
|
8
|
-
# SubnetService instance will return one or Subnet instances.
|
9
|
-
#
|
10
|
-
def initialize(_armrest_configuration, options = {})
|
11
|
-
super
|
12
|
-
@provider = options[:provider] || 'Microsoft.Network'
|
13
|
-
set_service_api_version(options, 'virtualNetworks')
|
14
|
-
end
|
15
|
-
|
16
6
|
# Creates a new +subnet_name+ on +virtual_network+ using the given
|
17
7
|
# +options+. The +options+ argument is a hash that supports the
|
18
8
|
# following keys and subkeys.
|
@@ -24,13 +14,8 @@ module Azure
|
|
24
14
|
# - :routeTable
|
25
15
|
# - :id
|
26
16
|
#
|
27
|
-
def create(subnet_name, virtual_network,
|
28
|
-
resource_group
|
29
|
-
raise ArgumentError, "no resource group provided" unless resource_group
|
30
|
-
url = build_url(resource_group, virtual_network, subnet_name)
|
31
|
-
body = options.to_json
|
32
|
-
response = rest_put(url, body)
|
33
|
-
response.return!
|
17
|
+
def create(subnet_name, virtual_network, resource_group = armrest_configuration.resource_group, options = {})
|
18
|
+
super(combine(virtual_network, subnet_name), resource_group, options)
|
34
19
|
end
|
35
20
|
|
36
21
|
alias update create
|
@@ -38,33 +23,33 @@ module Azure
|
|
38
23
|
# Deletes the given +subnet_name+ in +virtual_network+.
|
39
24
|
#
|
40
25
|
def delete(subnet_name, virtual_network, resource_group = armrest_configuration.resource_group)
|
41
|
-
|
42
|
-
url = build_url(resource_group, virtual_network, subnet_name)
|
43
|
-
response = rest_delete(url)
|
44
|
-
response.return!
|
26
|
+
super(combine(virtual_network, subnet_name), resource_group)
|
45
27
|
end
|
46
28
|
|
47
29
|
# Retrieves information for the provided +subnet_name+ in +virtual_network+ for
|
48
30
|
# the current subscription.
|
49
31
|
#
|
50
32
|
def get(subnet_name, virtual_network, resource_group = armrest_configuration.resource_group)
|
51
|
-
|
52
|
-
url = build_url(resource_group, virtual_network, subnet_name)
|
53
|
-
JSON.parse(rest_get(url))
|
33
|
+
super(combine(virtual_network, subnet_name), resource_group)
|
54
34
|
end
|
55
35
|
|
56
36
|
# List available subnets on +virtual_network+ for the given +resource_group+.
|
57
37
|
#
|
58
38
|
def list(virtual_network, resource_group = armrest_configuration.resource_group)
|
59
|
-
raise ArgumentError, "
|
60
|
-
|
61
|
-
|
39
|
+
raise ArgumentError, "must specify resource group" unless resource_group
|
40
|
+
raise ArgumentError, "must specify name of the resource" unless virtual_network
|
41
|
+
|
42
|
+
url = build_url(resource_group, virtual_network, 'subnets')
|
43
|
+
response = rest_get(url)
|
44
|
+
JSON.parse(response)['value'].map{ |hash| model_class.new(hash) }
|
62
45
|
end
|
63
46
|
|
47
|
+
alias list_all list
|
48
|
+
|
64
49
|
private
|
65
50
|
|
66
|
-
def
|
67
|
-
|
51
|
+
def combine(virtual_newtork, subnet)
|
52
|
+
File.join(virtual_newtork, 'subnets', subnet)
|
68
53
|
end
|
69
54
|
end
|
70
55
|
end # Network
|
@@ -2,112 +2,15 @@ module Azure
|
|
2
2
|
module Armrest
|
3
3
|
module Network
|
4
4
|
# Class for managing virtual networks.
|
5
|
-
class VirtualNetworkService <
|
5
|
+
class VirtualNetworkService < ResourceGroupBasedService
|
6
6
|
|
7
7
|
# Creates and returns a new VirtualNetworkService instance.
|
8
8
|
#
|
9
9
|
def initialize(_armrest_configuration, options = {})
|
10
10
|
super
|
11
11
|
@provider = options[:provider] || 'Microsoft.Network'
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
# Return information for the given virtual network for the provided
|
16
|
-
# +resource_group+. If no group is specified, it will use the resource
|
17
|
-
# group set in the constructor.
|
18
|
-
#
|
19
|
-
# Example:
|
20
|
-
#
|
21
|
-
# vns.get('vn_name', 'your_resource_group')
|
22
|
-
#
|
23
|
-
def get(vn_name, resource_group = armrest_configuration.resource_group)
|
24
|
-
raise ArgumentError, "must specify resource group" unless resource_group
|
25
|
-
url = build_url(resource_group, vn_name)
|
26
|
-
JSON.parse(rest_get(url))
|
27
|
-
end
|
28
|
-
|
29
|
-
# Returns a list of available virtual networks in the current subscription
|
30
|
-
# for the provided +resource_group+.
|
31
|
-
#
|
32
|
-
def list(resource_group = armrest_configuration.resource_group)
|
33
|
-
raise ArgumentError, "no resource group provided" unless resource_group
|
34
|
-
url = build_url(resource_group)
|
35
|
-
JSON.parse(rest_get(url))['value']
|
36
|
-
end
|
37
|
-
|
38
|
-
# List all virtual networks for the current subscription.
|
39
|
-
#
|
40
|
-
def list_all_for_subscription
|
41
|
-
sub_id = armrest_configuration.subscription_id
|
42
|
-
url = File.join(Azure::Armrest::COMMON_URI, sub_id, 'providers', @provider, 'virtualNetworks')
|
43
|
-
url << "?api-version=#{@api_version}"
|
44
|
-
JSON.parse(rest_get(url))['value']
|
45
|
-
end
|
46
|
-
|
47
|
-
alias list_all list_all_for_subscription
|
48
|
-
|
49
|
-
# Delete the given virtual network in +resource_group+.
|
50
|
-
#
|
51
|
-
def delete(vn_name, resource_group = armrest_configuration.resource_group)
|
52
|
-
raise ArgumentError, "must specify resource group" unless resource_group
|
53
|
-
|
54
|
-
url = build_url(resource_group, vn_name)
|
55
|
-
response = rest_delete(url)
|
56
|
-
response.return!
|
57
|
-
end
|
58
|
-
|
59
|
-
# Create a new virtual network, or update an existing virtual network if it
|
60
|
-
# already exists. The first argument is a hash of options.
|
61
|
-
#
|
62
|
-
# - :location
|
63
|
-
# - :tags
|
64
|
-
# - :etag
|
65
|
-
# - :properties
|
66
|
-
# - :addressSpace
|
67
|
-
# - :addressPrefixes[]
|
68
|
-
# - :dhcpOptions
|
69
|
-
# - :dnsServers[]
|
70
|
-
# - :subnets
|
71
|
-
# [
|
72
|
-
# - :name
|
73
|
-
# - :properties
|
74
|
-
# - :addressPrefix
|
75
|
-
# - :networkSecurityGroup
|
76
|
-
# - :id
|
77
|
-
# ]
|
78
|
-
#
|
79
|
-
def create(vn_name, options, resource_group = armrest_configuration.resource_group)
|
80
|
-
resource_group = options.delete(:resource_group) || resource_group
|
81
|
-
|
82
|
-
raise ArgumentError, "no resource group specified" unless resource_group
|
83
|
-
|
84
|
-
body = options.to_json
|
85
|
-
|
86
|
-
url = build_url(resource_group, vn_name)
|
87
|
-
|
88
|
-
response = rest_put(url, body)
|
89
|
-
response.return!
|
90
|
-
end
|
91
|
-
|
92
|
-
alias update create
|
93
|
-
|
94
|
-
private
|
95
|
-
|
96
|
-
# Builds a URL based on subscription_id an resource_group and any other
|
97
|
-
# arguments provided, and appends it with the api-version.
|
98
|
-
def build_url(resource_group, *args)
|
99
|
-
url = File.join(
|
100
|
-
Azure::Armrest::COMMON_URI,
|
101
|
-
armrest_configuration.subscription_id,
|
102
|
-
'resourceGroups',
|
103
|
-
resource_group,
|
104
|
-
'providers',
|
105
|
-
@provider,
|
106
|
-
'virtualNetworks',
|
107
|
-
)
|
108
|
-
|
109
|
-
url = File.join(url, *args) unless args.empty?
|
110
|
-
url << "?api-version=#{@api_version}"
|
12
|
+
@service_name = 'virtualNetworks'
|
13
|
+
set_service_api_version(options, @service_name)
|
111
14
|
end
|
112
15
|
end
|
113
16
|
end # Network
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module Azure::Armrest
|
2
|
+
# Base class for services that needs to run in a resource group
|
3
|
+
class ResourceGroupBasedService < ArmrestService
|
4
|
+
def create(name, rgroup = armrest_configuration.resource_group, options = {})
|
5
|
+
raise ArgumentError, "must specify resource group" unless rgroup
|
6
|
+
raise ArgumentError, "must specify name of the resource" unless name
|
7
|
+
|
8
|
+
url = build_url(rgroup, name)
|
9
|
+
url = yield(url) || url if block_given?
|
10
|
+
response = rest_put(build_url(rgroup, name), options.to_json)
|
11
|
+
model_class.new(response) unless response.empty?
|
12
|
+
end
|
13
|
+
|
14
|
+
alias update create
|
15
|
+
|
16
|
+
def list(rgroup = armrest_configuration.resource_group)
|
17
|
+
raise ArgumentError, "must specify resource group" unless rgroup
|
18
|
+
|
19
|
+
url = build_url(rgroup)
|
20
|
+
url = yield(url) || url if block_given?
|
21
|
+
response = rest_get(url)
|
22
|
+
JSON.parse(response)['value'].map{ |hash| model_class.new(hash) }
|
23
|
+
end
|
24
|
+
|
25
|
+
def list_all
|
26
|
+
url = build_url
|
27
|
+
url = yield(url) || url if block_given?
|
28
|
+
response = rest_get(url)
|
29
|
+
JSON.parse(response)['value'].map{ |hash| model_class.new(hash) }
|
30
|
+
end
|
31
|
+
|
32
|
+
def get(name, rgroup = armrest_configuration.resource_group)
|
33
|
+
raise ArgumentError, "must specify resource group" unless rgroup
|
34
|
+
raise ArgumentError, "must specify name of the resource" unless name
|
35
|
+
|
36
|
+
url = build_url(rgroup, name)
|
37
|
+
url = yield(url) || url if block_given?
|
38
|
+
response = rest_get(url)
|
39
|
+
model_class.new(response)
|
40
|
+
end
|
41
|
+
|
42
|
+
def delete(name, rgroup= armrest_configuration.resource_group)
|
43
|
+
raise ArgumentError, "must specify resource group" unless rgroup
|
44
|
+
raise ArgumentError, "must specify name of the resource" unless name
|
45
|
+
|
46
|
+
url = build_url(rgroup, name)
|
47
|
+
url = yield(url) || url if block_given?
|
48
|
+
rest_delete(url)
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
# Builds a URL based on subscription_id an resource_group and any other
|
55
|
+
# arguments provided, and appends it with the api_version.
|
56
|
+
#
|
57
|
+
def build_url(resource_group = nil, *args)
|
58
|
+
url = File.join(Azure::Armrest::COMMON_URI, armrest_configuration.subscription_id)
|
59
|
+
url = File.join(url, 'resourceGroups', resource_group) if resource_group
|
60
|
+
url = File.join(url, 'providers', @provider, @service_name)
|
61
|
+
url = File.join(url, *args) unless args.empty?
|
62
|
+
url << "?api-version=#{@api_version}"
|
63
|
+
end
|
64
|
+
|
65
|
+
def model_class
|
66
|
+
@model_class ||= Object.const_get(self.class.to_s.sub(/Service$/, ''))
|
67
|
+
end
|
68
|
+
|
69
|
+
# Aggregate resources from each group
|
70
|
+
# To be used in the case that API does not support list_all with one call
|
71
|
+
def list_in_all_groups
|
72
|
+
array = []
|
73
|
+
threads = []
|
74
|
+
mutex = Mutex.new
|
75
|
+
|
76
|
+
resource_groups.each do |rg|
|
77
|
+
threads << Thread.new(rg['name']) do |group|
|
78
|
+
url = build_url(group)
|
79
|
+
response = rest_get(url)
|
80
|
+
|
81
|
+
results = JSON.parse(response)['value'].map { |hash| model_class.new(hash) }
|
82
|
+
|
83
|
+
if results && !results.empty?
|
84
|
+
mutex.synchronize{ array << results }
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
threads.each(&:join)
|
90
|
+
|
91
|
+
array.flatten
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -31,7 +31,7 @@ module Azure
|
|
31
31
|
|
32
32
|
response = rest_get(URI.escape(url))
|
33
33
|
|
34
|
-
JSON.parse(response
|
34
|
+
JSON.parse(response)["value"].map{ |hash| Azure::Armrest::ResourceGroup.new(hash) }
|
35
35
|
end
|
36
36
|
|
37
37
|
# Creates a new +group+ in +location+ for the current subscription.
|
@@ -43,7 +43,7 @@ module Azure
|
|
43
43
|
|
44
44
|
response = rest_put(url, body)
|
45
45
|
|
46
|
-
|
46
|
+
Azure::Armrest::ResourceGroup.new(response)
|
47
47
|
end
|
48
48
|
|
49
49
|
# Delete a resource group from the current subscription.
|
@@ -59,7 +59,7 @@ module Azure
|
|
59
59
|
def get(group)
|
60
60
|
url = build_url(group)
|
61
61
|
response = rest_get(url)
|
62
|
-
|
62
|
+
Azure::Armrest::ResourceGroup.new(response)
|
63
63
|
end
|
64
64
|
|
65
65
|
# Updates the tags for the given resource group.
|
@@ -42,7 +42,7 @@ module Azure
|
|
42
42
|
def list
|
43
43
|
url = build_url
|
44
44
|
response = rest_get(url)
|
45
|
-
JSON.parse(response
|
45
|
+
JSON.parse(response)["value"].map{ |hash| Azure::Armrest::ResourceProvider.new(hash) }
|
46
46
|
end
|
47
47
|
|
48
48
|
cache_method(:list, cache_time)
|
@@ -53,7 +53,7 @@ module Azure
|
|
53
53
|
def get(namespace)
|
54
54
|
url = build_url(namespace)
|
55
55
|
response = rest_get(url)
|
56
|
-
|
56
|
+
Azure::Armrest::ResourceProvider.new(response)
|
57
57
|
end
|
58
58
|
|
59
59
|
cache_method(:get, cache_time)
|
@@ -64,7 +64,7 @@ module Azure
|
|
64
64
|
def list_geo_locations(namespace)
|
65
65
|
url = build_url(namespace)
|
66
66
|
response = rest_get(url)
|
67
|
-
JSON.parse(response
|
67
|
+
JSON.parse(response)['resourceTypes'].first['locations']
|
68
68
|
end
|
69
69
|
|
70
70
|
cache_method(:list_geo_locations, cache_time)
|
@@ -75,7 +75,7 @@ module Azure
|
|
75
75
|
def list_api_versions(namespace)
|
76
76
|
url = build_url(namespace)
|
77
77
|
response = rest_get(url)
|
78
|
-
JSON.parse(response
|
78
|
+
JSON.parse(response)['resourceTypes'].first['apiVersions']
|
79
79
|
end
|
80
80
|
|
81
81
|
cache_method(:list_api_versions, cache_time)
|
@@ -42,7 +42,7 @@ module Azure
|
|
42
42
|
|
43
43
|
response = rest_get(URI.escape(url))
|
44
44
|
|
45
|
-
JSON.parse(response
|
45
|
+
JSON.parse(response)["value"].map{ |hash| Azure::Armrest::Resource.new(hash) }
|
46
46
|
end
|
47
47
|
|
48
48
|
# Move the resources from +source_group+ under +source_subscription+,
|