Как заставить remote-exec provisioner применять после вложений на диске?

#terraform

#terraform

Вопрос:

У меня есть скрипт, который мне нужно запустить после того, как мой экземпляр будет подготовлен и тома будут подключены:

 resource "aws_instance" "controller" {
  ...

  provisioner "remote-exec" {
    connection {
      type     = "ssh"
      user     = "centos"
    }
    inline = [
      "download and run script to verify environment"
    ]
  }
}

resource "aws_ebs_volume" "controller-ebs-sdb" {
  ...
}

resource "aws_volume_attachment" "controller-volume-attachment-sdb" {
  device_name = "/dev/sdb"
  volume_id   = "${aws_ebs_volume.controller-ebs-sdb.id}"
  instance_id = "${aws_instance.controller.id}"
}
 

В настоящее время скрипт не работает в среде, потому что при его запуске том не был присоединен.

Возможно ли запускать скрипт remote-exec только после подключения томов?

Ответ №1:

Вы можете запустить provisioner на любом ресурсе (рассмотрим null_resource шаблон для экстремальной версии этого), поэтому лучше всего здесь запустить его на aws_volume_attachment ресурсе:

 # ...

resource "aws_volume_attachment" "controller-volume-attachment-sdb" {
  device_name = "/dev/sdb"
  volume_id   = "${aws_ebs_volume.controller-ebs-sdb.id}"
  instance_id = "${aws_instance.controller.id}"

  provisioner "remote-exec" {
    connection {
      host     = "${aws_instance.controller.public_ip}"
      type     = "ssh"
      user     = "centos"
    }
    inline = [
      "download and run script to verify environment"
    ]
  }
}
 

Ответ №2:

Вы можете рассмотреть возможность добавления опции запуска в remote-exec. Другой грубый вариант — добавить режим ожидания на несколько секунд, или скрипт может повторить попытку сам, или проверить состояние / существование диска, а затем попытаться.