diff --git a/e2e_tests/test_performance.py b/e2e_tests/test_performance.py index f6e7637fe..7fa0208a7 100644 --- a/e2e_tests/test_performance.py +++ b/e2e_tests/test_performance.py @@ -106,7 +106,8 @@ async def test_bulk_updates_to_ensure_each_resource_updated_in_series(verify) -> "properties": { "display_name": "Perf test VM", "description": "", - "os_image": "Ubuntu 22.04 LTS" + "os_image": "Ubuntu 22.04 LTS", + "admin_username": "researcher" } } diff --git a/e2e_tests/test_workspace_services.py b/e2e_tests/test_workspace_services.py index 3013fef37..c4b67036a 100644 --- a/e2e_tests/test_workspace_services.py +++ b/e2e_tests/test_workspace_services.py @@ -31,7 +31,8 @@ async def test_create_guacamole_service_into_base_workspace(setup_test_workspace "properties": { "display_name": "My VM", "description": "Will be using this VM for my research", - "os_image": "Windows 10" + "os_image": "Windows 10", + "admin_username": "researcher" } } diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml index a8e04193e..7ebb8bccb 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/porter.yaml @@ -108,6 +108,9 @@ parameters: - name: os_image type: string default: "Ubuntu 22.04 LTS" + - name: admin_username + type: string + default: "" - name: vm_size type: string default: "2 CPU | 8GB RAM" @@ -166,6 +169,7 @@ install: parent_service_id: ${ bundle.parameters.parent_service_id } tre_resource_id: ${ bundle.parameters.id } image: ${ bundle.parameters.os_image } + admin_username: ${ bundle.parameters.admin_username } vm_size: ${ bundle.parameters.vm_size } shared_storage_access: ${ bundle.parameters.shared_storage_access } shared_storage_name: ${ bundle.parameters.shared_storage_name } @@ -201,6 +205,7 @@ upgrade: parent_service_id: ${ bundle.parameters.parent_service_id } tre_resource_id: ${ bundle.parameters.id } image: ${ bundle.parameters.os_image } + admin_username: ${ bundle.parameters.admin_username } vm_size: ${ bundle.parameters.vm_size } shared_storage_access: ${ bundle.parameters.shared_storage_access } shared_storage_name: ${ bundle.parameters.shared_storage_name } @@ -248,6 +253,7 @@ uninstall: parent_service_id: ${ bundle.parameters.parent_service_id } tre_resource_id: ${ bundle.parameters.id } image: ${ bundle.parameters.os_image } + admin_username: ${ bundle.parameters.admin_username } vm_size: ${ bundle.parameters.vm_size } shared_storage_access: ${ bundle.parameters.shared_storage_access } shared_storage_name: ${ bundle.parameters.shared_storage_name } diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json index aa0066883..7e1afc80a 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/template_schema.json @@ -36,6 +36,12 @@ "Ubuntu 22.04 LTS" ] }, + "admin_username": { + "type": "string", + "title": "Admin username", + "description": "Overide automatic admin username generation.", + "default": "" + }, "vm_size": { "$id": "#/properties/vm_size", "type": "string", @@ -126,5 +132,10 @@ ] } } - ] + ], + "uiSchema": { + "admin_username": { + "classNames": "tre-hidden" + } + } } diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/data.tf b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/data.tf index 507047663..3e0cfb10d 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/data.tf +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/data.tf @@ -72,5 +72,6 @@ data "azurerm_storage_account" "stg" { } data "azuread_user" "user" { + count = var.admin_username == "" ? 1 : 0 object_id = var.owner_id } diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/locals.tf b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/locals.tf index c304adb75..abc5f4307 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/locals.tf +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/locals.tf @@ -8,9 +8,12 @@ locals { keyvault_name = lower("kv-${substr(local.workspace_resource_name_suffix, -20, -1)}") storage_name = lower(replace("stg${substr(local.workspace_resource_name_suffix, -8, -1)}", "-", "")) admin_username = ( - length(data.azuread_user.user.mail) > 0 && strcontains(data.azuread_user.user.user_principal_name, "#EXT#") ? - substr(element(split("@", data.azuread_user.user.mail), 0), 0, 20) : - substr(element(split("#EXT#", element(split("@", data.azuread_user.user.user_principal_name), 0)), 0), 0, 20) + var.admin_username == "" ? + (length(data.azuread_user.user[0].mail) > 0 && strcontains(data.azuread_user.user[0].user_principal_name, "#EXT#") ? + substr(element(split("@", data.azuread_user.user[0].mail), 0), 0, 20) : + substr(element(split("#EXT#", element(split("@", data.azuread_user.user[0].user_principal_name), 0)), 0), 0, 20) + ) : + var.admin_username ) vm_password_secret_name = "${local.vm_name}-admin-credentials" tre_user_resources_tags = { @@ -19,7 +22,7 @@ locals { tre_workspace_service_id = var.parent_service_id tre_user_resource_id = var.tre_resource_id tre_user_id = var.owner_id - tre_user_username = data.azuread_user.user.user_principal_name + tre_user_username = var.admin_username == "" ? local.admin_username : var.admin_username } nexus_proxy_url = "https://nexus-${data.azurerm_public_ip.app_gateway_ip.fqdn}" # Load VM SKU/image details from porter.yaml diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/variables.tf b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/variables.tf index 8546da7b9..bb80e979b 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/variables.tf +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/variables.tf @@ -48,14 +48,14 @@ variable "key_store_id" { type = string } variable "auth_tenant_id" { - type = string - description = "Used to authenticate into the AAD Tenant to create the AAD App" + type = string } variable "auth_client_id" { - type = string - description = "Used to authenticate into the AAD Tenant to create the AAD App" + type = string } variable "auth_client_secret" { - type = string - description = "Used to authenticate into the AAD Tenant to create the AAD App" + type = string +} +variable "admin_username" { + type = string } 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 79c06e529..153cf482b 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.10 +version: 1.2.14 description: "An Azure TRE User Resource Template for Guacamole (Windows 10)" dockerfile: Dockerfile.tmpl registry: azuretre @@ -104,6 +104,9 @@ parameters: - name: os_image type: string default: "Windows 10" + - name: admin_username + type: string + default: "" - name: vm_size type: string default: "2 CPU | 8GB RAM" @@ -164,6 +167,7 @@ install: parent_service_id: ${ bundle.parameters.parent_service_id } tre_resource_id: ${ bundle.parameters.id } image: ${ bundle.parameters.os_image } + admin_username: ${ bundle.parameters.admin_username } vm_size: ${ bundle.parameters.vm_size } shared_storage_access: ${ bundle.parameters.shared_storage_access } shared_storage_name: ${ bundle.parameters.shared_storage_name } @@ -196,6 +200,7 @@ upgrade: parent_service_id: ${ bundle.parameters.parent_service_id } tre_resource_id: ${ bundle.parameters.id } image: ${ bundle.parameters.os_image } + admin_username: ${ bundle.parameters.admin_username } vm_size: ${ bundle.parameters.vm_size } shared_storage_access: ${ bundle.parameters.shared_storage_access } shared_storage_name: ${ bundle.parameters.shared_storage_name } @@ -240,6 +245,7 @@ uninstall: parent_service_id: ${ bundle.parameters.parent_service_id } tre_resource_id: ${ bundle.parameters.id } image: ${ bundle.parameters.os_image } + admin_username: ${ bundle.parameters.admin_username } vm_size: ${ bundle.parameters.vm_size } shared_storage_access: ${ bundle.parameters.shared_storage_access } shared_storage_name: ${ bundle.parameters.shared_storage_name } 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 477f88cef..8d1525be0 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 @@ -36,6 +36,12 @@ "Server 2019 Data Science VM" ] }, + "admin_username": { + "type": "string", + "title": "Admin username", + "description": "Overide automatic admin username generation.", + "default": "" + }, "vm_size": { "$id": "#/properties/vm_size", "type": "string", @@ -57,5 +63,10 @@ "default": true, "description": "Enable access to shared storage" } + }, + "uiSchema": { + "admin_username": { + "classNames": "tre-hidden" + } } } diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/data.tf b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/data.tf index 968e8d9bc..b83045c0a 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/data.tf +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/data.tf @@ -50,5 +50,6 @@ data "azurerm_user_assigned_identity" "ws_encryption_identity" { } data "azuread_user" "user" { + count = var.admin_username == "" ? 1 : 0 object_id = var.owner_id } diff --git a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/locals.tf b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/locals.tf index 713db2d05..3590a2b73 100644 --- a/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/locals.tf +++ b/templates/workspace_services/guacamole/user_resources/guacamole-azure-windowsvm/terraform/locals.tf @@ -8,9 +8,12 @@ locals { keyvault_name = lower("kv-${substr(local.workspace_resource_name_suffix, -20, -1)}") storage_name = lower(replace("stg${substr(local.workspace_resource_name_suffix, -8, -1)}", "-", "")) admin_username = ( - length(data.azuread_user.user.mail) > 0 && strcontains(data.azuread_user.user.user_principal_name, "#EXT#") ? - substr(element(split("@", data.azuread_user.user.mail), 0), 0, 20) : - substr(element(split("#EXT#", element(split("@", data.azuread_user.user.user_principal_name), 0)), 0), 0, 20) + var.admin_username == "" ? + (length(data.azuread_user.user[0].mail) > 0 && strcontains(data.azuread_user.user[0].user_principal_name, "#EXT#") ? + substr(element(split("@", data.azuread_user.user[0].mail), 0), 0, 20) : + substr(element(split("#EXT#", element(split("@", data.azuread_user.user[0].user_principal_name), 0)), 0), 0, 20) + ) : + var.admin_username ) vm_password_secret_name = "${local.vm_name}-admin-credentials" tre_user_resources_tags = { @@ -19,7 +22,7 @@ locals { tre_workspace_service_id = var.parent_service_id tre_user_resource_id = var.tre_resource_id tre_user_id = var.owner_id - tre_user_username = data.azuread_user.user.user_principal_name + tre_user_username = var.admin_username == "" ? local.admin_username : var.admin_username } nexus_proxy_url = "https://nexus-${data.azurerm_public_ip.app_gateway_ip.fqdn}" 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 c6fb74d83..82c340359 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 @@ -37,14 +37,14 @@ variable "key_store_id" { type = string } variable "auth_tenant_id" { - type = string - description = "Used to authenticate into the AAD Tenant to create the AAD App" + type = string } variable "auth_client_id" { - type = string - description = "Used to authenticate into the AAD Tenant to create the AAD App" + type = string } variable "auth_client_secret" { - type = string - description = "Used to authenticate into the AAD Tenant to create the AAD App" + type = string +} +variable "admin_username" { + type = string }