azure-armrest 0.9.4 → 0.9.5
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 +7 -0
- data/lib/azure/armrest/model/storage_account.rb +1 -1
- data/lib/azure/armrest/storage/managed_disk.rb +43 -0
- data/lib/azure/armrest/storage/managed_storage_helper.rb +56 -38
- data/lib/azure/armrest/storage_account_service.rb +1 -1
- data/lib/azure/armrest/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c36786918df641ad7cc61b96471a4fba6828c86af36751f3be841e2879111f1c
|
4
|
+
data.tar.gz: 28a4135e681858eeed8876c9e450faadc6f9d8b9a1eab97e16f1eee7d582fba6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fe855b4a36f5494538df99895e5022a0bca82ec42f3dbf06b906da516ba07bad27782aa986e6a545e151927c6f30933356c15e533e8b8954f31230b139a091b
|
7
|
+
data.tar.gz: a99277df03074b8169cf43c486b02f282c49888ec636a3ecb984dde9c21be6ed39a615b57d5ffc0ba1ff55dd189143d3e1340279e19f4a93982c61986c0f23b0
|
data/CHANGES
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
= 0.9.5 - 22-Jan-2018
|
2
|
+
* Fixed a bug in the exception handler for the StorageAccount#all_blobs
|
3
|
+
method and the StorageAccountService#get_private_images method.
|
4
|
+
* Added the Azure::Armrest::Storage::ManagedStorageHelper::ManagedDisk
|
5
|
+
class. This should now be the preferred approach for getting raw
|
6
|
+
blob information, as it is much more efficient.
|
7
|
+
|
1
8
|
= 0.9.4 - 29-Nov-2017
|
2
9
|
* Fixed the VirtualMachineService#delete_associated_resources to handle VM's
|
3
10
|
backed by managed storage, as well as VM's with a private IP.
|
@@ -643,7 +643,7 @@ module Azure
|
|
643
643
|
begin
|
644
644
|
mutex.synchronize { array.concat(blobs(container.name_from_hash, key, options)) }
|
645
645
|
rescue Errno::ECONNREFUSED, Azure::Armrest::TimeoutException => err
|
646
|
-
msg = "Unable to gather blob information for #{container.
|
646
|
+
msg = "Unable to gather blob information for #{container.name_from_hash}: #{err}"
|
647
647
|
Azure::Armrest::Configuration.log.try(:log, Logger::WARN, msg)
|
648
648
|
next
|
649
649
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# Azure namespace
|
2
|
+
module Azure
|
3
|
+
# Armrest namespace
|
4
|
+
module Armrest
|
5
|
+
# Storage namespace
|
6
|
+
module Storage
|
7
|
+
# Base class for managing managed disks.
|
8
|
+
module ManagedStorageHelper
|
9
|
+
class ManagedDisk
|
10
|
+
def initialize(storage_service, disk_name, resource_group, options)
|
11
|
+
@storage_service = storage_service
|
12
|
+
@disk_name = disk_name
|
13
|
+
@resource_group = resource_group
|
14
|
+
@sas_url = storage_service.access_token(disk_name, resource_group, options)
|
15
|
+
end
|
16
|
+
|
17
|
+
def read(options = {})
|
18
|
+
retries = 0
|
19
|
+
begin
|
20
|
+
@storage_service.read(@sas_url, options)
|
21
|
+
rescue Azure::Armrest::ForbiddenException => err
|
22
|
+
raise err if retries.positive?
|
23
|
+
log('warn', "ManagedDisk.read: #{err} - getting new SAS URL")
|
24
|
+
begin
|
25
|
+
close
|
26
|
+
rescue => err
|
27
|
+
log('debug', "ManagedDisk.read: #{err} received on close ignored.")
|
28
|
+
end
|
29
|
+
@sas_url = @storage_service.access_token(@disk_name, @resource_group, options)
|
30
|
+
retries += 1
|
31
|
+
retry
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def close
|
36
|
+
@storage_service.close(@disk_name, @resource_group)
|
37
|
+
@sas_url = nil
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
module Azure::Armrest::Storage::ManagedStorageHelper
|
2
|
+
require_relative 'managed_disk'
|
2
3
|
# Get the raw blob information for a managed disk. This is similar to
|
3
4
|
# the StorageAccount#get_blob_raw method, but applies only to a managed
|
4
5
|
# disk or its snapshot, whereas that method applies only to an individual storage
|
@@ -49,37 +50,12 @@ module Azure::Armrest::Storage::ManagedStorageHelper
|
|
49
50
|
# p data.headers
|
50
51
|
# File.open('vm.vhd', 'a'){ |fh| fh.write(data.body) }
|
51
52
|
#
|
52
|
-
def
|
53
|
-
|
54
|
-
|
55
|
-
post_options = {
|
56
|
-
:access => 'read', # Must be 'read'
|
57
|
-
:durationInSeconds => options[:duration] || 3600 # 1 hour default
|
58
|
-
}
|
59
|
-
|
60
|
-
# This call will give us an operations URL in the headers.
|
61
|
-
begin_get_access_url = build_url(resource_group, disk_name, 'BeginGetAccess')
|
62
|
-
begin_get_access_response = rest_post(begin_get_access_url, post_options.to_json)
|
63
|
-
|
64
|
-
headers = Azure::Armrest::ResponseHeaders.new(begin_get_access_response.headers)
|
65
|
-
status = wait(headers, 120, 5)
|
66
|
-
|
67
|
-
unless status.casecmp('succeeded').zero?
|
68
|
-
msg = "Unable to obtain an operations URL for #{disk_name}/#{resource_group}"
|
69
|
-
log('debug', "#{msg}: #{begin_get_access_response.headers}")
|
70
|
-
raise Azure::Armrest::NotFoundException.new(begin_get_access_response.code, msg, begin_get_access_response.body)
|
71
|
-
end
|
72
|
-
|
73
|
-
# Get the SAS URL from the BeginGetAccess call
|
74
|
-
op_url = headers.try(:azure_asyncoperation) || headers.location
|
75
|
-
|
76
|
-
# Dig the URL + SAS token URL out of the response
|
77
|
-
response = rest_get(op_url)
|
78
|
-
|
79
|
-
body = Azure::Armrest::ResponseBody.new(response.body)
|
80
|
-
sas_url = body.properties.output.access_sas
|
53
|
+
def open(disk_name, resource_group = configuration.resource_group, options = {})
|
54
|
+
ManagedDisk.new(self, disk_name, resource_group, options)
|
55
|
+
end
|
81
56
|
|
82
|
-
|
57
|
+
def read(sas_url, options = {})
|
58
|
+
# The same restrictions that apply to the StorageAccount method also apply here.
|
83
59
|
range = options[:range] if options[:range]
|
84
60
|
range ||= options[:start_byte]..options[:end_byte] if options[:start_byte] && options[:end_byte]
|
85
61
|
range ||= options[:start_byte]..options[:start_byte] + options[:length] - 1 if options[:start_byte] && options[:length]
|
@@ -95,8 +71,8 @@ module Azure::Armrest::Storage::ManagedStorageHelper
|
|
95
71
|
|
96
72
|
# Need to make a raw call since we need to explicitly pass headers,
|
97
73
|
# but without encoding the URL or passing our configuration token.
|
98
|
-
max_retries
|
99
|
-
retries
|
74
|
+
max_retries = 5
|
75
|
+
retries = 0
|
100
76
|
|
101
77
|
begin
|
102
78
|
RestClient::Request.execute(
|
@@ -107,17 +83,59 @@ module Azure::Armrest::Storage::ManagedStorageHelper
|
|
107
83
|
:ssl_version => configuration.ssl_version,
|
108
84
|
:ssl_verify => configuration.ssl_verify
|
109
85
|
)
|
86
|
+
rescue Azure::Armrest::ForbiddenException => err
|
87
|
+
log('warn', "ManagedStorageHelper.read: #{err}")
|
88
|
+
raise err
|
110
89
|
rescue RestClient::Exception, Azure::Armrest::ForbiddenException => err
|
111
|
-
retries += 1
|
112
90
|
raise err unless retries < max_retries
|
113
|
-
log('warn', "
|
91
|
+
log('warn', "ManagedStorageHelper.read: #{err} - retry number #{retries}")
|
92
|
+
retries += 1
|
114
93
|
sleep 5
|
115
94
|
retry
|
116
95
|
end
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
96
|
+
end
|
97
|
+
|
98
|
+
def close(disk_name, resource_group)
|
99
|
+
end_url = build_url(resource_group, disk_name, 'EndGetAccess')
|
100
|
+
rest_post(end_url)
|
101
|
+
end
|
102
|
+
|
103
|
+
def get_blob_raw(disk_name, resource_group = configuration.resource_group, options = {})
|
104
|
+
managed_disk = open(disk_name, resource_group, options)
|
105
|
+
begin
|
106
|
+
managed_disk.read(options)
|
107
|
+
ensure
|
108
|
+
managed_disk.close
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def access_token(disk_name, resource_group = configuration.resource_group, options = {})
|
113
|
+
validate_resource_group(resource_group)
|
114
|
+
|
115
|
+
post_options = {
|
116
|
+
:access => 'read', # Must be 'read'
|
117
|
+
:durationInSeconds => options[:duration] || 3600 # 1 hour default
|
118
|
+
}
|
119
|
+
|
120
|
+
# This call will give us an operations URL in the headers.
|
121
|
+
begin_get_access_url = build_url(resource_group, disk_name, 'BeginGetAccess')
|
122
|
+
begin_get_access_response = rest_post(begin_get_access_url, post_options.to_json)
|
123
|
+
|
124
|
+
headers = Azure::Armrest::ResponseHeaders.new(begin_get_access_response.headers)
|
125
|
+
status = wait(headers, 120, 1)
|
126
|
+
|
127
|
+
unless status.casecmp('succeeded').zero?
|
128
|
+
msg = "Unable to obtain an operations URL for #{disk_name}/#{resource_group}"
|
129
|
+
log('debug', "#{msg}: #{begin_get_access_response.headers}")
|
130
|
+
raise Azure::Armrest::NotFoundException.new(begin_get_access_response.code, msg, begin_get_access_response.body)
|
121
131
|
end
|
132
|
+
|
133
|
+
# Get the SAS URL from the BeginGetAccess call
|
134
|
+
op_url = headers.try(:azure_asyncoperation) || headers.location
|
135
|
+
|
136
|
+
# Dig the URL + SAS token URL out of the response
|
137
|
+
response = rest_get(op_url)
|
138
|
+
body = Azure::Armrest::ResponseBody.new(response.body)
|
139
|
+
body.properties.output.access_sas
|
122
140
|
end
|
123
141
|
end
|
@@ -296,7 +296,7 @@ module Azure
|
|
296
296
|
:skip_accessors_definition => true
|
297
297
|
)
|
298
298
|
rescue Errno::ECONNREFUSED, Azure::Armrest::TimeoutException => err
|
299
|
-
msg = "Unable to collect blob properties for #{blob.
|
299
|
+
msg = "Unable to collect blob properties for #{blob.name_from_hash}/#{blob.container_from_hash}: #{err}"
|
300
300
|
log('warn', msg)
|
301
301
|
next
|
302
302
|
end
|
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.9.
|
4
|
+
version: 0.9.5
|
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:
|
14
|
+
date: 2018-01-22 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: json
|
@@ -261,6 +261,7 @@ files:
|
|
261
261
|
- lib/azure/armrest/sql/sql_server_service.rb
|
262
262
|
- lib/azure/armrest/storage/disk_service.rb
|
263
263
|
- lib/azure/armrest/storage/image_service.rb
|
264
|
+
- lib/azure/armrest/storage/managed_disk.rb
|
264
265
|
- lib/azure/armrest/storage/managed_storage_helper.rb
|
265
266
|
- lib/azure/armrest/storage/snapshot_service.rb
|
266
267
|
- lib/azure/armrest/storage_account_service.rb
|