Как «переопределить» некоторые параметры ресурса при использовании модулей terraform? - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь разработать универсальные модули terraform для поддержки мониторов data-dog и позволить пользователю модулей добавлять ресурсы и / или переопределять ресурсы в побочных универсальных модулях.

terraform переопределяет Функция прекрасно работает без модулей, но не работает при использовании модулей.

как переопределить некоторые параметры ресурса внутри модулей?

Требования:

  1. / modules / datadog / monitors.tf содержит список ресурсов, каждый ресурс представляет собой общийМонитор данных со значениями параметров по умолчанию.Каждое отдельное приложение может выбрать переопределение одного или нескольких параметров внутри каждого ресурса .

  2. / application-1 / monitors.tf содержит модуль сsource как / modules / datadog / , еще несколько мониторов, которые не включены в универсальные мониторы и некоторые переменные.

/ application-1 / monitors.tf

module "datadog" {
  source  = "/modules/datadog/"
}

/ modules / datadog / monitors.tf

# Generic Datadog monitor to monitor cpu 
resource "datadog_monitor" "foo" {
  name               = "Name for monitor foo"
  type               = "metric alert"
  message            = "Monitor triggered. Notify: @hipchat-channel"
  escalation_message = "Escalation message @pagerduty"

  query = "avg(last_1h):avg:aws.ec2.cpu{environment:foo,host:foo} by {host} > 4"

  thresholds {
    ok                = 0
    warning           = 2
    warning_recovery  = 1
    critical          = 4
    critical_recovery = 3
  }

  notify_no_data    = false
  renotify_interval = 60

  notify_audit = false
  timeout_h    = 60
  include_tags = true

  silenced {
    "*" = 0
  }

  tags = ["foo:bar", "baz"]
}

Решение 1 : Добавить файл overrides.tf в каталог / modules / datadog .terraform функция переопределения объединяет содержимое в файле overrides.tf с конфигурацией, определенной в файле monitors.tf.
Но проблема этого решения заключается в том, что для каждого приложения необходимо скопировать файл overrides.tf в каталог / modules / datadogперед запуском примените команду.

overrides.tf

resource "datadog_monitor" "foo" {
      escalation_message = "Escalation message @pagerduty1"

      thresholds {
        ok                = 0
        warning           = 20
        warning_recovery  = 10
        critical          = 40
        critical_recovery = 35
      }

      notify_no_data    = false

    }

Решение 2 : можно ли использовать переопределения с модулями?я попытался переопределить параметры ресурса, скопировав файл overrides.tf в каталог / application-1 / Directory, но terraform не переопределяет ресурсы, а рассматривает оба ресурса как разные.

1 Ответ

0 голосов
/ 22 октября 2018

Вы можете использовать условное со счетчиком, чтобы переопределить, если ресурс должен быть создан.В приведенном ниже примере ресурс будет создан только тогда, когда переменная среда не = production.Если Count = 0, ресурс не будет создан,

С уважением,

resource "azurerm_network_security_rule" "web_server_nsg_rule_rdp" {
  name                        = "RDP Inbound"
  priority                    = 100
  direction                   = "Inbound"
  access                      = "Allow"
  protocol                    = "Tcp"
  source_port_range           = "*"
  destination_port_range      = "3389"
  source_address_prefix       = "*"
  destination_address_prefix  = "*"
  resource_group_name         = "${azurerm_resource_group.web_server_rg.name}"
  network_security_group_name = "${azurerm_network_security_group.web_server_nsg.name}"
  count                       = "${var.environment == "production" ? 0 : 1}"  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...