创建的每个主机上的Terraforms remote-exec

时间:2019-05-03 21:26:12

标签: terraform

我正在尝试使用AWS中的Terraform为应用程序设置一组EC2。创建每个服务器之后,我想使用remote-exec在每个服务器上安装eNVM实例存储。因此,创建3台服务器,然后在3台服务器中的每台服务器上安装eNVM

试图使用null_resource,但是我收到有关“资源取决于不存在的资源”或“插值”错误的错误

variable count {
  default = 3
}

module "app-data-node" {
  source           = "some_git_source"
  count            = "${var.count}"
  instance_size    = "instance_data"
  hostname_pattern = "app-data"
  dns_domain       = "${data.terraform_remote_state.network.dns_domain}"
  key_name         = "app-automation"
  description      = "Automation App Data Instance"
  package_proxy    = "${var.package_proxy}"
}

resource "null_resource" "mount_envm" {
  # Only run this provisioner for app nodes
  #count = "${var.count}"

  depends_on = [
    "null_resource.${module.app-data-node}"
  ]

  connection {
  host        = "${aws_instance.i.*.private_ip[count.index]}"
  user        = "root"
  private_key = "app-automation"
}

provisioner "remote-exec" {
  inline = [
    "sudo mkfs -t ext4 /dev/nvme0n1",
    "sudo mkdir /data",
    "sudo mount /dev/nvme0n1 /data"
  ]
 }
}

3个EC2实例,每个实例上都装有eNVM。

1 个答案:

答案 0 :(得分:0)

您可以使用null_resource运行预配器:

resource "null_resource" "provisioner" {
  count = "${var.count}"

  triggers {
    master_id = "${element(aws_instance.my_instances.*.id, count.index)}"
  }

  connection {
    #host        = "${element(aws_instance.my_instances.*.private_ip, count.index)}"
    host        = "${element(aws_instance.my_instances.*.private_ip, count.index)}"
    type        = "ssh"
    user        = "..."
    private_key = "..."
  }

  # set hostname
  provisioner "remote-exec" {
    inline = [
      "sudo mkfs -t ext4 /dev/nvme0n1",
      "sudo mkdir /data",
      "sudo mount /dev/nvme0n1 /data"
    ]
  }
}

这也应同时对所有实例执行。