diff --git a/CHANGELOG.md b/CHANGELOG.md index 382f63e34..b8e65a62d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,8 @@ ENHANCEMENTS: * Add bundle target to Makefile for handling different bundle types in single command ([#4372](https://github.com/microsoft/AzureTRE/issues/4372)) * Migrate UI to Vite build engine and update dependencies ([#4368](https://github.com/microsoft/AzureTRE/pull/4368)) * Add Windows image field to the Admin VM template ([#4274](https://github.com/microsoft/AzureTRE/pull/4274)) -* Update TLS to the latest version for web apps / function apps (([#4351](https://github.com/microsoft/AzureTRE/issues/4351)) +* Update TLS to the latest version for web apps / function apps ([#4351](https://github.com/microsoft/AzureTRE/issues/4351)) +* Add shutdown schedule to Windows VMs ([#4211](https://github.com/microsoft/AzureTRE/pull/4211/)) BUG FIXES: * Fix upgrade when porter install has failed ([#4338](https://github.com/microsoft/AzureTRE/pull/4338)) diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml index f9056f0f0..fa2aeae03 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/porter.yaml @@ -1,7 +1,7 @@ --- schemaVersion: 1.0.0 name: tre-service-guacamole-windowsvm -version: 1.2.6 +version: 1.2.7 description: "An Azure TRE User Resource Template for Guacamole (Windows 10)" dockerfile: Dockerfile.tmpl registry: azuretre @@ -108,6 +108,19 @@ parameters: default: "vm-shared-storage" - name: arm_environment type: string + - name: enable_shutdown_schedule + type: boolean + default: false + description: "Enable automatic shutdown schedule for the VM" + - name: shutdown_time + default: "" + type: string + description: "Time of day to shutdown the VM (HHmm format)" + pattern: "^([01]?[0-9]|2[0-3])[0-5][0-9]$" + - name: shutdown_timezone + type: string + description: "Timezone for the shutdown schedule" + default: "UTC" - name: enable_cmk_encryption type: boolean default: false @@ -115,6 +128,7 @@ parameters: type: string default: "" + outputs: - name: ip type: string @@ -159,6 +173,9 @@ install: shared_storage_access: ${ bundle.parameters.shared_storage_access } shared_storage_name: ${ bundle.parameters.shared_storage_name } image_gallery_id: ${ bundle.parameters.image_gallery_id } + enable_shutdown_schedule: ${ bundle.parameters.enable_shutdown_schedule } + shutdown_time: ${ bundle.parameters.shutdown_time } + shutdown_timezone: ${ bundle.parameters.shutdown_timezone } enable_cmk_encryption: ${ bundle.parameters.enable_cmk_encryption } key_store_id: ${ bundle.parameters.key_store_id } backendConfig: @@ -187,6 +204,9 @@ upgrade: shared_storage_access: ${ bundle.parameters.shared_storage_access } shared_storage_name: ${ bundle.parameters.shared_storage_name } image_gallery_id: ${ bundle.parameters.image_gallery_id } + enable_shutdown_schedule: ${ bundle.parameters.enable_shutdown_schedule } + shutdown_time: ${ bundle.parameters.shutdown_time } + shutdown_timezone: ${ bundle.parameters.shutdown_timezone } enable_cmk_encryption: ${ bundle.parameters.enable_cmk_encryption } key_store_id: ${ bundle.parameters.key_store_id } backendConfig: @@ -227,6 +247,9 @@ uninstall: shared_storage_access: ${ bundle.parameters.shared_storage_access } shared_storage_name: ${ bundle.parameters.shared_storage_name } image_gallery_id: ${ bundle.parameters.image_gallery_id } + enable_shutdown_schedule: ${ bundle.parameters.enable_shutdown_schedule } + shutdown_time: ${ bundle.parameters.shutdown_time } + shutdown_timezone: ${ bundle.parameters.shutdown_timezone } enable_cmk_encryption: ${ bundle.parameters.enable_cmk_encryption } key_store_id: ${ bundle.parameters.key_store_id } backendConfig: diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/template_schema.json b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/template_schema.json index 74518f33e..0b48697ea 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/template_schema.json +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/template_schema.json @@ -40,6 +40,75 @@ "title": "Shared storage", "default": true, "description": "Enable access to shared storage" + }, + "enable_shutdown_schedule": { + "$id": "#/properties/enable_shutdown_schedule", + "type": "boolean", + "title": "Enable Shutdown Schedule", + "default": false, + "description": "Enable automatic shutdown schedule for the VM" + } + }, + "allOf": [ + { + "if": { + "properties": { + "enable_shutdown_schedule": { + "const": true + } + }, + "required": [ + "enable_shutdown_schedule" + ] + }, + "then": { + "properties": { + "shutdown_time": { + "type": "string", + "title": "Shutdown Time", + "description": "Time of day to shutdown the VM (HHmm format), e.g. 1800", + "pattern": "^([01]?[0-9]|2[0-3])[0-5][0-9]$", + "default": "1800" + }, + "shutdown_timezone": { + "type": "string", + "title": "Shutdown Timezone", + "description": "Timezone for the shutdown schedule", + "default": "UTC", + "enum": [ + "UTC -12", + "UTC -11", + "UTC -10", + "UTC -9", + "UTC -8", + "UTC -7", + "UTC -6", + "UTC -5", + "UTC -4", + "UTC -3", + "UTC -2", + "UTC -1", + "UTC", + "UTC +1", + "UTC +2", + "UTC +3", + "UTC +4", + "UTC +5", + "UTC +6", + "UTC +7", + "UTC +8", + "UTC +9", + "UTC +10", + "UTC +11", + "UTC +12" + ] + } + }, + "required": [ + "shutdown_time", + "shutdown_timezone" + ] + } } - } + ] } diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/variables.tf b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/variables.tf index 2e3f95b33..91bff4de7 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/variables.tf +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/variables.tf @@ -26,6 +26,17 @@ variable "image_gallery_id" { type = string default = "" } +variable "enable_shutdown_schedule" { + type = bool + default = false +} +variable "shutdown_time" { + type = string +} +variable "shutdown_timezone" { + type = string + default = "UTC" +} variable "enable_cmk_encryption" { type = bool default = false diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/windowsvm.tf b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/windowsvm.tf index 2640c0075..0bb11f7e6 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/windowsvm.tf +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/windowsvm.tf @@ -133,3 +133,16 @@ resource "azurerm_key_vault_secret" "windowsvm_password" { lifecycle { ignore_changes = [tags] } } + +resource "azurerm_dev_test_global_vm_shutdown_schedule" "shutdown_schedule" { + count = var.enable_shutdown_schedule ? 1 : 0 + + location = data.azurerm_resource_group.ws.location + virtual_machine_id = azurerm_windows_virtual_machine.windowsvm.id + daily_recurrence_time = var.shutdown_time + timezone = var.shutdown_timezone + enabled = var.enable_shutdown_schedule + notification_settings { + enabled = false + } +}