Передача переменных, назначенных в сценарии оболочки

Я пытаюсь запустить развертывание Terraform с помощью сценария Shell, где в сценарии Shell я сначала динамически собираю ключ доступа для моей учетной записи хранения Azure и назначаю его переменной. Затем я хочу использовать переменную в присваивании -var в командной строке terraform. Этот метод отлично работает при настройке серверной части для удаленного состояния, но он не работает для развертывания. Другие переменные, используемые в шаблоне, извлекаются из файла terraform.tfvars. Ниже мой сценарий Shell и шаблон Terraform:

Сценарий оболочки:

#!/bin/bash
set -eo pipefail

subscription_name="Visual Studio Enterprise with MSDN"
tfstate_storage_resource_group="terraform-state-rg"
tfstate_storage_account="terraformtfstatesa"

az account set --subscription "$subscription_name"
tfstate_storage_access_key=$(
  az storage account keys list \
  --resource-group "$tfstate_storage_resource_group" \
  --account-name "$tfstate_storage_account" \
  --query '[0].value' -o tsv
)

echo $tfstate_storage_access_key

terraform apply \
  -var "access_key=$tfstate_storage_access_key"

Шаблон развертывания:

provider "azurerm" {
  subscription_id = "${var.sub_id}"
}

data "terraform_remote_state" "rg" {
  backend = "azurerm"

  config {
    storage_account_name = "terraformtfstatesa"
    container_name       = "terraform-state"
    key                  = "rg.stage.project.terraform.tfstate"
    access_key           = "${var.access_key}"
  }
}

resource "azurerm_storage_account" "my_table" {
  name                     = "${var.storage_account}"
  resource_group_name      = "${data.terraform_remote_state.rg.rgname}"
  location                 = "${var.region}"
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

Я попытался определить переменную в моем файле terraform.tfvars:

storage_account = "appastagesa"

les_table_name = "appatable

region = "eastus"

sub_id = "abc12345-099c-1234-1234-998899889988"

access_key = ""

Кажется, определение access_key игнорируется.

Затем я попытался не используя terraform.tfvars файл, и создал файл variables.tf ниже:

variable storage_account {
  description = "Name of the storage account to create"
  default     = "appastagesa"
}

variable les_table_name {
  description = "Name of the App table to create"
  default     = "appatable"
}

variable region {
  description = "The region where resources will be deployed (ex. eastus, eastus2, etc.)"
  default     = "eastus"
}

variable sub_id {
  description = "The ID of the subscription to deploy into"
  default     = "abc12345-099c-1234-1234-998899889988"
}

variable access_key {}

Затем я изменил мой deploy.sh скрипт для использования строки ниже для запуска моего развертывания terraform:

terraform apply \
  -var "access_key=$tfstate_storage_access_key" \
  -var-file="variables.tf"

Это приводит к ошибке invalid value "variables.tf" for flag -var-file: multiple map declarations not supported for variables Usage: terraform apply [options] [DIR-OR-PLAN] быть брошенным

1 ответ

После нескольких часов игры... Я почти смущен тем, в чем проблема, но я также разочарован в Terraform из-за времени, потраченного на эту проблему.

У меня были все мои переменные, определенные в моем variables.tf файл со всеми, кроме одного, имеющего значения по умолчанию. Для одного без значения по умолчанию я передавал его как часть командной строки. Моя командная строка была там, где была проблема. Из-за всей документации, которую я прочитал, я подумал, что должен сказать terraform, какой у меня файл переменных, используя -var-file вариант. Оказывается, нет, и когда я это сделал, выкинул ошибку. Оказывается, все, что мне нужно было сделать, это использовать -var опция для переменной, которая не имеет определенного значения по умолчанию и terraform просто автоматически увидела variables.tf файл. Разочарование. Я влюблен в Terraform, но один минус, который я бы сказал, это отсутствие документации.

Другие вопросы по тегам