azure-armrest 0.0.1 → 0.0.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 +4 -4
- data/CHANGES +8 -1
- data/README.md +7 -22
- data/Rakefile +3 -3
- data/azure-armrest.gemspec +14 -16
- data/lib/azure/armrest.rb +14 -9
- data/lib/azure/armrest/armrest_service.rb +385 -0
- data/lib/azure/armrest/availability_set_service.rb +100 -0
- data/lib/azure/armrest/{event_manager.rb → event_service.rb} +3 -3
- data/lib/azure/armrest/resource_group_service.rb +86 -0
- data/lib/azure/armrest/resource_provider_service.rb +111 -0
- data/lib/azure/armrest/resource_service.rb +86 -0
- data/lib/azure/armrest/storage_account_service.rb +220 -0
- data/lib/azure/armrest/{subnet_manager.rb → subnet_service.rb} +4 -4
- data/lib/azure/armrest/template_deployment_service.rb +97 -0
- data/lib/azure/armrest/version.rb +1 -1
- data/lib/azure/armrest/{virtual_machine_extension_manager.rb → virtual_machine_extension_service.rb} +9 -5
- data/lib/azure/armrest/{virtual_machine_image_manager.rb → virtual_machine_image_service.rb} +7 -10
- data/lib/azure/armrest/{virtual_machine_manager.rb → virtual_machine_service.rb} +121 -80
- data/lib/azure/armrest/{virtual_network_manager.rb → virtual_network_service.rb} +9 -9
- metadata +64 -30
- data/lib/azure/armrest/armrest_manager.rb +0 -402
- data/lib/azure/armrest/availability_set_manager.rb +0 -50
- data/lib/azure/armrest/storage_account_manager.rb +0 -165
@@ -0,0 +1,100 @@
|
|
1
|
+
# Azure namespace
|
2
|
+
module Azure
|
3
|
+
# Armrest namespace
|
4
|
+
module Armrest
|
5
|
+
# Base class for managing availability sets.
|
6
|
+
class AvailabilitySetService < ArmrestService
|
7
|
+
# The provider used in requests when gathering ASM information.
|
8
|
+
attr_reader :provider
|
9
|
+
|
10
|
+
# Create and return a new AvailabilitySetService (ASM) instance.
|
11
|
+
#
|
12
|
+
def initialize(_armrest_configuration, options = {})
|
13
|
+
super
|
14
|
+
|
15
|
+
@provider = options[:provider] || 'Microsoft.Compute'
|
16
|
+
|
17
|
+
set_service_api_version(options, 'availabilitySets')
|
18
|
+
end
|
19
|
+
|
20
|
+
# Creates a new availability set with the given name. The optional +tags+
|
21
|
+
# argument should be a hash, if provided.
|
22
|
+
#
|
23
|
+
def create(name, location, tags = nil, resource_group = armrest_configuration.resource_group)
|
24
|
+
raise ArgumentError, "No resource group specified" if resource_group.nil?
|
25
|
+
|
26
|
+
url = build_url(resource_group, name)
|
27
|
+
body = {:name => name, :location => location, :tags => tags}.to_json
|
28
|
+
response = rest_put(url, body)
|
29
|
+
response.return!
|
30
|
+
end
|
31
|
+
|
32
|
+
alias update create
|
33
|
+
|
34
|
+
# Deletes the +name+ availability set.
|
35
|
+
#
|
36
|
+
def delete(name, resource_group = armrest_configuration.resource_group)
|
37
|
+
raise ArgumentError, "No resource group specified" if resource_group.nil?
|
38
|
+
url = build_url(resource_group, name)
|
39
|
+
response = rest_delete(url)
|
40
|
+
response.return!
|
41
|
+
end
|
42
|
+
|
43
|
+
# Retrieves the options of an availability set +name+.
|
44
|
+
#
|
45
|
+
def get(name, resource_group = armrest_configuration.resource_group)
|
46
|
+
raise ArgumentError, "No resource group specified" if resource_group.nil?
|
47
|
+
url = build_url(resource_group, name)
|
48
|
+
response = rest_get(url)
|
49
|
+
JSON.parse(response.body)
|
50
|
+
end
|
51
|
+
|
52
|
+
# List availability sets.
|
53
|
+
#
|
54
|
+
def list(resource_group = armrest_configuration.resource_group)
|
55
|
+
array = []
|
56
|
+
|
57
|
+
if resource_group
|
58
|
+
url = build_url(resource_group)
|
59
|
+
response = rest_get(url)
|
60
|
+
array << JSON.parse(response.body)['value']
|
61
|
+
else
|
62
|
+
threads = []
|
63
|
+
mutex = Mutex.new
|
64
|
+
|
65
|
+
resource_groups.each do |group|
|
66
|
+
url = build_url(group['name'])
|
67
|
+
|
68
|
+
threads << Thread.new(url) do |thread_url|
|
69
|
+
response = rest_get(thread_url)
|
70
|
+
result = JSON.parse(response)['value']
|
71
|
+
mutex.synchronize{ array << result if result }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
threads.each(&:join)
|
76
|
+
end
|
77
|
+
|
78
|
+
array.flatten
|
79
|
+
end
|
80
|
+
|
81
|
+
# Builds a URL based on subscription_id an resource_group and any other
|
82
|
+
# arguments provided, and appends it with the api_version.
|
83
|
+
#
|
84
|
+
def build_url(resource_group, *args)
|
85
|
+
url = File.join(
|
86
|
+
Azure::Armrest::COMMON_URI,
|
87
|
+
armrest_configuration.subscription_id,
|
88
|
+
'resourceGroups',
|
89
|
+
resource_group,
|
90
|
+
'providers',
|
91
|
+
@provider,
|
92
|
+
'availabilitySets',
|
93
|
+
)
|
94
|
+
|
95
|
+
url = File.join(url, *args) unless args.empty?
|
96
|
+
url << "?api-version=#{@api_version}"
|
97
|
+
end
|
98
|
+
end # AvailabilitySetService
|
99
|
+
end # Armrest
|
100
|
+
end # Azure
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module Azure
|
2
2
|
module Armrest
|
3
|
-
class
|
3
|
+
class EventService < ArmrestService
|
4
4
|
|
5
|
-
def initialize(
|
5
|
+
def initialize(armrest_configuration, _options = {})
|
6
6
|
super
|
7
7
|
|
8
8
|
@base_url += "providers/microsoft.insights/eventtypes/management/values"
|
9
|
-
@base_url += "?api-version=#{
|
9
|
+
@base_url += "?api-version=#{armrest_configuration.api_version}"
|
10
10
|
end
|
11
11
|
|
12
12
|
# check what data type the event channel is
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Azure
|
2
|
+
module Armrest
|
3
|
+
class ResourceGroupService < ArmrestService
|
4
|
+
# The provider used in http requests. The default is 'Microsoft.Resources'
|
5
|
+
attr_reader :provider
|
6
|
+
|
7
|
+
# Creates and returns a new ResourceGroupService object.
|
8
|
+
#
|
9
|
+
def initialize(_armrest_configuration, options = {})
|
10
|
+
super
|
11
|
+
@provider = options[:provider] || 'Microsoft.Resources'
|
12
|
+
set_service_api_version(options, 'resourceGroups')
|
13
|
+
end
|
14
|
+
|
15
|
+
# List all the resources for the current subscription. You can optionally
|
16
|
+
# pass :top or :filter options as well to restrict returned results.
|
17
|
+
#
|
18
|
+
# If you pass a :resource_group option, then only resources for that
|
19
|
+
# resource group are returned.
|
20
|
+
#
|
21
|
+
# Examples:
|
22
|
+
#
|
23
|
+
# rgs = ResourceGroupService.new
|
24
|
+
# rgs.list(:top => 2)
|
25
|
+
# rgs.list(:filter => "location eq 'centralus'")
|
26
|
+
#
|
27
|
+
def list(options = {})
|
28
|
+
url = build_url
|
29
|
+
url << "&$top=#{options[:top]}" if options[:top]
|
30
|
+
url << "&$filter=#{options[:filter]}" if options[:filter]
|
31
|
+
|
32
|
+
response = rest_get(URI.escape(url))
|
33
|
+
|
34
|
+
JSON.parse(response.body)["value"]
|
35
|
+
end
|
36
|
+
|
37
|
+
# Creates a new +group+ in +location+ for the current subscription.
|
38
|
+
# You may optionally apply +tags+.
|
39
|
+
#
|
40
|
+
def create(group, location, tags = nil)
|
41
|
+
body = {:location => location, :tags => tags}.to_json
|
42
|
+
url = build_url(group)
|
43
|
+
|
44
|
+
response = rest_put(url, body)
|
45
|
+
|
46
|
+
JSON.parse(response.body)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Delete a resource group from the current subscription.
|
50
|
+
#
|
51
|
+
def delete(group)
|
52
|
+
url = build_url(group)
|
53
|
+
response = rest_delete(url)
|
54
|
+
response.return!
|
55
|
+
end
|
56
|
+
|
57
|
+
# Returns information for the given resource group.
|
58
|
+
#
|
59
|
+
def get(group)
|
60
|
+
url = build_url(group)
|
61
|
+
response = rest_get(url)
|
62
|
+
JSON.parse(response.body)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Updates the tags for the given resource group.
|
66
|
+
#
|
67
|
+
def update(group, tags)
|
68
|
+
body = {:tags => tags}.to_json
|
69
|
+
url = build_url(group)
|
70
|
+
response = rest_patch(url, body)
|
71
|
+
response.return!
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def build_url(group = nil, *args)
|
77
|
+
id = armrest_configuration.subscription_id
|
78
|
+
url = File.join(Azure::Armrest::COMMON_URI, id, 'resourcegroups')
|
79
|
+
url = File.join(url, group) if group
|
80
|
+
url = File.join(url, *args) unless args.empty?
|
81
|
+
url << "?api-version=#{@api_version}"
|
82
|
+
end
|
83
|
+
|
84
|
+
end # ResourceGroupService
|
85
|
+
end # Armrest
|
86
|
+
end # Azure
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'cache_method'
|
2
|
+
|
3
|
+
module Azure
|
4
|
+
module Armrest
|
5
|
+
class ResourceProviderService < ArmrestService
|
6
|
+
# The provider used in http requests. The default is 'Microsoft.Resources'
|
7
|
+
attr_reader :provider
|
8
|
+
|
9
|
+
# The amount of time in seconds to cache certain methods. The default is 24 hours.
|
10
|
+
@cache_time = 24 * 60 * 60
|
11
|
+
|
12
|
+
class << self
|
13
|
+
# Get or set the cache time for all methods. The default is 24 hours.
|
14
|
+
attr_accessor :cache_time
|
15
|
+
end
|
16
|
+
|
17
|
+
# Creates and returns a new ResourceProviderService object.
|
18
|
+
#
|
19
|
+
# Note that many ResourceProviderService instance methods are cached. You
|
20
|
+
# can set the cache_time for certain methods in the constructor, but keep in
|
21
|
+
# mind that it is a global setting for the class. You can also set this
|
22
|
+
# at the class level if desired. The default cache time is 24 hours.
|
23
|
+
#
|
24
|
+
# You can also set the provider. The default is 'Microsoft.Resources'.
|
25
|
+
#
|
26
|
+
def initialize(_armrest_configuration, options = {})
|
27
|
+
super
|
28
|
+
|
29
|
+
@provider = options[:provider] || 'Microsoft.Resources'
|
30
|
+
|
31
|
+
if options[:cache_time]
|
32
|
+
@cache_time = options[:cache_time]
|
33
|
+
self.class.send(:cache_time=, @cache_time)
|
34
|
+
end
|
35
|
+
|
36
|
+
set_service_api_version(options, 'resourceGroups')
|
37
|
+
end
|
38
|
+
|
39
|
+
# List all the providers for the current subscription. The results of
|
40
|
+
# this method are cached.
|
41
|
+
#
|
42
|
+
def list
|
43
|
+
url = build_url
|
44
|
+
response = rest_get(url)
|
45
|
+
JSON.parse(response.body)["value"]
|
46
|
+
end
|
47
|
+
|
48
|
+
cache_method(:list, cache_time)
|
49
|
+
|
50
|
+
# Return information about a specific +namespace+ provider. The results
|
51
|
+
# of this method are cached.
|
52
|
+
#
|
53
|
+
def get(namespace)
|
54
|
+
url = build_url(namespace)
|
55
|
+
response = rest_get(url)
|
56
|
+
JSON.parse(response.body)
|
57
|
+
end
|
58
|
+
|
59
|
+
cache_method(:get, cache_time)
|
60
|
+
|
61
|
+
# Returns an array of geo-locations for the given +namespace+ provider.
|
62
|
+
# The results of this method are cached.
|
63
|
+
#
|
64
|
+
def list_geo_locations(namespace)
|
65
|
+
url = build_url(namespace)
|
66
|
+
response = rest_get(url)
|
67
|
+
JSON.parse(response.body)['resourceTypes'].first['locations']
|
68
|
+
end
|
69
|
+
|
70
|
+
cache_method(:list_geo_locations, cache_time)
|
71
|
+
|
72
|
+
# Returns an array of supported api-versions for the given +namespace+ provider.
|
73
|
+
# The results of this method are cached.
|
74
|
+
#
|
75
|
+
def list_api_versions(namespace)
|
76
|
+
url = build_url(namespace)
|
77
|
+
response = rest_get(url)
|
78
|
+
JSON.parse(response.body)['resourceTypes'].first['apiVersions']
|
79
|
+
end
|
80
|
+
|
81
|
+
cache_method(:list_api_versions, cache_time)
|
82
|
+
|
83
|
+
# Register the current subscription with the +namespace+ provider.
|
84
|
+
#
|
85
|
+
def register(namespace)
|
86
|
+
url = build_url(namespace, 'register')
|
87
|
+
response = rest_post(url)
|
88
|
+
response.return!
|
89
|
+
end
|
90
|
+
|
91
|
+
# Unregister the current subscription from the +namespace+ provider.
|
92
|
+
#
|
93
|
+
def unregister(namespace)
|
94
|
+
url = build_url(namespace, 'unregister')
|
95
|
+
response = rest_post(url)
|
96
|
+
response.return!
|
97
|
+
end
|
98
|
+
|
99
|
+
private
|
100
|
+
|
101
|
+
def build_url(namespace = nil, *args)
|
102
|
+
id = armrest_configuration.subscription_id
|
103
|
+
url = File.join(Azure::Armrest::COMMON_URI, id, 'providers')
|
104
|
+
url = File.join(url, namespace) if namespace
|
105
|
+
url = File.join(url, *args) unless args.empty?
|
106
|
+
url << "?api-version=#{@api_version}"
|
107
|
+
end
|
108
|
+
|
109
|
+
end # ResourceGroupService
|
110
|
+
end # Armrest
|
111
|
+
end # Azure
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Azure
|
2
|
+
module Armrest
|
3
|
+
class ResourceService < ArmrestService
|
4
|
+
# The provider used in http requests. The default is 'Microsoft.Resources'
|
5
|
+
attr_reader :provider
|
6
|
+
|
7
|
+
# Creates and returns a new ResourceService object.
|
8
|
+
#
|
9
|
+
def initialize(_armrest_configuration, options = {})
|
10
|
+
super
|
11
|
+
@provider = options[:provider] || 'Microsoft.Resources'
|
12
|
+
set_service_api_version(options, 'subscriptions')
|
13
|
+
end
|
14
|
+
|
15
|
+
# List all the resources for the current subscription. You can optionally
|
16
|
+
# pass :top or :filter options as well to restrict returned results.
|
17
|
+
#
|
18
|
+
# If you pass a :resource_group option, then only resources for that
|
19
|
+
# resource group are returned.
|
20
|
+
#
|
21
|
+
# Examples:
|
22
|
+
#
|
23
|
+
# rs = ResourceService.new
|
24
|
+
# rs.list(:top => 2)
|
25
|
+
# rs.list(:filter => "location eq 'centralus'")
|
26
|
+
#
|
27
|
+
def list(options = {})
|
28
|
+
subscription_id = armrest_configuration.subscription_id
|
29
|
+
|
30
|
+
if options[:resource_group]
|
31
|
+
url = File.join(
|
32
|
+
Azure::Armrest::COMMON_URI, subscription_id, 'resourcegroups',
|
33
|
+
options[:resource_group], 'resources'
|
34
|
+
)
|
35
|
+
else
|
36
|
+
url = File.join(Azure::Armrest::COMMON_URI, subscription_id, 'resources')
|
37
|
+
end
|
38
|
+
|
39
|
+
url << "?api-version=#{@api_version}"
|
40
|
+
url << "&$top=#{options[:top]}" if options[:top]
|
41
|
+
url << "&$filter=#{options[:filter]}" if options[:filter]
|
42
|
+
|
43
|
+
response = rest_get(URI.escape(url))
|
44
|
+
|
45
|
+
JSON.parse(response.body)["value"]
|
46
|
+
end
|
47
|
+
|
48
|
+
# Move the resources from +source_group+ under +source_subscription+,
|
49
|
+
# which may be a different subscription.
|
50
|
+
#
|
51
|
+
def move(source_group, source_subscription = armrest_configuration.subscription_id)
|
52
|
+
url = File.join(
|
53
|
+
Azure::Armrest::COMMON_URI, source_subscription,
|
54
|
+
'resourcegroups', source_group, 'moveresources'
|
55
|
+
)
|
56
|
+
|
57
|
+
url << "?api-version=#{@api_version}"
|
58
|
+
|
59
|
+
response = rest_post(url)
|
60
|
+
response.return!
|
61
|
+
end
|
62
|
+
|
63
|
+
# Checks to see if the given 'resource_name' and 'resource_type' is allowed.
|
64
|
+
# This returns a JSON string that will indicate the status, including an error
|
65
|
+
# code and message on failure.
|
66
|
+
#
|
67
|
+
# If you want a simple boolean check, use the check_resource? method instead.
|
68
|
+
#
|
69
|
+
def check_resource(resource_name, resource_type)
|
70
|
+
body = JSON.dump(:Name => resource_name, :Type => resource_type)
|
71
|
+
url = File.join(Azure::Armrest::RESOURCE, 'providers', provider, 'checkresourcename')
|
72
|
+
url << "?api-version=#{@api_version}"
|
73
|
+
|
74
|
+
response = rest_post(url, body)
|
75
|
+
response.return!
|
76
|
+
end
|
77
|
+
|
78
|
+
# Similar to the check_resource method, but returns a boolean instead.
|
79
|
+
#
|
80
|
+
def check_resource?(resource_name, resource_type)
|
81
|
+
check_resource(resource_name, resource_type)['status'] == 'Allowed'
|
82
|
+
end
|
83
|
+
|
84
|
+
end # ResourceService
|
85
|
+
end # Armrest
|
86
|
+
end # Azure
|
@@ -0,0 +1,220 @@
|
|
1
|
+
module Azure
|
2
|
+
module Armrest
|
3
|
+
# Class for managing storage accounts.
|
4
|
+
class StorageAccountService < ArmrestService
|
5
|
+
|
6
|
+
# Valid account types for the create or update method.
|
7
|
+
VALID_ACCOUNT_TYPES = %w[
|
8
|
+
Standard_LRS
|
9
|
+
Standard_ZRS
|
10
|
+
Standard_GRS
|
11
|
+
Standard_RAGRS
|
12
|
+
]
|
13
|
+
|
14
|
+
# Creates and returns a new StorageAccountService (SAS) instance.
|
15
|
+
#
|
16
|
+
def initialize(_armrest_configuration, options = {})
|
17
|
+
super
|
18
|
+
@provider = options[:provider] || 'Microsoft.Storage'
|
19
|
+
#set_service_api_version(options, 'storageAccounts')
|
20
|
+
@api_version = '2015-05-01-preview' # Must hard code for now
|
21
|
+
end
|
22
|
+
|
23
|
+
# Return information for the given storage account name for the
|
24
|
+
# provided +group+. If no group is specified, it will use the
|
25
|
+
# group set in the constructor.
|
26
|
+
#
|
27
|
+
# If the +include_keys+ option is set to true, then the keys for that
|
28
|
+
# storage account will be included in the output as well.
|
29
|
+
#
|
30
|
+
# Example:
|
31
|
+
#
|
32
|
+
# sas.get('portalvhds1234', 'Default-Storage-CentralUS')
|
33
|
+
#
|
34
|
+
def get(account_name, group = armrest_configuration.resource_group, include_keys = false)
|
35
|
+
raise ArgumentError, "must specify resource group" unless group
|
36
|
+
|
37
|
+
url = build_url(group, account_name)
|
38
|
+
results = JSON.parse(rest_get(url))
|
39
|
+
results['properties'].merge!(list_account_keys(account_name, group)) if include_keys
|
40
|
+
|
41
|
+
results
|
42
|
+
end
|
43
|
+
|
44
|
+
# Returns a list of available storage accounts for the given subscription
|
45
|
+
# for the provided +group+, or all resource groups if none is provided.
|
46
|
+
#
|
47
|
+
def list(group = nil)
|
48
|
+
if group
|
49
|
+
url = build_url(group)
|
50
|
+
JSON.parse(rest_get(url))['value']
|
51
|
+
else
|
52
|
+
array = []
|
53
|
+
threads = []
|
54
|
+
mutex = Mutex.new
|
55
|
+
|
56
|
+
resource_groups.each do |rg|
|
57
|
+
threads << Thread.new(rg['name']) do |group|
|
58
|
+
url = build_url(group)
|
59
|
+
response = rest_get(url)
|
60
|
+
results = JSON.parse(response)['value']
|
61
|
+
if results && !results.empty?
|
62
|
+
mutex.synchronize{
|
63
|
+
results.each{ |hash| hash['resourceGroup'] = group }
|
64
|
+
array << results
|
65
|
+
}
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
threads.each(&:join)
|
71
|
+
|
72
|
+
array.flatten
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# List all storage accounts for the current subscription. This does not
|
77
|
+
# include storage account key information.
|
78
|
+
#
|
79
|
+
def list_all_for_subscription
|
80
|
+
sub_id = armrest_configuration.subscription_id
|
81
|
+
url = File.join(Azure::Armrest::COMMON_URI, sub_id, 'providers', @provider, 'storageAccounts')
|
82
|
+
url << "?api-version=#{@api_version}"
|
83
|
+
JSON.parse(rest_get(url))
|
84
|
+
end
|
85
|
+
|
86
|
+
alias list_all list_all_for_subscription
|
87
|
+
|
88
|
+
# Creates a new storage account, or updates an existing account with the
|
89
|
+
# specified parameters. The possible parameters are:
|
90
|
+
#
|
91
|
+
# - :name
|
92
|
+
# Required. The name of the storage account within the specified
|
93
|
+
# resource stack. Must be 3-24 alphanumeric lowercase characters.
|
94
|
+
#
|
95
|
+
# - :validating
|
96
|
+
# Optional. Set to 'nameAvailability' to indicate that the account
|
97
|
+
# name must be checked for global availability.
|
98
|
+
#
|
99
|
+
# - :type
|
100
|
+
# The type of storage account. The default is "Standard_GRS".
|
101
|
+
#
|
102
|
+
# - :location
|
103
|
+
# Required: One of the Azure geo regions, e.g. 'West US'.
|
104
|
+
#
|
105
|
+
# - :tags
|
106
|
+
# A hash of tags to describe the resource. You may have a maximum of
|
107
|
+
# 10 tags, and each key has a max size of 128 characters, and each
|
108
|
+
# value has a max size of 256 characters. These are optional.
|
109
|
+
#
|
110
|
+
# Example:
|
111
|
+
#
|
112
|
+
# sas = Azure::Armrest::StorageAccountService(config)
|
113
|
+
#
|
114
|
+
# sas.create(
|
115
|
+
# :name => "yourstorageaccount1",
|
116
|
+
# :location => "West US",
|
117
|
+
# :type => "Standard_ZRS",
|
118
|
+
# :tags => {:YourCompany => true}
|
119
|
+
# )
|
120
|
+
#
|
121
|
+
# For convenience you may also specify the :resource_group as an option.
|
122
|
+
#
|
123
|
+
def create(options = {}, rgroup = armrest_configuration.resource_group)
|
124
|
+
rgroup ||= options[:resource_group]
|
125
|
+
raise ArgumentError, "No resource group specified" if rgroup.nil?
|
126
|
+
|
127
|
+
# Mandatory options
|
128
|
+
name = options.fetch(:name)
|
129
|
+
location = options.fetch(:location)
|
130
|
+
|
131
|
+
# Optional
|
132
|
+
tags = options[:tags]
|
133
|
+
type = options[:type] || "Standard_GRS"
|
134
|
+
|
135
|
+
properties = {:accountType => type}
|
136
|
+
|
137
|
+
validate_account_type(type)
|
138
|
+
validate_account_name(name)
|
139
|
+
|
140
|
+
url = build_url(rgroup, name)
|
141
|
+
url << "&validating=" << options[:validating] if options[:validating]
|
142
|
+
|
143
|
+
body = {
|
144
|
+
:name => name,
|
145
|
+
:location => location,
|
146
|
+
:tags => tags,
|
147
|
+
:properties => properties
|
148
|
+
}.to_json
|
149
|
+
|
150
|
+
response = rest_put(url, body)
|
151
|
+
response.return!
|
152
|
+
end
|
153
|
+
|
154
|
+
alias update create
|
155
|
+
|
156
|
+
# Delete the given storage account name.
|
157
|
+
#
|
158
|
+
def delete(account_name, group = armrest_configuration.resource_group)
|
159
|
+
raise ArgumentError, "must specify resource group" unless group
|
160
|
+
|
161
|
+
url = build_url(group, account_name)
|
162
|
+
response = rest_delete(url)
|
163
|
+
response.return!
|
164
|
+
end
|
165
|
+
|
166
|
+
# Returns the primary and secondary access keys for the given
|
167
|
+
# storage account.
|
168
|
+
#
|
169
|
+
def list_account_keys(account_name, group = armrest_configuration.resource_group)
|
170
|
+
raise ArgumentError, "must specify resource group" unless group
|
171
|
+
|
172
|
+
url = build_url(group, account_name, 'listKeys')
|
173
|
+
response = rest_post(url)
|
174
|
+
JSON.parse(response)
|
175
|
+
end
|
176
|
+
|
177
|
+
# Regenerates the primary and secondary access keys for the given
|
178
|
+
# storage account.
|
179
|
+
#
|
180
|
+
def regenerate_storage_account_keys(account_name)
|
181
|
+
raise ArgumentError, "must specify resource group" unless group
|
182
|
+
|
183
|
+
url = build_url(group, account_name, 'regenerateKey')
|
184
|
+
response = rest_post(url)
|
185
|
+
response.return!
|
186
|
+
end
|
187
|
+
|
188
|
+
private
|
189
|
+
|
190
|
+
def validate_account_type(account_type)
|
191
|
+
unless VALID_ACCOUNT_TYPES.include?(account_type)
|
192
|
+
raise ArgumentError, "invalid account type '#{account_type}'"
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
def validate_account_name(name)
|
197
|
+
if name.size < 3 || name.size > 24 || name[/\W+/]
|
198
|
+
raise ArgumentError, "name must be 3-24 alpha-numeric characters only"
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
# Builds a URL based on subscription_id an resource_group and any other
|
203
|
+
# arguments provided, and appends it with the api-version.
|
204
|
+
def build_url(resource_group, *args)
|
205
|
+
url = File.join(
|
206
|
+
Azure::Armrest::COMMON_URI,
|
207
|
+
armrest_configuration.subscription_id,
|
208
|
+
'resourceGroups',
|
209
|
+
resource_group,
|
210
|
+
'providers',
|
211
|
+
@provider,
|
212
|
+
'storageAccounts',
|
213
|
+
)
|
214
|
+
|
215
|
+
url = File.join(url, *args) unless args.empty?
|
216
|
+
url << "?api-version=#{@api_version}"
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|