Индекс количества ссылок в другом модуле - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть этот модуль Terraform:

locals {
  name = "${var.counter > 0 ? lower(format("%v-%d", var.name, var.counter+1)) : lower(format("%v", var.name))}"
}

resource "null_resource" "default" {
  count = "${var.enabled == "true" ? 1 : 0}"

  triggers = {
    id         = "${lower(join(var.delimiter, compact(concat(list(var.namespace, var.stage, local.name, var.attributes))))}"
    name       = "${local.name}"
    namespace  = "${lower(format("%v", var.namespace))}"
    stage      = "${lower(format("%v", var.stage))}"
    attributes = "${lower(format("%v", join(var.delimiter, compact(var.attributes))))}"
  }

  lifecycle {
    create_before_destroy = true
  }
}

Я использую модуль как таковой:

module "label" {
  source         = "../modules/tf-label"
  namespace      = "${var.namespace}"
  stage          = "${var.stage}"
  name           = "${var.name}"
  attributes     = "${var.attributes}"
  delimiter      = "${var.delimiter}"
  tags           = "${merge(map("AZ", "${local.availability_zone}"), var.tags)}"
  enabled        = "${local.instance_count > 0 ? "true" : "false"}"
}

Я использую его со следующим ресурсом:

resource "aws_instance" "default" {
  count = "${var.instance_count}"
  name = "${module.label.id}"
  tags = "${module.label.tags}"
}

Поскольку ресурса aws_instance может быть больше 1, как передать значение count.index в модуль label (например, var.counter), чтобы я мог обработать его и сформировать правильную метку (например, namespace-stage-name-attributes-counter -> example-prod-app-nginx-1) или как это правильно сделать?

1 Ответ

0 голосов
/ 31 июля 2018

Как насчет этого: Используйте атрибут count в блоке модуля. Введите счетчик по блоку модуля в модуль как переменный счетчик. Индексируйте в выходные данные модуля в блоке ресурса экземпляра - теперь блок модуля будет давать массив узлов модуля, а не один узел модуля, поэтому мы индексируем его, чтобы получить тот, который нам нужен.

module "aws_instance_label" {
    source         = "../modules/tf-label"
    count          = "${var.instance_count}"
    counter        = "${count.index}"
    namespace      = "${var.namespace}"
    stage          = "${var.stage}"
    name           = "${var.name}"
    attributes     = "${var.attributes}"
    delimiter      = "${var.delimiter}"
    tags           = "${merge(map("AZ", "${local.availability_zone}"), var.tags)}"
    enabled        = "${local.instance_count > 0 ? "true" : "false"}"
}

resource "aws_instance" "default" {
    count = "${var.instance_count}"
    name = "${module.aws_instance_label[count.index].id}"
    tags = "${module.aws_instance_label[count.index].tags}"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...