我对Terraform相对较新-我有一个如下所示的模块设置,如果运行Terraform计划时模块计数为“ 0”,则输出存在问题。现在我已经使用了element(concat解决方法,但是输出PW正常工作,但是我遇到的输出是DCPWUn,出现以下错误:
Counter = Sheets("HelperSheet").Range("MyCounter").Value
代码:
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)}
答案 0 :(得分:0)
如错误所述,rsadecrypt的参数类型为list,而不是应为字符串。如果要确保参数是字符串,则需要反转函数调用嵌套以确保rsadecrypt获取字符串:
output "DCPWUn" {
value = "${rsadecrypt(element(concat(aws_spot_instance_request.PrimaryDC.*.password_data, list("")), 0),file("${var.PATH_TO_PRIVATE_KEY}"))}"
}
答案 1 :(得分:-1)
问题出在这行
${element(concat("${rsadecrypt(aws_spot_instance_request.PrimaryDC.*.password_data,file("${var.PATH_TO_PRIVATE_KEY}"))}", list("")), 0)}
您要达到什么目标?让我们分解一下
element(
…, 0
):获取以下列表的第一个元素。concat(
…,list(""))
:连接以下字符串列表,然后附加包含空字符串的列表的串联(请注意,第二部分没有用,因为您要附加一个空字符串)。rsadecrypt(
…,file("${var.PATH_TO_PRIVATE_KEY}"))
:使用私钥解密以下表达式(错误:以下内容需要为字符串,您将提供一个列表)< / li>
aws_spot_instance_request.PrimaryDC.*.password_data
这是所有密码数据(而不是字符串)的列表。我不知道您想要的输出是什么样子,但是有了上面的列表,您也许可以混合匹配功能以满足您的需求。
编辑:修复了一个错误,这要感谢rahuljain1311的评论。