terraspace_plugin_azurerm 0.4.0 → 0.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: 8c595d865e64d26fdc4fa827ef247aae21266701bdf2afcf5438c6458d50d96e
4
- data.tar.gz: a3bdfe44206f463c945d5f416c81529d77c9507b676f27654b1071aa6da0c7fd
3
+ metadata.gz: 11fda0fac205761533c2f4d73f68b4e1e8b97c98acdd81b59989dabf855f7a71
4
+ data.tar.gz: 92d71e9bce40c3dff7a644ee98baf1a6f1e8864f86b34ee861b30604b976f6e3
5
5
  SHA512:
6
- metadata.gz: 67fdfe608c63b99cea0b1dfa29cc131c68df2b8651428800fb9d085aba3747bd99d29757551b74828693d323f7378cd580bd38b5b195a43920f7c844d3409a70
7
- data.tar.gz: b675685420ced87b9b21504b011d332987569a2cc94ff91de6cde41ca8e6a5dd72ec99e2551274de45bc1ed537c75e4a2c76e565e23018b8a86843cbd73c7416
6
+ metadata.gz: d687364d16af25a282933fd7eba6107fb7d422a062b1d7b44608fb504d78de1c56668f14f4a0ec7b002bbad4c35102eaef16652a8fab03f4a34c56b26d114676
7
+ data.tar.gz: cd71ed24124dbc1f00665b2aa5566d3d07fbd93ca47415a405ae5b1061a471ad7d47d938bd43db5de91af57694d58450c30fa6f83c1eb110db03cb8c721f7c10
data/CHANGELOG.md CHANGED
@@ -3,6 +3,9 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/).
5
5
 
6
+ ## [0.5.0] - 2022-01-20
7
+ - [#14](https://github.com/boltops-tools/terraspace_plugin_azurerm/pull/14) use armrest gem
8
+
6
9
  ## [0.4.0] - 2022-01-05
7
10
  - [#11](https://github.com/boltops-tools/terraspace_plugin_azurerm/pull/11) fix tags config in README
8
11
  - [#13](https://github.com/boltops-tools/terraspace_plugin_azurerm/pull/13) data management and security features
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Terraspace Azurerm Plugin
2
2
 
3
+ [![BoltOps Badge](https://img.boltops.com/boltops/badges/boltops-badge.png)](https://www.boltops.com)
4
+
5
+ [![Gem Version](https://badge.fury.io/rb/terraspace_plugin_azurerm.svg)](https://badge.fury.io/rb/terraspace_plugin_azurerm)
6
+
3
7
  Azurerm support for [terraspace](https://terraspace.cloud/).
4
8
 
5
9
  ## Installation
@@ -0,0 +1,26 @@
1
+ class TerraspacePluginAzurerm::Interfaces::Backend
2
+ class BlobContainer < Base
3
+ def create
4
+ if exist?
5
+ logger.debug "Storage Blob Container #{@container_name} already exists"
6
+ else
7
+ create_blob_container
8
+ end
9
+ end
10
+
11
+ def exist?
12
+ blob_container.exist?(name: @container_name)
13
+ end
14
+
15
+ def create_blob_container
16
+ logger.info "Creating Storage Blob Container #{@container_name}..."
17
+ blob_container.create(name: @container_name)
18
+ end
19
+
20
+ private
21
+ def blob_container
22
+ Armrest::Services::BlobContainer.new(storage_account: @storage_account_name, group: @resource_group_name)
23
+ end
24
+ memoize :blob_container
25
+ end
26
+ end
@@ -1,33 +1,32 @@
1
1
  class TerraspacePluginAzurerm::Interfaces::Backend
2
2
  # Named ResourceGroupCreator to avoid collision with Azure ResourceGroup model
3
3
  class ResourceGroupCreator < Base
4
- include TerraspacePluginAzurerm::Clients::Resources
5
-
6
4
  def create
7
5
  if exist?
8
6
  logger.debug "Resource Group #{@resource_group_name} already exists"
7
+ create_or_update_resource_group if config.resource_group.update_existing
9
8
  else
10
- create_resource_group
9
+ create_or_update_resource_group
11
10
  end
12
11
  end
13
12
 
14
13
  def exist?
15
- resource_groups.check_existence(@resource_group_name)
14
+ resource_group.check_existence(name: @resource_group_name)
16
15
  end
17
16
 
18
- def create_resource_group
17
+ def create_or_update_resource_group
19
18
  logger.info "Creating Resource Group #{@resource_group_name}..."
20
- resource_group = ResourceGroup.new
21
- resource_group.name = @resource_group_name
22
- resource_group.location = config.location || AzureInfo.location
23
- resource_group.tags = config.tags
24
- resource_groups.create_or_update(@resource_group_name, resource_group)
19
+ resource_group.create_or_update(
20
+ name: @resource_group_name,
21
+ location: config.location || AzureInfo.location,
22
+ tags: config.tags,
23
+ )
25
24
  end
26
25
 
27
26
  private
28
- def resource_groups
29
- ResourceGroups.new(mgmt)
27
+ def resource_group
28
+ Armrest::Services::ResourceGroup.new
30
29
  end
31
- memoize :resource_groups
30
+ memoize :resource_group
32
31
  end
33
32
  end
@@ -1,23 +1,20 @@
1
1
  class TerraspacePluginAzurerm::Interfaces::Backend
2
2
  class StorageAccount < Base
3
- include TerraspacePluginAzurerm::Clients::Storage
4
3
  extend Memoist
5
4
 
6
5
  def create
7
6
  if exist?
8
7
  logger.debug "Storage Account #{@storage_account_name} already exists"
9
- update_storage_account if config.storage_account.update_existing
8
+ save_storage_account if config.storage_account.update_existing
10
9
  set_blob_service_properties if config.storage_account.configure_data_protection_for_existing
11
10
  else
12
- create_storage_account
11
+ save_storage_account
13
12
  set_blob_service_properties
14
13
  end
15
14
  end
16
15
 
17
16
  def exist?
18
- params = StorageAccountCheckNameAvailabilityParameters.new
19
- params.name = @storage_account_name
20
- result = storage_accounts.check_name_availability(params)
17
+ result = storage_account.check_name_availability(name: @storage_account_name)
21
18
  validate!(result)
22
19
  !result.name_available
23
20
  end
@@ -35,59 +32,60 @@ class TerraspacePluginAzurerm::Interfaces::Backend
35
32
  end
36
33
  end
37
34
 
38
- def update_storage_account
39
- logger.debug "Updating Storage Account #{@storage_account_name}..."
40
- storage_accounts.update(@resource_group_name, @storage_account_name, storage_account_update_params)
35
+ def save_storage_account
36
+ action = exist? ? "Updating" : "Creating"
37
+ logger.info "#{action} Storage Account #{@storage_account_name}..."
38
+ storage_account.create(
39
+ name: @storage_account_name,
40
+ location: config.location || azure_info.location, # IE: eastus
41
+ sku: {
42
+ name: config.storage_account.sku.name,
43
+ tier: config.storage_account.sku.tier,
44
+ },
45
+ properties: {
46
+ allow_blob_public_access: config.storage_account.allow_blob_public_access,
47
+ },
48
+ kind: "StorageV2",
49
+ tags: config.tags,
50
+ )
41
51
  end
42
52
 
43
- def create_storage_account
44
- logger.info "Creating Storage Account #{@storage_account_name}..."
45
- storage_accounts.create(@resource_group_name, @storage_account_name, storage_account_create_params)
46
- end
47
-
48
- def storage_account_create_params
49
- params = StorageAccountCreateParameters.new
50
- params.location = config.location || azure_info.location # IE: eastus
51
- params.sku = sku
52
- params.allow_blob_public_access = config.storage_account.allow_blob_public_access
53
- params.kind = Kind::StorageV2
54
- params.tags = config.tags
55
- params
53
+ def set_blob_service_properties
54
+ blob_service.set_properties(blob_service_properties)
56
55
  end
57
56
 
58
- def storage_account_update_params
59
- params = StorageAccountUpdateParameters.new
60
- params.allow_blob_public_access = config.storage_account.allow_blob_public_access
61
- params
57
+ def blob_service_properties
58
+ sa = config.storage_account
59
+ container_delete_retention_policy = {
60
+ days: sa.container_delete_retention_policy.days || sa.delete_retention_policy.days,
61
+ enabled: sa.container_delete_retention_policy.enabled || sa.delete_retention_policy.enabled,
62
+ }
63
+ # blobs
64
+ delete_retention_policy = {
65
+ days: sa.blob_delete_retention_policy.days || sa.delete_retention_policy.days,
66
+ enabled: sa.blob_delete_retention_policy.enabled || sa.delete_retention_policy.enabled,
67
+ }
68
+ # final props
69
+ {
70
+ container_delete_retention_policy: container_delete_retention_policy,
71
+ delete_retention_policy: delete_retention_policy,
72
+ is_versioning_enabled: sa.is_versioning_enabled,
73
+ }
62
74
  end
63
75
 
64
- def sku
65
- sku = Sku.new
66
- sku.name = config.storage_account.sku.name
67
- sku.tier = config.storage_account.sku.tier
68
- sku
76
+ private
77
+ def storage_account
78
+ Armrest::Services::StorageAccount.new(service_options)
69
79
  end
80
+ memoize :storage_account
70
81
 
71
- def set_blob_service_properties
72
- blob_services.set_service_properties(@resource_group_name, @storage_account_name, blob_service_properties)
82
+ def blob_service
83
+ Armrest::Services::BlobService.new(service_options)
73
84
  end
85
+ memoize :blob_service
74
86
 
75
- def blob_service_properties
76
- props = BlobServiceProperties.new
77
-
78
- sa = config.storage_account
79
- policy = DeleteRetentionPolicy.new
80
- policy.days = sa.container_delete_retention_policy.days || sa.delete_retention_policy.days
81
- policy.enabled = sa.container_delete_retention_policy.enabled || sa.delete_retention_policy.enabled
82
- props.container_delete_retention_policy = policy # containers
83
-
84
- policy = DeleteRetentionPolicy.new
85
- policy.days = sa.blob_delete_retention_policy.days || sa.delete_retention_policy.days
86
- policy.enabled = sa.blob_delete_retention_policy.enabled || sa.delete_retention_policy.enabled
87
- props.delete_retention_policy = policy # blobs
88
-
89
- props.is_versioning_enabled = sa.is_versioning_enabled
90
- props
87
+ def service_options
88
+ { storage_account: @storage_account_name, group: @resource_group_name }
91
89
  end
92
90
  end
93
91
  end
@@ -8,7 +8,7 @@ module TerraspacePluginAzurerm::Interfaces
8
8
 
9
9
  ResourceGroupCreator.new(@info).create
10
10
  StorageAccount.new(@info).create
11
- StorageContainer.new(@info).create
11
+ BlobContainer.new(@info).create
12
12
  end
13
13
  end
14
14
  end
@@ -20,6 +20,9 @@ module TerraspacePluginAzurerm::Interfaces
20
20
  c.secrets = ActiveSupport::OrderedOptions.new
21
21
  c.secrets.vault = nil
22
22
 
23
+ c.resource_group = ActiveSupport::OrderedOptions.new
24
+ c.resource_group.update_existing = false
25
+
23
26
  c.storage_account = ActiveSupport::OrderedOptions.new
24
27
  c.storage_account.update_existing = false
25
28
  c.storage_account.sku = ActiveSupport::OrderedOptions.new
@@ -7,15 +7,10 @@ class TerraspacePluginAzurerm::Interfaces::Helper::Secret
7
7
  class VaultNotConfiguredError < Error; end
8
8
 
9
9
  include TerraspacePluginAzurerm::Logging
10
- include TerraspacePluginAzurerm::Clients::Options
11
10
  extend Memoist
12
11
 
13
12
  def initialize(mod, options={})
14
13
  @mod, @options = mod, options
15
- o = base_client_options
16
- @client_id = o[:client_id]
17
- @client_secret = o[:client_secret]
18
- @tenant_id = o[:tenant_id]
19
14
  end
20
15
 
21
16
  def fetch(name, opts={})
@@ -25,42 +20,11 @@ class TerraspacePluginAzurerm::Interfaces::Helper::Secret
25
20
 
26
21
  def get_secret(name, options={})
27
22
  vault = options[:vault]
23
+ check_vault_configured!(vault)
28
24
  version = options[:version]
29
- unless token
30
- return "ERROR: Unable to authorize and get the temporary token. Double check your ARM_ env variables."
31
- end
32
-
33
25
  version = "/#{version}" if version
34
- check_vault_configured!(vault)
35
- vault_subdomain = vault.downcase
36
- # Using Azure REST API since the old gem doesnt support secrets https://github.com/Azure/azure-sdk-for-ruby
37
- # https://docs.microsoft.com/en-us/rest/api/keyvault/getsecret/getsecret
38
26
  name = expansion(name) if expand?
39
- url = "https://#{vault_subdomain}.vault.azure.net/secrets/#{name}#{version}?api-version=7.1"
40
- logger.debug "Azure vault url #{url}"
41
- uri = URI(url)
42
- req = Net::HTTP::Get.new(uri)
43
- req["Authorization"] = token
44
- req["Content-Type"] = "application/json"
45
-
46
- resp = nil
47
- begin
48
- resp = send_request(uri, req)
49
- rescue VaultNotFoundError
50
- message = "WARN: Vault not found #{vault}"
51
- logger.info message.color(:yellow)
52
- return message
53
- end
54
-
55
- case resp.code.to_s
56
- when /^2/
57
- data = JSON.load(resp.body)
58
- data['value']
59
- else
60
- message = standard_error_message(resp)
61
- logger.info "WARN: #{message}".color(:yellow)
62
- message
63
- end
27
+ secret.show(name: name, vault: vault)
64
28
  end
65
29
 
66
30
  def check_vault_configured!(vault)
@@ -80,61 +44,12 @@ class TerraspacePluginAzurerm::Interfaces::Helper::Secret
80
44
  raise VaultNotConfiguredError.new
81
45
  end
82
46
 
83
- def send_request(uri, req)
84
- http = Net::HTTP.new(uri.host, uri.port)
85
- http.open_timeout = http.read_timeout = 30
86
- http.use_ssl = true if uri.scheme == 'https'
87
-
88
- begin
89
- http.request(req) # response
90
- rescue SocketError => e
91
- # SocketError: Failed to open TCP connection to MISSING-VAULT.vault.azure.net:443 (getaddrinfo: Name or service not known)
92
- if e.message.include?("vault.azure.net")
93
- raise VaultNotFoundError.new(e)
94
- else
95
- raise
96
- end
97
- end
98
- end
99
-
100
- # Secret error handling: 1. network 2. json parse 3. missing secret
101
- #
102
- # Azure API responses with decent error message when
103
- # 403 Forbidden - KeyVault Access Policy needs to be set up
104
- # 404 Not Found - Secret name is incorrect
105
- #
106
- def standard_error_message(resp)
107
- data = JSON.load(resp.body)
108
- data['error']['message']
109
- rescue JSON::ParserError
110
- resp.body
111
- end
112
-
113
- @@token = nil
114
- def token
115
- return @@token unless @@token.nil?
116
- url = "https://login.microsoftonline.com/#{@tenant_id}/oauth2/token"
117
- uri = URI(url)
118
- req = Net::HTTP::Get.new(uri)
119
- req.set_form_data(
120
- grant_type: "client_credentials",
121
- client_id: @client_id,
122
- client_secret: @client_secret,
123
- resource: "https://vault.azure.net",
124
- )
125
- resp = send_request(uri, req)
126
- data = JSON.load(resp.body)
127
- if resp.code =~ /^2/
128
- @@token = "Bearer #{data['access_token']}" if data
129
- else
130
- logger.info "WARN: #{data['error_description']}".color(:yellow)
131
- # return false otherwise error message is used as the bearer toke and get this error:
132
- # ArgumentError: header field value cannot include CR/LF
133
- @@token = false
134
- end
47
+ private
48
+ def secret
49
+ Armrest::Services::KeyVault::Secret.new
135
50
  end
51
+ memoize :secret
136
52
 
137
- private
138
53
  delegate :expansion, to: :expander
139
54
  def expander
140
55
  TerraspacePluginAzurerm::Interfaces::Expander.new(@mod)
@@ -4,7 +4,6 @@ module TerraspacePluginAzurerm::Interfaces::Helper
4
4
  class Secret
5
5
  extend Memoist
6
6
  include TerraspacePluginAzurerm::Logging
7
- include TerraspacePluginAzurerm::Clients::Options
8
7
 
9
8
  def initialize(mod, options={})
10
9
  @mod, @options = mod, options
@@ -3,7 +3,6 @@ require 'azure/storage/blob'
3
3
  module TerraspacePluginAzurerm::Interfaces
4
4
  class Summary
5
5
  include Terraspace::Plugin::Summary::Interface
6
- include TerraspacePluginAzurerm::Clients::Storage # for mgmt storage_accounts to get keys only, the azure/storage/blob gem is used to get the objects
7
6
  extend Memoist
8
7
 
9
8
  # interface method
@@ -1,3 +1,3 @@
1
1
  module TerraspacePluginAzurerm
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -1,3 +1,4 @@
1
+ require "armrest"
1
2
  require "azure_info"
2
3
  require "memoist"
3
4
  require "terraspace" # for interface
@@ -22,10 +22,8 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ["lib"]
24
24
 
25
- spec.add_dependency "azure-storage-blob"
26
- spec.add_dependency "azure_info", "~> 0.1.2"
27
- spec.add_dependency "azure_mgmt_resources"
28
- spec.add_dependency "azure_mgmt_storage"
25
+ spec.add_dependency "armrest"
26
+ spec.add_dependency "azure_info"
29
27
  spec.add_dependency "memoist"
30
28
  spec.add_dependency "zeitwerk"
31
29
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terraspace_plugin_azurerm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-05 00:00:00.000000000 Z
11
+ date: 2022-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: azure-storage-blob
14
+ name: armrest
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -26,34 +26,6 @@ dependencies:
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: azure_info
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 0.1.2
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 0.1.2
41
- - !ruby/object:Gem::Dependency
42
- name: azure_mgmt_resources
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: azure_mgmt_storage
57
29
  requirement: !ruby/object:Gem::Requirement
58
30
  requirements:
59
31
  - - ">="
@@ -141,14 +113,11 @@ files:
141
113
  - lib/templates/test/rspec/project/spec/stacks/demo/main_spec.rb
142
114
  - lib/terraspace_plugin_azurerm.rb
143
115
  - lib/terraspace_plugin_azurerm/autoloader.rb
144
- - lib/terraspace_plugin_azurerm/clients/options.rb
145
- - lib/terraspace_plugin_azurerm/clients/resources.rb
146
- - lib/terraspace_plugin_azurerm/clients/storage.rb
147
116
  - lib/terraspace_plugin_azurerm/interfaces/backend.rb
148
117
  - lib/terraspace_plugin_azurerm/interfaces/backend/base.rb
118
+ - lib/terraspace_plugin_azurerm/interfaces/backend/blob_container.rb
149
119
  - lib/terraspace_plugin_azurerm/interfaces/backend/resource_group_creator.rb
150
120
  - lib/terraspace_plugin_azurerm/interfaces/backend/storage_account.rb
151
- - lib/terraspace_plugin_azurerm/interfaces/backend/storage_container.rb
152
121
  - lib/terraspace_plugin_azurerm/interfaces/config.rb
153
122
  - lib/terraspace_plugin_azurerm/interfaces/expander.rb
154
123
  - lib/terraspace_plugin_azurerm/interfaces/helper.rb
@@ -1,39 +0,0 @@
1
- module TerraspacePluginAzurerm::Clients
2
- module Options
3
- extend Memoist
4
-
5
- def client_options
6
- # AZURE_* is used by ruby generally.
7
- # ARM_* is used by Terraform azurerm provider: https://www.terraform.io/docs/providers/azurerm/index.html
8
- # Favor ARM_ because this plugin is designed for Terraspace.
9
- client_id = ENV['ARM_CLIENT_ID'] || ENV['AZURE_CLIENT_ID']
10
- client_secret = ENV['ARM_CLIENT_SECRET'] || ENV['AZURE_CLIENT_SECRET']
11
- subscription_id = ENV['ARM_SUBSCRIPTION_ID'] || ENV['AZURE_SUBSCRIPTION_ID'] || AzureInfo.subscription_id
12
- tenant_id = ENV['ARM_TENANT_ID'] || ENV['AZURE_TENANT_ID'] || AzureInfo.tenant_id
13
-
14
- o = {
15
- tenant_id: tenant_id,
16
- client_id: client_id,
17
- client_secret: client_secret,
18
- subscription_id: subscription_id,
19
- }
20
- validate_base_options!(o)
21
- o
22
- end
23
- memoize :client_options
24
-
25
- def validate_base_options!(options)
26
- vars = []
27
- options.each do |k,v|
28
- vars << "ARM_#{k}".upcase if v.nil?
29
- end
30
- return if vars.empty?
31
-
32
- logger.error "ERROR: Required Azure env variables missing. Please set these env variables:".color(:red)
33
- vars.each do |var|
34
- logger.error " #{var}"
35
- end
36
- exit 1
37
- end
38
- end
39
- end
@@ -1,17 +0,0 @@
1
- require 'azure_mgmt_resources'
2
-
3
- module TerraspacePluginAzurerm::Clients
4
- module Resources
5
- include Options
6
- extend Memoist
7
-
8
- # Include SDK modules to ease access to Resources classes.
9
- include Azure::Resources::Profiles::Latest::Mgmt
10
- include Azure::Resources::Profiles::Latest::Mgmt::Models
11
-
12
- def mgmt
13
- Client.new(client_options)
14
- end
15
- memoize :mgmt
16
- end
17
- end
@@ -1,26 +0,0 @@
1
- require "azure_mgmt_storage"
2
-
3
- module TerraspacePluginAzurerm::Clients
4
- module Storage
5
- include Options
6
- extend Memoist
7
-
8
- # Include SDK modules to ease access to Storage classes.
9
- include Azure::Storage::Profiles::Latest::Mgmt
10
- include Azure::Storage::Profiles::Latest::Mgmt::Models
11
-
12
- delegate :storage_accounts, :blob_services, :blob_containers, to: :mgmt
13
-
14
- def blob_containers
15
- BlobContainers.new(mgmt)
16
- end
17
- memoize :blob_containers
18
-
19
- def mgmt
20
- client = Client.new(client_options)
21
- client.subscription_id = client_options[:subscription_id]
22
- client
23
- end
24
- memoize :mgmt
25
- end
26
- end
@@ -1,29 +0,0 @@
1
- class TerraspacePluginAzurerm::Interfaces::Backend
2
- class StorageContainer < Base
3
- include TerraspacePluginAzurerm::Clients::Storage
4
-
5
- def create
6
- if exist?
7
- logger.debug "Storage Container #{@container_name} already exists"
8
- else
9
- create_storage_container
10
- end
11
- end
12
-
13
- def exist?
14
- begin
15
- blob_containers.get(@resource_group_name, @storage_account_name, @container_name)
16
- true
17
- rescue MsRestAzure::AzureOperationError => e
18
- e.message.include?("The specified container does not exist") ? false : raise
19
- end
20
- end
21
-
22
- def create_storage_container
23
- logger.info "Creating Storage Container #{@container_name}..."
24
- blob_container = BlobContainer.new
25
- blob_container.name = @container_name
26
- blob_containers.create(@resource_group_name, @storage_account_name, @container_name, blob_container)
27
- end
28
- end
29
- end