多个实例的Terraform提供程序错误



使用Terraform运行以下文件时,我收到以下错误:

找不到变量的资源"aws_instance.nodes-opt-us-k8s"'aws_instance.nodes opt.us1-k8s.id'.

因为我的"count"变量正在创建两个,所以我需要包括两个provisioner吗?当我只包含一个"count"变量时,我会得到一个错误,我的Ansible剧本需要运行剧本文件,这是因为在我发现这个错误之前,它是空的。

我还处于Terraform和Linux的早期阶段,所以请原谅我的无知

#-----------------------------Kubernetes Master & Worker Node Server Creations----------------------------
#-----key pair for Workernodes-----
resource "aws_key_pair" "k8s-node_auth" {
key_name   = "${var.key_name2}"
public_key = "${file(var.public_key_path2)}"
}
#-----Workernodes-----
resource "aws_instance" "nodes-opt-us1-k8s" {
instance_type = "${var.k8s-node_instance_type}"
ami           = "${var.k8s-node_ami}"
count         = "${var.NodeCount}"
tags {
Name = "nodes-opt-us1-k8s"
}
key_name               = "${aws_key_pair.k8s-node_auth.id}"
vpc_security_group_ids = ["${aws_security_group.opt-us1-k8s_sg.id}"]
subnet_id              = "${aws_subnet.opt-us1-k8s.id}"
#-----Link Terraform worker nodes to Ansible playbooks-----
provisioner "local-exec" {
command = <<EOD
cat <<EOF >> workers
[workers]
${self.public_ip}
EOF
EOD
}
provisioner "local-exec" {
command = "aws ec2 wait instance-status-ok --instance-ids ${aws_instance.nodes-opt-us1-k8s.id} --profile Terraform && ansible-playbook -i workers Kubernetes-Nodes.yml"
}
}

Terraform 0.12.26为我解决了类似的问题(在将多个虚拟机部署到Azure时使用多个文件提供程序(

希望这能帮助你:https://github.com/hashicorp/terraform/issues/22006

当使用provisioner并引用provisioner所附的资源时,您需要使用self关键字,因为您已经发现您正在向文件中写入的内容。

因此,在您的情况下,您希望使用以下设置程序块:

...
provisioner "local-exec" {
command = <<EOD
cat <<EOF >> workers
[workers]
${self.public_ip}
EOF
EOD
}
provisioner "local-exec" {
command = "aws ec2 wait instance-status-ok --instance-ids ${self.id} --profile Terraform && ansible-playbook -i workers Kubernetes-Nodes.yml"
}

相关内容

  • 没有找到相关文章

最新更新