首页 > 解决方案 > 无法使用模块 python_terraform 通过 python 包装器将 variables.tfvars 文件中的值替换为输入变量

问题描述

以下是我拥有的文件

  1. Python 包装器
  2. 一个简单的 terraform main.tf 来启动一个 ec2 实例
  3. 一个 variables.tfvars 文件

蟒蛇包装

from python_terraform import *

variable_a = input()
variable_b = input()
variable_c = input()

tf = Terraform(working_dir='<terraform directory', variables={'variable_a':variable_a, 'variable_b':variable_b, 'variable_c':variable_c})
tf.init()
output = tf.apply(no_color=IsFlagged, refresh=False)
print(output)

主文件

provider "aws" {
  profile = "default"
  region  = "us-east-1"
}
resource "aws_instance" "example" {
  ami           = "ami-09d19e919d57453f8"
  instance_type = "t2.micro"
  tags = var.tags
}

变量.tfvars

variable "variable_a" {}
variable "variable_b" {}
variable "variable_c" {}

variable "tags" {
    type = map(string)
    default = {
        costcenter = "${var.variable_a}"
        environment = "${var.variable_b}"
        primary_email = "${var.variable_c}"
     }
}

我的要求是使用 python 包装器获取变量输入,然后将值作为创建的 aws 资源的标签传递。但这似乎不起作用,每次我收到以下错误

未声明变量的值\n\n根模块未声明名为“variable_a”的变量,但在文件“/tmp/tmpqzpbtamy.tfvars.json”中找到了一个值。要使用此值,请将\n“变量”块添加到配置中。\n\n使用变量文件设置未声明的变量已被弃用,并且在未来的版本中将\n成为错误。如果您希望为组织中的所有配置提供某些“全局”\n设置,请改用 TF_VAR_...\n环境变量来设置这些设置。\n\n\n警告:未声明变量的值\n\n

请有人帮忙

标签: python-3.xamazon-web-servicesamazon-ec2terraform

解决方案


你的variables.tfvars 应该叫 variables.tf. 您也不能声明variable "tags"哪个取决于其他变量。相反,您应该创建一个localin main.tf

locals {
  tags = {
      costcenter = var.variable_a
      environment = var.variable_b
      primary_email = var.variable_c
  }
}

resource "aws_instance" "example" {
  ami           = "ami-09d19e919d57453f8"
  instance_type = "t2.micro"
  tags          = local.tags
}

推荐阅读