Skip to content

Commit

Permalink
move azure action and flags
Browse files Browse the repository at this point in the history
  • Loading branch information
simongottschlag committed Dec 23, 2020
1 parent 132fd0b commit 2970610
Show file tree
Hide file tree
Showing 2 changed files with 137 additions and 128 deletions.
131 changes: 3 additions & 128 deletions docker/go-tf-prepare/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (
func main() {
stdr.SetVerbosity(1)
log := stdr.New(stdlog.New(os.Stderr, "", stdlog.LstdFlags|stdlog.Lshortfile))
log = log.WithName("go-tf-preparer")
log = log.WithName("tf-prepare")

ctx := logr.NewContext(context.Background(), log)

Expand All @@ -23,9 +23,9 @@ func main() {
{
Name: "azure",
Usage: "Terraform prepare for Azure",
Flags: azureFlags(),
Flags: azure.Flags(),
Action: func(cli *cli.Context) error {
err := azureAction(ctx, cli)
err := azure.Action(ctx, cli)
if err != nil {
return err
}
Expand All @@ -43,128 +43,3 @@ func main() {

os.Exit(0)
}

func azureAction(ctx context.Context, cli *cli.Context) error {
servicePrincipalObjectID := cli.String("service-principal-object-id")
subscriptionID := cli.String("subscription-id")
tenantID := cli.String("tenant-id")
resourceGroupName := cli.String("resource-group-name")
resourceGroupLocation := cli.String("resource-group-location")
storageAccountName := cli.String("storage-account-name")
storageAccountContainer := cli.String("storage-account-container")
keyVaultName := cli.String("keyvault-name")
keyVaultKeyName := cli.String("keyvault-key-name")
resourceLocks := cli.Bool("resource-locks")

err := azure.CreateResourceGroup(ctx, resourceGroupName, resourceGroupLocation, subscriptionID)
if err != nil {
return err
}

err = azure.CreateStorageAccount(ctx, resourceGroupName, resourceGroupLocation, storageAccountName, subscriptionID)
if err != nil {
return err
}

if resourceLocks {
err = azure.CreateResourceLock(ctx, resourceGroupName, "Microsoft.Storage", "", "storageAccounts", storageAccountName, "DoNotDelete", subscriptionID)
if err != nil {
return err
}
}

err = azure.CreateStorageAccountContainer(ctx, resourceGroupName, storageAccountName, storageAccountContainer, subscriptionID)
if err != nil {
return err
}

err = azure.CreateKeyVault(ctx, resourceGroupName, resourceGroupLocation, keyVaultName, subscriptionID, tenantID)
if err != nil {
return err
}

if resourceLocks {
err = azure.CreateResourceLock(ctx, resourceGroupName, "Microsoft.KeyVault", "", "vaults", keyVaultName, "DoNotDelete", subscriptionID)
if err != nil {
return err
}
}

err = azure.CreateKeyVaultAccessPolicy(ctx, resourceGroupName, resourceGroupLocation, keyVaultName, subscriptionID, tenantID, servicePrincipalObjectID)
if err != nil {
return err
}

err = azure.CreateKeyVaultKey(ctx, resourceGroupName, keyVaultName, keyVaultKeyName, subscriptionID)
if err != nil {
return err
}

return nil
}

func azureFlags() []cli.Flag {
flags := []cli.Flag{
&cli.StringFlag{
Name: "service-principal-object-id",
Usage: "Service Principal Object ID",
Required: false,
EnvVars: []string{"AZURE_SERVICE_PRINCIPAL_OBJECT_ID"},
},
&cli.StringFlag{
Name: "subscription-id",
Usage: "Azure Subscription ID",
Required: true,
EnvVars: []string{"AZURE_SUBSCRIPTION_ID"},
},
&cli.StringFlag{
Name: "tenant-id",
Usage: "Azure Tenant ID",
Required: true,
EnvVars: []string{"AZURE_TENANT_ID"},
},
&cli.StringFlag{
Name: "resource-group-name",
Usage: "Azure Resource Group Name",
Required: true,
EnvVars: []string{"AZURE_RESOURCE_GROUP_NAME"},
},
&cli.StringFlag{
Name: "resource-group-location",
Usage: "Azure Resource Group Location",
Required: true,
EnvVars: []string{"AZURE_RESOURCE_GROUP_LOCATION"},
},
&cli.StringFlag{
Name: "storage-account-name",
Usage: "Azure Storage Account Name",
Required: true,
EnvVars: []string{"AZURE_STORAGE_ACCOUNT_NAME"},
},
&cli.StringFlag{
Name: "storage-account-container",
Usage: "Azure Storage Account Container",
Required: true,
EnvVars: []string{"AZURE_STORAGE_ACCOUNT_CONTAINER"},
},
&cli.StringFlag{
Name: "keyvault-name",
Usage: "Azure KeyVault Name",
Required: true,
EnvVars: []string{"AZURE_KEYVAULT_NAME"},
},
&cli.StringFlag{
Name: "keyvault-key-name",
Usage: "Azure KeyVault Key Name",
Required: true,
EnvVars: []string{"AZURE_KEYVAULT_KEY_NAME"},
},
&cli.BoolFlag{
Name: "resource-locks",
Usage: "Should Azure Resource Locks be used?",
Value: true,
EnvVars: []string{"AZURE_RESOURCE_LOCKS"},
},
}
return flags
}
134 changes: 134 additions & 0 deletions docker/go-tf-prepare/pkg/azure/azure_cli.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
package azure

import (
"context"

"github.com/urfave/cli/v2"
)

// Action executes the Azure action
func Action(ctx context.Context, cli *cli.Context) error {
servicePrincipalObjectID := cli.String("service-principal-object-id")
subscriptionID := cli.String("subscription-id")
tenantID := cli.String("tenant-id")
resourceGroupName := cli.String("resource-group-name")
resourceGroupLocation := cli.String("resource-group-location")
storageAccountName := cli.String("storage-account-name")
storageAccountContainer := cli.String("storage-account-container")
keyVaultName := cli.String("keyvault-name")
keyVaultKeyName := cli.String("keyvault-key-name")
resourceLocks := cli.Bool("resource-locks")

err := CreateResourceGroup(ctx, resourceGroupName, resourceGroupLocation, subscriptionID)
if err != nil {
return err
}

err = CreateStorageAccount(ctx, resourceGroupName, resourceGroupLocation, storageAccountName, subscriptionID)
if err != nil {
return err
}

if resourceLocks {
err = CreateResourceLock(ctx, resourceGroupName, "Microsoft.Storage", "", "storageAccounts", storageAccountName, "DoNotDelete", subscriptionID)
if err != nil {
return err
}
}

err = CreateStorageAccountContainer(ctx, resourceGroupName, storageAccountName, storageAccountContainer, subscriptionID)
if err != nil {
return err
}

err = CreateKeyVault(ctx, resourceGroupName, resourceGroupLocation, keyVaultName, subscriptionID, tenantID)
if err != nil {
return err
}

if resourceLocks {
err = CreateResourceLock(ctx, resourceGroupName, "Microsoft.KeyVault", "", "vaults", keyVaultName, "DoNotDelete", subscriptionID)
if err != nil {
return err
}
}

err = CreateKeyVaultAccessPolicy(ctx, resourceGroupName, resourceGroupLocation, keyVaultName, subscriptionID, tenantID, servicePrincipalObjectID)
if err != nil {
return err
}

err = CreateKeyVaultKey(ctx, resourceGroupName, keyVaultName, keyVaultKeyName, subscriptionID)
if err != nil {
return err
}

return nil
}

// Flags returns the cli flags for Azure
func Flags() []cli.Flag {
flags := []cli.Flag{
&cli.StringFlag{
Name: "service-principal-object-id",
Usage: "Service Principal Object ID",
Required: false,
EnvVars: []string{"AZURE_SERVICE_PRINCIPAL_OBJECT_ID"},
},
&cli.StringFlag{
Name: "subscription-id",
Usage: "Azure Subscription ID",
Required: true,
EnvVars: []string{"AZURE_SUBSCRIPTION_ID"},
},
&cli.StringFlag{
Name: "tenant-id",
Usage: "Azure Tenant ID",
Required: true,
EnvVars: []string{"AZURE_TENANT_ID"},
},
&cli.StringFlag{
Name: "resource-group-name",
Usage: "Azure Resource Group Name",
Required: true,
EnvVars: []string{"AZURE_RESOURCE_GROUP_NAME"},
},
&cli.StringFlag{
Name: "resource-group-location",
Usage: "Azure Resource Group Location",
Required: true,
EnvVars: []string{"AZURE_RESOURCE_GROUP_LOCATION"},
},
&cli.StringFlag{
Name: "storage-account-name",
Usage: "Azure Storage Account Name",
Required: true,
EnvVars: []string{"AZURE_STORAGE_ACCOUNT_NAME"},
},
&cli.StringFlag{
Name: "storage-account-container",
Usage: "Azure Storage Account Container",
Required: true,
EnvVars: []string{"AZURE_STORAGE_ACCOUNT_CONTAINER"},
},
&cli.StringFlag{
Name: "keyvault-name",
Usage: "Azure KeyVault Name",
Required: true,
EnvVars: []string{"AZURE_KEYVAULT_NAME"},
},
&cli.StringFlag{
Name: "keyvault-key-name",
Usage: "Azure KeyVault Key Name",
Required: true,
EnvVars: []string{"AZURE_KEYVAULT_KEY_NAME"},
},
&cli.BoolFlag{
Name: "resource-locks",
Usage: "Should Azure Resource Locks be used?",
Value: true,
EnvVars: []string{"AZURE_RESOURCE_LOCKS"},
},
}
return flags
}

0 comments on commit 2970610

Please sign in to comment.