gitlab-fog-azure-rm 1.3.0 → 1.5.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fc0e6fc125b778bb49c22a6fbfeb0ab779d99bfffaca5496df1834d2a0f69a86
4
- data.tar.gz: 5f9ce8aa7d939260edc6047636e6fdfbebaeae6cd7fd611921aa7cc2a3c36056
3
+ metadata.gz: bce981ede9f77d01f6cfabd05f9b7bb77aff52a15ade7ac87ed441880178858f
4
+ data.tar.gz: e3b730ce6e3aa6ea507ab5352dbb0e3e56416abf5624fa763a4932e858efe649
5
5
  SHA512:
6
- metadata.gz: 1578489ca552ed032d47387738f1b8807f467bac75b1d2446fe0ea547ed8b96b81d44c9af7c3134d50da7bb86158e757f8bb18ce4e3e998a9badfb5ce76a55e4
7
- data.tar.gz: ff5993b7140d6e3dd0de19d776dd2666980f65a1cb0baeee5abc28ed98eb29a71386108763530f591cb768116493994fbdec1bd877a2c8939c31c6cb85535385
6
+ metadata.gz: a9d42e20bed0c4b5c53757098ac751555c126dec547b19c133b7e130bba1c20ca1ca2b3cf1d4976391b0a06a66daaa268dba9a0b38eeb7a6258a187c78aa66e2
7
+ data.tar.gz: 88480526e3e2f0565fc3c24009a09bf482c721c9f14dacd39a5d2ecfdbfe909498a798ebbff8f7745df348c3f251fc69c20a1bcddff0090cd5e9becbe2a15378
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  ## Unreleased
2
2
 
3
+ ## 1.5.0
4
+
5
+ - Add delete_object request method !32
6
+
7
+ ## 1.4.0
8
+
9
+ - Move all top-level constants and functions to Fog::AzureRM !30
10
+
3
11
  ## 1.3.0
4
12
 
5
13
  - Fix Ruby 3.0 compatibility !27
@@ -1 +1,5 @@
1
- LOCATION = 'eastus'.freeze
1
+ module Fog
2
+ module AzureRM
3
+ LOCATION = 'eastus'.freeze
4
+ end
5
+ end
@@ -1,72 +1,76 @@
1
- AZURE_RESOURCE = 'https://management.azure.com'.freeze
2
- DEFAULT_ADDRESS_PREFIXES = ['10.2.0.0/16'].freeze
3
- SUBNET = 'Subnet'.freeze
4
- PUBLIC_IP = 'Public-IP-Address'.freeze
5
- NETWORK_SECURITY_GROUP = 'Network-Security-Group'.freeze
6
- STANDARD_STORAGE = 'Standard'.freeze
7
- PREMIUM_STORAGE = 'Premium'.freeze
8
- ALLOWED_STANDARD_REPLICATION = %w[LRS ZRS GRS RAGRS].freeze
9
- API_VERSION = '2016-06-01'.freeze
10
- FAULT_DOMAIN_COUNT = 2
11
- UPDATE_DOMAIN_COUNT = 5
12
- WINDOWS = 'windows'.freeze
13
- VPN = 'Vpn'.freeze
14
- MICROSOFT_PEERING = 'MicrosoftPeering'.freeze
15
- RESOURCE_GROUP_NAME = 4
16
- RESOURCE_PROVIDER_NAMESPACE = 6
17
- RESOURCE_TYPE = 7
18
- RESOURCE_NAME = 8
19
- ENDPOINT_PREFIX = 'Microsoft.Network/trafficManagerProfiles'.freeze
20
- DISK_PREFIX = 'Microsoft.Compute/disks'.freeze
21
- SNAPSHOT_PREFIX = 'Microsoft.Compute/snapshots'.freeze
22
- AZURE_ENDPOINTS = 'azureEndpoints'.freeze
23
- EXTERNAL_ENDPOINTS = 'externalEndpoints'.freeze
24
- NESTED_ENDPOINTS = 'nestedEndpoints'.freeze
25
- GLOBAL = 'global'.freeze
26
- UPLOAD_BLOB_WORKER_THREAD_COUNT = 8
27
- VM_NAME_POSITION = 8
28
- PRIMARY_NIC_INDEX = 0
1
+ module Fog
2
+ module AzureRM
3
+ AZURE_RESOURCE = 'https://management.azure.com'.freeze
4
+ DEFAULT_ADDRESS_PREFIXES = ['10.2.0.0/16'].freeze
5
+ SUBNET = 'Subnet'.freeze
6
+ PUBLIC_IP = 'Public-IP-Address'.freeze
7
+ NETWORK_SECURITY_GROUP = 'Network-Security-Group'.freeze
8
+ STANDARD_STORAGE = 'Standard'.freeze
9
+ PREMIUM_STORAGE = 'Premium'.freeze
10
+ ALLOWED_STANDARD_REPLICATION = %w[LRS ZRS GRS RAGRS].freeze
11
+ API_VERSION = '2016-06-01'.freeze
12
+ FAULT_DOMAIN_COUNT = 2
13
+ UPDATE_DOMAIN_COUNT = 5
14
+ WINDOWS = 'windows'.freeze
15
+ VPN = 'Vpn'.freeze
16
+ MICROSOFT_PEERING = 'MicrosoftPeering'.freeze
17
+ RESOURCE_GROUP_NAME = 4
18
+ RESOURCE_PROVIDER_NAMESPACE = 6
19
+ RESOURCE_TYPE = 7
20
+ RESOURCE_NAME = 8
21
+ ENDPOINT_PREFIX = 'Microsoft.Network/trafficManagerProfiles'.freeze
22
+ DISK_PREFIX = 'Microsoft.Compute/disks'.freeze
23
+ SNAPSHOT_PREFIX = 'Microsoft.Compute/snapshots'.freeze
24
+ AZURE_ENDPOINTS = 'azureEndpoints'.freeze
25
+ EXTERNAL_ENDPOINTS = 'externalEndpoints'.freeze
26
+ NESTED_ENDPOINTS = 'nestedEndpoints'.freeze
27
+ GLOBAL = 'global'.freeze
28
+ UPLOAD_BLOB_WORKER_THREAD_COUNT = 8
29
+ VM_NAME_POSITION = 8
30
+ PRIMARY_NIC_INDEX = 0
29
31
 
30
- ENVIRONMENT_AZURE_CLOUD = 'AzureCloud'.freeze
31
- ENVIRONMENT_AZURE_CHINA_CLOUD = 'AzureChinaCloud'.freeze
32
- ENVIRONMENT_AZURE_US_GOVERNMENT = 'AzureUSGovernment'.freeze
33
- ENVIRONMENT_AZURE_GERMAN_CLOUD = 'AzureGermanCloud'.freeze
32
+ ENVIRONMENT_AZURE_CLOUD = 'AzureCloud'.freeze
33
+ ENVIRONMENT_AZURE_CHINA_CLOUD = 'AzureChinaCloud'.freeze
34
+ ENVIRONMENT_AZURE_US_GOVERNMENT = 'AzureUSGovernment'.freeze
35
+ ENVIRONMENT_AZURE_GERMAN_CLOUD = 'AzureGermanCloud'.freeze
34
36
 
35
- # MsRestAzure::AzureOperationError class Error Codes
36
- ERROR_CODE_RESOURCE_NOT_FOUND = 'ResourceNotFound'.freeze
37
- ERROR_CODE_NOT_FOUND = 'NotFound'.freeze
38
- ERROR_CODE_RESOURCE_GROUP_NOT_FOUND = 'ResourceGroupNotFound'.freeze
39
- ERROR_CODE_PARENT_RESOURCE_NOT_FOUND = 'ParentResourceNotFound'.freeze
37
+ # MsRestAzure::AzureOperationError class Error Codes
38
+ ERROR_CODE_RESOURCE_NOT_FOUND = 'ResourceNotFound'.freeze
39
+ ERROR_CODE_NOT_FOUND = 'NotFound'.freeze
40
+ ERROR_CODE_RESOURCE_GROUP_NOT_FOUND = 'ResourceGroupNotFound'.freeze
41
+ ERROR_CODE_PARENT_RESOURCE_NOT_FOUND = 'ParentResourceNotFound'.freeze
40
42
 
41
- PLATFORM_LINUX = 'linux'.freeze
43
+ PLATFORM_LINUX = 'linux'.freeze
42
44
 
43
- # State of the copy operation
44
- COPY_STATUS =
45
- {
46
- # The copy completed successfully.
47
- SUCCESS: 'success',
48
- # The copy is in progress
49
- PENDING: 'pending'
50
- }.freeze
45
+ # State of the copy operation
46
+ COPY_STATUS =
47
+ {
48
+ # The copy completed successfully.
49
+ SUCCESS: 'success',
50
+ # The copy is in progress
51
+ PENDING: 'pending'
52
+ }.freeze
51
53
 
52
- # https://msdn.microsoft.com/en-us/library/azure/dd179451.aspx
53
- # The maximum size for a block blob created via Put Blob is 64 MB. But for better performance, this size should be 32 MB.
54
- # If your blob is larger than 32 MB, you must upload it as a set of blocks.
55
- SINGLE_BLOB_PUT_THRESHOLD = 32 * 1024 * 1024
54
+ # https://msdn.microsoft.com/en-us/library/azure/dd179451.aspx
55
+ # The maximum size for a block blob created via Put Blob is 64 MB. But for better performance, this size should be 32 MB.
56
+ # If your blob is larger than 32 MB, you must upload it as a set of blocks.
57
+ SINGLE_BLOB_PUT_THRESHOLD = 32 * 1024 * 1024
56
58
 
57
- # Block blob: https://msdn.microsoft.com/en-us/library/azure/dd135726.aspx
58
- # Page blob: https://msdn.microsoft.com/en-us/library/azure/ee691975.aspx
59
- # Each block/page can be a different size, up to a maximum of 4 MB
60
- MAXIMUM_CHUNK_SIZE = 4 * 1024 * 1024
59
+ # Block blob: https://msdn.microsoft.com/en-us/library/azure/dd135726.aspx
60
+ # Page blob: https://msdn.microsoft.com/en-us/library/azure/ee691975.aspx
61
+ # Each block/page can be a different size, up to a maximum of 4 MB
62
+ MAXIMUM_CHUNK_SIZE = 4 * 1024 * 1024
61
63
 
62
- # The hash value of 4MB empty content
63
- HASH_OF_4MB_EMPTY_CONTENT = 'b5cfa9d6c8febd618f91ac2843d50a1c'.freeze
64
- REST_CLIENT_API_VERSION = %w[2014-04-01-preview 2016-05-01].freeze
65
- AS_SKU_CLASSIC = 'Classic'.freeze
66
- AS_SKU_ALIGNED = 'Aligned'.freeze
64
+ # The hash value of 4MB empty content
65
+ HASH_OF_4MB_EMPTY_CONTENT = 'b5cfa9d6c8febd618f91ac2843d50a1c'.freeze
66
+ REST_CLIENT_API_VERSION = %w[2014-04-01-preview 2016-05-01].freeze
67
+ AS_SKU_CLASSIC = 'Classic'.freeze
68
+ AS_SKU_ALIGNED = 'Aligned'.freeze
67
69
 
68
- # The tag key and tag value for creating a temporary storage account for generalized image
69
- TEMPORARY_STORAGE_ACCOUNT_TAG_KEY = 'generalized_image'.freeze
70
- TEMPORARY_STORAGE_ACCOUNT_TAG_VALUE = 'delete'.freeze
70
+ # The tag key and tag value for creating a temporary storage account for generalized image
71
+ TEMPORARY_STORAGE_ACCOUNT_TAG_KEY = 'generalized_image'.freeze
72
+ TEMPORARY_STORAGE_ACCOUNT_TAG_VALUE = 'delete'.freeze
71
73
 
72
- HTTP_NOT_FOUND = 404
74
+ HTTP_NOT_FOUND = 404
75
+ end
76
+ end
@@ -3,6 +3,8 @@ module Fog
3
3
  class AzureRM
4
4
  # This class is giving implementation of listing containers.
5
5
  class Directories < Fog::Collection
6
+ include Fog::AzureRM::Utilities::General
7
+
6
8
  model Fog::Storage::AzureRM::Directory
7
9
 
8
10
  # List all directories(containers) in the storage account.
@@ -5,6 +5,8 @@ module Fog
5
5
  class Directory < Fog::Model
6
6
  VALID_ACLS = ['container', 'blob', 'unknown', nil].freeze
7
7
 
8
+ include Fog::AzureRM::Utilities::General
9
+
8
10
  attr_writer :acl
9
11
 
10
12
  identity :key, aliases: %w(Name name)
@@ -6,6 +6,8 @@ module Fog
6
6
  # This class is giving implementation of create/save and
7
7
  # delete/destroy for Blob.
8
8
  class File < Fog::Model
9
+ include Fog::AzureRM::Utilities::General
10
+
9
11
  identity :key, aliases: %w(Name name Key)
10
12
 
11
13
  attr_writer :body
@@ -3,6 +3,8 @@ module Fog
3
3
  class AzureRM
4
4
  # This class is giving implementation of listing blobs.
5
5
  class Files < Fog::Collection
6
+ include Fog::AzureRM::Utilities::General
7
+
6
8
  attribute :directory
7
9
  attribute :delimiter, aliases: 'Delimiter'
8
10
  attribute :marker, aliases: 'Marker'
@@ -0,0 +1,20 @@
1
+ module Fog
2
+ module Storage
3
+ class AzureRM
4
+ # This class provides the actual implementation for service calls.
5
+ class Real
6
+ def delete_object(container_name, blob_name)
7
+ delete_blob(container_name, blob_name)
8
+ end
9
+ end
10
+
11
+ # This class provides the mock implementation for unit tests.
12
+ class Mock
13
+ def delete_object(*)
14
+ Fog::Logger.debug 'Blob deleted successfully.'
15
+ true
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -56,7 +56,7 @@ module Fog
56
56
 
57
57
  def save_page_blob(container_name, blob_name, body, options)
58
58
  threads_num = options.delete(:worker_thread_num)
59
- threads_num = UPLOAD_BLOB_WORKER_THREAD_COUNT if threads_num.nil? || !threads_num.is_a?(Integer) || threads_num < 1
59
+ threads_num = Fog::AzureRM::UPLOAD_BLOB_WORKER_THREAD_COUNT if threads_num.nil? || !threads_num.is_a?(Integer) || threads_num < 1
60
60
 
61
61
  begin
62
62
  blob_size = Fog::Storage.get_body_size(body)
@@ -74,9 +74,9 @@ module Fog
74
74
  threads_num.times do |id|
75
75
  thread = Thread.new do
76
76
  Fog::Logger.debug "Created upload thread #{id}."
77
- while (chunk = iostream.read(MAXIMUM_CHUNK_SIZE))
77
+ while (chunk = iostream.read(Fog::AzureRM::MAXIMUM_CHUNK_SIZE))
78
78
  Fog::Logger.debug "Upload thread #{id} is uploading #{chunk.id}, start_range: #{chunk.start_range}, size: #{chunk.data.size}."
79
- put_blob_pages(container_name, blob_name, chunk.start_range, chunk.end_range, chunk.data, options) if Digest::MD5.hexdigest(chunk.data) != HASH_OF_4MB_EMPTY_CONTENT
79
+ put_blob_pages(container_name, blob_name, chunk.start_range, chunk.end_range, chunk.data, options) if Digest::MD5.hexdigest(chunk.data) != Fog::AzureRM::HASH_OF_4MB_EMPTY_CONTENT
80
80
  end
81
81
  Fog::Logger.debug "Upload thread #{id} finished."
82
82
  end
@@ -6,7 +6,7 @@ module Fog
6
6
  def wait_blob_copy_operation_to_finish(container_name, blob_name, copy_id, copy_status, timeout = nil)
7
7
  begin
8
8
  start_time = Time.new
9
- while copy_status == COPY_STATUS[:PENDING]
9
+ while copy_status == Fog::AzureRM::COPY_STATUS[:PENDING]
10
10
  blob = get_blob_properties(container_name, blob_name)
11
11
  blob_props = blob.properties
12
12
  if !copy_id.nil? && blob_props[:copy_id] != copy_id
@@ -15,7 +15,7 @@ module Fog
15
15
 
16
16
  copy_status_description = blob_props[:copy_status_description]
17
17
  copy_status = blob_props[:copy_status]
18
- break if copy_status != COPY_STATUS[:PENDING]
18
+ break if copy_status != Fog::AzureRM::COPY_STATUS[:PENDING]
19
19
 
20
20
  elapse_time = Time.new - start_time
21
21
  raise Timeout::Error.new("The copy operation cannot be finished in #{timeout} seconds") if !timeout.nil? && elapse_time >= timeout
@@ -27,7 +27,7 @@ module Fog
27
27
  sleep(interval)
28
28
  end
29
29
 
30
- if copy_status != COPY_STATUS[:SUCCESS]
30
+ if copy_status != Fog::AzureRM::COPY_STATUS[:SUCCESS]
31
31
  raise "Failed to copy to #{container_name}/#{blob_name}: \n\tcopy status: #{copy_status}\n\tcopy description: #{copy_status_description}"
32
32
  end
33
33
  rescue
@@ -40,7 +40,6 @@ module Fog
40
40
  request :compare_container_blobs
41
41
  request :acquire_blob_lease
42
42
  request :release_blob_lease
43
- request :delete_blob
44
43
  request :get_blob
45
44
  request :get_blob_url
46
45
  request :get_object_url
@@ -50,8 +49,10 @@ module Fog
50
49
  request :put_blob_block
51
50
  request :put_blob_https_url
52
51
  request :put_object_url
52
+ request :delete_blob
53
53
  request :delete_blob_https_url
54
54
  request :delete_object_url
55
+ request :delete_object
55
56
  request :commit_blob_blocks
56
57
  request :create_page_blob
57
58
  request :put_blob_pages
@@ -79,6 +80,8 @@ module Fog
79
80
 
80
81
  # This class provides the actual implementation for service calls.
81
82
  class Real
83
+ include Fog::AzureRM::Utilities::General
84
+
82
85
  def initialize(options)
83
86
  begin
84
87
  require 'azure/storage/common'
@@ -1,195 +1,204 @@
1
1
  require File.expand_path('../../custom_fog_errors.rb', __FILE__)
2
2
 
3
- # Pick Resource Group name from Azure Resource Id(String)
4
- def get_resource_group_from_id(id)
5
- id.split('/')[4]
6
- end
7
-
8
- # Pick Virtual Network name from Subnet Resource Id(String)
9
- def get_virtual_network_from_id(subnet_id)
10
- subnet_id.split('/')[8]
11
- end
3
+ module Fog
4
+ module AzureRM
5
+ module Utilities
6
+ # General utilities mixin.
7
+ module General # rubocop:disable Metrics/ModuleLength
8
+ # Pick Resource Group name from Azure Resource Id(String)
9
+ def get_resource_group_from_id(id)
10
+ id.split('/')[4]
11
+ end
12
12
 
13
- # Pick Virtual Machine name from Virtual Machine Extension Id(String)
14
- def get_virtual_machine_from_id(vme_id)
15
- vme_id.split('/')[VM_NAME_POSITION]
16
- end
13
+ # Pick Virtual Network name from Subnet Resource Id(String)
14
+ def get_virtual_network_from_id(subnet_id)
15
+ subnet_id.split('/')[8]
16
+ end
17
17
 
18
- # Extract Endpoint type from (String)
19
- def get_end_point_type(endpoint_type)
20
- endpoint_type.split('/')[2]
21
- end
18
+ # Pick Virtual Machine name from Virtual Machine Extension Id(String)
19
+ def get_virtual_machine_from_id(vme_id)
20
+ vme_id.split('/')[VM_NAME_POSITION]
21
+ end
22
22
 
23
- def get_record_set_from_id(id)
24
- id.split('/')[8]
25
- end
23
+ # Extract Endpoint type from (String)
24
+ def get_end_point_type(endpoint_type)
25
+ endpoint_type.split('/')[2]
26
+ end
26
27
 
27
- def get_type_from_recordset_type(type)
28
- type.split('/')[2]
29
- end
28
+ def get_record_set_from_id(id)
29
+ id.split('/')[8]
30
+ end
30
31
 
31
- def get_hash_from_object(object)
32
- hash = {}
33
- object.instance_variables.each { |attr| hash[attr.to_s.delete('@')] = object.instance_variable_get(attr) }
34
- hash
35
- end
32
+ def get_type_from_recordset_type(type)
33
+ type.split('/')[2]
34
+ end
36
35
 
37
- # Extract Traffic Manager Profile Name from Endpoint id(String)
38
- def get_traffic_manager_profile_name_from_endpoint_id(endpoint_id)
39
- endpoint_id.split('/')[8]
40
- end
36
+ def get_hash_from_object(object)
37
+ hash = {}
38
+ object.instance_variables.each { |attr| hash[attr.to_s.delete('@')] = object.instance_variable_get(attr) }
39
+ hash
40
+ end
41
41
 
42
- # Pick Express Route Circuit name from Id(String)
43
- def get_circuit_name_from_id(circuit_id)
44
- circuit_id.split('/')[8]
45
- end
42
+ # Extract Traffic Manager Profile Name from Endpoint id(String)
43
+ def get_traffic_manager_profile_name_from_endpoint_id(endpoint_id)
44
+ endpoint_id.split('/')[8]
45
+ end
46
46
 
47
- def get_record_type(type)
48
- type.split('/').last
49
- end
47
+ # Pick Express Route Circuit name from Id(String)
48
+ def get_circuit_name_from_id(circuit_id)
49
+ circuit_id.split('/')[8]
50
+ end
50
51
 
51
- def raise_azure_exception(exception, msg)
52
- raise Fog::AzureRM::CustomAzureCoreHttpError.new(exception) if exception.is_a?(Azure::Core::Http::HTTPError)
53
- raise exception unless exception.is_a?(MsRestAzure::AzureOperationError)
52
+ def get_record_type(type)
53
+ type.split('/').last
54
+ end
54
55
 
55
- azure_operation_error = Fog::AzureRM::CustomAzureOperationError.new(msg, exception)
56
- azure_operation_error.print_subscription_limits_information if !azure_operation_error.request.nil? && !azure_operation_error.response.nil?
57
- raise azure_operation_error
58
- end
56
+ def raise_azure_exception(exception, msg)
57
+ raise Fog::AzureRM::CustomAzureCoreHttpError.new(exception) if exception.is_a?(Azure::Core::Http::HTTPError)
58
+ raise exception unless exception.is_a?(MsRestAzure::AzureOperationError)
59
59
 
60
- # Make sure if input_params(Hash) contains all keys present in required_params(Array)
61
- def validate_params(required_params, input_params)
62
- missing_params = required_params.select { |param| param unless input_params.key?(param) }
63
- raise(ArgumentError, "Missing Parameters: #{missing_params.join(', ')} required for this operation") if missing_params.any?
64
- end
60
+ azure_operation_error = Fog::AzureRM::CustomAzureOperationError.new(msg, exception)
61
+ azure_operation_error.print_subscription_limits_information if !azure_operation_error.request.nil? && !azure_operation_error.response.nil?
62
+ raise azure_operation_error
63
+ end
65
64
 
66
- def get_resource_from_resource_id(resource_id, position)
67
- data = resource_id.split('/') unless resource_id.nil?
65
+ # Make sure if input_params(Hash) contains all keys present in required_params(Array)
66
+ def validate_params(required_params, input_params)
67
+ missing_params = required_params.select { |param| param unless input_params.key?(param) }
68
+ raise(ArgumentError, "Missing Parameters: #{missing_params.join(', ')} required for this operation") if missing_params.any?
69
+ end
68
70
 
69
- raise 'Invalid Resource ID' if data.count < 9 && data.count != 5
71
+ def get_resource_from_resource_id(resource_id, position)
72
+ data = resource_id.split('/') unless resource_id.nil?
70
73
 
71
- data[position]
72
- end
74
+ raise 'Invalid Resource ID' if data.count < 9 && data.count != 5
73
75
 
74
- def random_string(length)
75
- (0...length).map { ('a'..'z').to_a[rand(26)] }.join
76
- end
76
+ data[position]
77
+ end
77
78
 
78
- def active_directory_service_settings(environment = ENVIRONMENT_AZURE_CLOUD)
79
- case environment
80
- when ENVIRONMENT_AZURE_CHINA_CLOUD
81
- MsRestAzure::ActiveDirectoryServiceSettings.get_azure_china_settings
82
- when ENVIRONMENT_AZURE_US_GOVERNMENT
83
- MsRestAzure::ActiveDirectoryServiceSettings.get_azure_us_government_settings
84
- when ENVIRONMENT_AZURE_GERMAN_CLOUD
85
- MsRestAzure::ActiveDirectoryServiceSettings.get_azure_german_settings
86
- else
87
- MsRestAzure::ActiveDirectoryServiceSettings.get_azure_settings
88
- end
89
- end
79
+ def random_string(length)
80
+ (0...length).map { ('a'..'z').to_a[rand(26)] }.join
81
+ end
90
82
 
91
- def resource_manager_endpoint_url(environment = ENVIRONMENT_AZURE_CLOUD)
92
- case environment
93
- when ENVIRONMENT_AZURE_CHINA_CLOUD
94
- MsRestAzure::AzureEnvironments::ChinaCloud.resource_manager_endpoint_url
95
- when ENVIRONMENT_AZURE_US_GOVERNMENT
96
- MsRestAzure::AzureEnvironments::USGovernment.resource_manager_endpoint_url
97
- when ENVIRONMENT_AZURE_GERMAN_CLOUD
98
- MsRestAzure::AzureEnvironments::GermanCloud.resource_manager_endpoint_url
99
- else
100
- MsRestAzure::AzureEnvironments::AzureCloud.resource_manager_endpoint_url
101
- end
102
- end
83
+ def active_directory_service_settings(environment = ENVIRONMENT_AZURE_CLOUD)
84
+ case environment
85
+ when ENVIRONMENT_AZURE_CHINA_CLOUD
86
+ MsRestAzure::ActiveDirectoryServiceSettings.get_azure_china_settings
87
+ when ENVIRONMENT_AZURE_US_GOVERNMENT
88
+ MsRestAzure::ActiveDirectoryServiceSettings.get_azure_us_government_settings
89
+ when ENVIRONMENT_AZURE_GERMAN_CLOUD
90
+ MsRestAzure::ActiveDirectoryServiceSettings.get_azure_german_settings
91
+ else
92
+ MsRestAzure::ActiveDirectoryServiceSettings.get_azure_settings
93
+ end
94
+ end
103
95
 
104
- # storage_endpoint_suffix is nil in ms_rest_azure 0.6.2
105
- # Reference the issue: https://github.com/Azure/azure-sdk-for-ruby/issues/603
106
- def storage_endpoint_suffix(environment = ENVIRONMENT_AZURE_CLOUD)
107
- case environment
108
- when ENVIRONMENT_AZURE_CHINA_CLOUD
109
- # MsRestAzure::AzureEnvironments::AzureChina.storage_endpoint_suffix
110
- '.core.chinacloudapi.cn'
111
- when ENVIRONMENT_AZURE_US_GOVERNMENT
112
- # MsRestAzure::AzureEnvironments::AzureUSGovernment.storage_endpoint_suffix
113
- '.core.usgovcloudapi.net'
114
- when ENVIRONMENT_AZURE_GERMAN_CLOUD
115
- # MsRestAzure::AzureEnvironments::AzureGermanCloud.storage_endpoint_suffix
116
- '.core.cloudapi.de'
117
- else
118
- # MsRestAzure::AzureEnvironments::Azure.storage_endpoint_suffix
119
- '.core.windows.net'
120
- end
121
- end
96
+ def resource_manager_endpoint_url(environment = ENVIRONMENT_AZURE_CLOUD)
97
+ case environment
98
+ when ENVIRONMENT_AZURE_CHINA_CLOUD
99
+ MsRestAzure::AzureEnvironments::ChinaCloud.resource_manager_endpoint_url
100
+ when ENVIRONMENT_AZURE_US_GOVERNMENT
101
+ MsRestAzure::AzureEnvironments::USGovernment.resource_manager_endpoint_url
102
+ when ENVIRONMENT_AZURE_GERMAN_CLOUD
103
+ MsRestAzure::AzureEnvironments::GermanCloud.resource_manager_endpoint_url
104
+ else
105
+ MsRestAzure::AzureEnvironments::AzureCloud.resource_manager_endpoint_url
106
+ end
107
+ end
122
108
 
123
- def get_blob_endpoint(storage_account_name, enable_https = false, environment = ENVIRONMENT_AZURE_CLOUD)
124
- protocol = enable_https ? 'https' : 'http'
125
- "#{protocol}://#{storage_account_name}.blob#{storage_endpoint_suffix(environment)}"
126
- end
109
+ # storage_endpoint_suffix is nil in ms_rest_azure 0.6.2
110
+ # Reference the issue: https://github.com/Azure/azure-sdk-for-ruby/issues/603
111
+ def storage_endpoint_suffix(environment = ENVIRONMENT_AZURE_CLOUD)
112
+ case environment
113
+ when ENVIRONMENT_AZURE_CHINA_CLOUD
114
+ # MsRestAzure::AzureEnvironments::AzureChina.storage_endpoint_suffix
115
+ '.core.chinacloudapi.cn'
116
+ when ENVIRONMENT_AZURE_US_GOVERNMENT
117
+ # MsRestAzure::AzureEnvironments::AzureUSGovernment.storage_endpoint_suffix
118
+ '.core.usgovcloudapi.net'
119
+ when ENVIRONMENT_AZURE_GERMAN_CLOUD
120
+ # MsRestAzure::AzureEnvironments::AzureGermanCloud.storage_endpoint_suffix
121
+ '.core.cloudapi.de'
122
+ else
123
+ # MsRestAzure::AzureEnvironments::Azure.storage_endpoint_suffix
124
+ '.core.windows.net'
125
+ end
126
+ end
127
127
 
128
- def get_blob_endpoint_with_domain(storage_account_name, enable_https = false, domain = 'blob.core.windows.net')
129
- protocol = enable_https ? 'https' : 'http'
130
- "#{protocol}://#{storage_account_name}.#{domain}"
131
- end
128
+ def get_blob_endpoint(storage_account_name, enable_https = false, environment = ENVIRONMENT_AZURE_CLOUD)
129
+ protocol = enable_https ? 'https' : 'http'
130
+ "#{protocol}://#{storage_account_name}.blob#{storage_endpoint_suffix(environment)}"
131
+ end
132
132
 
133
- def current_time
134
- time = Time.now.to_f.to_s
135
- time.split(/\W+/).join
136
- end
133
+ def get_blob_endpoint_with_domain(storage_account_name, enable_https = false, domain = 'blob.core.windows.net')
134
+ protocol = enable_https ? 'https' : 'http'
135
+ "#{protocol}://#{storage_account_name}.#{domain}"
136
+ end
137
137
 
138
- # Parse storage blob/container to a hash
139
- def parse_storage_object(object)
140
- data = {}
141
- if object.is_a? Hash
142
- object.each do |k, v|
143
- if k == 'properties'
144
- v.each do |j, l|
145
- data[j] = l
146
- end
147
- else
148
- data[k] = v
149
- end
150
- end
151
- else
152
- object.instance_variables.each do |p|
153
- kname = p.to_s.delete('@')
154
- if kname == 'properties'
155
- properties = object.instance_variable_get(p)
156
- properties.each do |k, v|
157
- data[k.to_s] = v
158
- end
159
- else
160
- data[kname] = object.instance_variable_get(p)
161
- end
162
- end
163
- end
138
+ def current_time
139
+ time = Time.now.to_f.to_s
140
+ time.split(/\W+/).join
141
+ end
164
142
 
165
- data['last_modified'] = Time.parse(data['last_modified'])
166
- data['etag'].delete!('"')
167
- data
168
- end
143
+ # Parse storage blob/container to a hash
144
+ def parse_storage_object(object)
145
+ data = {}
146
+ if object.is_a? Hash
147
+ object.each do |k, v|
148
+ if k == 'properties'
149
+ v.each do |j, l|
150
+ data[j] = l
151
+ end
152
+ else
153
+ data[k] = v
154
+ end
155
+ end
156
+ else
157
+ object.instance_variables.each do |p|
158
+ kname = p.to_s.delete('@')
159
+ if kname == 'properties'
160
+ properties = object.instance_variable_get(p)
161
+ properties.each do |k, v|
162
+ data[k.to_s] = v
163
+ end
164
+ else
165
+ data[kname] = object.instance_variable_get(p)
166
+ end
167
+ end
168
+ end
169
+
170
+ data['last_modified'] = Time.parse(data['last_modified'])
171
+ data['etag'].delete!('"')
172
+ data
173
+ end
169
174
 
170
- def resource_not_found?(azure_operation_error)
171
- is_found = false
172
- if azure_operation_error.response.status == HTTP_NOT_FOUND
173
- if azure_operation_error.body['code']
174
- is_found = azure_operation_error.body['code'] == ERROR_CODE_NOT_FOUND
175
- elsif azure_operation_error.body['error']
176
- is_found = azure_operation_error.body['error']['code'] == ERROR_CODE_NOT_FOUND ||
177
- azure_operation_error.body['error']['code'] == ERROR_CODE_RESOURCE_GROUP_NOT_FOUND ||
178
- azure_operation_error.body['error']['code'] == ERROR_CODE_RESOURCE_NOT_FOUND ||
179
- azure_operation_error.body['error']['code'] == ERROR_CODE_PARENT_RESOURCE_NOT_FOUND
180
- end
181
- end
182
- is_found
183
- end
175
+ def resource_not_found?(azure_operation_error)
176
+ is_found = false
177
+ if azure_operation_error.response.status == HTTP_NOT_FOUND
178
+ if azure_operation_error.body['code']
179
+ is_found = azure_operation_error.body['code'] == ERROR_CODE_NOT_FOUND
180
+ elsif azure_operation_error.body['error']
181
+ is_found = azure_operation_error.body['error']['code'] == ERROR_CODE_NOT_FOUND ||
182
+ azure_operation_error.body['error']['code'] == ERROR_CODE_RESOURCE_GROUP_NOT_FOUND ||
183
+ azure_operation_error.body['error']['code'] == ERROR_CODE_RESOURCE_NOT_FOUND ||
184
+ azure_operation_error.body['error']['code'] == ERROR_CODE_PARENT_RESOURCE_NOT_FOUND
185
+ end
186
+ end
187
+ is_found
188
+ end
184
189
 
185
- def get_image_name(id)
186
- id.split('/').last
187
- end
190
+ def get_image_name(id)
191
+ id.split('/').last
192
+ end
188
193
 
189
- def get_subscription_id(id)
190
- id.split('/')[2]
191
- end
194
+ def get_subscription_id(id)
195
+ id.split('/')[2]
196
+ end
192
197
 
193
- def remove_trailing_periods_from_path_segments(path)
194
- path.split('/').map { |segment| segment.gsub(/\.*$/, '') }.join('/')
198
+ def remove_trailing_periods_from_path_segments(path)
199
+ path.split('/').map { |segment| segment.gsub(/\.*$/, '') }.join('/')
200
+ end
201
+ end
202
+ end
203
+ end
195
204
  end
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module AzureRM
3
- VERSION = '1.3.0'.freeze
3
+ VERSION = '1.5.0'.freeze
4
4
  end
5
5
  end
@@ -43,13 +43,13 @@ module ApiStub
43
43
  }
44
44
  end
45
45
 
46
- def self.blob_https_url(environment = ENVIRONMENT_AZURE_CLOUD)
46
+ def self.blob_https_url(environment = Fog::AzureRM::ENVIRONMENT_AZURE_CLOUD)
47
47
  case environment
48
- when ENVIRONMENT_AZURE_CHINA_CLOUD
48
+ when Fog::AzureRM::ENVIRONMENT_AZURE_CHINA_CLOUD
49
49
  'https://sa.blob.core.chinacloudapi.cn/test_container/test_blob'
50
- when ENVIRONMENT_AZURE_US_GOVERNMENT
50
+ when Fog::AzureRM::ENVIRONMENT_AZURE_US_GOVERNMENT
51
51
  'https://sa.blob.core.usgovcloudapi.net/test_container/test_blob'
52
- when ENVIRONMENT_AZURE_GERMAN_CLOUD
52
+ when Fog::AzureRM::ENVIRONMENT_AZURE_GERMAN_CLOUD
53
53
  'https://sa.blob.core.cloudapi.de/test_container/test_blob'
54
54
  else
55
55
  'https://sa.blob.core.windows.net/test_container/test_blob'
@@ -0,0 +1,42 @@
1
+ require File.expand_path '../../test_helper', __dir__
2
+
3
+ # Storage Blob Class
4
+ class TestDeleteObject < Minitest::Test
5
+ # This class posesses the test cases for the requests of deleting storage blobs.
6
+ def setup
7
+ Fog.mock!
8
+ @mock_service = Fog::Storage::AzureRM.new(storage_account_credentials)
9
+ Fog.unmock!
10
+ @mocked_response = mocked_storage_http_error
11
+ @mocked_not_found_response = mocked_storage_http_not_found_error
12
+
13
+ @service = Fog::Storage::AzureRM.new(storage_account_credentials)
14
+ @blob_client = @service.instance_variable_get(:@blob_client)
15
+ end
16
+
17
+ def test_delete_object_success
18
+ @blob_client.stub :delete_blob, true do
19
+ assert @service.delete_object('test_container', 'test_blob')
20
+ end
21
+ end
22
+
23
+ def test_delete_object_with_not_found_success
24
+ http_exception = ->(*) { raise Azure::Core::Http::HTTPError.new(@mocked_not_found_response) }
25
+ @blob_client.stub :delete_blob, http_exception do
26
+ assert @service.delete_object('test_container', 'test_blob')
27
+ end
28
+ end
29
+
30
+ def test_delete_object_http_exception
31
+ http_exception = ->(*) { raise Azure::Core::Http::HTTPError.new(@mocked_response) }
32
+ @blob_client.stub :delete_blob, http_exception do
33
+ assert_raises(Azure::Core::Http::HTTPError) do
34
+ @service.delete_object('test_container', 'test_blob')
35
+ end
36
+ end
37
+ end
38
+
39
+ def test_delete_object_mock
40
+ assert @mock_service.delete_blob('test_container', 'test_blob')
41
+ end
42
+ end
@@ -28,10 +28,10 @@ class TestGetBlobUrl < Minitest::Test
28
28
  end
29
29
 
30
30
  def test_get_blob_url_for_china_success
31
- china_storage_account_credentials = storage_account_credentials.merge(environment: ENVIRONMENT_AZURE_CHINA_CLOUD)
31
+ china_storage_account_credentials = storage_account_credentials.merge(environment: Fog::AzureRM::ENVIRONMENT_AZURE_CHINA_CLOUD)
32
32
  service = Fog::Storage::AzureRM.new(china_storage_account_credentials)
33
33
  blob_client = service.instance_variable_get(:@blob_client)
34
- url = ApiStub::Requests::Storage::File.blob_https_url(ENVIRONMENT_AZURE_CHINA_CLOUD)
34
+ url = ApiStub::Requests::Storage::File.blob_https_url(Fog::AzureRM::ENVIRONMENT_AZURE_CHINA_CLOUD)
35
35
 
36
36
  blob_client.stub :generate_uri, url do
37
37
  assert_equal url, service.get_blob_url('test_container', 'test_blob')
@@ -42,10 +42,10 @@ class TestGetBlobUrl < Minitest::Test
42
42
  end
43
43
 
44
44
  def test_get_blob_url_for_us_success
45
- us_storage_account_credentials = storage_account_credentials.merge(environment: ENVIRONMENT_AZURE_US_GOVERNMENT)
45
+ us_storage_account_credentials = storage_account_credentials.merge(environment: Fog::AzureRM::ENVIRONMENT_AZURE_US_GOVERNMENT)
46
46
  service = Fog::Storage::AzureRM.new(us_storage_account_credentials)
47
47
  blob_client = service.instance_variable_get(:@blob_client)
48
- url = ApiStub::Requests::Storage::File.blob_https_url(ENVIRONMENT_AZURE_US_GOVERNMENT)
48
+ url = ApiStub::Requests::Storage::File.blob_https_url(Fog::AzureRM::ENVIRONMENT_AZURE_US_GOVERNMENT)
49
49
 
50
50
  blob_client.stub :generate_uri, url do
51
51
  assert_equal url, service.get_blob_url('test_container', 'test_blob')
@@ -56,10 +56,10 @@ class TestGetBlobUrl < Minitest::Test
56
56
  end
57
57
 
58
58
  def test_get_blob_url_for_german_success
59
- german_storage_account_credentials = storage_account_credentials.merge(environment: ENVIRONMENT_AZURE_GERMAN_CLOUD)
59
+ german_storage_account_credentials = storage_account_credentials.merge(environment: Fog::AzureRM::ENVIRONMENT_AZURE_GERMAN_CLOUD)
60
60
  service = Fog::Storage::AzureRM.new(german_storage_account_credentials)
61
61
  blob_client = service.instance_variable_get(:@blob_client)
62
- url = ApiStub::Requests::Storage::File.blob_https_url(ENVIRONMENT_AZURE_GERMAN_CLOUD)
62
+ url = ApiStub::Requests::Storage::File.blob_https_url(Fog::AzureRM::ENVIRONMENT_AZURE_GERMAN_CLOUD)
63
63
 
64
64
  blob_client.stub :generate_uri, url do
65
65
  assert_equal url, service.get_blob_url('test_container', 'test_blob')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-fog-azure-rm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shaffan Chaudhry
@@ -15,10 +15,10 @@ authors:
15
15
  - Azeem Sajid
16
16
  - Maham Nazir
17
17
  - Abbas Sheikh
18
- autorequire:
18
+ autorequire:
19
19
  bindir: bin
20
20
  cert_chain: []
21
- date: 2022-06-02 00:00:00.000000000 Z
21
+ date: 2023-02-27 00:00:00.000000000 Z
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
24
  name: codeclimate-test-reporter
@@ -176,7 +176,7 @@ dependencies:
176
176
  version: 0.12.0
177
177
  description: This is a stripped-down fork of fog-azure-rm that enables Azure Blob
178
178
  Storage to be used with CarrierWave and Fog.
179
- email:
179
+ email:
180
180
  executables: []
181
181
  extensions: []
182
182
  extra_rdoc_files:
@@ -237,6 +237,7 @@ files:
237
237
  - lib/fog/azurerm/requests/storage/delete_blob.rb
238
238
  - lib/fog/azurerm/requests/storage/delete_blob_https_url.rb
239
239
  - lib/fog/azurerm/requests/storage/delete_container.rb
240
+ - lib/fog/azurerm/requests/storage/delete_object.rb
240
241
  - lib/fog/azurerm/requests/storage/delete_object_url.rb
241
242
  - lib/fog/azurerm/requests/storage/get_blob.rb
242
243
  - lib/fog/azurerm/requests/storage/get_blob_http_url.rb
@@ -294,6 +295,7 @@ files:
294
295
  - test/requests/storage/test_delete_blob.rb
295
296
  - test/requests/storage/test_delete_blob_https_url.rb
296
297
  - test/requests/storage/test_delete_container.rb
298
+ - test/requests/storage/test_delete_object.rb
297
299
  - test/requests/storage/test_get_blob.rb
298
300
  - test/requests/storage/test_get_blob_http_url.rb
299
301
  - test/requests/storage/test_get_blob_https_url.rb
@@ -338,8 +340,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
338
340
  - !ruby/object:Gem::Version
339
341
  version: '0'
340
342
  requirements: []
341
- rubygems_version: 3.1.6
342
- signing_key:
343
+ rubygems_version: 3.4.7
344
+ signing_key:
343
345
  specification_version: 4
344
346
  summary: Module for the 'fog' gem to support Azure Blob Storage with CarrierWave and
345
347
  Fog.