Ошибка инициатора Terraform для нескольких экземпляров - PullRequest
0 голосов
/ 29 октября 2018

При запуске приведенного ниже файла с Terraform я получаю следующую ошибку:

Ресурс 'aws_instance.nodes-opt-us-k8s' не найден для переменной 'Aws_instance.nodes-opt.us1-k8s.id'.

Нужно ли включать поставщика дважды, потому что моя переменная 'count' создает два? Когда я просто включаю переменную «count», я получаю ошибку, в которой моя Ansible playbook должна запускать файлы playbook, что происходит потому, что она пуста, пока я не выясню эту ошибку.

Я на ранних стадиях с 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"
  }
}

1 Ответ

0 голосов
/ 30 октября 2018

При использовании провайдера и обращении к ресурсу, к которому прикреплен провайдер, необходимо использовать ключевое слово 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"
  }
...