terraform - Terraform 模块 - 计数 = 0 时的输出错误
问题描述
我对 Terraform 比较陌生 - 我有一个如下的模块设置,如果在运行 terraform 计划时模块计数为“0”,我遇到的问题是输出。由于我使用了 element(concat 解决方法,但我遇到问题的输出是 DCPWUn,因此输出 PW 工作正常,我收到以下错误:
Error: Error refreshing state: 1 error(s) occurred:
* module.PrimaryDC.output.DCPWUn: At column 21, line 1: rsadecrypt: argument 1 should be type string, got type list in:
${element(concat("${rsadecrypt(aws_spot_instance_request.PrimaryDC.*.password_data,file("${var.PATH_TO_PRIVATE_KEY}"))}", list("")), 0)}
代码:
resource "aws_spot_instance_request" "PrimaryDC" {
wait_for_fulfillment = true
provisioner "local-exec" {
command = "aws ec2 create-tags --resources ${self.spot_instance_id} --tags Key=Name,Value=${var.ServerName}0${count.index +01}"
}
ami = "ami-629a7405"
spot_price = "0.01"
instance_type = "t2.micro"
count = "${var.count}"
key_name = "${var.KeyPair}"
subnet_id = "${var.Subnet}"
vpc_security_group_ids = ["${var.SecurityGroup}"]
get_password_data = "true"
user_data = <<EOF
<powershell>
Rename-computer -NewName "${var.ServerName}0${count.index +01}"
</powershell>
EOF
tags {
Name = "${var.ServerName}0${count.index +01}"
}
}
output "PW" {
value = "${element(concat("${aws_spot_instance_request.PrimaryDC.*.password_data}", list("")), 0)}"
}
output "DCPWUn" {
value = "${element(concat("${rsadecrypt(aws_spot_instance_request.PrimaryDC.*.password_data,file("${var.PATH_TO_PRIVATE_KEY}"))}", list("")), 0)}"
}
解决方案
正如错误所说, rsadecrypt 有一个类型为列表的参数,而不是应有的字符串。如果要确保参数是字符串,则需要反转函数调用嵌套以确保 rsadecrypt 获取字符串:
output "DCPWUn" {
value = "${rsadecrypt(element(concat(aws_spot_instance_request.PrimaryDC.*.password_data, list("")), 0),file("${var.PATH_TO_PRIVATE_KEY}"))}"
}
推荐阅读
- python - 按下时如何使网格中的图块改变颜色?
- javascript - mutationObserver 检查 textContent 是否更改
- python - 如何只得到整数而不四舍五入?
- flutter - 将字段从一个列表移动到另一个列表
- arrays - 在`O(j)`中打印元素?
- android - 房间 (SQL) 查询以获取按今天第一、明天第二和所有其他顺序排序的结果
- javascript - js中不能设置元素的href和src
- asp.net-core - 在 Visual Studio 2019 预览版中自动从监视和构建中排除 Razor 文件
- css - 本地 CSS 或 JS 的 MIME 类型错误阻止在使用 NodeJ 时加载自定义样式
- javascript - 将数组转换为具有前缀值作为javascript中键的对象的最佳方法