Module: SqlCmd::Azure::AttachedStorage
- Defined in:
- lib/sql_cmd/azure.rb
Class Method Summary collapse
- .container_name_from_url(storage_url, client: nil) ⇒ Object
-
.download(filename, destination_path, storage_account_name, storage_access_key, container_name: nil, storage_url: nil) ⇒ Object
Download a file from blob storage Either container_name or storage_url is required.
-
.list(storage_account_name, storage_access_key, container_name: nil, storage_url: nil, filename_prefix: nil) ⇒ Object
List files that in blob storage Either container_name or storage_url is required Returns hash of file URLs and their properties.
- .storage_file_relative_path(storage_url, filename, container_name) ⇒ Object
-
.upload(filename, content, storage_account_name, storage_access_key, container_name: nil, storage_url: nil) ⇒ Object
Upload a file to blob storage Either container_name or storage_url is required.
Class Method Details
.container_name_from_url(storage_url, client: nil) ⇒ Object
63 64 65 66 67 68 69 70 71 |
# File 'lib/sql_cmd/azure.rb', line 63 def container_name_from_url(storage_url, client: nil) if client.nil? OptionalDepedencies.load_azure_blob_storage_dependencies # initialize ::Azure::Storage::Blob::BlobService client client = ::Azure::Storage::Blob::BlobService.create(storage_account_name: storage_account_name, storage_access_key: storage_access_key) end client.list_containers.map(&:name).select { |c| storage_url =~ %r{/#{Regexp.escape(c)}(/|$)} }.first end |
.download(filename, destination_path, storage_account_name, storage_access_key, container_name: nil, storage_url: nil) ⇒ Object
Download a file from blob storage Either container_name or storage_url is required
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/sql_cmd/azure.rb', line 25 def download(filename, destination_path, storage_account_name, storage_access_key, container_name: nil, storage_url: nil) raise 'Either :container_name or :storage_url must be specified for SqlCmd::Azure::AttachedStorage.download' if container_name.nil? && storage_url.nil? OptionalDepedencies.load_azure_blob_storage_dependencies # initialize ::Azure::Storage::Blob::BlobService client client = ::Azure::Storage::Blob::BlobService.create(storage_account_name: storage_account_name, storage_access_key: storage_access_key) container_name ||= container_name_from_url(storage_url, client: client) || ::File.basename(storage_url) relative_path = storage_url.nil? ? filename : storage_file_relative_path(storage_url, filename, container_name) # Add retry filter to the client client.with_filter(::Azure::Storage::Common::Core::Filter::ExponentialRetryPolicyFilter.new) FileUtils.mkdir_p(::File.dirname(destination_path)) _blob, content = client.get_blob(container_name, relative_path) ::File.open(destination_path, 'wb') { |f| f.write(content) } end |
.list(storage_account_name, storage_access_key, container_name: nil, storage_url: nil, filename_prefix: nil) ⇒ Object
List files that in blob storage Either container_name or storage_url is required Returns hash of file URLs and their properties
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/sql_cmd/azure.rb', line 45 def list(storage_account_name, storage_access_key, container_name: nil, storage_url: nil, filename_prefix: nil) raise 'Either :container_name or :storage_url must be specified for SqlCmd::Azure::AttachedStorage.list' if container_name.nil? && storage_url.nil? OptionalDepedencies.load_azure_blob_storage_dependencies # initialize ::Azure::Storage::Blob::BlobService client client = ::Azure::Storage::Blob::BlobService.create(storage_account_name: storage_account_name, storage_access_key: storage_access_key) container_name ||= container_name_from_url(storage_url, client: client) || ::File.basename(storage_url) relative_path = storage_url.nil? ? filename_prefix : storage_file_relative_path(storage_url, filename_prefix, container_name) # Add retry filter to the client client.with_filter(::Azure::Storage::Common::Core::Filter::ExponentialRetryPolicyFilter.new) # Get list of files matching filename_prefix = filename_prefix.nil? ? {} : { prefix: relative_path } files = client.list_blobs(container_name, ) files.nil? ? [] : files.map { |f| [f.name, f.properties] }.to_h end |
.storage_file_relative_path(storage_url, filename, container_name) ⇒ Object
73 74 75 76 77 |
# File 'lib/sql_cmd/azure.rb', line 73 def storage_file_relative_path(storage_url, filename, container_name) relative_path = storage_url.sub(/.+?#{Regexp.escape(container_name)}/i, '') + "/#{filename}" relative_path.gsub!('//', '/') relative_path.reverse.chomp('/').reverse end |
.upload(filename, content, storage_account_name, storage_access_key, container_name: nil, storage_url: nil) ⇒ Object
Upload a file to blob storage Either container_name or storage_url is required
8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/sql_cmd/azure.rb', line 8 def upload(filename, content, storage_account_name, storage_access_key, container_name: nil, storage_url: nil) raise 'Either :container_name or :storage_url must be specified for SqlCmd::Azure::AttachedStorage.upload' if container_name.nil? && storage_url.nil? OptionalDepedencies.load_azure_blob_storage_dependencies # initialize ::Azure::Storage::Blob::BlobService client client = ::Azure::Storage::Blob::BlobService.create(storage_account_name: storage_account_name, storage_access_key: storage_access_key) container_name ||= container_name_from_url(storage_url, client: client) || ::File.basename(storage_url) relative_path = storage_url.nil? ? filename : storage_file_relative_path(storage_url, filename, container_name) # Add retry filter to the client client.with_filter(::Azure::Storage::Common::Core::Filter::ExponentialRetryPolicyFilter.new) client.create_block_blob(container_name, relative_path, content) end |