#amazon-web-services #ansible #terraform #terraform-provider-aws
Вопрос:
Моя конечная цель — создать 3-узловой кластер kubeadm kubernetes с terraform и / или ansible. На данный момент я готовлю три идентичных экземпляра с помощью terraform. Затем с remote-exec
помощью и inline
установкой пакетов, которые все экземпляры совместно используют между собой. Теперь я хочу установить определенные пакеты только на один из этих трех экземпляров. Пытаясь добиться этого с помощью local-exec
.
Я борюсь с подключением только к 1 экземпляру с помощью local-exec. Я знаю, как подключиться ко всем из них и выполнить playbook в трех экземплярах. Но конечная цель — подключиться только к одному экземпляру.
код обрезан:
resource "aws_instance" "r100c96" {
count = 3
ami = "ami-0b9064170e32bde34"
instance_type = "t2.micro"
key_name = local.key_name
tags = {
Name = "terra-ans${count.index}"
}
provisioner "remote-exec" {
connection {
host = "${self.public_ip}"
type = "ssh"
user = local.ssh_user
private_key = file(local.private_key_path)
}
inline = ["sudo hostnamectl set-hostname test"]
}
provisioner "local-exec" {
command = "ansible-playbook -i ${element((aws_instance.r100c96.*.public_ip),0)}, --private-key ${local.private_key_path} helm.yaml"
}
...
}
Спасибо,
Комментарии:
1. В чем ошибка?
Ответ №1:
Вы можете использовать null_resource и запускать remote-exec
только для выбранного экземпляра, как только все три экземпляра aws_instance.r100c96
будут подготовлены.
Комментарии:
1. дзеки Марчин, это сработало. Большое спасибо!
Ответ №2:
Я думаю, что вместо *
того, чтобы использовать count.index
, при каждом loop
запуске он будет передавать определенный IP-адрес виртуальной машины.
Кроме того, существует несколько способов подготовки виртуальной машины с помощью Ansible. Подумайте, можете ли вы динамически создавать файл Hosts и предоставлять их параллельно, а не по одному за раз.