Reorganize folder structure of workspaces and workspace services (#703)

* Folder structure changed, vanilla renamed as base
* Guacamole VM bundle moved under user_resources folder
* Service and workspace references fixed
This commit is contained in:
Tomi Paananen 2021-08-24 12:23:07 +03:00 коммит произвёл GitHub
Родитель 7f2a508d95
Коммит 8a55b3ea73
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
214 изменённых файлов: 212 добавлений и 211 удалений

24
.github/workflows/deploy_tre.yml поставляемый
Просмотреть файл

@ -139,7 +139,7 @@ jobs:
timezone: Europe/Zurich
publish_bundles:
name: Publish Vanilla Bundle
name: Publish Base Bundle
needs: deploy_mgmt_infra
runs-on: ubuntu-latest
environment: Dev
@ -160,7 +160,7 @@ jobs:
export USE_ENV_VARS_NOT_FILES=true
make porter-publish DIR=./workspaces/vanilla
make porter-publish DIR=./templates/workspaces/base
e2e_tests:
name: "Run E2E Tests"
@ -287,10 +287,10 @@ jobs:
export USE_ENV_VARS_NOT_FILES=true
make porter-publish DIR=./workspaces/services/azureml
make porter-publish DIR=./workspaces/services/devtestlabs
make porter-publish DIR=./workspaces/services/innereye_deeplearning
make porter-publish DIR=./workspaces/services/innereye_inference
make porter-publish DIR=./templates/workspace_services/azureml
make porter-publish DIR=./templates/workspace_services/devtestlabs
make porter-publish DIR=./templates/workspace_services/innereye_deeplearning
make porter-publish DIR=./templates/workspace_services/innereye_inference
# deploy_azureml_devtestlabs_workspace:
# name: Deploy Azure ML and DevTest Labs Workspace
# needs: [publish_innereye_bundles]
@ -324,8 +324,8 @@ jobs:
# export ARM_TENANT_ID=$(echo "$AZURE_CREDENTIALS" | jq -r '.tenantId')
# curl -L https://cdn.porter.sh/latest/install-linux.sh | bash && ~/.porter/porter mixin install docker
# export PATH=~/.porter/:$PATH
# make porter-publish DIR=./workspaces/azureml_devtestlabs
# make porter-install DIR=./workspaces/azureml_devtestlabs
# make porter-publish DIR=./templates/workspaces/azureml_devtestlabs
# make porter-install DIR=./templates/workspaces/azureml_devtestlabs
# deploy_innereye_deeplearning_workspace:
# name: Deploy InnerEye Deep Learning Workspace
# needs: [deploy_azureml_devtestlabs_workspace]
@ -359,8 +359,8 @@ jobs:
# export ARM_TENANT_ID=$(echo "$AZURE_CREDENTIALS" | jq -r '.tenantId')
# curl -L https://cdn.porter.sh/latest/install-linux.sh | bash && ~/.porter/porter mixin install docker
# export PATH=~/.porter/:$PATH
# make porter-publish DIR=./workspaces/innereye_deeplearning
# make porter-install DIR=./workspaces/innereye_deeplearning
# make porter-publish DIR=./templates/workspaces/innereye_deeplearning
# make porter-install DIR=./templates/workspaces/innereye_deeplearning
# deploy_innereye_deeplearning_inference_workspace:
# name: Deploy InnerEye Deep Learning & Inference Workspace
# needs: [deploy_innereye_deeplearning_workspace]
@ -396,5 +396,5 @@ jobs:
# export INFERENCE_SP_CLIENT_SECRET=$(echo "$AZURE_CREDENTIALS" | jq -r '.clientSecret')
# curl -L https://cdn.porter.sh/latest/install-linux.sh | bash && ~/.porter/porter mixin install docker
# export PATH=~/.porter/:$PATH
# make porter-publish DIR=./workspaces/innereye_deeplearning_inference
# make porter-install DIR=./workspaces/innereye_deeplearning_inference
# make porter-publish DIR=./templates/workspaces/innereye_deeplearning_inference
# make porter-install DIR=./templates/workspaces/innereye_deeplearning_inference

Просмотреть файл

@ -53,8 +53,8 @@ The flow to provision a Workspace is the following (the flow is the same for all
```JSON
{
"action": "install",
"id": "vanilla",
"name": "VanillaWorkspaceTemplate",
"id": "base",
"name": "BaseWorkspaceTemplate",
"version": "1.0",
"parameters": {
"param1": "value1"
@ -70,10 +70,10 @@ The flow to provision a Workspace is the following (the flow is the same for all
porter <action> --reference <ACR name>.azurecr.io/bundles/<name>:<version> --params key=value --cred <credentials set name or file>
# Example
porter install --reference msfttreacr.azurecr.io/bundles/VanillaWorkspaceTemplate:1.0 --params param1=value1 --cred azure.json
porter install --reference msfttreacr.azurecr.io/bundles/BaseWorkspaceTemplate:1.0 --params param1=value1 --cred azure.json
```
Deployments are carried out against the Azure Subscription using a User Assigned Managed Identity. The `azure.json` tells Porter where the credential information can be found and for the Resource Processor they are set as environment variables (Vanilla Workspace Template [azure.json](workspaces/vanilla/azure.json)).
Deployments are carried out against the Azure Subscription using a User Assigned Managed Identity. The `azure.json` tells Porter where the credential information can be found and for the Resource Processor they are set as environment variables (Base Workspace Template [azure.json](../templates/workspaces/base/azure.json)).
Porter bundle actions are required to be idempotent, so if a deployment fails, the Resource Processor can retry.

Просмотреть файл

@ -7,6 +7,7 @@ This document describes the authentication and authorization (A&A) of deployed A
App registrations (represented by service principals) define the privileges enabling access to the TRE system (e.g., [Management API](../management_api_app/README.md)) as well as the workspaces.
<!-- markdownlint-disable-next-line MD013 -->
It is recommended to run the [`/scripts/aad-app-reg.sh`](../scripts/aad-app-reg.sh) script to create the two main app registrations: "TRE API" and "TRE Swagger UI". It automatically setups the app registrations with the required permissions to run Azure TRE. The script will create an app password (client secret) for the "TRE API" app; make sure to take note of it in the script output as it is only shown once.
Alternatively you can also choose to create the app registrations manually via the Azure Portal - see [Quickstart: Register an application with the Microsoft identity platform](https://docs.microsoft.com/azure/active-directory/develop/quickstart-register-app) on how. The required setup with permissions is documented below.

Просмотреть файл

@ -3,7 +3,7 @@
<!-- markdownlint-disable-next-line MD013 -->
Azure TRE workspaces are [Porter](https://porter.sh/) bundles that in turn are based on [Cloud Native Application Bundles (CNAB)](https://cnab.io/). Workspace authors are free to choose the technology stack for provisioning resources (e.g., ARM templates, Terraform etc.), but the Azure TRE framework sets certain requirements for the bundle manifests, which specify the credentials, input and output parameters, deployment actions among other things. The document describes those requirements.
**Use [the vanilla workspace bundle](../workspaces/vanilla/README.md) and [others](../workspaces/) as reference** or as the basis for the new bundle. To start from scratch follow the Porter [Quickstart Guide](https://porter.sh/quickstart/) ([`porter create` CLI command](https://porter.sh/cli/porter_create/) will generate a new bundle in the current directory).
**Use [the base workspace bundle](../templates/workspaces/base/README.md) and [others](../templates/workspaces/) as reference** or as the basis for the new bundle. To start from scratch follow the Porter [Quickstart Guide](https://porter.sh/quickstart/) ([`porter create` CLI command](https://porter.sh/cli/porter_create/) will generate a new bundle in the current directory).
## Prerequisites

Просмотреть файл

@ -42,9 +42,9 @@
├── scripts - Utility scripts
── templates
│ ├── core/terraform - Terraform definitions of Azure TRE core resources
│ └── services... - Terraform definitions for default workspace resources
── templates
├── core/terraform - Terraform definitions of Azure TRE core resources
├── shared_services - Terraform definitions of shared services
├── workspace_services - Workspace services
└── workspaces - Workspace templates
```

Просмотреть файл

@ -150,12 +150,12 @@ You can also create a request to the `api/health` endpoint to verify that Manage
curl https://<azure_tre_fqdn>/api/health
```
## Publishing and registering the vanilla workspace bundle
## Publishing and registering the base workspace bundle
1. Run:
```cmd
register-bundle DIR=./workspaces/vanilla
register-bundle DIR=./templates/workspaces/base
```
Copy the resulting payload json.
@ -172,9 +172,9 @@ curl https://<azure_tre_fqdn>/api/health
1. To verify regsitration of the template do `GET` operation on `/api/workspace-templates`. The name of the template should now be listed.
## Creating a vanilla workspace
## Creating a base workspace
Now that we have published and registered a vanilla workspace bundle we can use the deployed API to create a vanilla workspace.
Now that we have published and registered a base workspace bundle we can use the deployed API to create a base workspace.
<!-- markdownlint-disable-next-line MD013 -->
> All routes are auth protected.Click the green **Authorize** button to receive a token for swagger client.
@ -183,13 +183,13 @@ As explained in the [auth guide](auth.md), every workspace has a corresponding a
Running the script will report app id of the generated app which needs to be used in the POST body below.
Go to ``azure_tre_fqdn/docs`` and use POST /api/workspaces with the sample body to create a vanilla workspace.
Go to ``azure_tre_fqdn/docs`` and use POST /api/workspaces with the sample body to create a base workspace.
```json
{
"displayName": "manual-from-swagger",
"description": "workspace for team X",
"workspaceType": "tre-workspace-vanilla",
"workspaceType": "tre-workspace-base",
"parameters": {},
"authConfig": {
"provider": "AAD",

Просмотреть файл

@ -14,9 +14,9 @@ The script can also be used to generate the payload required by the API without
### Registration using Swagger UI
1. We will use the utility script to generate the payload. The script needs to be executed from within the bundle directory, for example `/workspaces/azureml_devtestlabs/`. This script can be used as follows:
1. We will use the utility script to generate the payload. The script needs to be executed from within the bundle directory, for example `/templates/workspaces/azureml_devtestlabs/`. This script can be used as follows:
`../../devops/scripts/publish_register_bundle.sh -r <acr_name> -i -t workspace`
`../../../devops/scripts/publish_register_bundle.sh -r <acr_name> -i -t workspace`
Copy the resulting payload json.
@ -36,10 +36,10 @@ The script can also be used to generate the payload required by the API without
To use the script to automatically register the template a user that does not require an interactive login must be created as per the [e2e test user documentation here](auth.md#tre-e2e-test).
The script needs to be executed from within the bundle directory, for example `/workspaces/azureml_devtestlabs/`. This script can be used as follows:
The script needs to be executed from within the bundle directory, for example `/templates/workspaces/azureml_devtestlabs/`. This script can be used as follows:
```cmd
Usage: ../../devops/scripts/publish_register_bundle.sh [-u --tre_url] [-c --current] [-i --insecure]
Usage: ../../../devops/scripts/publish_register_bundle.sh [-u --tre_url] [-c --current] [-i --insecure]
Options:
-r, --acr-name Azure Container Registry Name

Просмотреть файл

@ -6,7 +6,7 @@ API_WORKSPACE_TEMPLATES = "/api/workspace-templates"
API_WORKSPACES = "/api/workspaces"
API_WORKSPACE_SERVICE_TEMPLATES = "/api/workspace-service-templates"
VANILLA_WORKSPACE = "tre-workspace-vanilla"
BASE_WORKSPACE = "tre-workspace-base"
DEV_TEST_LABS = "tre-workspace-azureml-devtestlabs"
INNEREYE_DEEPLEARNING = "tre-workspace-innereye-deeplearning"
INNEREYE_DEEPLEARNING_INFERENCE = "tre-workspace-innereye-deeplearning-inference"

Просмотреть файл

@ -25,7 +25,7 @@ Authorization: Bearer {{auth.response.body.access_token}}
Content-type: application/json
{
"workspaceType": "tre-workspace-vanilla",
"workspaceType": "tre-workspace-base",
"properties": {
"display_name": "E2E test",
"description": "workspace for E2E",

Просмотреть файл

@ -13,7 +13,7 @@ pytestmark = pytest.mark.asyncio
workspace_templates = [
(strings.VANILLA_WORKSPACE),
(strings.BASE_WORKSPACE),
(strings.DEV_TEST_LABS),
(strings.INNEREYE_DEEPLEARNING),
(strings.INNEREYE_DEEPLEARNING_INFERENCE)
@ -94,9 +94,9 @@ async def test_getting_templates(template_name, token, verify) -> None:
@pytest.mark.smoke
@pytest.mark.timeout(1200)
async def test_create_vanilla_workspace(token, verify) -> None:
async def test_create_base_workspace(token, verify) -> None:
payload = {
"workspaceType": "tre-workspace-vanilla",
"workspaceType": "tre-workspace-base",
"properties": {
"display_name": "E2E test",
"description": "workspace for E2E",

Просмотреть файл

@ -2,7 +2,7 @@
"templates": [
{
"id": "2b3f98a7-1152-4a24-8b9b-6513b8 bb23e7",
"name": "tre-workspace-vanilla",
"name": "tre-workspace-base",
"description": "These parameters are specific to my workspace template",
"version": "0.0.1",
"resourceType": "workspace",

Просмотреть файл

@ -29,8 +29,8 @@ class ResourceTemplateInformationInList(BaseModel):
"example": {
"templates": [
{
"name": "tre-workspace-vanilla",
"description": "vanilla description"
"name": "tre-workspace-base",
"description": "base description"
},
{
"name": "tre-workspace-base",

Просмотреть файл

@ -10,7 +10,7 @@ from models.domain.workspace import Workspace
def get_sample_workspace(workspace_id: str, spec_workspace_id: str = "0001") -> dict:
return {
"id": workspace_id,
"resourceTemplateName": "tre-workspace-vanilla",
"resourceTemplateName": "tre-workspace-base",
"resourceTemplateVersion": "0.1.0",
"resourceTemplateParameters": {
"azure_location": "westeurope",
@ -72,7 +72,7 @@ class WorkspaceInCreate(BaseModel):
class Config:
schema_extra = {
"example": {
"workspaceType": "tre-workspace-vanilla",
"workspaceType": "tre-workspace-base",
"properties": {
"display_name": "the workspace display name",
"description": "workspace description",

Просмотреть файл

@ -3,11 +3,11 @@ from models.domain.resource_template import ResourceTemplate, Property
from models.schemas.resource_template import ResourceTemplateInCreate, ResourceTemplateInResponse
def get_sample_workspace_template_object(template_name: str = "tre-workspace-vanilla") -> ResourceTemplate:
def get_sample_workspace_template_object(template_name: str = "tre-workspace-base") -> ResourceTemplate:
return ResourceTemplate(
id="a7a7a7bd-7f4e-4a4e-b970-dc86a6b31dfb",
name=template_name,
description="vanilla workspace bundle",
description="base workspace bundle",
version="0.1.0",
resourceType=ResourceType.Workspace,
current=True,

Просмотреть файл

@ -20,11 +20,11 @@ pytestmark = pytest.mark.asyncio
@pytest.fixture
def workspace_service_template_without_enriching():
def create_workspace_service_template(template_name: str = "vanilla-service-template"):
def create_workspace_service_template(template_name: str = "base-service-template"):
return ResourceTemplate(
id="a7a7a7bd-7f4e-4a4e-b970-dc86a6b31dfb",
name=template_name,
description="vanilla service bundle",
description="base service bundle",
version="0.1.0",
resourceType=ResourceType.WorkspaceService,
current=True,

Просмотреть файл

@ -20,11 +20,11 @@ pytestmark = pytest.mark.asyncio
@pytest.fixture
def workspace_template_without_enriching():
def create_workspace_template(template_name: str = "vanilla-workspace-template"):
def create_workspace_template(template_name: str = "base-workspace-template"):
return ResourceTemplate(
id="a7a7a7bd-7f4e-4a4e-b970-dc86a6b31dfb",
name=template_name,
description="vanilla workspace bundle",
description="base workspace bundle",
version="0.1.0",
resourceType=ResourceType.Workspace,
current=True,
@ -129,7 +129,7 @@ class TestWorkspaceTemplate:
async def test_workspace_templates_by_name_returns_returns_error_status_based_on_exception(self, get_current_template_mock, exception, expected_status, app, client):
get_current_template_mock.side_effect = exception
response = await client.get(app.url_path_for(strings.API_GET_WORKSPACE_TEMPLATE_BY_NAME, workspace_template_name="tre-workspace-vanilla"))
response = await client.get(app.url_path_for(strings.API_GET_WORKSPACE_TEMPLATE_BY_NAME, workspace_template_name="tre-workspace-base"))
assert response.status_code == expected_status

Просмотреть файл

@ -23,7 +23,7 @@ pytestmark = pytest.mark.asyncio
def sample_workspace(workspace_id, auth_info: dict = None):
workspace = Workspace(
id=workspace_id,
resourceTemplateName="tre-workspace-vanilla",
resourceTemplateName="tre-workspace-base",
resourceTemplateVersion="0.1.0",
resourceTemplateParameters={},
deployment=Deployment(status=Status.NotDeployed, message=""),
@ -37,7 +37,7 @@ def sample_workspace_service(workspace_service_id, workspace_id):
return WorkspaceService(
id=workspace_service_id,
workspaceId=workspace_id,
resourceTemplateName="tre-workspace-vanilla",
resourceTemplateName="tre-workspace-base",
resourceTemplateVersion="0.1.0",
resourceTemplateParameters={},
deployment=Deployment(status=Status.NotDeployed, message=""),

Просмотреть файл

@ -19,7 +19,7 @@ def resource_repo():
@pytest.fixture
def workspace_input():
return WorkspaceInCreate(workspaceType="vanilla-tre", properties={"display_name": "test", "description": "test", "app_id": "123"})
return WorkspaceInCreate(workspaceType="base-tre", properties={"display_name": "test", "description": "test", "app_id": "123"})
def test_delete_workspace_marks_workspace_as_deleted(resource_repo):
@ -27,7 +27,7 @@ def test_delete_workspace_marks_workspace_as_deleted(resource_repo):
workspace = Workspace(
id="1234",
resourceTemplateName="vanilla-tre",
resourceTemplateName="base-tre",
resourceTemplateVersion="0.1.0",
resourceTemplateParameters={},
deployment=Deployment(status=Status.NotDeployed, message=""),
@ -42,7 +42,7 @@ def test_restore_deletion_status(resource_repo):
workspace = Workspace(
id="1234",
resourceTemplateName="vanilla-tre",
resourceTemplateName="base-tre",
resourceTemplateVersion="0.1.0",
resourceTemplateParameters={},
deployment=Deployment(status=Status.Deleting, message=""),

Просмотреть файл

@ -11,7 +11,7 @@ from models.schemas.workspace import WorkspaceInCreate, WorkspacePatchEnabled
@pytest.fixture
def basic_workspace_request():
return WorkspaceInCreate(workspaceType="vanilla-tre", properties={"display_name": "test", "description": "test", "app_id": "123"})
return WorkspaceInCreate(workspaceType="base-tre", properties={"display_name": "test", "description": "test", "app_id": "123"})
@pytest.fixture
@ -130,7 +130,7 @@ def test_patch_workspace_updates_item(workspace_repo):
workspace_repo.update_item = MagicMock(return_value=None)
workspace_to_patch = Workspace(
id="1234",
resourceTemplateName="vanilla-tre",
resourceTemplateName="base-tre",
resourceTemplateVersion="0.1.0",
resourceTemplateParameters={},
deployment=Deployment(status=Status.NotDeployed, message=""),

Просмотреть файл

@ -38,7 +38,7 @@ class ServiceBusReceivedMessageMock:
def create_sample_workspace_object(workspace_id):
return Workspace(
id=workspace_id,
resourceTemplateName="tre-workspace-vanilla",
resourceTemplateName="tre-workspace-base",
resourceTemplateVersion="0.1.0",
resourceTemplateParameters={},
deployment=Deployment(status=Status.NotDeployed, message="")

Просмотреть файл

@ -1,7 +1,7 @@
{
"action":"install",
"id":"0c03ba50-f671-4bf1-9312-97b5f14e42cc",
"name":"tre-workspace-vanilla",
"name":"tre-workspace-base",
"version":"0.1.0",
"parameters":{
"address_space":"10.2.1.0/24",

Просмотреть файл

@ -48,7 +48,7 @@ When working locally we use a service principal (SP). This SP needs enough permi
Once the above is setup you can simulate receiving messages from service bus by going to service bus explorer on the portal and using a message payload for SERVICE_BUS_RESOURCE_REQUEST_QUEUE as follows
```json
{"action": "install", "id": "a8911125-50b4-491b-9e7c-ed8ff42220f9", "name": "tre-workspace-vanilla", "version": "0.1.0", "parameters": {"azure_location": "westeurope", "workspace_id": "20f9", "tre_id": "myfavtre", "address_space": "192.168.3.0/24"}}
{"action": "install", "id": "a8911125-50b4-491b-9e7c-ed8ff42220f9", "name": "tre-workspace-base", "version": "0.1.0", "parameters": {"azure_location": "westeurope", "workspace_id": "20f9", "tre_id": "myfavtre", "address_space": "192.168.3.0/24"}}
```
This will trigger receiving of messages and you can freely debug the code by setting breakpoints as desired.

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 157 KiB

После

Ширина:  |  Высота:  |  Размер: 157 KiB

Просмотреть файл

@ -28,14 +28,14 @@ Service Tags:
## Manual Deployment
1. Prerequisites for deployment:
- [A vanilla workspace bundle installed](../../vanilla)
- [A base workspace bundle installed](../../workspaces/base)
1. Create a copy of `workspaces/services/azureml/.env.sample` with the name `.env` and update the variables with the appropriate values.
1. Create a copy of `templates/workspace_services/azureml/.env.sample` with the name `.env` and update the variables with the appropriate values.
| Environment variable name | Description |
| ------------------------- | ----------- |
| `WORKSPACE_ID` | The 4 character unique identifier used when deploying the vanilla workspace bundle. |
| `WORKSPACE_ID` | The 4 character unique identifier used when deploying the base workspace bundle. |
1. Build and install the Azure ML Service bundle
- `make porter-build DIR=./workspaces/services/azureml`
- `make porter-install DIR=./workspaces/services/azureml`
- `make porter-build DIR=./templates/workspace_services/azureml`
- `make porter-install DIR=./templates/workspace_services/azureml`

Просмотреть файл

@ -5,17 +5,17 @@ See: [https://azure.microsoft.com/services/devtest-lab/](https://azure.microsoft
## Manual Deployment
1. Prerequisites for deployment:
- [A vanilla workspace bundle installed](../../vanilla)
- [A base workspace bundle installed](../../workspaces/base)
1. Create a copy of `workspaces/services/devtestlabs/.env.sample` with the name `.env` and update with the Workspace ID used when deploying the vanilla workspace.
1. Create a copy of `templates/workspace_services/devtestlabs/.env.sample` with the name `.env` and update with the Workspace ID used when deploying the base workspace.
| Environment variable name | Description |
| ------------------------- | ----------- |
| `WORKSPACE_ID` | The 4 character unique identifier used when deploying the vanilla workspace bundle. |
| `WORKSPACE_ID` | The 4 character unique identifier used when deploying the base workspace bundle. |
1. Build and install the Azure DevTest Labs Service bundle
- `make porter-build DIR=./workspaces/services/devtestlabs`
- `make porter-install DIR=./workspaces/services/devtestlabs`
- `make porter-build DIR=./templates/workspace_services/devtestlabs`
- `make porter-install DIR=./templates/workspace_services/devtestlabs`
## Create and expose a VM via the Firewall
@ -36,7 +36,7 @@ When this service used without a virtual desktop gateway it might be necessary t
Example:
./workspaces/services/devtestlabs/create_and_expose_vm.sh --lab-name <lab_name> --tre-id <tre-id> --workspace-id <workspace-id> --vm-name <vmn-name> --image-name "Data Science Virtual Machine - Windows Server 2019"
./templates/workspace_services/devtestlabs/create_and_expose_vm.sh --lab-name <lab_name> --tre-id <tre-id> --workspace-id <workspace-id> --vm-name <vmn-name> --image-name "Data Science Virtual Machine - Windows Server 2019"
```

Просмотреть файл

@ -1,6 +1,6 @@
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "https://github.com/microsoft/AzureTRE/workspaces/services/guacamole/custom_parameters.json",
"$id": "https://github.com/microsoft/AzureTRE/templates/workspace_services/guacamole/custom_parameters.json",
"type": "object",
"title": "Guacamole service template Custom Parameters",
"description": "Guacamole service template custom parameters",

Просмотреть файл

@ -13,15 +13,15 @@ TBD
## Manual Deployment
1. Prerequisites for deployment:
- [A vanilla workspace bundle installed](../../vanilla)
- [A base workspace bundle installed](../../workspaces/base)
1. Create a copy of `workspaces/services/guacamole/.env.sample` with the name `.env` and update the variables with the appropriate values.
1. Create a copy of `templates/workspace_services/guacamole/.env.sample` with the name `.env` and update the variables with the appropriate values.
| Environment variable name | Description |
| ------------------------- | ----------- |
| `WORKSPACE_ID` | The 4 character unique identifier used when deploying the vanilla workspace bundle. |
| `WORKSPACE_ID` | The 4 character unique identifier used when deploying the base workspace bundle. |
| `GUACAMOLE_IMAGE_TAG` | Image tag of the Guacamole server |
1. Build and install the Guacamole Service bundle
- `make porter-build DIR=./workspaces/services/guacamole`
- `make porter-install DIR=./workspaces/services/guacamole`
- `make porter-build DIR=./templates/workspace_services/guacamole`
- `make porter-install DIR=./templates/workspace_services/guacamole`

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше