我有三个不同环境的三个特定用户数据文件。根据{{1}}(环境)变量的用户输入,我们必须为env
terraform资源选择一个用户数据文件。
aws_instance
以下是三个用户数据文件:
variable "env" {
description = "choose env between dev | prod | qa "
}
user_data_dev.sh
#!/bin/bash
DOMAIN = "testing.dev.xxxx.com"
PORT = "8080"
user_data_prod.sh
#!/bin/bash
DOMAIN = "testing.prod.xxxx.com"
PORT = "8080"
user_data_qa.sh
答案 0 :(得分:2)
除非你在问题中过分简化你的问题,否则你会模仿静态文件而不是实际将变量传递给它们。
因为这些静态文件似乎因硬编码域而异,所以您应该使用以下内容动态渲染它们:
#!/bin/bash
DOMAIN = "${domain}"
PORT = "8080"
variable "environment" {}
variable "environment_domains" {
default = {
"dev" = "testing.dev.xxxx.com"
"qa" = "testing.prod.xxxx.com"
"prod" = "testing.qa.xxxx.com"
}
}
data "template_file" "user_data" {
template = "${file("${path.module}/user-data.sh.tpl")}"
vars {
domain = "${lookup(var.environment_domains, var.environment)}"
}
}
resource "aws_instance" "server" {
...
user_data = "${template_file.user_data.rendered}"
...
}
根据环境,Terraform将从environment_domains
地图中查找与环境匹配的域,然后将其替换为模板的渲染输出。
答案 1 :(得分:1)
如果您确实想为每个环境使用单独的模板文件,可以按环境名称查找相应的文件:
data "template_file" "user_data" {
template = "${file("${path.module}/user-data-${var.env}.sh")}"
...
}
resource "aws_instance" "server" {
user_data = "${template_file.user_data.rendered}"
...
}