【发布时间】:2017-04-16 02:39:51
【问题描述】:
我是 Terraform 的新手。我有一个带有两个 Ubuntu 虚拟机的子网。一种是VMA,有公网IP,另一种是VMB,有私网IP,没有公网IP。是否有一种 Terraform 方法可以在 B 上配置文件和运行命令,而无需先通过 SSH 连接到 VM A,然后再连接到 VM B?
根据我的发现,Terraform 中的 file 供应商需要一个 connection 块,如下所示:
# Example Azure VM provisioner block
provisioner "remote-exec" {
inline = [
"rsync -Pav user@A:~/install.sh ~",
"rsync -Pav user@A:~/file.txt ~",
"sudo ~/install.sh"
]
connection {
type = "ssh"
user = "${var.ssh_user_username}"
host = "<something to put here>"
private_key = "${file("~/.ssh/azure_key_rsa")}"
timeout = "1m"
agent = false
}
}
但由于我无法在 Terraform 中直接连接到私有 IP,我不确定在 host 字段中输入什么内容才能使此配置程序成功。
【问题讨论】:
-
我认为在 Terraform 中没有办法做到这一点。 an ongoing issue 关于允许 ssh 隧道用于相同目的并有一些变通方法
-
我不确定我是否正确理解了您的需求,根据我的理解,您希望 ssh 到您的 VM B 然后执行
install.sh,对吗?据我所知,您可以使用terraform来完成。您可以使用CustomScript来执行您的install.sh,该脚本由Azure 执行,您不需要ssh 到VM。 Terraform 也支持CustomScript,你可以参考这个example。 -
@Walter-MSFT 你是对的,我想知道是否有办法在 Terraform 中没有公共 IP 的专用网络中直接配置 VM。这看起来正是我们所需要的,您能否将您的评论作为答案?
标签: azure ubuntu ip provisioning terraform