Как передать переменную env с планом terraform - PullRequest
0 голосов
/ 22 февраля 2020

Я мог бы использовать руку с вопросом ниже. я пытаюсь создать vnet.

main.tf

module "vnet" {
  source                      = "./vnet"
  vnet_address_space          = var.vnet_address_space
}

variable "vnet_address_space" {
  type = "list"
}

vnet / vnet .tf

variable "vnet_address_space" {
}

resource "azurerm_resource_group" "kubernetes" {
  name     = "bram-test2"
  location = "westeurope"
  tags = {
    Team        = "Platform"
    Tool        = "Terraform"
  }
}

resource "azurerm_virtual_network" "kubernetes" {
  name                = "vnet"
  location            = "westeurope"
  resource_group_name = "${azurerm_resource_group.kubernetes.name}"
  address_space       = var.vnet_address_space
  tags = {
    Team        = "Platform"
    Tool        = "Terraform"
  }
}

план terraform:

terraform plan -var 'vnet_address_space=["10.0.0.0/24"]'

Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage.
------------------------------------------------------------------------ An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols:   + create Terraform will perform the following actions:   # module.vnet.azurerm_resource_group.kubernetes will be created   + resource "azurerm_resource_group" "kubernetes" {
      + id       = (known after apply)
      + location = "westeurope"
      + name     = "bram-test2"
      + tags     = {
          + "Team" = "Platform"
          + "Tool" = "Terraform"
        }
    }   # module.vnet.azurerm_virtual_network.kubernetes will be created   + resource "azurerm_virtual_network" "kubernetes" {
      + address_space       = [
          + "10.0.0.0/24",
        ]
      + id                  = (known after apply)
      + location            = "westeurope"
      + name                = "vnet"
      + resource_group_name = "bram-test2"
      + tags                = {
          + "Team" = "Platform"
          + "Tool" = "Terraform"
        }
      + subnet {
          + address_prefix = (known after apply)
          + id             = (known after apply)
          + name           = (known after apply)
          + security_group = (known after apply)
        }
    } Plan: 2 to add, 0 to change, 0 to destroy.

Таким образом, передача cidr прямо в план, как работает var. Но когда я устанавливаю переменную env, это не так:

terraform plan -var 'vnet_address_space=["${vnet_address_space}"]'

Error: Variables not allowed
  on <value for var.vnet_address_space> line 1:
  (source code not available)
Variables may not be used here.
Error: No value for required variable
  on main.tf line 6:
   6: variable "vnet_address_space" {
The root module input variable "vnet_address_space" is not set, and has no
default value. Use a -var or -var-file command line argument to provide a
value for this variable.

Даже если env установлен правильно.

 echo $vnet_address_space
10.0.0.0/24

Любой, кто знает, как передать переменную env вместе с план?

Ответы [ 2 ]

1 голос
/ 22 февраля 2020
terraform plan -var "vnet_address_space=[${vnet_address_space}]"

Таким образом, план работает локально ... но все же не через мой azure конвейер devops:

Error: Invalid number literal

  on <value for var.vnet_address_space> line 1:
  (source code not available)

Failed to recognize the value of this number literal.

##[error]Bash exited with code '1'.

Это действительно помогло:

terraform plan -var "vnet_address_space=[\"${vnet_address_space}\"]"
0 голосов
/ 24 февраля 2020

Другой более прямой путь, если вы хотите передать информацию о переменной через переменную окружения, - это использовать переменную окружения Terraform, переменная synatax . Одним из выделенных преимуществ является то, что он может быть полезен при работе в автоматизации. Например,

export TF_VAR_vnet_address_space=10.0.0.0/24
tf plan

TF_VAR_ будет интерпретироваться как префикс переменной, а vnet_address_space будет рассматриваться как переменный ввод.

...