hashicorp / terraform-provider-azurerm

Terraform provider for Azure Resource Manager
https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs
Mozilla Public License 2.0
4.46k stars 4.54k forks source link

azurerm_mssql_virtual_machine resource not generating easily identifiable backup file names #23730

Closed maltaf1 closed 5 months ago

maltaf1 commented 8 months ago

Is there an existing issue for this?

Community Note

Terraform Version

1.3.7

AzureRM Provider Version

3.77.0

Affected Resource(s)/Data Source(s)

azurerm_mssql_virtual_machine

Terraform Configuration Files

locals {
  loc_vm_extension_list = flatten([
    for id, extension in var.p_vm_mssql_extension : [
      for vm in var.p_vm_mssql_extension_vmlist : {
        key                                             = vm.key
        vm_name                                         = vm.vmname
        vm_mssql_adhoc_workloads_optimization_enabled   = vm.mssql_adhoc_workloads_optimization_enabled
        vm_mssql_instant_file_initialization_enabled    = vm.mssql_instant_file_initialization_enabled
        vm_mssql_lock_pages_in_memory_enabled           = vm.mssql_lock_pages_in_memory_enabled
        vm_mssql_max_dop                                = vm.mssql_max_dop
        vm_mssql_max_server_memory_mb                   = vm.mssql_max_server_memory_mb
        vm_mssql_min_server_memory_mb                   = vm.mssql_min_server_memory_mb
        vm_mssql_sql_license_type                       = extension.vm_mssql_sql_license_type
        vm_mssql_r_services_enabled                     = extension.vm_mssql_r_services_enabled
        vm_mssql_sql_connectivity_port                  = extension.vm_mssql_sql_connectivity_port
        vm_mssql_sql_connectivity_type                  = extension.vm_mssql_sql_connectivity_type
        vm_mssql_sql_connectivity_update_username       = extension.vm_mssql_sql_connectivity_update_username
        vm_mssql_day_of_week                            = extension.vm_mssql_day_of_week
        vm_mssql_maintenance_window_duration_in_minutes = extension.vm_mssql_maintenance_window_duration_in_minutes
        vm_mssql_maintenance_window_starting_hour       = extension.vm_mssql_maintenance_window_starting_hour
        vm_mssql_disk_type                              = extension.vm_mssql_disk_type
        vm_mssql_storage_workload_type                  = extension.vm_mssql_storage_workload_type
        vm_mssql_default_data_disk_file_path            = extension.vm_mssql_default_data_disk_file_path
        vm_mssql_default_data_disk_luns                 = extension.vm_mssql_default_data_disk_luns 
        vm_mssql_default_log_disk_file_path             = extension.vm_mssql_default_log_disk_file_path
        vm_mssql_default_log_disk_luns                  = extension.vm_mssql_default_log_disk_luns
        vm_mssql_default_temp_disk_file_path            = extension.vm_mssql_default_temp_disk_file_path
        vm_mssql_default_temp_disk_luns                 = extension.vm_mssql_default_temp_disk_luns
      }
    ]
  ])
}

resource "azurerm_mssql_virtual_machine" "sqlvm" {
  for_each                           = { for key, vm in local.loc_vm_extension_list : vm.key => vm }
    virtual_machine_id               = [for x in var.p_vm_mssql_extension_vm_lookuplist : x.id if x.name == each.value.vm_name][0]
    sql_license_type                 = each.value.vm_mssql_sql_license_type
    r_services_enabled               = each.value.vm_mssql_r_services_enabled
    sql_connectivity_port            = each.value.vm_mssql_sql_connectivity_port
    sql_connectivity_type            = each.value.vm_mssql_sql_connectivity_type
    sql_connectivity_update_password = var.p_vm_mssql_password_list[each.key].result
    sql_connectivity_update_username = each.value.vm_mssql_sql_connectivity_update_username

    sql_instance {
      adhoc_workloads_optimization_enabled = each.value.vm_mssql_adhoc_workloads_optimization_enabled
      instant_file_initialization_enabled  = each.value.vm_mssql_instant_file_initialization_enabled
      lock_pages_in_memory_enabled         = each.value.vm_mssql_lock_pages_in_memory_enabled
      max_dop                              = each.value.vm_mssql_max_dop 
      max_server_memory_mb                 = each.value.vm_mssql_max_server_memory_mb
      min_server_memory_mb                 = each.value.vm_mssql_min_server_memory_mb
    }
    auto_patching {
      day_of_week                            = each.value.vm_mssql_day_of_week
      maintenance_window_duration_in_minutes = each.value.vm_mssql_maintenance_window_duration_in_minutes
      maintenance_window_starting_hour       = each.value.vm_mssql_maintenance_window_starting_hour
    }

    auto_backup {
      system_databases_backup_enabled = var.p_vm_mssql_backup_system_databases_backup_enabled
      encryption_enabled              = var.p_vm_mssql_backup_encryption_enabled
      encryption_password             = var.p_vm_mssql_db_backup_password
      retention_period_in_days        = var.p_vm_mssql_backup_retention_period_in_days
      storage_blob_endpoint           = var.p_vm_mssql_storage_blob_endpoint
      storage_account_access_key      = var.p_vm_mssql_storage_account_access_key
      manual_schedule {
        full_backup_frequency           = var.p_vm_mssql_full_backup_frequency
        full_backup_start_hour          = var.p_vm_mssql_full_backup_start_hour
        full_backup_window_in_hours     = var.p_vm_mssql_full_backup_window_in_hours
        log_backup_frequency_in_minutes = var.p_vm_mssql_log_backup_frequency_in_minutes
        days_of_week                    = var.p_vm_mssql_days_of_week
      }
    }

    storage_configuration {
      disk_type             = each.value.vm_mssql_disk_type           
      storage_workload_type = each.value.vm_mssql_storage_workload_type 

      data_settings {
        default_file_path = each.value.vm_mssql_default_data_disk_file_path  
        luns              = each.value.vm_mssql_default_data_disk_luns        
      }

      log_settings {
        default_file_path = each.value.vm_mssql_default_log_disk_file_path  
        luns              = each.value.vm_mssql_default_log_disk_luns     
      }
      temp_db_settings {

        default_file_path = each.value.vm_mssql_default_temp_disk_file_path
        luns              = each.value.vm_mssql_default_temp_disk_luns

      }
    }
}

Debug Output/Panic Output

See expected behaviour below

Expected Behaviour

I have two sql server VMs and if want to backup the databases on each and also want to be able to identify the correct backup files from the same storage account in the event of a need to recover from these files. Currently I believe I cannot do that.

NOTE: The containers are created automatically by the extension.

The issue can be observed in the "backupcontainer"

automaticbackup:

vm-dev-eastus-dbtest1_Certificate_20231017093220.cer vm-dev-eastus-dbtest1_CertificatePvk_20231017093220.pvk vm-dev-eastus-dbtest1_MasterKey_20231017093220.key

vm-dev-eastus-dbtest2_Certificate_20231017093220.cer vm-dev-eastus-dbtest2_CertificatePvk_20231017093220.pvk vm-dev-eastus-dbtest2_MasterKey_20231017093220.key

backupcontainer:

master_vm-dev-eastus-dbtest1+00.bak model_vm-dev-eastus-dbtest1+00.log msdb_vm-dev-eastus-dbtest1+00.+00.bak

master_vm-dev-eastus-dbtest2+00.bak model_vm-dev-eastus-dbtest2+00.log msdb_vm-dev-eastus-dbtest2+00.+00.bak

Actual Behaviour

automaticbackup:

vm-dev-eastus-dbtest1_CertificatePvk_20231017093220.pvk vm-dev-eastus-dbtest1_MasterKey_20231017093220.key vm-dev-eastus-dbtest1_Certificate_20231017093220.cer

vm-dev-eastus-dbtest2_CertificatePvk_20231017093244.pvk vm-dev-eastus-dbtest2_MasterKey_20231026093353.key vm-dev-eastus-dbtest2_Certificate_20231017093244.cer

backupcontainer:

master_234c3f4c53ac45f28329615c2f5ddaba_20231018081455+00.bak msdb_9460b73522964c4fa38a7bc6ff89cacd_20231018081455+00.bak model_ebd0fe66f91f43f199c3b52d803bb136_20231018081505+00.bak model_ebd0fe66f91f43f199c3b52d803bb136_20231018101855+00.bak

Steps to Reproduce

No response

Important Factoids

No response

References

No response

ziyeqf commented 8 months ago

Hi @maltaf1, thanks for opening the issue.

the backup files' name is managed by the service, which can not be managed by Terraform. So we might not able to change them. I personally suggest open a support ticket on Azure, which might help.

For any further questions please leave comments. Thanks

rcskosir commented 5 months ago

Thank you for taking the time to raise this! I am going to close this with @ziyeqf ‘s response as an answer since this is not managed by Terraform. If you do create a support ticket on Azure, feel free to link it here.

github-actions[bot] commented 2 months ago

I'm going to lock this issue because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues. If you have found a problem that seems similar to this, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.