modules/file_share_policy/main.tf (52 lines of code) (raw):
# use try() to normalize and validate values for weekly, monthly, yearly retation
# locals {
# backup = { for key_index, value in var.file_share_backup_policy.backup :
# "${key_index}" => value
# if key_index != "hourly" }
# log = { for key_index, value in var.file_share_backup_policy["retention_weekly"] :
# "${key_index}" => value
# # if key_index == "log"
# }
# full = { for key_index, value in var.file_share_backup_policy["retention_monthly"] :
# "${key_index}" => value
# # if key_index == "full"
# }
# # backup = merge(local.full, local.log, local.diff)
# }
resource "azurerm_backup_policy_file_share" "this" {
name = var.file_share_backup_policy.name
recovery_vault_name = var.recovery_vault_name
resource_group_name = var.resource_group_name
timezone = var.file_share_backup_policy.timezone
backup {
frequency = var.file_share_backup_policy.frequency != null ? regex("^Hourly|Daily$", var.file_share_backup_policy.frequency) : null
time = var.file_share_backup_policy.frequency == "Daily" && var.file_share_backup_policy["backup"].time != null ? var.file_share_backup_policy["backup"].time : null
dynamic "hourly" {
for_each = var.file_share_backup_policy.frequency == "Hourly" ? var.file_share_backup_policy.backup.hourly : {}
content {
interval = var.file_share_backup_policy.frequency == "Hourly" && var.file_share_backup_policy.backup.hourly.interval != null ? var.file_share_backup_policy.backup.hourly.interval : null
start_time = var.file_share_backup_policy.frequency == "Hourly" && var.file_share_backup_policy.backup.hourly.interval != null ? var.file_share_backup_policy.backup.hourly.start_time : null
window_duration = var.file_share_backup_policy.frequency == "Hourly" && var.file_share_backup_policy.backup.hourly.interval != null ? var.file_share_backup_policy.backup.hourly.window_duration : null
}
}
}
dynamic "retention_daily" {
for_each = can(regex("^(?:[1-9][0-9]?|1[0-9]{2}|200)$", var.file_share_backup_policy["retention_daily"])) ? { this = var.file_share_backup_policy["retention_daily"] } : {}
content {
count = regex("^(?:[1-9][0-9]?|1[0-9]{2}|200)$", var.file_share_backup_policy["retention_daily"])
}
}
dynamic "retention_monthly" {
for_each = var.file_share_backup_policy["retention_monthly"].count > 0 ? { this = var.file_share_backup_policy["retention_monthly"] } : {}
content {
count = var.file_share_backup_policy["retention_monthly"].count != 0 ? var.file_share_backup_policy["retention_monthly"].count : null
days = var.file_share_backup_policy["retention_monthly"].count != 0 && (length(var.file_share_backup_policy["retention_monthly"].weekdays) == 0 || length(var.file_share_backup_policy["retention_monthly"].weekdays) == 0) ? var.file_share_backup_policy["retention_monthly"].days : null
include_last_days = var.file_share_backup_policy["retention_monthly"].count != 0 && (length(var.file_share_backup_policy["retention_monthly"].weekdays) == 0 || length(var.file_share_backup_policy["retention_monthly"].weekdays) == 0) ? var.file_share_backup_policy["retention_monthly"].include_last_days != null ? var.file_share_backup_policy["retention_monthly"].include_last_days : null : null
weekdays = var.file_share_backup_policy["retention_monthly"].count != 0 && (length(var.file_share_backup_policy["retention_monthly"].days) == 0 || var.file_share_backup_policy["retention_monthly"].include_last_days != null) ? length(var.file_share_backup_policy["retention_monthly"].weekdays) != 0 ? var.file_share_backup_policy["retention_monthly"].weekdays : null : null
weeks = var.file_share_backup_policy["retention_monthly"].count != 0 && (length(var.file_share_backup_policy["retention_monthly"].days) == 0 || var.file_share_backup_policy["retention_monthly"].include_last_days != null) ? length(var.file_share_backup_policy["retention_monthly"].weeks) != 0 ? var.file_share_backup_policy["retention_monthly"].weeks : null : null
}
}
dynamic "retention_weekly" {
for_each = var.file_share_backup_policy["retention_weekly"].count > 0 && length(var.file_share_backup_policy["retention_weekly"].weekdays) > 0 ? { this = var.file_share_backup_policy["retention_weekly"] } : {}
content {
count = var.file_share_backup_policy["retention_weekly"].count != 0 ? var.file_share_backup_policy["retention_weekly"].count : null # 20
weekdays = var.file_share_backup_policy["retention_weekly"].count != 0 && length(var.file_share_backup_policy["retention_weekly"].weekdays) > 0 ? var.file_share_backup_policy["retention_weekly"].weekdays : null
}
}
dynamic "retention_yearly" {
for_each = var.file_share_backup_policy["retention_yearly"].count > 0 ? { this = var.file_share_backup_policy["retention_yearly"] } : {}
content {
count = var.file_share_backup_policy["retention_yearly"].count != 0 && var.file_share_backup_policy["retention_yearly"].count != 0 ? var.file_share_backup_policy["retention_yearly"].count : null
months = var.file_share_backup_policy["retention_yearly"].count != 0 && (var.file_share_backup_policy["retention_yearly"].count != 0 && length(var.file_share_backup_policy["retention_yearly"].months) > 0) ? var.file_share_backup_policy["retention_yearly"].months : [] # var.file_share_backup_policy["retention_yearly"].months #
days = var.file_share_backup_policy["retention_yearly"].count != 0 && (length(var.file_share_backup_policy["retention_yearly"].weekdays) == 0 || length(var.file_share_backup_policy["retention_yearly"].weekdays) == 0) ? var.file_share_backup_policy["retention_yearly"].days : null # (Optional) The days of the month to retain backups of. Must be between 1 and 31.'
include_last_days = var.file_share_backup_policy["retention_yearly"].count != 0 && (length(var.file_share_backup_policy["retention_yearly"].weekdays) == 0 || length(var.file_share_backup_policy["retention_yearly"].weekdays) == 0) ? var.file_share_backup_policy["retention_yearly"].include_last_days != null ? var.file_share_backup_policy["retention_yearly"].include_last_days : null : null # (Optional) Including the last day of the month, default to false.
weekdays = var.file_share_backup_policy["retention_yearly"].count != 0 && (length(var.file_share_backup_policy["retention_yearly"].days) == 0 || var.file_share_backup_policy["retention_yearly"].include_last_days != null) ? length(var.file_share_backup_policy["retention_yearly"].weekdays) != 0 ? var.file_share_backup_policy["retention_yearly"].weekdays : null : null # (Optional) The weekday backups to retain . Must be one of Sunday, Monday, Tuesday, Wednesday, Thursday, Friday or Saturday.
weeks = var.file_share_backup_policy["retention_yearly"].count != 0 && (length(var.file_share_backup_policy["retention_yearly"].days) == 0 || var.file_share_backup_policy["retention_yearly"].include_last_days != null) ? length(var.file_share_backup_policy["retention_yearly"].weeks) != 0 ? var.file_share_backup_policy["retention_yearly"].weeks : null : null # (Optional) The weeks of the month to retain backups of. Must be one of First, Second, Third, Fourth, Last.
}
}
}