modules/virtual_machine_policy/main.tf (56 lines of code) (raw):

resource "azurerm_backup_policy_vm" "this" { name = var.vm_backup_policy.name # var.name recovery_vault_name = var.recovery_vault_name # var.recovery_vault_name resource_group_name = var.resource_group_name # var.resource_group_name instant_restore_retention_days = var.vm_backup_policy.instant_restore_retention_days != null ? var.vm_backup_policy.policy_type == "Weekly" ? 5 : var.vm_backup_policy.instant_restore_retention_days : null # var.instant_restore_retention_days policy_type = var.vm_backup_policy.policy_type # var.policy_type timezone = var.vm_backup_policy.timezone # var.timezone backup { frequency = var.vm_backup_policy.frequency != null ? regex("^Hourly|Daily|Weekly$", var.vm_backup_policy.frequency) : null time = var.vm_backup_policy["backup"].time != null ? var.vm_backup_policy["backup"].time : null hour_duration = var.vm_backup_policy.frequency == "Hourly" && var.vm_backup_policy["backup"].hour_duration != null ? regex("/0[1-2]|1[0-2]-0[4-9]|1[1-9]|2[0-4]|3[0-1]|[1-2[4-8]/gm", var.vm_backup_policy["backup"].hour_duration) : null hour_interval = var.vm_backup_policy.frequency == "Hourly" && var.vm_backup_policy["backup"].hour_interval != null ? regex("^4|6|8|12$", var.vm_backup_policy["backup"].hour_interval) : null weekdays = var.vm_backup_policy.frequency == "Weekly" && length(var.vm_backup_policy["backup"].weekdays) != null ? var.vm_backup_policy["backup"].weekdays : null } dynamic "instant_restore_resource_group" { for_each = length(var.vm_backup_policy.instant_restore_resource_group) > 0 ? var.vm_backup_policy.instant_restore_resource_group : {} content { prefix = instant_restore_resource_group.value["prefix"] != null ? instant_restore_resource_group.value["prefix"] : "prefix-" suffix = instant_restore_resource_group.value["prefix"] != null && instant_restore_resource_group.value["suffix"] != null ? instant_restore_resource_group.value["suffix"] : null } } dynamic "retention_daily" { for_each = var.vm_backup_policy.frequency != "Weekly" ? { this = var.vm_backup_policy["retention_daily"] } : {} content { count = var.vm_backup_policy.frequency != "Weekly" ? var.vm_backup_policy["retention_daily"] : null } } dynamic "retention_monthly" { for_each = var.vm_backup_policy["retention_monthly"].count > 0 ? { this = var.vm_backup_policy["retention_monthly"] } : {} content { count = var.vm_backup_policy["retention_monthly"].count != 0 ? regex("^[1-9][0-9]{0,3}$", var.vm_backup_policy["retention_monthly"].count) : null days = var.vm_backup_policy["retention_monthly"].count != 0 && var.vm_backup_policy.frequency != "Weekly" ? var.vm_backup_policy["retention_monthly"].days : null include_last_days = var.vm_backup_policy["retention_monthly"].count != 0 && var.vm_backup_policy.frequency != "Weekly" ? var.vm_backup_policy["retention_monthly"].include_last_days != null ? var.vm_backup_policy["retention_monthly"].include_last_days : null : null weekdays = var.vm_backup_policy["retention_monthly"].count != 0 && var.vm_backup_policy.frequency == "Weekly" ? length(var.vm_backup_policy["retention_monthly"].weekdays) != 0 ? var.vm_backup_policy["retention_monthly"].weekdays : null : null weeks = var.vm_backup_policy["retention_monthly"].count != 0 && var.vm_backup_policy.frequency == "Weekly" ? length(var.vm_backup_policy["retention_monthly"].weeks) != 0 ? var.vm_backup_policy["retention_monthly"].weeks : null : null } } dynamic "retention_weekly" { for_each = var.vm_backup_policy["retention_weekly"].count > 0 && length(var.vm_backup_policy["retention_weekly"].weekdays) > 0 ? { this = var.vm_backup_policy["retention_weekly"] } : {} content { count = var.vm_backup_policy.frequency == "Weekly" || var.vm_backup_policy["retention_weekly"].count != 0 ? regex("^[1-9][0-9]{0,3}$", var.vm_backup_policy["retention_weekly"].count) : null # 20 weekdays = var.vm_backup_policy["retention_weekly"].count != 0 && length(var.vm_backup_policy["retention_weekly"].weekdays) > 0 ? var.vm_backup_policy["retention_weekly"].weekdays : null } } dynamic "retention_yearly" { for_each = var.vm_backup_policy["retention_yearly"].count > 0 ? { this = var.vm_backup_policy["retention_yearly"] } : {} content { count = var.vm_backup_policy["retention_yearly"].count != 0 && var.vm_backup_policy["retention_yearly"].count != 0 ? regex("^[1-9][0-9]{0,3}$", var.vm_backup_policy["retention_yearly"].count) : null months = var.vm_backup_policy["retention_yearly"].count != 0 && (var.vm_backup_policy["retention_yearly"].count != 0 && length(var.vm_backup_policy["retention_yearly"].months) > 0) ? var.vm_backup_policy["retention_yearly"].months : [] # var.vm_backup_policy["retention_yearly"].months # days = var.vm_backup_policy["retention_yearly"].count != 0 && var.vm_backup_policy.frequency != "Weekly" ? var.vm_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.vm_backup_policy["retention_yearly"].count != 0 && var.vm_backup_policy.frequency != "Weekly" ? var.vm_backup_policy["retention_yearly"].include_last_days != null ? var.vm_backup_policy["retention_yearly"].include_last_days : null : null # (Optional) Including the last day of the month, default to false. weekdays = var.vm_backup_policy["retention_yearly"].count != 0 && var.vm_backup_policy.frequency == "Weekly" ? length(var.vm_backup_policy["retention_yearly"].weekdays) != 0 ? var.vm_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.vm_backup_policy["retention_yearly"].count != 0 && var.vm_backup_policy.frequency == "Weekly" ? length(var.vm_backup_policy["retention_yearly"].weeks) != 0 ? var.vm_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. } } }