Передача переменных, назначенных в сценарии оболочки
Я пытаюсь запустить развертывание 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, но один минус, который я бы сказал, это отсутствие документации.