Модуль Terraform для политики управления хранилищем, выборочные действия - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь использовать ресурс terraform azurerm_storage_management_policy в качестве модуля, чтобы мне не приходилось так часто повторяться в моем коде.

У меня ситуация, когда мне нужно установить все следующее в некоторых папках: tier_to_cool_after_days_since_modification_greater_than = var.days_to_cool tier_to_archive_after_days_since_modification_greater_than = var.days_to_archive delete_after_days_since_modification_greater_than = var.days_to_delete

Но в некоторых папках мне нужно только установить delete_after_days_since_modification_greater_than

Я хотел бы сделать это, не определяя ресурс в моей основной конфигурации для в этой среде, но я не нахожу способа сделать это. Я вижу запрос github для terraform, чтобы добавить -1, но он был сбит.

Есть ли способ, которым мне не хватает, чтобы не определять все три, когда у меня есть модуль, в котором перечислены все три?

1 Ответ

0 голосов
/ 10 июля 2020

Для вашего требования, чтобы установить все следующие параметры для некоторых папок и установить delete_after_days_since_modification_greater_than только для некоторых других папок. Вы можете определить виртуальные папки в двух разделах и использовать for l oop для итерации виртуальных папок в каждом правиле. Вы можете отфильтровать выбранные папки с помощью prefix_match.

Вот рабочий пример для вашей справки.

locals {
  folderlist1= ["test1","test2","test3"] 
  folderlist2 = [ "foo1","foo2"]

  list1 = [
      for a in local.folderlist1: 
      "container1/${a}"
  ]

  list2 = [
      for b in local.folderlist2: 
      "container1/${b}"
  ]

}


output "result1" {
    value = local.list1
}

output "result2" {
  value = local.list2
}


resource "azurerm_storage_management_policy" "example" {
  storage_account_id = azurerm_storage_account.example.id


  rule {
    name    = "rule1"
    enabled = true
    filters {
      prefix_match = local.list1
      blob_types   = ["blockBlob"]
    }
    actions {
      base_blob {
        tier_to_cool_after_days_since_modification_greater_than    = 10
        tier_to_archive_after_days_since_modification_greater_than = 50
        delete_after_days_since_modification_greater_than          = 100
      }
      # snapshot {
      #   delete_after_days_since_creation_greater_than = 30
      # }
    }
  }
  
  rule {
    name    = "rule2"
    enabled = true
    filters {  
      prefix_match = local.list2 
      blob_types   = ["blockBlob"]
    }
    actions {
      base_blob {
        # tier_to_cool_after_days_since_modification_greater_than    = 11
        # tier_to_archive_after_days_since_modification_greater_than = 51
        delete_after_days_since_modification_greater_than          = 101
      }
      # snapshot {
      #   delete_after_days_since_creation_greater_than = 31
      # }
    }
  }
}

Результат

введите описание изображения здесь

...