Я пытаюсь назначить политику управления жизненным циклом учетной записи хранения с помощью terraform. Списки из более чем 30 контейнеров определены в файле input.tfvars как списки строк, которые необходимо вызвать в main.tf в «жизненном цикле ресурса azurerm_storage_management_policy». Но выдает ошибку. Подскажите, пожалуйста, как мне вызвать переменную.
Детали кода в моем git приведены ниже.
input.tfvars -
containername = ["a", "b", "c", "d", "e", "f", "g".................................]
Этот список включает более 30 названий контейнеров.
переменные.tf ---
variable "containername" {
type = list(string)
default = []
}
main.tf --
locals {
folderlist1 = var.containername
list1 = [ for a in local.folderlist1: a ]
}
output "result1" {
value = local.list1
}
resource "azurerm_storage_management_policy" "lifecycle" {
storage_account_id = azurerm_storage_account.sa.id
rule{
name = "Rule1"
enabled = true
filters {
prefix_match = local.list1
blob_types = ["blockBlob"]
}
actions {
base_blob {
delete_after_days_since_modification_greater_than = 15
}
snapshot {
delete_after_days_since_creation_greater_than = 15
}
}
}
}
Выдает ошибку как «prefix_match»: элемент 0: требуется строка.
Чтобы это работало, вам нужно будет использовать блок dynamic
с метааргументом for_each
:
locals {
folderlist1 = var.containername
list1 = [ for a in local.folderlist1: a ]
}
output "result1" {
value = local.folderlist1
}
resource "azurerm_storage_management_policy" "lifecycle" {
storage_account_id = azurerm_storage_account.sa.id
dynamic "rule" {
for_each = local.folderlist1
content {
name = "Rule-${rule.key}"
enabled = true
filters {
prefix_match = [rule.value]
blob_types = ["blockBlob"]
}
actions {
base_blob {
delete_after_days_since_modification_greater_than = 15
}
snapshot {
delete_after_days_since_creation_greater_than = 15
}
}
}
}
}
Ах, ок, позвольте мне это исправить.
Извините, что беспокою в пятницу. У вас была возможность просмотреть это сообщение об ошибке. Спасибо :)
Я исправил это вчера, пожалуйста, попробуйте еще раз.
Отлично, вот как вы можете принять ответ: Meta.stackexchange.com/questions/86978/….
Списки из более чем 30 контейнеров определены в файле input.tfvars как списки строк, которые необходимо вызвать в main.tf в «жизненном цикле ресурса azurerm_storage_management_policy».
В политике управления жизненным циклом нескольких контейнеров, указанных в переменной containername
, вам нужно будет перебрать каждое имя контейнера и создать для каждого отдельное правило.
Вот обновленный код Terraform для создания lifecycle management policy
для всех контейнеров в учетной записи хранения.
terraform.tfvars
containername = ["venkat1", "venkat2", "venkat3", "venkat4", "venkat5", "v6enkat","venkat7","venkat8","venkat9","venkat10","venkat11","venkat12","venkat13","venkat14","venkat15","venkat16","venkat17","venkat18","venkat19","venkat20","venkat21","venkat22","venkat23","venkat24","venkat25"]
variable.tf
variable "containername" {
type = list(string)
default = []
}
provider "azurerm" {
features {}
}
data "azurerm_storage_account" "example" {
name = "demostoracc2304"
resource_group_name = "Sri"
}
locals {
folderlist1 = var.containername
}
resource "azurerm_storage_management_policy" "lifecycle" {
storage_account_id = data.azurerm_storage_account.example.id
dynamic "rule" {
for_each = range(length(local.folderlist1))
content {
name = "Rule-${rule.key + 1}"
enabled = true
filters {
prefix_match = [local.folderlist1[rule.key]]
blob_types = ["blockBlob"]
}
actions {
base_blob {
delete_after_days_since_modification_greater_than = 15
}
snapshot {
delete_after_days_since_creation_greater_than = 15
}
}
}
}
}
output "result1" {
value = local.folderlist1
}
Выход:
После запуска скрипта в политике управления учетной записью хранения создаются правила для всех контейнеров, указанных в variables.tf
.
Привет @Marko E. Надеюсь, у тебя все хорошо. Я обновил свой код твоим кодом. Я получаю следующую ошибку с вашим кодом: недопустимое значение для атрибута «prefix_match»: требуется набор строк.