Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

use armrest gem #14

Merged
merged 1 commit into from Jan 20, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions README.md
@@ -1,5 +1,9 @@
# Terraspace Azurerm Plugin

[![BoltOps Badge](https://img.boltops.com/boltops/badges/boltops-badge.png)](https://www.boltops.com)

[![Gem Version](https://badge.fury.io/rb/terraspace_plugin_azurerm.svg)](https://badge.fury.io/rb/terraspace_plugin_azurerm)

Azurerm support for [terraspace](https://terraspace.cloud/).

## Installation
Expand Down
1 change: 1 addition & 0 deletions lib/terraspace_plugin_azurerm.rb
@@ -1,3 +1,4 @@
require "armrest"
require "azure_info"
require "memoist"
require "terraspace" # for interface
Expand Down
39 changes: 0 additions & 39 deletions lib/terraspace_plugin_azurerm/clients/options.rb

This file was deleted.

17 changes: 0 additions & 17 deletions lib/terraspace_plugin_azurerm/clients/resources.rb

This file was deleted.

26 changes: 0 additions & 26 deletions lib/terraspace_plugin_azurerm/clients/storage.rb

This file was deleted.

2 changes: 1 addition & 1 deletion lib/terraspace_plugin_azurerm/interfaces/backend.rb
Expand Up @@ -8,7 +8,7 @@ def call

ResourceGroupCreator.new(@info).create
StorageAccount.new(@info).create
StorageContainer.new(@info).create
BlobContainer.new(@info).create
end
end
end
26 changes: 26 additions & 0 deletions lib/terraspace_plugin_azurerm/interfaces/backend/blob_container.rb
@@ -0,0 +1,26 @@
class TerraspacePluginAzurerm::Interfaces::Backend
class BlobContainer < Base
def create
if exist?
logger.debug "Storage Blob Container #{@container_name} already exists"
else
create_blob_container
end
end

def exist?
blob_container.exist?(name: @container_name)
end

def create_blob_container
logger.info "Creating Storage Blob Container #{@container_name}..."
blob_container.create(name: @container_name)
end

private
def blob_container
Armrest::Services::BlobContainer.new(storage_account: @storage_account_name, group: @resource_group_name)
end
memoize :blob_container
end
end
@@ -1,33 +1,32 @@
class TerraspacePluginAzurerm::Interfaces::Backend
# Named ResourceGroupCreator to avoid collision with Azure ResourceGroup model
class ResourceGroupCreator < Base
include TerraspacePluginAzurerm::Clients::Resources

def create
if exist?
logger.debug "Resource Group #{@resource_group_name} already exists"
create_or_update_resource_group if config.resource_group.update_existing
else
create_resource_group
create_or_update_resource_group
end
end

def exist?
resource_groups.check_existence(@resource_group_name)
resource_group.check_existence(name: @resource_group_name)
end

def create_resource_group
def create_or_update_resource_group
logger.info "Creating Resource Group #{@resource_group_name}..."
resource_group = ResourceGroup.new
resource_group.name = @resource_group_name
resource_group.location = config.location || AzureInfo.location
resource_group.tags = config.tags
resource_groups.create_or_update(@resource_group_name, resource_group)
resource_group.create_or_update(
name: @resource_group_name,
location: config.location || AzureInfo.location,
tags: config.tags,
)
end

private
def resource_groups
ResourceGroups.new(mgmt)
def resource_group
Armrest::Services::ResourceGroup.new
end
memoize :resource_groups
memoize :resource_group
end
end
96 changes: 47 additions & 49 deletions lib/terraspace_plugin_azurerm/interfaces/backend/storage_account.rb
@@ -1,23 +1,20 @@
class TerraspacePluginAzurerm::Interfaces::Backend
class StorageAccount < Base
include TerraspacePluginAzurerm::Clients::Storage
extend Memoist

def create
if exist?
logger.debug "Storage Account #{@storage_account_name} already exists"
update_storage_account if config.storage_account.update_existing
save_storage_account if config.storage_account.update_existing
set_blob_service_properties if config.storage_account.configure_data_protection_for_existing
else
create_storage_account
save_storage_account
set_blob_service_properties
end
end

def exist?
params = StorageAccountCheckNameAvailabilityParameters.new
params.name = @storage_account_name
result = storage_accounts.check_name_availability(params)
result = storage_account.check_name_availability(name: @storage_account_name)
validate!(result)
!result.name_available
end
Expand All @@ -35,59 +32,60 @@ def validate!(result)
end
end

def update_storage_account
logger.debug "Updating Storage Account #{@storage_account_name}..."
storage_accounts.update(@resource_group_name, @storage_account_name, storage_account_update_params)
def save_storage_account
action = exist? ? "Updating" : "Creating"
logger.info "#{action} Storage Account #{@storage_account_name}..."
storage_account.create(
name: @storage_account_name,
location: config.location || azure_info.location, # IE: eastus
sku: {
name: config.storage_account.sku.name,
tier: config.storage_account.sku.tier,
},
properties: {
allow_blob_public_access: config.storage_account.allow_blob_public_access,
},
kind: "StorageV2",
tags: config.tags,
)
end

def create_storage_account
logger.info "Creating Storage Account #{@storage_account_name}..."
storage_accounts.create(@resource_group_name, @storage_account_name, storage_account_create_params)
end

def storage_account_create_params
params = StorageAccountCreateParameters.new
params.location = config.location || azure_info.location # IE: eastus
params.sku = sku
params.allow_blob_public_access = config.storage_account.allow_blob_public_access
params.kind = Kind::StorageV2
params.tags = config.tags
params
def set_blob_service_properties
blob_service.set_properties(blob_service_properties)
end

def storage_account_update_params
params = StorageAccountUpdateParameters.new
params.allow_blob_public_access = config.storage_account.allow_blob_public_access
params
def blob_service_properties
sa = config.storage_account
container_delete_retention_policy = {
days: sa.container_delete_retention_policy.days || sa.delete_retention_policy.days,
enabled: sa.container_delete_retention_policy.enabled || sa.delete_retention_policy.enabled,
}
# blobs
delete_retention_policy = {
days: sa.blob_delete_retention_policy.days || sa.delete_retention_policy.days,
enabled: sa.blob_delete_retention_policy.enabled || sa.delete_retention_policy.enabled,
}
# final props
{
container_delete_retention_policy: container_delete_retention_policy,
delete_retention_policy: delete_retention_policy,
is_versioning_enabled: sa.is_versioning_enabled,
}
end

def sku
sku = Sku.new
sku.name = config.storage_account.sku.name
sku.tier = config.storage_account.sku.tier
sku
private
def storage_account
Armrest::Services::StorageAccount.new(service_options)
end
memoize :storage_account

def set_blob_service_properties
blob_services.set_service_properties(@resource_group_name, @storage_account_name, blob_service_properties)
def blob_service
Armrest::Services::BlobService.new(service_options)
end
memoize :blob_service

def blob_service_properties
props = BlobServiceProperties.new

sa = config.storage_account
policy = DeleteRetentionPolicy.new
policy.days = sa.container_delete_retention_policy.days || sa.delete_retention_policy.days
policy.enabled = sa.container_delete_retention_policy.enabled || sa.delete_retention_policy.enabled
props.container_delete_retention_policy = policy # containers

policy = DeleteRetentionPolicy.new
policy.days = sa.blob_delete_retention_policy.days || sa.delete_retention_policy.days
policy.enabled = sa.blob_delete_retention_policy.enabled || sa.delete_retention_policy.enabled
props.delete_retention_policy = policy # blobs

props.is_versioning_enabled = sa.is_versioning_enabled
props
def service_options
{ storage_account: @storage_account_name, group: @resource_group_name }
end
end
end

This file was deleted.

3 changes: 3 additions & 0 deletions lib/terraspace_plugin_azurerm/interfaces/config.rb
Expand Up @@ -20,6 +20,9 @@ def defaults
c.secrets = ActiveSupport::OrderedOptions.new
c.secrets.vault = nil

c.resource_group = ActiveSupport::OrderedOptions.new
c.resource_group.update_existing = false

c.storage_account = ActiveSupport::OrderedOptions.new
c.storage_account.update_existing = false
c.storage_account.sku = ActiveSupport::OrderedOptions.new
Expand Down
1 change: 0 additions & 1 deletion lib/terraspace_plugin_azurerm/interfaces/helper/secret.rb
Expand Up @@ -4,7 +4,6 @@ module TerraspacePluginAzurerm::Interfaces::Helper
class Secret
extend Memoist
include TerraspacePluginAzurerm::Logging
include TerraspacePluginAzurerm::Clients::Options

def initialize(mod, options={})
@mod, @options = mod, options
Expand Down