#ssh #terraform
#ssh #terraform
Вопрос:
Я очень новичок в terraform и пытаюсь исследовать. Я использую digitalocean в качестве ресурса. Я могу создать droplet и теперь хочу снабдить его некоторым программным обеспечением. Но не удается установить с ним соединение.
Я использую виртуальную машину на своем ноутбуке, поэтому хочу использовать свой закрытый ключ SSH для доступа к droplet. Поэтому я копирую свой SSH-ключ в файл через terraform machine и указываю его путь. Ниже приведена моя конфигурация:
provider "digitalocean" {
token = "${var.do_token}"
}
resource "digitalocean_droplet" "web" {
name = "web"
size = "${var.size}"
image = "${var.image}"
region = "${var.region}"
ssh_keys = [23625200]
private_networking = "true"
}
connection {
user = "root"
type = "ssh"
private_key = "${file("/root/id_rsa")}"
timeout = "2m"
}
Закрытый ключ моего ноутбука доступен через компьютер terraform в /root/id_rsa
файле.
При попытке проверки или планирования я получаю сообщение об ошибке ниже:
Error: Unknown root level key: connection
Не могли бы вы помочь мне, что я здесь делаю не так?
Заранее спасибо.
Комментарии:
1. Вы пытаетесь сделать что-то автоматически через SSH, например, установить какое-то программное обеспечение при создании капли? Или вам просто нужен доступ к нему для последующих одноранговых подключений? Если это первое, то вам нужно определить это соединение как часть поставщика. Если последнее, то вам это вообще не нужно.
2. @ydaetskcoR, да .. как только SSH-соединение станет успешным, я также установлю некоторое программное обеспечение, потому что мы также будем выполнять подготовку через terraform.
3. @ydaetskcoR, я прочитал какую-то статью, и все они показывают, что мы можем определить соединение внутри `поставщика ресурсов
. I will define the connection inside
«, но у меня есть еще один вопрос, который нам нужно определить для каждого соединенияprovisioner
, если мы используем несколько поставщиков внутри одного.tf
файла?
Ответ №1:
Ваш connection
блок должен быть частью поставщика, который, в свою очередь, является частью ресурса (потенциально null_resource
ресурса, если никакой другой ресурс не имеет смысла).
Итак, в вашем случае у вас должно быть что-то вроде этого:
resource "digitalocean_droplet" "web" {
name = "web"
size = "${var.size}"
image = "${var.image}"
region = "${var.region}"
ssh_keys = [23625200]
private_networking = "true"
provisioner "remote-exec" {
connection {
host = "${self.ipv4_address}"
user = "root"
type = "ssh"
private_key = "${file("/root/id_rsa")}"
timeout = "2m"
}
inline = [
"yum -y install httpd",
]
}
}
Комментарии:
1. Спасибо, что указали мне правильное направление. Теперь я могу использовать SSH и устанавливать программное обеспечение на свой droplet.