【问题标题】:how to use terraform output in a script如何在脚本中使用 terraform 输出
【发布时间】:2021-09-29 19:24:06
【问题描述】:

我想在我的虚拟机中存储私有 IP 现在我创建了一个 terraform 资源创建计算实例,保留 IP,创建磁盘并附加到 VM,然后运行脚本文件 autoo.sh

#!/bin/bash
touch myip.txt
private_ip=$(google_compute_instance.default.network_interface.0.network_ip)
echo "$private_ip" >> myip.txt

资源文件如下所示

resource "google_compute_attached_disk" "default3" {
  disk     = google_compute_disk.default2.id
  instance = google_compute_instance.default.id
}resource "google_compute_firewall" "firewall" {
  name    = "gritfy-firewall-externalssh"
  network = "default"
  allow {
    protocol = "tcp"
    ports    = ["22"]
  }  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["externalssh"]
} resource "google_compute_address" "static" {
  name = "vm-public-address"
  project = "fit-visitor-305606"
  region = "asia-south1"
  depends_on = [ google_compute_firewall.firewall ]
} resource "google_compute_instance" "default" {
  name         = "rohan-instance"
  machine_type = "custom-8-16384"
  zone         = "asia-south1-a"
  boot_disk {
    initialize_params {
      image = "centos-cloud/centos-7"
    }  }  network_interface {
    network = "default"
    access_config { 
        nat_ip = google_compute_address.static.address     
    }  } provisioner "file" {
    source = "autoo.sh"
    destination = "/tmp/autoo.sh"
    connection {
        host = google_compute_address.static.address
        type = "ssh"
        user = var.user
        private_key = file(var.privatekeypath)
    }  }
    provisioner "remote-exec" {
    inline = [
      "sudo chmod +x /tmp/autoo.sh",
      "bash /tmp/autoo.sh",
    ]    connection {
        host = google_compute_address.static.address
        type = "ssh"
        user = var.user
        private_key = file(var.privatekeypath)
    }    }
}resource "google_compute_disk" "default2" {
  name  = "test-disk"
  type  = "pd-balanced"
  zone  = "asia-south1-a"
  image = "centos-7-v20210609"
  size =  20
}
output "public_ip" {
  value = google_compute_address.static.address
}
output "Private_ip" {
  value = google_compute_instance.default.network_interface.0.network_ip
}

所以基本上我想将我的私有 IP 存储在我的实例中

【问题讨论】:

  • 让您的生活更轻松,在您的 bash 脚本中使用 gcp 云实例元数据

标签: terraform terraform-provider-gcp


【解决方案1】:

我认为 Terraform remote-exec 是正确的选择。你可以在这里阅读更多内容:https://www.terraform.io/docs/language/resources/provisioners/remote-exec.html

希望这会有所帮助:

您的脚本文件:

cat get-ip.sh
#!/bin/bash
touch myip.txt
#private_ip=$(google_compute_instance.default.network_interface.0.network_ip) # will not work as this is running on remote machine. So, it should be changed to something that can get IP.
private_ip = "127.0..0.1"
echo "$private_ip" >> /tmp/ip.sh

您的资源将如下所示:

resource "null_resource" "write_file" {
  connection {
    host = google_compute_instance.default.ip # depending on how to connect
    user = "<user_name>"                      # depending on how to connect
    private_key = "key_name"                  # depending on how to connect
  }

  provisioner "remote-exec" {
    inline = [
      "chmod +x /tmp/ip.sh",
      "sh /tmp/ip.sh",
    ]
  }
  depends_on = ["google_compute_instance.default"]
}

【讨论】:

  • 但我的脚本文件很大,可能无法在大文件中使用
  • 如果您的文件很大,您可以只使用一个或多个脚本(取决于您的要求),它应该可以工作。
  • well "echo ${private_ip} >> myip.txt" 这给了我错误说为错误:只有“内联”、“脚本”或“脚本”之一必须设置╷ │错误:无效引用│ │ 在 node.tf 第 81 行,资源“null_resource”“coderunner”中:│ 81:“echo ${private_ip}”,│ 对资源类型的引用必须后跟至少一个属性访问,指定资源名称。
  • 更新了运行脚本的答案。
  • 仍然无法正常工作,如 /tmp/autoo.sh:第 3 行:google_compute_instance.default.network_interface.0.network_ip: command not found
猜你喜欢
  • 2021-11-23
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 2018-06-19
相关资源
最近更新 更多