Terraform用户数据传递实例详细信息

时间:2018-11-24 23:31:33

标签: terraform

我需要使用terraform在我的gcp实例的用户数据中设置主机名和默认网络(用户数据模板yml如下)

  serverInfo:
    serverId: 1
    hostname: ${hostname}
    defaultNetwork: ${defaultNetwork}

但是,经过一番调查,我意识到这是非常困难的。据我了解,用户数据在实际实例创建之前就已经竞争过(如果出错,请更正)。但是在实例创建之后,主机名和网络详细信息将变得可用。您能否建议我一种更好的方式来捕获该信息并在用户数据中对其进行更新?

2 个答案:

答案 0 :(得分:1)

  • 如果您将所有内容都放在一个后端(您拥有一个管理所有内容的地形状态),是否检查了output parameters of the gcp instance中的任何一项是否对您有效?您可以将它们与以下示例中的代码段一起使用:

google_compute_instance.name_of_your_instance.network_interface.0.network_ip

google_compute_instance.name_of_your_instance.self_link

  • 如果您的gcp实例与使用用户数据的实例不在同一后端,则可以使用terraform_remote_state检索详细信息(请参见https://www.terraform.io/docs/providers/terraform/d/remote_state.html中的更多内容)。令人高兴的是,此远程状态为只读,因此您对其执行的任何操作均不会影响您的gcp实例。

答案 1 :(得分:0)

我找到了一种解决此问题的方法,因此,在网络详细信息的情况下,我们可以按以下方式获取网络,然后提取有关其的详细信息(例如cidr等)。但是,对于主机名,我们可以指定用户数据中的名称,然后cloud-init将为我们设置名称。

   data "google_compute_subnetwork" "default-subnetwork" {
      project = "my-project"
      name   = "my-subnetwork"
      region = "us-central1"
    }