forked from microsoft/AzureTRE
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
tim-allen-ck
committed
May 7, 2024
1 parent
004a9c0
commit a094c19
Showing
4 changed files
with
184 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
# Guacamole User Resources | ||
|
||
- linuxvm - a Linux-based virtual machine | ||
- windowsvm - A Windows-based virtual machine | ||
|
||
## Customising the user resources | ||
|
||
The `guacamole-azure-linuxvm` and `guacamole-azure-windowsvm` folders follow a consistent layout. | ||
To update one of these templates (or to create a new template based on these folders) to use different image details or VM sizes, there are a few files that need to be updated: | ||
|
||
| File | Description | | ||
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ||
| `porter.yaml` | This file describes the template and the name should be updated when creating a template based on the folder.<br> This file also contains a `custom` data section that describes the VM properties.<br> Additionally, the version needs to be updated to deploy an updated version | | ||
| `template_schema.json` | This file controls the validation applied to the template, for example specifying the valid options for fields such as size and image | | ||
|
||
### Configuration | ||
|
||
In `porter.yaml`, the `custom` section contains a couple of sub-sections (shown below) | ||
|
||
```yaml | ||
custom: | ||
vm_sizes: | ||
"2 CPU | 8GB RAM": Standard_D2s_v5 | ||
"4 CPU | 16GB RAM": Standard_D4s_v5 | ||
"8 CPU | 32GB RAM": Standard_D8s_v5 | ||
"16 CPU | 64GB RAM": Standard_D16s_v5 | ||
image_options: | ||
"Ubuntu 22.04 LTS": | ||
source_image_reference: | ||
publisher: canonical | ||
offer: 0001-com-ubuntu-server-jammy | ||
sku: 22_04-lts-gen2 | ||
version: latest | ||
apt_sku: 22.04 | ||
install_ui: true | ||
conda_config: false | ||
"Ubuntu 20.04 LTS": | ||
source_image_reference: | ||
publisher: canonical | ||
offer: 0001-com-ubuntu-server-focal | ||
sku: 20_04-lts-gen2 | ||
version: latest | ||
apt_sku: 20.04 | ||
install_ui: true | ||
conda_config: false | ||
"Ubuntu 20.04 LTS Data Science VM": | ||
source_image_reference: | ||
publisher: microsoft-dsvm | ||
offer: ubuntu-2004 | ||
sku: 2004-gen2 | ||
version: latest | ||
apt_sku: 20.04 | ||
install_ui: true | ||
conda_config: true | ||
# "Custom Image From Gallery": | ||
# source_image_name: your-image | ||
# install_ui: true | ||
# conda_config: true | ||
``` | ||
|
||
The `vm_sizes` section is a map of a custom SKU description to the SKU identifier. | ||
|
||
The `image_options` section defined the possible image choices for the template (note that the name of the image used here needs to be included in the corresponding enum in `template_schema.json`). | ||
|
||
Within the image definition in `image_options` there are a few properties that can be specified: | ||
|
||
| Name | Description | | ||
| ------------------------ | -------------------------------------------------------------------------------------------------------- | | ||
| `source_image_name` | Specify VM image to use by name (see notes below for identifying the image gallery containing the image) | | ||
| `source_image_reference` | Specify VM image to use by `publisher`, `offer`, `sku` & `version` (e.g. for Azure Marketplace images) | | ||
| `install_ui` | (Linux only) Set `true` to install desktop environment | | ||
| `conda_config` | Set true to configure conda | | ||
|
||
When specifying images using `source_image_name`, the image must be stored in an [image gallery](https://learn.microsoft.com/en-us/azure/virtual-machines/azure-compute-gallery). | ||
To enable re-using built user resource templates across environments where the image may vary, the image gallery is configured via the `RP_BUNDLE_VALUES` environment variable when deploying the TRE. | ||
The `RP_BUNDLE_VALUES` variable is a JSON object, and the `image_gallery_id` property within it identifies the image gallery that contains the images specified by `source_image_name`: | ||
|
||
```bash | ||
RP_BUNDLE_VALUES='{"image_gallery_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/<your-rg>/providers/Microsoft.Compute/galleries/<your-gallery-name>"} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
78 changes: 78 additions & 0 deletions
78
...ace_services/guacamole/user_resources/guacamole-azure-linuxvm/terraform/vm_config_byoi.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
#!/bin/bash | ||
|
||
set -o errexit | ||
set -o pipefail | ||
set -o nounset | ||
# Uncomment this line to see each command for debugging (careful: this will show secrets!) | ||
set -o xtrace | ||
|
||
# Remove apt sources not included in sources.list file | ||
sudo rm -f /etc/apt/sources.list.d/* | ||
|
||
# Update apt packages from configured Nexus sources | ||
echo "init_vm.sh: START" | ||
sudo apt update || true | ||
sudo apt upgrade -y | ||
sudo apt install -y gnupg2 software-properties-common apt-transport-https wget dirmngr gdebi-core | ||
sudo apt-get update || true | ||
|
||
## Install xrdp so Guacamole can connect via RDP | ||
echo "init_vm.sh: xrdp" | ||
sudo apt install -y xrdp xorgxrdp xfce4-session | ||
sudo adduser xrdp ssl-cert | ||
sudo -u "${VM_USER}" -i bash -c 'echo xfce4-session > ~/.xsession' | ||
sudo -u "${VM_USER}" -i bash -c 'echo xset s off >> ~/.xsession' | ||
sudo -u "${VM_USER}" -i bash -c 'echo xset -dpms >> ~/.xsession' | ||
|
||
# Make sure xrdp service starts up with the system | ||
sudo systemctl enable xrdp | ||
sudo service xrdp restart | ||
|
||
if [ "${SHARED_STORAGE_ACCESS}" -eq 1 ]; then | ||
# Install required packages | ||
sudo apt-get install autofs -y | ||
|
||
# Pass in required variables | ||
storageAccountName="${STORAGE_ACCOUNT_NAME}" | ||
storageAccountKey="${STORAGE_ACCOUNT_KEY}" | ||
httpEndpoint="${HTTP_ENDPOINT}" | ||
fileShareName="${FILESHARE_NAME}" | ||
mntRoot="/fileshares" | ||
credentialRoot="/etc/smbcredentials" | ||
|
||
mntPath="$mntRoot/$fileShareName" | ||
# shellcheck disable=SC2308 | ||
smbPath=$(echo "$httpEndpoint" | cut -c7-"$(expr length "$httpEndpoint")")$fileShareName | ||
smbCredentialFile="$credentialRoot/$storageAccountName.cred" | ||
|
||
# Create required file paths | ||
sudo mkdir -p "$mntPath" | ||
sudo mkdir -p "/etc/smbcredentials" | ||
sudo mkdir -p $mntRoot | ||
|
||
### Auto FS to persist storage | ||
# Create credential file | ||
if [ ! -f "$smbCredentialFile" ]; then | ||
echo "username=$storageAccountName" | sudo tee "$smbCredentialFile" > /dev/null | ||
echo "password=$storageAccountKey" | sudo tee -a "$smbCredentialFile" > /dev/null | ||
else | ||
echo "The credential file $smbCredentialFile already exists, and was not modified." | ||
fi | ||
|
||
# Change permissions on the credential file so only root can read or modify the password file. | ||
sudo chmod 600 "$smbCredentialFile" | ||
|
||
# Configure autofs | ||
echo "$fileShareName -fstype=cifs,rw,dir_mode=0777,credentials=$smbCredentialFile :$smbPath" | sudo tee /etc/auto.fileshares > /dev/null | ||
echo "$mntRoot /etc/auto.fileshares --timeout=60" | sudo tee /etc/auto.master > /dev/null | ||
|
||
# Restart service to register changes | ||
sudo systemctl restart autofs | ||
|
||
# Autofs mounts when accessed for 60 seconds. Folder created for constant visible mount | ||
sudo ln -s "$mntPath" "/$fileShareName" | ||
fi | ||
|
||
## Cleanup | ||
echo "init_vm.sh: Cleanup" | ||
sudo shutdown -r now |