gitlab-fog-azure-rm 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.arclint +8 -0
- data/.codeclimate.yml +17 -0
- data/.gitignore +6 -0
- data/.gitlab-ci.yml +17 -0
- data/.hound.yml +2 -0
- data/.rubocop.yml +5 -0
- data/.rubocop_todo.yml +274 -0
- data/.travis.yml +49 -0
- data/CHANGELOG.md +414 -0
- data/CONTRIBUTING.md +40 -0
- data/CONTRIBUTORS.md +12 -0
- data/Gemfile +3 -0
- data/LICENSE.md +20 -0
- data/README.md +100 -0
- data/gitlab-fog-azure-rm.gemspec +31 -0
- data/lib/fog/azurerm.rb +30 -0
- data/lib/fog/azurerm/async_response.rb +44 -0
- data/lib/fog/azurerm/config.rb +1 -0
- data/lib/fog/azurerm/constants.rb +72 -0
- data/lib/fog/azurerm/credentials.rb +40 -0
- data/lib/fog/azurerm/custom_fog_errors.rb +52 -0
- data/lib/fog/azurerm/docs/storage.md +398 -0
- data/lib/fog/azurerm/docs/structure.md +53 -0
- data/lib/fog/azurerm/models/resources/azure_resource.rb +25 -0
- data/lib/fog/azurerm/models/resources/azure_resources.rb +40 -0
- data/lib/fog/azurerm/models/resources/dependency.rb +27 -0
- data/lib/fog/azurerm/models/resources/deployment.rb +65 -0
- data/lib/fog/azurerm/models/resources/deployments.rb +30 -0
- data/lib/fog/azurerm/models/resources/provider.rb +27 -0
- data/lib/fog/azurerm/models/resources/provider_resource_type.rb +22 -0
- data/lib/fog/azurerm/models/resources/resource_group.rb +34 -0
- data/lib/fog/azurerm/models/resources/resource_groups.rb +29 -0
- data/lib/fog/azurerm/models/storage/directories.rb +75 -0
- data/lib/fog/azurerm/models/storage/directory.rb +151 -0
- data/lib/fog/azurerm/models/storage/file.rb +265 -0
- data/lib/fog/azurerm/models/storage/files.rb +183 -0
- data/lib/fog/azurerm/models/storage/kind.rb +12 -0
- data/lib/fog/azurerm/models/storage/sku_name.rb +15 -0
- data/lib/fog/azurerm/models/storage/sku_tier.rb +12 -0
- data/lib/fog/azurerm/models/storage/storage_account.rb +92 -0
- data/lib/fog/azurerm/models/storage/storage_accounts.rb +47 -0
- data/lib/fog/azurerm/requests/storage/acquire_blob_lease.rb +32 -0
- data/lib/fog/azurerm/requests/storage/acquire_container_lease.rb +32 -0
- data/lib/fog/azurerm/requests/storage/check_container_exists.rb +30 -0
- data/lib/fog/azurerm/requests/storage/commit_blob_blocks.rb +30 -0
- data/lib/fog/azurerm/requests/storage/compare_container_blobs.rb +148 -0
- data/lib/fog/azurerm/requests/storage/copy_blob.rb +30 -0
- data/lib/fog/azurerm/requests/storage/copy_blob_from_uri.rb +30 -0
- data/lib/fog/azurerm/requests/storage/copy_object.rb +20 -0
- data/lib/fog/azurerm/requests/storage/create_block_blob.rb +108 -0
- data/lib/fog/azurerm/requests/storage/create_container.rb +40 -0
- data/lib/fog/azurerm/requests/storage/create_disk.rb +62 -0
- data/lib/fog/azurerm/requests/storage/create_page_blob.rb +31 -0
- data/lib/fog/azurerm/requests/storage/delete_blob.rb +32 -0
- data/lib/fog/azurerm/requests/storage/delete_blob_https_url.rb +39 -0
- data/lib/fog/azurerm/requests/storage/delete_container.rb +31 -0
- data/lib/fog/azurerm/requests/storage/delete_disk.rb +36 -0
- data/lib/fog/azurerm/requests/storage/delete_object_url.rb +30 -0
- data/lib/fog/azurerm/requests/storage/get_blob.rb +163 -0
- data/lib/fog/azurerm/requests/storage/get_blob_http_url.rb +39 -0
- data/lib/fog/azurerm/requests/storage/get_blob_https_url.rb +39 -0
- data/lib/fog/azurerm/requests/storage/get_blob_properties.rb +55 -0
- data/lib/fog/azurerm/requests/storage/get_blob_url.rb +28 -0
- data/lib/fog/azurerm/requests/storage/get_container_acl.rb +30 -0
- data/lib/fog/azurerm/requests/storage/get_container_properties.rb +41 -0
- data/lib/fog/azurerm/requests/storage/get_container_url.rb +34 -0
- data/lib/fog/azurerm/requests/storage/get_object_url.rb +21 -0
- data/lib/fog/azurerm/requests/storage/list_blobs.rb +168 -0
- data/lib/fog/azurerm/requests/storage/list_containers.rb +73 -0
- data/lib/fog/azurerm/requests/storage/multipart_save_block_blob.rb +110 -0
- data/lib/fog/azurerm/requests/storage/put_blob_block.rb +30 -0
- data/lib/fog/azurerm/requests/storage/put_blob_https_url.rb +39 -0
- data/lib/fog/azurerm/requests/storage/put_blob_metadata.rb +31 -0
- data/lib/fog/azurerm/requests/storage/put_blob_pages.rb +30 -0
- data/lib/fog/azurerm/requests/storage/put_blob_properties.rb +31 -0
- data/lib/fog/azurerm/requests/storage/put_container_acl.rb +31 -0
- data/lib/fog/azurerm/requests/storage/put_container_metadata.rb +31 -0
- data/lib/fog/azurerm/requests/storage/put_object_url.rb +30 -0
- data/lib/fog/azurerm/requests/storage/release_blob_lease.rb +30 -0
- data/lib/fog/azurerm/requests/storage/release_container_lease.rb +30 -0
- data/lib/fog/azurerm/requests/storage/save_page_blob.rb +111 -0
- data/lib/fog/azurerm/requests/storage/wait_blob_copy_operation_to_finish.rb +56 -0
- data/lib/fog/azurerm/storage.rb +126 -0
- data/lib/fog/azurerm/utilities/general.rb +186 -0
- data/lib/fog/azurerm/utilities/logger_messages.yml +19 -0
- data/lib/fog/azurerm/version.rb +5 -0
- data/rake-script.sh +10 -0
- data/rakefile +29 -0
- data/test/api_stub.rb +147 -0
- data/test/api_stub/models/storage/directory.rb +178 -0
- data/test/api_stub/models/storage/file.rb +181 -0
- data/test/api_stub/requests/storage/directory.rb +89 -0
- data/test/api_stub/requests/storage/file.rb +252 -0
- data/test/integration/README.md +14 -0
- data/test/integration/blob.rb +297 -0
- data/test/integration/container.rb +160 -0
- data/test/integration/credentials/azure.yml +5 -0
- data/test/integration/storage_account.rb +135 -0
- data/test/models/storage/test_directories.rb +74 -0
- data/test/models/storage/test_directory.rb +178 -0
- data/test/models/storage/test_file.rb +294 -0
- data/test/models/storage/test_files.rb +234 -0
- data/test/requests/storage/test_acquire_blob_lease.rb +36 -0
- data/test/requests/storage/test_acquire_container_lease.rb +36 -0
- data/test/requests/storage/test_check_container_exists.rb +18 -0
- data/test/requests/storage/test_commit_blob_blocks.rb +34 -0
- data/test/requests/storage/test_compare_container_blobs.rb +36 -0
- data/test/requests/storage/test_copy_blob.rb +39 -0
- data/test/requests/storage/test_copy_blob_from_uri.rb +36 -0
- data/test/requests/storage/test_create_block_blob.rb +80 -0
- data/test/requests/storage/test_create_container.rb +36 -0
- data/test/requests/storage/test_create_disk.rb +70 -0
- data/test/requests/storage/test_create_page_blob.rb +34 -0
- data/test/requests/storage/test_delete_blob.rb +42 -0
- data/test/requests/storage/test_delete_blob_https_url.rb +32 -0
- data/test/requests/storage/test_delete_container.rb +42 -0
- data/test/requests/storage/test_delete_disk.rb +30 -0
- data/test/requests/storage/test_get_blob.rb +141 -0
- data/test/requests/storage/test_get_blob_http_url.rb +30 -0
- data/test/requests/storage/test_get_blob_https_url.rb +32 -0
- data/test/requests/storage/test_get_blob_properties.rb +47 -0
- data/test/requests/storage/test_get_blob_url.rb +75 -0
- data/test/requests/storage/test_get_container_acl.rb +37 -0
- data/test/requests/storage/test_get_container_properties.rb +45 -0
- data/test/requests/storage/test_get_container_url.rb +33 -0
- data/test/requests/storage/test_list_blobs.rb +77 -0
- data/test/requests/storage/test_list_containers.rb +54 -0
- data/test/requests/storage/test_multipart_save_block_blob.rb +105 -0
- data/test/requests/storage/test_put_blob_block.rb +34 -0
- data/test/requests/storage/test_put_blob_https_url.rb +32 -0
- data/test/requests/storage/test_put_blob_metadata.rb +36 -0
- data/test/requests/storage/test_put_blob_pages.rb +34 -0
- data/test/requests/storage/test_put_blob_properties.rb +39 -0
- data/test/requests/storage/test_put_container_acl.rb +34 -0
- data/test/requests/storage/test_put_container_metadata.rb +36 -0
- data/test/requests/storage/test_release_blob_lease.rb +34 -0
- data/test/requests/storage/test_release_container_lease.rb +34 -0
- data/test/requests/storage/test_save_page_blob.rb +115 -0
- data/test/requests/storage/test_wait_blob_copy_operation_to_finish.rb +148 -0
- data/test/smoke_tests/compute/test_resource_group_smoke.rb +37 -0
- data/test/test_credentials.rb +63 -0
- data/test/test_helper.rb +846 -0
- metadata +352 -0
@@ -0,0 +1,14 @@
|
|
1
|
+
# Integration Tests
|
2
|
+
|
3
|
+
To run Integration Tests, first enter following information from your Azure subscription in **credentials\azure.yml** file:
|
4
|
+
|
5
|
+
- tenant_id
|
6
|
+
- client_id
|
7
|
+
- client_secret
|
8
|
+
- subscription_id
|
9
|
+
|
10
|
+
Then run **ruby file_name.rb** to run integration test for a specific service e.g. For integration tests of storage account, run:
|
11
|
+
|
12
|
+
**ruby storage_account.rb**
|
13
|
+
|
14
|
+
Also make sure the **DEBUG** flag is set in your fog environment to see proper logging.
|
@@ -0,0 +1,297 @@
|
|
1
|
+
require 'fog/azurerm'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
########################################################################################################################
|
5
|
+
###################### Services object required by all actions ######################
|
6
|
+
###################### Keep it Uncommented! ######################
|
7
|
+
########################################################################################################################
|
8
|
+
|
9
|
+
azure_credentials = YAML.load_file(File.expand_path('credentials/azure.yml', __dir__))
|
10
|
+
|
11
|
+
rs = Fog::Resources::AzureRM.new(
|
12
|
+
tenant_id: azure_credentials['tenant_id'],
|
13
|
+
client_id: azure_credentials['client_id'],
|
14
|
+
client_secret: azure_credentials['client_secret'],
|
15
|
+
subscription_id: azure_credentials['subscription_id']
|
16
|
+
)
|
17
|
+
|
18
|
+
storage = Fog::Storage::AzureRM.new(
|
19
|
+
tenant_id: azure_credentials['tenant_id'],
|
20
|
+
client_id: azure_credentials['client_id'],
|
21
|
+
client_secret: azure_credentials['client_secret'],
|
22
|
+
subscription_id: azure_credentials['subscription_id'],
|
23
|
+
environment: azure_credentials['environment']
|
24
|
+
)
|
25
|
+
|
26
|
+
########################################################################################################################
|
27
|
+
###################### Resource names #####################
|
28
|
+
########################################################################################################################
|
29
|
+
|
30
|
+
time = current_time
|
31
|
+
resource_group_name = "Blob-RG-#{time}"
|
32
|
+
storage_account_name = "sa#{time}"
|
33
|
+
container_name = "con#{time}"
|
34
|
+
test_container_name = "tcon#{time}"
|
35
|
+
|
36
|
+
########################################################################################################################
|
37
|
+
###################### Prerequisites ######################
|
38
|
+
########################################################################################################################
|
39
|
+
|
40
|
+
begin
|
41
|
+
resource_group = rs.resource_groups.create(
|
42
|
+
name: resource_group_name,
|
43
|
+
location: LOCATION
|
44
|
+
)
|
45
|
+
|
46
|
+
storage_account = storage.storage_accounts.create(
|
47
|
+
name: storage_account_name,
|
48
|
+
location: LOCATION,
|
49
|
+
resource_group: resource_group_name
|
50
|
+
)
|
51
|
+
|
52
|
+
access_key = storage_account.get_access_keys[0].value
|
53
|
+
Fog::Logger.debug access_key.inspect
|
54
|
+
storage_data = Fog::Storage.new(
|
55
|
+
provider: 'AzureRM',
|
56
|
+
azure_storage_account_name: storage_account.name,
|
57
|
+
azure_storage_access_key: access_key,
|
58
|
+
environment: azure_credentials['environment']
|
59
|
+
)
|
60
|
+
|
61
|
+
########################################################################################################################
|
62
|
+
###################### Create Container ######################
|
63
|
+
########################################################################################################################
|
64
|
+
|
65
|
+
storage_data.directories.create(
|
66
|
+
key: container_name,
|
67
|
+
public: true
|
68
|
+
)
|
69
|
+
|
70
|
+
storage_data.directories.create(
|
71
|
+
key: test_container_name,
|
72
|
+
public: false
|
73
|
+
)
|
74
|
+
|
75
|
+
########################################################################################################################
|
76
|
+
###################### Get container ######################
|
77
|
+
########################################################################################################################
|
78
|
+
|
79
|
+
container = storage_data.directories.get(container_name)
|
80
|
+
test_container = storage_data.directories.get(test_container_name)
|
81
|
+
|
82
|
+
########################################################################################################################
|
83
|
+
###################### Create a small block blob ######################
|
84
|
+
########################################################################################################################
|
85
|
+
|
86
|
+
small_blob_name = 'small_test_file.dat'
|
87
|
+
content = Array.new(1024 * 1024) { [*'0'..'9', *'a'..'z'].sample }.join
|
88
|
+
|
89
|
+
options = {
|
90
|
+
key: small_blob_name,
|
91
|
+
body: content
|
92
|
+
}
|
93
|
+
blob = container.files.create(options)
|
94
|
+
puts "Created small block blob: #{blob.key}"
|
95
|
+
|
96
|
+
########################################################################################################################
|
97
|
+
###################### Create a large block blob ######################
|
98
|
+
########################################################################################################################
|
99
|
+
|
100
|
+
large_blob_name = 'large_test_file.dat'
|
101
|
+
begin
|
102
|
+
large_blob_file_name = '/tmp/large_test_file.dat'
|
103
|
+
File.open(large_blob_file_name, 'w') do |large_file|
|
104
|
+
33.times do
|
105
|
+
large_file.puts(content)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
File.open(large_blob_file_name) do |file|
|
110
|
+
options = {
|
111
|
+
key: large_blob_name,
|
112
|
+
body: file
|
113
|
+
}
|
114
|
+
blob = container.files.create(options)
|
115
|
+
puts "Created large block blob: #{blob.key}"
|
116
|
+
end
|
117
|
+
ensure
|
118
|
+
File.delete(large_blob_file_name) if File.exist?(large_blob_file_name)
|
119
|
+
end
|
120
|
+
|
121
|
+
########################################################################################################################
|
122
|
+
###################### Create a small page blob ######################
|
123
|
+
########################################################################################################################
|
124
|
+
|
125
|
+
small_page_blob_name = 'small_test_file.vhd'
|
126
|
+
content = Array.new(1024 * 1024 + 512) { [*'0'..'9', *'a'..'z'].sample }.join
|
127
|
+
|
128
|
+
options = {
|
129
|
+
key: small_page_blob_name,
|
130
|
+
body: content,
|
131
|
+
blob_type: 'PageBlob'
|
132
|
+
}
|
133
|
+
blob = container.files.create(options)
|
134
|
+
puts "Created small page blob: #{blob.key}"
|
135
|
+
|
136
|
+
########################################################################################################################
|
137
|
+
###################### Create a large page blob ######################
|
138
|
+
########################################################################################################################
|
139
|
+
|
140
|
+
begin
|
141
|
+
large_page_blob_file_name = '/tmp/large_test_file.vhd'
|
142
|
+
large_page_blob_name = 'large_test_file.vhd'
|
143
|
+
File.open(large_page_blob_file_name, 'w') do |large_file|
|
144
|
+
content = Array.new(1024 * 1024) { [*'0'..'9', *'a'..'z'].sample }.join
|
145
|
+
33.times do
|
146
|
+
large_file.puts(content)
|
147
|
+
end
|
148
|
+
content = Array.new(512) { [*'0'..'9', *'a'..'z'].sample }.join
|
149
|
+
large_file.puts(content)
|
150
|
+
large_file.truncate(33 * 1024 * 1024 + 512)
|
151
|
+
end
|
152
|
+
|
153
|
+
File.open(large_page_blob_file_name) do |file|
|
154
|
+
options = {
|
155
|
+
key: large_page_blob_name,
|
156
|
+
body: file,
|
157
|
+
blob_type: 'PageBlob'
|
158
|
+
}
|
159
|
+
blob = container.files.create(options)
|
160
|
+
puts "Created large page blob: #{blob.key}"
|
161
|
+
end
|
162
|
+
ensure
|
163
|
+
File.delete(large_page_blob_file_name) if File.exist?(large_page_blob_file_name)
|
164
|
+
end
|
165
|
+
|
166
|
+
########################################################################################################################
|
167
|
+
###################### Copy Blob ########################
|
168
|
+
########################################################################################################################
|
169
|
+
|
170
|
+
puts "Copy blob: #{container.files.head(small_blob_name).copy(test_container_name, small_blob_name)}"
|
171
|
+
|
172
|
+
########################################################################################################################
|
173
|
+
###################### Get a public URL ######################
|
174
|
+
########################################################################################################################
|
175
|
+
|
176
|
+
blob_uri = container.files.head(large_blob_name).public_url
|
177
|
+
puts "Get blob public uri: #{blob_uri}"
|
178
|
+
|
179
|
+
########################################################################################################################
|
180
|
+
###################### Copy Blob from URI ########################
|
181
|
+
########################################################################################################################
|
182
|
+
|
183
|
+
copied_blob = test_container.files.new(key: 'small_blob_name')
|
184
|
+
puts "Copy blob from uri: #{copied_blob.copy_from_uri(blob_uri)}"
|
185
|
+
|
186
|
+
########################################################################################################################
|
187
|
+
###################### Update blob ######################
|
188
|
+
########################################################################################################################
|
189
|
+
|
190
|
+
copied_blob.content_encoding = 'utf-8'
|
191
|
+
copied_blob.metadata = { 'owner' => 'azure' }
|
192
|
+
copied_blob.save(update_body: false)
|
193
|
+
|
194
|
+
temp = test_container.files.head(small_blob_name)
|
195
|
+
puts 'Updated blob'
|
196
|
+
Fog::Logger.debug temp.content_encoding
|
197
|
+
Fog::Logger.debug temp.metadata
|
198
|
+
|
199
|
+
########################################################################################################################
|
200
|
+
###################### Compare Blob #####################
|
201
|
+
########################################################################################################################
|
202
|
+
|
203
|
+
puts "Compare blobs: #{storage_data.compare_container_blobs(container_name, test_container_name)}"
|
204
|
+
|
205
|
+
########################################################################################################################
|
206
|
+
###################### Blob Exist #####################
|
207
|
+
########################################################################################################################
|
208
|
+
|
209
|
+
puts 'Blob exist' if container.files.head(small_blob_name)
|
210
|
+
|
211
|
+
########################################################################################################################
|
212
|
+
###################### Blob Count in a Container #####################
|
213
|
+
########################################################################################################################
|
214
|
+
|
215
|
+
puts "Blob count in a container: #{container.files.all.length}"
|
216
|
+
|
217
|
+
########################################################################################################################
|
218
|
+
###################### List Blobs in a Container #####################
|
219
|
+
########################################################################################################################
|
220
|
+
|
221
|
+
puts 'List blobs in a container:'
|
222
|
+
container.files.each do |temp_file|
|
223
|
+
puts temp_file.key
|
224
|
+
end
|
225
|
+
|
226
|
+
########################################################################################################################
|
227
|
+
###################### Download a small blob ######################
|
228
|
+
########################################################################################################################
|
229
|
+
|
230
|
+
begin
|
231
|
+
downloaded_file_name = '/tmp/downloaded_' + small_blob_name
|
232
|
+
blob = container.files.get(small_blob_name)
|
233
|
+
File.open(downloaded_file_name, 'wb') do |file|
|
234
|
+
file.write(blob.body)
|
235
|
+
end
|
236
|
+
puts 'Downloaded small blob'
|
237
|
+
ensure
|
238
|
+
File.delete(downloaded_file_name) if File.exist?(downloaded_file_name)
|
239
|
+
end
|
240
|
+
|
241
|
+
########################################################################################################################
|
242
|
+
###################### Download a large blob ######################
|
243
|
+
########################################################################################################################
|
244
|
+
|
245
|
+
begin
|
246
|
+
downloaded_file_name = '/tmp/downloaded_' + large_blob_name
|
247
|
+
File.open(downloaded_file_name, 'wb') do |file|
|
248
|
+
container.files.get(large_blob_name) do |chunk, remaining_bytes, total_bytes|
|
249
|
+
Fog::Logger.debug "remaining_bytes: #{remaining_bytes}, total_bytes: #{total_bytes}"
|
250
|
+
file.write(chunk)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
puts 'Downloaded large blob'
|
254
|
+
ensure
|
255
|
+
File.delete(downloaded_file_name) if File.exist?(downloaded_file_name)
|
256
|
+
end
|
257
|
+
|
258
|
+
########################################################################################################################
|
259
|
+
###################### Get a https URL with expires ######################
|
260
|
+
########################################################################################################################
|
261
|
+
|
262
|
+
test_blob = test_container.files.head(small_blob_name)
|
263
|
+
puts "Get https URL with expires: #{test_blob.public?}, #{test_blob.url(Time.now + 3600)}"
|
264
|
+
Fog::Logger.debug test_blob.public?
|
265
|
+
Fog::Logger.debug test_blob.url(Time.now + 3600)
|
266
|
+
|
267
|
+
########################################################################################################################
|
268
|
+
###################### Get a http URL with expires ######################
|
269
|
+
########################################################################################################################
|
270
|
+
|
271
|
+
puts "Get a http URL with expires: #{test_blob.url(Time.now + 3600, scheme: 'http')}"
|
272
|
+
|
273
|
+
########################################################################################################################
|
274
|
+
###################### Lease Blob ######################
|
275
|
+
########################################################################################################################
|
276
|
+
|
277
|
+
lease_id_blob = storage_data.acquire_blob_lease(container_name, large_blob_name)
|
278
|
+
puts 'Leased blob'
|
279
|
+
|
280
|
+
########################################################################################################################
|
281
|
+
###################### Release Leased Blob ######################
|
282
|
+
########################################################################################################################
|
283
|
+
|
284
|
+
storage_data.release_blob_lease(container_name, large_blob_name, lease_id_blob)
|
285
|
+
puts 'Release Leased Blob'
|
286
|
+
|
287
|
+
########################################################################################################################
|
288
|
+
###################### Delete Blob ######################
|
289
|
+
########################################################################################################################
|
290
|
+
|
291
|
+
blob = container.files.head(large_blob_name)
|
292
|
+
puts "Deleted blob: #{blob.destroy}"
|
293
|
+
rescue => ex
|
294
|
+
puts "Integration Test for blob is failing: #{ex.inspect}\n#{ex.backtrace.join("\n")}"
|
295
|
+
ensure
|
296
|
+
resource_group.destroy unless resource_group.nil?
|
297
|
+
end
|
@@ -0,0 +1,160 @@
|
|
1
|
+
require 'fog/azurerm'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
########################################################################################################################
|
5
|
+
###################### Services object required by all actions ######################
|
6
|
+
###################### Keep it Uncommented! ######################
|
7
|
+
########################################################################################################################
|
8
|
+
|
9
|
+
azure_credentials = YAML.load_file(File.expand_path('credentials/azure.yml', __dir__))
|
10
|
+
|
11
|
+
rs = Fog::Resources::AzureRM.new(
|
12
|
+
tenant_id: azure_credentials['tenant_id'],
|
13
|
+
client_id: azure_credentials['client_id'],
|
14
|
+
client_secret: azure_credentials['client_secret'],
|
15
|
+
subscription_id: azure_credentials['subscription_id']
|
16
|
+
)
|
17
|
+
|
18
|
+
storage = Fog::Storage::AzureRM.new(
|
19
|
+
tenant_id: azure_credentials['tenant_id'],
|
20
|
+
client_id: azure_credentials['client_id'],
|
21
|
+
client_secret: azure_credentials['client_secret'],
|
22
|
+
subscription_id: azure_credentials['subscription_id'],
|
23
|
+
environment: azure_credentials['environment']
|
24
|
+
)
|
25
|
+
|
26
|
+
########################################################################################################################
|
27
|
+
###################### Resource names #####################
|
28
|
+
########################################################################################################################
|
29
|
+
|
30
|
+
time = current_time
|
31
|
+
resource_group_name = "Blob-RG-#{time}"
|
32
|
+
storage_account_name = "sa#{time}"
|
33
|
+
container_name = "con#{time}"
|
34
|
+
test_container_name = "tcon#{time}"
|
35
|
+
|
36
|
+
########################################################################################################################
|
37
|
+
###################### Prerequisites ######################
|
38
|
+
########################################################################################################################
|
39
|
+
|
40
|
+
begin
|
41
|
+
resource_group = rs.resource_groups.create(
|
42
|
+
name: resource_group_name,
|
43
|
+
location: LOCATION
|
44
|
+
)
|
45
|
+
|
46
|
+
storage_account_name = "sa#{current_time}"
|
47
|
+
|
48
|
+
storage_account = storage.storage_accounts.create(
|
49
|
+
name: storage_account_name,
|
50
|
+
location: LOCATION,
|
51
|
+
resource_group: resource_group_name
|
52
|
+
)
|
53
|
+
|
54
|
+
keys = storage_account.get_access_keys
|
55
|
+
access_key = keys.first.value
|
56
|
+
|
57
|
+
storage_data = Fog::Storage::AzureRM.new(
|
58
|
+
azure_storage_account_name: storage_account.name,
|
59
|
+
azure_storage_access_key: access_key,
|
60
|
+
environment: azure_credentials['environment']
|
61
|
+
)
|
62
|
+
|
63
|
+
########################################################################################################################
|
64
|
+
###################### Check Container Exists ######################
|
65
|
+
########################################################################################################################
|
66
|
+
|
67
|
+
flag = storage_data.directories.check_container_exists(container_name)
|
68
|
+
puts "Container doesn't exist." unless flag
|
69
|
+
|
70
|
+
########################################################################################################################
|
71
|
+
###################### Create Container ######################
|
72
|
+
########################################################################################################################
|
73
|
+
|
74
|
+
container = storage_data.directories.create(
|
75
|
+
key: container_name
|
76
|
+
)
|
77
|
+
puts "Created container: #{container.key}"
|
78
|
+
|
79
|
+
storage_data.directories.create(
|
80
|
+
key: test_container_name,
|
81
|
+
public: true
|
82
|
+
)
|
83
|
+
puts "Created second container: #{container.key}"
|
84
|
+
|
85
|
+
########################################################################################################################
|
86
|
+
###################### List containers ######################
|
87
|
+
########################################################################################################################
|
88
|
+
|
89
|
+
containers = storage_data.directories.all
|
90
|
+
puts 'List containers:'
|
91
|
+
containers.each do |a_container|
|
92
|
+
puts a_container.key
|
93
|
+
end
|
94
|
+
|
95
|
+
########################################################################################################################
|
96
|
+
###################### Get container acl ######################
|
97
|
+
########################################################################################################################
|
98
|
+
|
99
|
+
container = storage_data.directories.get(container_name, max_results: 1)
|
100
|
+
puts "Get container: #{container.key}"
|
101
|
+
puts "Get container access control list: #{container.acl}"
|
102
|
+
|
103
|
+
########################################################################################################################
|
104
|
+
###################### Update Container ######################
|
105
|
+
########################################################################################################################
|
106
|
+
|
107
|
+
container.acl = 'container'
|
108
|
+
container.metadata = { 'owner' => 'azure' }
|
109
|
+
container.save(is_create: false)
|
110
|
+
puts 'Updated container'
|
111
|
+
|
112
|
+
########################################################################################################################
|
113
|
+
###################### Get container acl ######################
|
114
|
+
########################################################################################################################
|
115
|
+
|
116
|
+
puts "Get updated container access control list: #{container.acl}"
|
117
|
+
|
118
|
+
########################################################################################################################
|
119
|
+
###################### Get container metadata ######################
|
120
|
+
########################################################################################################################
|
121
|
+
|
122
|
+
puts "Get container metadata: #{container.metadata}"
|
123
|
+
|
124
|
+
########################################################################################################################
|
125
|
+
###################### Get container public https url ######################
|
126
|
+
########################################################################################################################
|
127
|
+
|
128
|
+
puts "Get container public url: #{container.public_url}"
|
129
|
+
|
130
|
+
########################################################################################################################
|
131
|
+
###################### Get container public http url ######################
|
132
|
+
########################################################################################################################
|
133
|
+
|
134
|
+
puts "Get container public url having scheme http: #{container.public_url(scheme: 'http')}"
|
135
|
+
|
136
|
+
########################################################################################################################
|
137
|
+
###################### Lease Container ######################
|
138
|
+
########################################################################################################################
|
139
|
+
|
140
|
+
lease_id_container = storage_data.acquire_container_lease(container_name)
|
141
|
+
Fog::Logger.debug lease_id_container
|
142
|
+
puts 'Leased Container'
|
143
|
+
|
144
|
+
########################################################################################################################
|
145
|
+
###################### Release Leased Container ######################
|
146
|
+
########################################################################################################################
|
147
|
+
|
148
|
+
storage_data.release_container_lease(container_name, lease_id_container)
|
149
|
+
puts 'Release Leased Container'
|
150
|
+
|
151
|
+
########################################################################################################################
|
152
|
+
###################### Deleted Container ######################
|
153
|
+
########################################################################################################################
|
154
|
+
|
155
|
+
puts "Deleted container: #{container.destroy}"
|
156
|
+
rescue => ex
|
157
|
+
puts "Integration Test for container is failing: #{ex.inspect}\n#{ex.backtrace.join("\n")}"
|
158
|
+
ensure
|
159
|
+
resource_group.destroy unless resource_group.nil?
|
160
|
+
end
|