Terraform可以从remote_exec命令设置variables吗?

我正在尝试使用Terraform在AWS中构build一个Docker Swarm集群。 我已经成功地启动了一个Swarmpipe理器,但是我正在设法解决如何将连接键传递给worker(将在pipe理器之后创build)。

我想要一些运行docker swarm join-token worker -q命令的方法,它可以设置为Terraformvariables。 这样,工作人员可以有一个像docker swarm join ${var.swarm_token} ${aws_instance.swarm-manager.private_ip}一样的remote_exec命令docker swarm join ${var.swarm_token} ${aws_instance.swarm-manager.private_ip}

我怎样才能做到这一点?

我的configuration如下:

 resource "aws_instance" "swarm-manager" { ami = "${var.manager_ami}" instance_type = "${var.manager_instance}" tags = { Name = "swarm-manager${count.index + 1}" } provisioner "remote-exec" { inline = [ "sleep 30", "docker swarm init --advertise-addr ${aws_instance.swarm-manager.private_ip}" "docker swarm join-token worker -q" // This is the value I want to store as a variable/output/etc ] } } 

谢谢

您可以使用外部数据源作为远程configuration脚本的补充。

这可以在您的swarmpipe理器中进行调用,并在调配之后获取令牌。

如果你有N个群体pipe理者,那么在创buildpipe理者之后,你可能必须立即做所有事情。 外部数据源返回一个纯string的映射,所以需要使用键来为每个节点select正确的结果,或者返回整个集合作为分隔string,并使用element()split()来获得正确的项目。

 resource "aws_instance" "swarm_manager" { ami = "${var.manager_ami}" instance_type = "${var.manager_instance}" tags = { Name = "swarm-manager${count.index + 1}" } provisioner "remote-exec" { inline = [ "sleep 30", "docker swarm init --advertise-addr ${aws_instance.swarm-manager.private_ip}" ] } } data "external" "swarm_token" { program = ["bash", "${path.module}/get_swarm_tokens.sh"] query = { swarms = ["${aws_instance.swarm_manager.*.private_ip}"] } } resource "aws_instance" "swarm_node" { count = "${var.swarm_size}" ami = "${var.node_ami}" tags = { Name = "swarm-node-${count.index}" } provisioner "remote-exec" { inline = [ "# Enrol me in the right swarm, distributed over swarms available", "./enrol.sh ${element(split("|", data.swarm_token.result.tokens), count.index)}" ] } }