Удалите дополнительные блоки в модуле terraform - PullRequest
2 голосов
/ 06 мая 2020

Сейчас я пытаюсь создать универсальный модуль sql_database в Terraform. Я хочу контролировать аргументы, которые я хочу включить в этот ресурс. Например, однажды мне нужны только обязательные аргументы, но в следующий раз в другом проекте они мне понадобятся плюс блок угрозы_detection_policy со всеми вложенными аргументами.

modules/sql_database.tf

resource "azurerm_sql_database" "sql-db" {
  name                             = var.sql-db-name
  resource_group_name              = data.azurerm_resource_group.rg-name.name
  location                         = var.location
  server_name                      = var.server-name
  edition                          = var.sql-db-edition
  collation                        = var.collation
  create_mode                      = var.create-mode
  requested_service_objective_name = var.sql-requested-service-objective-name
  read_scale                       = var.read-scale
  zone_redundant                   = var.zone-redundant

  extended_auditing_policy {
    storage_endpoint                        = var.eap-storage-endpoint
    storage_account_access_key              = var.eap-storage-account-access-key
    storage_account_access_key_is_secondary = var.eap-storage-account-access-key-is-secondary
    retention_in_days                       = var.eap-retention-days
  }

  import = {
    storage_uri                  = var.storage-uri
    storage_key                  = var.storage-key
    storage_key_type             = var.storage-key-type
    administrator_login          = var.administrator-login
    administrator_login_password = var.administrator-login-password
    authentication_type          = var.authentication-type
    operation_mode               = var.operation-mode
  }

  threat_detection_policy = {
    state                      = var.state
    disabled_alerts            = var.disabled-alerts
    email_account_admins       = var.email-account-admins
    email_addresses            = var.email-addresses
    retention_days             = var.retention-days
    storage_account_access_key = var.storage-account-access-key
    storage_endpoint           = var.storage-endpoint
    use_server_default         = var.use-server-default
  }
}

modules/variables.tf (несколько переменных sql_database)

variable "sql-db-edition" {
  type        = string
}
...

variable "state" { #for example this should be optional
  type        = string
}
...

main.tf

module "sql_database" {
  source = "./modules/sql_database"

  sql-db-name = "sqldbs-example"
  location    = "westus"
  server-name = "sqlsrv-example"

    storage-uri                        = "" #some values 
    storage-key                        = ""
    storage-key_type                   = ""
    administrator-login                = ""
    administrator-login-password       = ""
    authentication-type                = ""
    operation-mode                     = ""

  sql-db-edition                       = "Standard"
  collation                            = "SQL_LATIN1_GENERAL_CP1_CI_AS"
  create-mode                          = "Default"
  sql-requested_service_objective_name = "S0"
  requested_service_objective_id       = ""
  read-scale = "false"
  zone_redundant                       = ""
  source_database_id                   = ""
  restore_point_in_time                = ""
  max_size_bytes                       = ""
  source_database_deletion_date        = ""
  elastic_pool_name                    = ""

#variables below should be all optional
    state                              = ""
    disabled_alerts                    = ""  
    email_account_admins               = ""
    email_addresses                    = ""
    retention_days                     = 6
    storage_account_access_key         = ""
    storage_endpoint                   = ""
    use_server_default                 = ""

  storage_endpoint                        = ""
  storage_account_access_key              = ""
  storage_account_access_key_is_secondary = "false"
  retention_in_days                       = 6
}

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 07 мая 2020

Для ваших требований, я думаю, возможный способ - установить значения по умолчанию внутри модуля и заставить значения по умолчанию действовать так, как вы их не устанавливаете. Например, в блоке threat_detection_policy свойство use_server_default, когда вы его не устанавливаете, значение по умолчанию Disabled. И когда вы хотите их установить, просто введите значения в блок модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...