Вам нужно использовать синтаксис self.ATTRIBUTE
при использовании провайдеров для ресурса и ссылки на себя.
Таким образом, вместо этого ваш ресурс и провайдер должны выглядеть следующим образом:
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 > aws_worker_nodes_IP
[workers]
${self.public_ip}
EOF
EOD
}
}
Это также приведено в качестве примеров в документах инициатора .
Обратите внимание, что приведенный выше блок инициатора будет перезаписывать ваш файл aws_worker_nodes_IP
при каждом запуске, что будет означать, что он будет отображаться тольковы выводите последний экземпляр, который будет создан в AWS (без гарантии по заказу).
Если вы хотите добавить IP-адреса к файлу, вы можете использовать cat <<EOF >> aws_worker_nodes_IP
для добавления всего тела вашего heredoc каждыйвремя или вы можете подумать об использовании отдельного провайдера, который может собирать IP-адреса всех создаваемых вами экземпляров, используя null_resource
шаблон :
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}"
}
resource "null_resource" "cluster" {
# If any instance IPs change we need to change the list of IPs
triggers {
cluster_instance_ips = "${join(",", aws_instance.nodes-opt-us1-k8s.*.public_ip)}"
}
provisioner "local-exec" {
command = <<EOD
cat <<EOF > aws_worker_nodes_IP
[workers]
${aws_instance.nodes-opt-us1-k8s.*.public_ip}
EOF
EOD
}
}