Class: Azure::Armrest::StorageAccountService

Inherits:
ResourceGroupBasedService show all
Defined in:
lib/azure/armrest/storage_account_service.rb

Overview

Class for managing storage accounts.

Constant Summary

Constants inherited from ResourceGroupBasedService

ResourceGroupBasedService::SERVICE_NAME_MAP

Instance Attribute Summary

Attributes inherited from ArmrestService

#api_version, #armrest_configuration, #base_url, #provider, #service_name

Instance Method Summary collapse

Methods inherited from ResourceGroupBasedService

#delete, #get_associated_resource

Methods inherited from ArmrestService

configure, #get_provider, #get_subscription, #list_resource_groups, #list_resources, #list_subscriptions, #locations, #poll, #tags, #tenants, #wait

Constructor Details

#initialize(configuration, options = {}) ⇒ StorageAccountService

Creates and returns a new StorageAccountService (SAS) instance.



9
10
11
# File 'lib/azure/armrest/storage_account_service.rb', line 9

def initialize(configuration, options = {})
  super(configuration, 'storageAccounts', 'Microsoft.Storage', options)
end

Instance Method Details

#accounts_by_nameObject



243
244
245
# File 'lib/azure/armrest/storage_account_service.rb', line 243

def accounts_by_name
  @accounts_by_name ||= list_all.each_with_object({}) { |sa, sah| sah[sa.name] = sa }
end

#create(account_name, rgroup = configuration.resource_group, options) ⇒ Object

Creates a new storage account, or updates an existing account with the specified parameters.

Note that the name of the storage account within the specified must be 3-24 alphanumeric lowercase characters. This name must be unique across all subscriptions.

The options available are as follows:

  • :validating Optional. Set to ‘nameAvailability’ to indicate that the account name must be checked for global availability.

  • :properties

    • :accountType The type of storage account, e.g. “Standard_GRS”.

  • :location Required: One of the Azure geo regions, e.g. ‘West US’.

  • :tags A hash of tags to describe the resource. You may have a maximum of 10 tags, and each key has a max size of 128 characters, and each value has a max size of 256 characters. These are optional.

Example:

sas = Azure::Armrest::StorageAccountService(config)

options = {
  :location => "Central US",
  :tags     => {:redhat => true},
  :sku      => {:name => "Standard_LRS"},
  :kind     => "Storage"
}

sas.create("your_storage_account", "your_resource_group", options)


81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/azure/armrest/storage_account_service.rb', line 81

def create(, rgroup = configuration.resource_group, options)
  validating = options.delete(:validating)
  ()

  acct = super(, rgroup, options) do |url|
    url << "&validating=" << validating if validating
  end

  acct.proxy       = configuration.proxy
  acct.ssl_version = configuration.ssl_version
  acct.ssl_verify  = configuration.ssl_verify

  acct
end

#get(name, resource_group = configuration.resource_group) ⇒ Object

Same as other resource based get methods, but also sets the proxy on the model object.



15
16
17
18
19
20
21
# File 'lib/azure/armrest/storage_account_service.rb', line 15

def get(name, resource_group = configuration.resource_group)
  super.tap do |m|
    m.proxy       = configuration.proxy
    m.ssl_version = configuration.ssl_version
    m.ssl_verify  = configuration.ssl_verify
  end
end

#get_from_vm(vm) ⇒ Object

Return the storage account for the virtual machine model vm.



208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# File 'lib/azure/armrest/storage_account_service.rb', line 208

def get_from_vm(vm)
  uri = Addressable::URI.parse(vm.properties.storage_profile.os_disk.vhd.uri)

  # The uri looks like https://foo123.blob.core.windows.net/vhds/something123.vhd
  name = uri.host.split('.').first # storage name, e.g. 'foo123'

  # Look for the storage account in the VM's resource group first. If
  # it's not found, look through all the storage accounts.
  begin
    acct = get(name, vm.resource_group)
  rescue Azure::Armrest::NotFoundException => err
    acct = list_all(:name => name).first
    raise err unless acct
  end

  acct
end

#get_os_disk(vm) ⇒ Object

Get information for the underlying VHD file based on the properties of the virtual machine model vm.



229
230
231
232
233
234
235
236
237
238
239
240
241
# File 'lib/azure/armrest/storage_account_service.rb', line 229

def get_os_disk(vm)
  uri = Addressable::URI.parse(vm.properties.storage_profile.os_disk.vhd.uri)

  # The uri looks like https://foo123.blob.core.windows.net/vhds/something123.vhd
  disk = File.basename(uri.to_s)       # disk name, e.g. 'something123.vhd'
  path = File.dirname(uri.path)[1..-1] # container, e.g. 'vhds'

  acct = get_from_vm(vm)
  keys = (acct.name, acct.resource_group)
  key  = keys['key1'] || keys['key2']

  acct.blob_properties(path, disk, key)
end

#list(resource_group = configuration.resource_group) ⇒ Object

Same as other resource based list methods, but also sets the proxy on each model object.



25
26
27
28
29
30
31
# File 'lib/azure/armrest/storage_account_service.rb', line 25

def list(resource_group = configuration.resource_group)
  super.each do |m|
    m.proxy       = configuration.proxy
    m.ssl_version = configuration.ssl_version
    m.ssl_verify  = configuration.ssl_verify
  end
end

#list_account_key_objects(account_name, group = configuration.resource_group) ⇒ Object Also known as: list_storage_account_key_objects

Returns a list of StorageAccountKey objects consisting of information the primary and secondary keys. This method requires an api-version string of 2016-01-01 or later, or an error is raised.

If you want a plain hash, use the list_account_keys method instead.



121
122
123
124
125
126
127
128
129
130
131
# File 'lib/azure/armrest/storage_account_service.rb', line 121

def (, group = configuration.resource_group)
  validate_resource_group(group)

  unless recent_api_version?
    raise ArgumentError, "unsupported api-version string '#{api_version}'"
  end

  url = build_url(group, , 'listKeys')
  response = rest_post(url)
  JSON.parse(response.body)['keys'].map { |hash| StorageAccountKey.new(hash) }
end

#list_account_keys(account_name, group = configuration.resource_group) ⇒ Object Also known as: list_storage_account_keys

Returns the primary and secondary access keys for the given storage account. This method will return a hash with ‘key1’ and ‘key2’ as its keys.

If you want a list of StorageAccountKey objects, then use the list_account_key_objects method instead.



103
104
105
106
107
108
109
110
111
# File 'lib/azure/armrest/storage_account_service.rb', line 103

def (, group = configuration.resource_group)
  validate_resource_group(group)

  url = build_url(group, , 'listKeys')
  response = rest_post(url)
  hash = JSON.parse(response.body)

  (hash)
end

#list_all(filter = {}) ⇒ Object

Same as other resource based list_all methods, but also sets the proxy on each model object.



35
36
37
38
39
40
41
# File 'lib/azure/armrest/storage_account_service.rb', line 35

def list_all(filter = {})
  super(filter).each do |m|
    m.proxy       = configuration.proxy
    m.ssl_version = configuration.ssl_version
    m.ssl_verify  = configuration.ssl_verify
  end
end

#list_all_private_images(filter = {}) ⇒ Object

Returns a list of PrivateImage objects that are available for provisioning for all storage accounts in the current subscription.

You may optionally reduce the set of storage accounts that will be scanned by providing a filter, where the keys are StorageAccount properties.

Example:

sas.list_all_private_images(:location => 'eastus', resource_group => 'some_group')


186
187
188
189
# File 'lib/azure/armrest/storage_account_service.rb', line 186

def list_all_private_images(filter = {})
  storage_accounts = list_all.select { |acct| filter.all? { |k, v| acct.public_send(k) == v } }
  get_private_images(storage_accounts)
end

#list_private_images(group = configuration.resource_group) ⇒ Object

Returns a list of PrivateImage objects that are available for provisioning for all storage accounts in the provided resource group.

The custom keys :uri and :operating_system have been added to the resulting PrivateImage objects for convenience.

Example:

sas.list_private_images(your_resource_group)


201
202
203
204
# File 'lib/azure/armrest/storage_account_service.rb', line 201

def list_private_images(group = configuration.resource_group)
  storage_accounts = list(group)
  get_private_images(storage_accounts)
end

#parse_uri(uri) ⇒ Object



247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
# File 'lib/azure/armrest/storage_account_service.rb', line 247

def parse_uri(uri)
  uri = Addressable::URI.parse(uri)
  host_components = uri.host.split('.')

  rh = {
    :scheme        => uri.scheme,
    :account_name  => host_components[0],
    :service_name  => host_components[1],
    :resource_path => uri.path
  }

  # TODO: support other service types.
  return rh unless rh[:service_name] == "blob"

  blob_components = uri.path.split('/', 3)
  if blob_components[2]
    rh[:container] = blob_components[1]
    rh[:blob]      = blob_components[2]
  else
    rh[:container] = '$root'
    rh[:blob]      = blob_components[1]
  end

  return rh unless uri.query && uri.query.start_with?("snapshot=")
  rh[:snapshot] = uri.query.split('=', 2)[1]
  rh
end

#regenerate_account_key_objects(account_name, group = configuration.resource_group, key_name = 'key1') ⇒ Object Also known as: regenerate_storage_account_key_objects

Same as regenerate_account_keys, but returns an array of StorageAccountKey objects instead.

This method requires an api-version string of 2016-01-01 or later or an ArgumentError is raised.



159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/azure/armrest/storage_account_service.rb', line 159

def (, group = configuration.resource_group, key_name = 'key1')
  validate_resource_group(group)

  unless recent_api_version?
    raise ArgumentError, "unsupported api-version string '#{api_version}'"
  end

  options = {'keyName' => key_name}

  url = build_url(group, , 'regenerateKey')
  response = rest_post(url, options.to_json)
  JSON.parse(response.body)['keys'].map { |hash| StorageAccountKey.new(hash) }
end

#regenerate_account_keys(account_name, group = configuration.resource_group, key_name = 'key1') ⇒ Object Also known as: regenerate_storage_account_keys

Regenerates the primary or secondary access keys for the given storage account. The key_name may be either ‘key1’ or ‘key2’. If no key name is provided, then it defaults to ‘key1’.



139
140
141
142
143
144
145
146
147
148
149
# File 'lib/azure/armrest/storage_account_service.rb', line 139

def (, group = configuration.resource_group, key_name = 'key1')
  validate_resource_group(group)

  options = {'keyName' => key_name}

  url = build_url(group, , 'regenerateKey')
  response = rest_post(url, options.to_json)
  hash = JSON.parse(response.body)

  (hash)
end