Динамический сетевой интерфейс для модуля Compute Instance - PullRequest
1 голос
/ 24 марта 2019

У нас есть модуль Terraform, который создает compute_instance.
Некоторые экземпляры должны получить публичный IP.
Открытый IP-адрес, созданный при определении свойства access_config {} в сетевом интерфейсе:

network_interface {
  network = "default"
  access_config {

  }
}

Мы пытаемся динамически внедрить сетевой интерфейс и access_config из "production / Main.tf", который вызвал этот модуль:

module "arbiter" {
  source                = "../modules/compute"
  name                  = "arbiter"
  machine_type          = "custom-1-2048"
  zones                 = ["europe-west2-a"]
  tags                  = ["mongo-db"]
  metadata              = {
    sshKeys             = "${var.ssh_user}:${file("ssh-keys/main.rsa.pub")}"
  }
  network_interface = { -> this line is worng
    network = "default"
  }
}

Как мы можем внедрить динамический объект в свойство network_interface?
Возможно ли это с Terraform, если нет, каковы альтернативы?

1 Ответ

1 голос
/ 24 марта 2019

В вашем модуле arbiter сделайте следующее:

variable "external_ip" {
  description = "Controls if VM gets external IP"
  default     = false
}

locals {
  access_config = {
    "0" = []
    "1" = [{}]
  }
}

resource "google_compute_instance" "arbiter" {
  name         = "${var.name}"
  machine_type = "${var.type}"
  zone         = "${var.zones}"
  tags         = "${var.tags}"
  metadata     = "${var.metadata}"

  boot_disk {
    initialize_params {
      image = "some/image"
    }
  }

  network_interface {
    network = "default"

    access_config = "${local.access_config[var.external_ip]}"
  }
}

Затем при использовании модуля вы можете указать переменную external_ip, чтобы указать, что виртуальная машина должна быть доступна из Интернета.

module "arbiter" {
  source       = "../modules/compute"
  name         = "arbiter"

  machine_type = "custom-1-2048"
  zones        = ["europe-west2-a"]
  tags         = ["mongo-db"]

  metadata = {
    sshKeys = "${var.ssh_user}:${file("ssh-keys/main.rsa.pub")}"
  }

  external_ip = true
}

Подробнее о приемах Terraform и null: Нулевые значения в Terraform v0.11.x

...