多个实例的 Terraform 供应器错误
Terraform provisioner error for multiple instances
当运行使用 Terraform 连接以下文件时,出现以下错误:
Resource 'aws_instance.nodes-opt-us-k8s' not found for variable
'aws_instance.nodes-opt.us1-k8s.id'.
我是否需要两次包含配置器,因为我的 'count' 变量正在创建两个?当我只为 '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"
}
}
当使用供应器并引用供应器所附加的资源时,您需要使用 self
keyword 因为您已经发现了您正在写入文件的内容。
因此,在您的情况下,您希望使用以下配置块:
...
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"
}
Terraform 0.12.26 为我解决了类似问题(在将多个 VM 部署到 Azure 时使用多个文件供应器时)
希望对您有所帮助:https://github.com/hashicorp/terraform/issues/22006
当运行使用 Terraform 连接以下文件时,出现以下错误:
Resource 'aws_instance.nodes-opt-us-k8s' not found for variable 'aws_instance.nodes-opt.us1-k8s.id'.
我是否需要两次包含配置器,因为我的 'count' 变量正在创建两个?当我只为 '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"
}
}
当使用供应器并引用供应器所附加的资源时,您需要使用 self
keyword 因为您已经发现了您正在写入文件的内容。
因此,在您的情况下,您希望使用以下配置块:
...
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"
}
Terraform 0.12.26 为我解决了类似问题(在将多个 VM 部署到 Azure 时使用多个文件供应器时)
希望对您有所帮助:https://github.com/hashicorp/terraform/issues/22006