python-3.x - 无法使用模块 python_terraform 通过 python 包装器将 variables.tfvars 文件中的值替换为输入变量
问题描述
以下是我拥有的文件
- Python 包装器
- 一个简单的 terraform main.tf 来启动一个 ec2 实例
- 一个 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
请有人帮忙
解决方案
你的variables.tfvars
应该叫 variables.tf
. 您也不能声明variable "tags"
哪个取决于其他变量。相反,您应该创建一个local
in 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
}
推荐阅读
- node.js - nodejs服务器在初始化时连接到mongodb:服务器未连接到互联网
- java - 安卓奥利奥通知
- sql - SQL 查询场景
- java - 自定义 ConstraintValidator Autowire 不起作用
- swift - 在嵌入式子视图中单击按钮的 SwiftUI 推送多个视图
- list - 没有为“Shoplist”类型定义吸气剂“长度”
- passport.js - Passport Js - email 参数在哪里定义?
- tcl - 如何从 Tcl 中的十六进制值字符串中提取位字段并将它们输出为整数?
- javascript - firebase:删除属于 userId 的数据
- excel - 复制 Excel 中的每 n 列