Могу ли я использовать переменные в файле TerraForm main.tf? - PullRequest
0 голосов
/ 18 сентября 2018

Хорошо, у меня есть три .tf -файла: main.tf, где я указываю лазурь в качестве провайдера, resources.tf, где заявлены все мои ресурсы, и variables.tf.

Я использую variables.tf для хранения ключей, используемых resources.tf.

Однако я хочу использовать переменные, хранящиеся в моем файле переменных, чтобы заполнить поля в области действия бэкэнда следующим образом:

main.tf:

provider "azurerm" {
    version = "=1.5.0"
}

    terraform {
        backend "azurerm" {

        storage_account_name = "${var.sa_name}"
        container_name = "${var.c_name}"
        key = "${var.key}"
        access_key = "${var.access_key}"
    }
}

Переменные, хранящиеся в variables.tf, например:

variable "sa_name" {
    default = "myStorageAccount"
}

variable "c_name" {
    default = "tfstate"
}

variable "key" {
    default = "codelab.microsoft.tfstate"
}

variable "access_key" {
    default = "weoghwoep489ug40gu ... "
}

Я получил это при запуске terraform init:

terraform.backend: конфигурация не может содержать интерполяции

Конфигурация сервера загружается Terraform очень рано, прежде чем ядро ​​Terraform может быть инициализировано. Это необходимо потому что бэкэнд диктует поведение этого ядра. Ядро что обрабатывает интерполяционную обработку. Из-за этого интерполяции нельзя использовать в бэкэнд-конфигурации.

Если вы хотите параметризовать конфигурацию сервера, мы рекомендуем используя частичную конфигурацию с флагом «-backend-config» для "terraform init".

Есть ли способ решить это? Я действительно хочу, чтобы все мои ключи / секреты были в одном файле ... а не один ключ в главном, который я предпочитаю нажимать для git.

1 Ответ

0 голосов
/ 18 сентября 2018

Terraform не заботится о именах файлов: он просто загружает все .tf файлы в текущем каталоге и обрабатывает их. Такие имена, как main.tf, variables.tf и outputs.tf являются полезными соглашениями, облегчающими разработчикам навигацию по коду, но они не окажут большого влияния на поведение Terraform.

Причина появления ошибки заключается в том, что вы пытаетесь использовать переменные в конфигурации backend. К сожалению, Terraform не допускает никакой интерполяции (любой ${...}) в бэкэндах. Цитирование из документации :

Может быть указан только один бэкэнд, и конфигурация может не содержать интерполяции. Terraform подтвердит это.

Таким образом, вы должны либо жестко закодировать все значения в backend, либо предоставить частичную конфигурацию и заполнить остальную часть конфигурации с помощью параметров CLI, используя внешний инструмент (например, Terragrunt ).

...