示例代码
resource "aws_instance" "A" {
#provisioning declarations
}
resource "aws_instance" "B" {
#provisioning declarations
}
# Crux of problem : This should run after all instances are provisioned sending all IPs to each
resource "null_resource" "send_instance_ips" {
depends_on = [aws_instance.A, aws_instance.B]
for_each = { for idx, instance in [aws_instance.A, aws_instance.B]: idx=> instance}
connection {
type = "ssh"
user = "admin-user"
private_key = file("~/id_rsa")
host = each.value.public_ip
}
provisioner "remote-exec" {
inline = [
"echo ${aws_instance.A.*.private_ip} > a_ip.txt",
"echo ${aws_instance.B.*.private_ip} > b_ip.txt"
]
}
}问题:如何在提供之后调用模块/规定将数据发送到实例
当我试图创建一个计划时,问题
Error: 2 problems:
- Invalid template interpolation value: Cannot include the given value in a string template: string required.
- Invalid template interpolation value: Cannot include the given value in a string template: string required.发布于 2021-02-16 22:17:08
您可以在null_resource中使用for_each循环您的实例。例如(在ubuntu实例上进行了测试,因此您必须将连接细节调整为您自己的):
resource "null_resource" "send_instance_ips" {
for_each = { for idx, instance in [aws_instance.A,aws_instance.B]:
idx=>instance}
connection {
user = "ubuntu"
host = each.value.public_ip
type = "ssh"
private_key = file("~/.ssh/id_rsa")
}
provisioner "remote-exec" {
inline = [
"echo ${each.value.private_ip} > a_ip.txt"
]
}
}另外,我不确定您是否需要每个实例中的所有IP表单,还是循环中的当前实例IP。我选择在示例中使用第二个选项。但是这个示例也可以调整为使用所有的it,但是它需要修改您的inline部件。
https://stackoverflow.com/questions/66232879
复制相似问题