diff --git a/.wordlist.txt b/.wordlist.txt index 634bdb8c90..5ef0feb606 100644 --- a/.wordlist.txt +++ b/.wordlist.txt @@ -1656,3 +1656,7 @@ setFeatureCompatibilityVersion featureCompatibilityVersion Telnet sharded +CPython +XXE +CWE +Mono diff --git a/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/blueprint-workspace.md b/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/blueprint-workspace.md index 1bd11b8a53..468b1464e6 100644 --- a/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/blueprint-workspace.md +++ b/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/blueprint-workspace.md @@ -1,305 +1,371 @@ ---- -sidebar_position: 6 ---- - -# Blueprint Workspace - -## Defines the maximum allowed orchestration driver teardown time - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Key``
Possible valuesNumeric (in hours)
Where to add/change`customer.config` Quali Server installation directory
Default value48
Affected CloudShell ComponentQuali Server
Version6.0 and above
- -## Defines the maximum allowed orchestration driver setup time - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Key``
Possible valuesNumeric (in hours)
Where to add/change`customer.config` Quali Server installation directory
Default value48
Affected CloudShell ComponentQuali Server
Version6.0 and above
- -## Enable the option to show or hide the **More Info** option from blueprints - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Portal installation directory
Default valueFalse
Affected CloudShell ComponentCloudShell Portal
Version6.2.3 and above
- -## Block non-admin users from exporting blueprint packages - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Server installation directory
Default valueFalse
Affected CloudShell ComponentCloudShell Portal
Version9.0 and above
- -## Display **Instructions** side pane by default - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Portal installation directory
Default valueFalse
Affected CloudShell ComponentCloudShell Portal
Version6.0 and above
- -## Display **Commands** side pane by default - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Portal installation directory
Default valueFalse
Affected CloudShell ComponentCloudShell Portal
Version6.0 and above
- -## Enable users to create blueprints from a template - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Server installation directory
Default valueFalse
Affected CloudShell ComponentCloudShell Portal
Version6.3 and above
- -## Change the time allocated for exporting the blueprint diagram - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Key``
Possible valuesNumeric (time to wait, in milliseconds)
Where to add/change`customer.config` CloudShell Portal installation directory
Default value2000
Affected CloudShell ComponentCloudShell Portal
Version2021.2 and above
- -## Enable the **Check Blueprint Routes** option in the **Blueprint** menu - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Server installation directory
Default valueFalse
Affected CloudShell ComponentCloudShell Portal
Version9.2 and above
- -## Set the route grouping policy - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Key``
Possible valuesNumeric (number of connection lines to be grouped)
Where to add/change`customer.config` CloudShell Portal installation directory
Default value3
Affected CloudShell ComponentCloudShell Portal
Version6.4 and above
+--- +sidebar_position: 6 +--- + +# Blueprint Workspace + +## Defines the maximum allowed orchestration driver teardown time + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible valuesNumeric (in hours)
Where to add/change`customer.config` Quali Server installation directory
Default value48
Affected CloudShell ComponentQuali Server
Version6.0 and above
+ +## Defines the maximum allowed orchestration driver setup time + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible valuesNumeric (in hours)
Where to add/change`customer.config` Quali Server installation directory
Default value48
Affected CloudShell ComponentQuali Server
Version6.0 and above
+ +## Enable the option to show or hide the **More Info** option from blueprints + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Portal installation directory
Default valueFalse
Affected CloudShell ComponentCloudShell Portal
Version6.2.3 and above
+ +## Block non-admin users from exporting blueprint packages + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Server installation directory
Default valueFalse
Affected CloudShell ComponentCloudShell Portal
Version9.0 and above
+ +## Display **Instructions** side pane by default + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Portal installation directory
Default valueFalse
Affected CloudShell ComponentCloudShell Portal
Version6.0 and above
+ +## Display **Commands** side pane by default + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Portal installation directory
Default valueFalse
Affected CloudShell ComponentCloudShell Portal
Version6.0 and above
+ +## Enable users to create blueprints from a template + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Server installation directory
Default valueFalse
Affected CloudShell ComponentCloudShell Portal
Version6.3 and above
+ +## Change the time allocated for exporting the blueprint diagram + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible valuesNumeric (time to wait, in milliseconds)
Where to add/change`customer.config` CloudShell Portal installation directory
Default value2000
Affected CloudShell ComponentCloudShell Portal
Version2021.2 and above
+ +## Enable the **Check Blueprint Routes** option in the **Blueprint** menu + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Server installation directory
Default valueFalse
Affected CloudShell ComponentCloudShell Portal
Version9.2 and above
+ +## Preserve the diagram arrangement when the View Style changes +When enabled, changing the diagram **View Style** resizes the resource cards in place and keeps the saved arrangement. When disabled (the default), the legacy per-axis resize is applied (Large ×2/×3, Small ÷2.7 and ×1.3), which is non-uniform and visibly displaces resources and link endpoints. + +:::note +Enabling this may cause Large cards to overlap on a diagram that was arranged in a smaller View Style. +::: + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Portal installation directory
Default valueFalse
Affected CloudShell ComponentCloudShell Portal
Version2026.1 and above
+ +## Keep global inputs when saving a sandbox as a blueprint +When saving a sandbox as a blueprint, keep global inputs that were linked to a resource requirement, even when that resource is saved as a concrete resource. Set to `False` to drop them instead, restoring the behavior of earlier versions. + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Server installation directory
Default valueTrue
Affected CloudShell ComponentCloudShell Server
Version2026.1 and above
+ +## Set the route grouping policy + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible valuesNumeric (number of connection lines to be grouped)
Where to add/change`customer.config` CloudShell Portal installation directory
Default value3
Affected CloudShell ComponentCloudShell Portal
Version6.4 and above
diff --git a/docs/devguide/available-cs-api/useful-cs-api-examples/inspect-and-clear-driver-commands.md b/docs/devguide/available-cs-api/useful-cs-api-examples/inspect-and-clear-driver-commands.md new file mode 100644 index 0000000000..96ec8d4cdd --- /dev/null +++ b/docs/devguide/available-cs-api/useful-cs-api-examples/inspect-and-clear-driver-commands.md @@ -0,0 +1,88 @@ +--- +sidebar_position: 10 +--- + +# Inspecting and Clearing Driver Commands on a Resource + +Starting with CloudShell 2026.1, four Automation API methods let you see which resource driver commands are queued or running and cancel them. They exist to solve a specific problem: a resource that is exclusive and does not allow concurrent commands stays blocked while a command runs on it, and that command often belongs to a *previous* — possibly already ended — sandbox. A new sandbox waiting behind it has no way to see the command, let alone cancel it, because everything it can reach is scoped to its own reservation. + +The methods come at two levels: + +| Scope | Inspect | Cancel | +| --- | --- | --- | +| One reservation | `GetRunningCommands` | `CancelResourceCommand` (one command, by id) | +| One resource, across all reservations | `GetResourceCommandExecutions` | `ClearResourceCommands` (all of them) | + +:::warning +All four methods require **system administrator** permissions. Cancelling a driver command mid-run leaves the device in whatever state the command reached, so treat `ClearResourceCommands` as a recovery tool rather than part of a normal flow. +::: + +## Inspecting + +`GetRunningCommands(reservationId)` lists the resource driver commands queued or running in one reservation. `GetResourceCommandExecutions(resourceFullName)` lists them for one resource across *every* reservation — this is the one that reveals the command left behind by a previous sandbox. + +| Parameter | Type | Description | +| --- | --- | --- | +| `reservationId` | string | The reservation's unique identifier. | +| `resourceFullName` | string | The resource's full name, for example `ResourceName/Port`. | + +Both return a response with a `Commands` list. Each entry has: + +- `ExecutionId` — the command execution's id. Pass this to `CancelResourceCommand`. +- `ResourceFullName` — the resource the command is running on. +- `CommandName` — the driver command's name. +- `Status` — whether the command is queued or running. +- `StartTime` — when the command started. +- `ReservationId` — the reservation the command belongs to. + +## Cancelling + +`CancelResourceCommand(commandId)` cancels a single command by its `ExecutionId`. A command that is still queued is removed from the queue; one that is already running is cancelled. + +`ClearResourceCommands(resourceFullName)` cancels every command queued or running on a resource, across all reservations, and returns the same `Commands` list describing what it cleared. Queued commands are removed from the queue and running commands are cancelled out-of-band, so the call does not wait behind the very command it is clearing — which matters, because that command is usually the reason you are calling it. + +Because it does not block, `ClearResourceCommands` is safe to call from a Setup script to guarantee a sandbox starts with no residual commands on its resources. + +## Python example + +Find and clear whatever is blocking a resource. As this uses the CloudShell Automation API package, make sure to first install it by running `pip install cloudshell-automation-api` from command-line. + +```python +from cloudshell.api.cloudshell_api import CloudShellAPISession + +RESOURCE = "Chassis1/Port1" + +session = CloudShellAPISession(host="localhost", username="admin", + password="admin", domain="Global") + +# what is holding the resource, in any reservation? +running = session.GetResourceCommandExecutions(RESOURCE) + +if not running.Commands: + print("Nothing queued or running on {}".format(RESOURCE)) +else: + for command in running.Commands: + print("{} '{}' status={} started={} reservation={}".format( + command.ExecutionId, command.CommandName, command.Status, + command.StartTime, command.ReservationId)) + + # cancel one specific command... + session.CancelResourceCommand(running.Commands[0].ExecutionId) + + # ...or clear all of them + cleared = session.ClearResourceCommands(RESOURCE) + print("Cleared {} command(s)".format(len(cleared.Commands))) +``` + +To inspect only the current sandbox — for example from an orchestration script — use the reservation-scoped call instead: + +```python +running = session.GetRunningCommands(reservation_id) +for command in running.Commands: + print(command.ResourceFullName, command.CommandName, command.Status) +``` + +## Related Topics + +- [Performing Actions on Resources in a Sandbox](./peform-actions-on-rsrc-in-sandbox.md) +- [Undeploying Apps in a Sandbox](./undeploy-apps-in-sandbox.md) diff --git a/docs/devguide/develop-custom-cloud-provider-shells/getting-started-with-cp-dev.md b/docs/devguide/develop-custom-cloud-provider-shells/getting-started-with-cp-dev.md index 5578595646..1733a247b4 100644 --- a/docs/devguide/develop-custom-cloud-provider-shells/getting-started-with-cp-dev.md +++ b/docs/devguide/develop-custom-cloud-provider-shells/getting-started-with-cp-dev.md @@ -49,7 +49,7 @@ As of version 9.0, CloudShell supports the ability to define custom cloud provid CloudShell components such as Quali Server and the execution servers come with their own Python installation folders. Making changes to these folders may cause unexpected behavior in CloudShell. Therefore, if you plan on doing dev work on a machine that has CloudShell components installed, we recommend doing one of the following: - Configuring dedicated virtual environments for your projects out of these base installations. To do this in PyCharm, see [https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html). To do this via CLI, see [https://docs.python-guide.org/dev/virtualenvs/#lower-level-virtualenv](https://docs.python-guide.org/dev/virtualenvs/#lower-level-virtualenv). - - [Downloading separate installers](https://www.python.org/downloads/) for Python 2.7.18 and 3.9.9 and using these as global installations (by setting the installation folders in the machine’s PATH system variable) for any dev work being done. + - [Downloading separate installers](https://www.python.org/downloads/) for Python 2.7.18 and 3.13.15 — the versions bundled with CloudShell 2026.1 on Windows; use 3.9.9 to match an earlier version or a Linux Execution Server — and using these as global installations (by setting the installation folders in the machine’s PATH system variable) for any dev work being done. ::: - **IDE/Text Editor**: Your preferred IDE editor. We recommend using PyCharm (which offers a free community edition) because of the tooling we’ve already created for that IDE, including a CloudShell developer plugin. diff --git a/docs/devguide/develop-orch-scripts/getting-started-with-orch-scripts.md b/docs/devguide/develop-orch-scripts/getting-started-with-orch-scripts.md index 8af148a3b9..c9c26399e6 100644 --- a/docs/devguide/develop-orch-scripts/getting-started-with-orch-scripts.md +++ b/docs/devguide/develop-orch-scripts/getting-started-with-orch-scripts.md @@ -18,7 +18,7 @@ Orchestration scripts can enable automating sandbox workflows. You can use orche CloudShell components such as Quali Server and the execution servers come with their own Python installation folders. Making changes to these folders may cause unexpected behavior in CloudShell. Therefore, if you plan on doing dev work on a machine that has CloudShell components installed, we recommend doing one of the following: - Configuring dedicated virtual environments for your projects out of these base installations. To do this in PyCharm, see [https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html). To do this via CLI, see [https://docs.python-guide.org/dev/virtualenvs/#lower-level-virtualenv](https://docs.python-guide.org/dev/virtualenvs/#lower-level-virtualenv). - - [Downloading separate installers](https://www.python.org/downloads/) for Python 2.7.18 and 3.9.9 and using these as global installations (by setting the installation folders in the machine’s PATH system variable) for any dev work being done. + - [Downloading separate installers](https://www.python.org/downloads/) for Python 2.7.18 and 3.13.15 — the versions bundled with CloudShell 2026.1 on Windows; use 3.9.9 to match an earlier version or a Linux Execution Server — and using these as global installations (by setting the installation folders in the machine’s PATH system variable) for any dev work being done. ::: - **IDE/Text Editor:** Your preferred IDE editor. We recommend using PyCharm (which offers a free community edition) because of the tooling we’ve already created for that IDE, including a CloudShell developer plugin. diff --git a/docs/devguide/developing-shells/getting-started.md b/docs/devguide/developing-shells/getting-started.md index cb291ea857..21bd348472 100644 --- a/docs/devguide/developing-shells/getting-started.md +++ b/docs/devguide/developing-shells/getting-started.md @@ -35,7 +35,7 @@ To learn more about the different versions of the Shells used by CloudShell and CloudShell components such as Quali Server and the execution servers come with their own Python installation folders. Making changes to these folders may cause unexpected behavior in CloudShell. Therefore, if you plan on doing dev work on a machine that has CloudShell components installed, we recommend doing one of the following: - Configuring dedicated virtual environments for your projects out of these base installations. To do this in PyCharm, see [https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html). To do this via CLI, see [https://docs.python-guide.org/dev/virtualenvs/#lower-level-virtualenv](https://docs.python-guide.org/dev/virtualenvs/#lower-level-virtualenv). - - [Downloading separate installers](https://www.python.org/downloads/) for Python 2.7.18 and 3.9.9 and using these as global installations (by setting the installation folders in the machine’s PATH system variable) for any dev work being done. + - [Downloading separate installers](https://www.python.org/downloads/) for Python 2.7.18 and 3.13.15 — the versions bundled with CloudShell 2026.1 on Windows; use 3.9.9 to match an earlier version or a Linux Execution Server — and using these as global installations (by setting the installation folders in the machine’s PATH system variable) for any dev work being done. ::: - **IDE/Text Editor**: Your preferred IDE editor. We recommend using PyCharm (which offers a free community edition) because of the tooling we’ve already created for that IDE, including a CloudShell developer plugin. diff --git a/docs/devguide/setting-up-dev-env.md b/docs/devguide/setting-up-dev-env.md index 0299cad8a6..508bbe8786 100644 --- a/docs/devguide/setting-up-dev-env.md +++ b/docs/devguide/setting-up-dev-env.md @@ -12,12 +12,22 @@ In this section we’ll go over the recommended steps for setting up a developme Download and install a current 64-bit version of Python 3 from the [official website](https://www.python.org/downloads/). Shellfoundry, CloudShell's shell development CLI, supports Python 3.9–3.13 (Python 3.13 requires shellfoundry 1.2.29 or later). -Note that shells and scripts *execute* on the Python versions bundled with CloudShell itself — currently Python 3.9.9 (and Python 2.7.18 for legacy shells). Your driver code and its requirements.txt must stay compatible with the bundled version your CloudShell deployment runs, even if your dev machine uses a newer Python. +Note that shells and scripts *execute* on the Python versions bundled with CloudShell itself, not on your dev machine's Python. As of CloudShell 2026.1 that is: + +| Execution Server | Bundled Python 3 | Bundled Python 2 | +| --- | --- | --- | +| Windows | 3.13.15 (64-bit) | 2.7.18 | +| Linux virtual appliance / from script | 3.9.9 | 2.7.18 | +| Docker Execution Server image | 3.9.9 | 2.7.18 | + +Your driver code and its `requirements.txt` must stay compatible with the bundled version your CloudShell deployment runs. If your shells run on both Windows and Linux Execution Servers, they must work on both Python 3.9 and 3.13 — mind the standard-library removals in between, such as the `collections` aliases for the abstract base classes (`collections.Sequence`), which were removed in 3.10 in favor of `collections.abc`. + +Earlier CloudShell versions bundle Python 3.9.9 on Windows as well; see [Behavior Changes](../release-notes/behavior-change.md). :::tip CloudShell components such as Quali Server and the execution servers come with their own Python installation folders. Making changes to these folders may cause unexpected behavior in CloudShell. Therefore, if you plan on doing dev work on a machine that has CloudShell components installed, we recommend doing one of the following: - Configuring dedicated virtual environments for your projects out of these base installations. To do this in PyCharm, see [https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html). To do this via CLI, see [https://docs.python-guide.org/dev/virtualenvs/#lower-level-virtualenv](https://docs.python-guide.org/dev/virtualenvs/#lower-level-virtualenv). -- [Downloading separate installers](https://www.python.org/downloads/) for Python 2.7.18 and 3.9.9 and using these as global installations (by setting the installation folders in the machine’s PATH system variable) for any dev work being done. +- [Downloading separate installers](https://www.python.org/downloads/) for the bundled versions listed above and using these as global installations (by setting the installation folders in the machine’s PATH system variable) for any dev work being done. ::: ## Pick and install an IDE diff --git a/docs/install-configure/cs-system-requirements/third-party-software.md b/docs/install-configure/cs-system-requirements/third-party-software.md index ea438441cf..9967be5551 100644 --- a/docs/install-configure/cs-system-requirements/third-party-software.md +++ b/docs/install-configure/cs-system-requirements/third-party-software.md @@ -20,8 +20,8 @@ If any of the below 3rd Party components are missing from your computer, the Clo - Microsoft Visual C++ 14.0 or greater - Microsoft Windows Installer 4.5 - Node.js 24.14.0 LTS (64-bit only) -- pip 21.2.4 and up for Python 3.7 and pip 19.2.3 for Python 2.7.18 -- Python Python 2.7.18 and 3.9.9 +- pip 21.2.4 and up for Python 3 and pip 19.2.3 for Python 2.7.18 +- Python 2.7.18 and 3.13.15 (64-bit) - RabbitMQ 3.12.0 (installed as part of the Quali Server installation) - Erlang 26.2.3 - VCTools++ (For all users. Required for compiling Python dependencies) @@ -33,10 +33,13 @@ The following bundled prerequisites were updated: - **Node.js**: 22.15.0 → 24.14.0 LTS (used by Sandbox API Gateway and Server Proxy) - **Erlang OTP**: 25.2.3 → 26.2.3 (RabbitMQ prerequisite) - **MongoDB**: 6.0.4 → 7.0.30 +- **Python 3**: 3.9.9 (32-bit) → 3.13.15 (64-bit). The bundled Python 2.7.18 is unchanged. This applies to the Python bundled with CloudShell on Windows; Linux Execution Servers and the Docker Execution Server image still provide Python 3.9.9. The CloudShell installer handles these upgrades automatically. Standalone MongoDB deployments must be upgraded manually to 7.0 before upgrading CloudShell. **Breaking change**: Node.js 24 dropped 32-bit (x86) Windows support. The x86 Node.js prerequisite has been removed from the CloudShell installer. Only 64-bit Windows is supported. + +**Driver compatibility**: shells and scripts running on a Windows Execution Server now execute on Python 3.13. See [Behavior Changes](../../release-notes/behavior-change.md). ::: ## Optional diff --git a/docs/release-notes/behavior-change.md b/docs/release-notes/behavior-change.md index a5ede02df2..9327ecb526 100644 --- a/docs/release-notes/behavior-change.md +++ b/docs/release-notes/behavior-change.md @@ -17,6 +17,9 @@ The following list includes changes in behavior introduced into CloudShell by ve | Editing an active maintenance window | When editing an **active** maintenance window, an end time that is not in the future (at or before the current time) is now rejected — including the former within-grace "ends immediately" behavior. To end an active maintenance window immediately, use the **Stop** action. | 2026.1 | | Custom PyPI repository applied at setup | The `RequirementsRepository`, `RequirementsTrustedHost`, and `RequirementsExtraRepository` keys are now honored during Execution Server setup and default-environment bootstrap, not only at driver-command time. Deployments that set a custom PyPI index will use it earlier; there is no change when no custom repository is configured. | 2026.1 | | Portal session survives app-pool recycle | The Portal now rebuilds a user's session from the sign-in cookie after an application-pool recycle instead of forcing a re-login, and a transient CloudShell Server `MessageSecurityException` no longer signs users out. Controlled by the `EnableSessionRehydration` app setting (default `true`); set it to `false` to restore the previous force-logout behavior. | 2026.1 | +| Bundled Python 3 version (Windows) | The Python 3 interpreter bundled with CloudShell on Windows was upgraded from CPython 3.9.9 (32-bit) to 3.13.15 (64-bit). Drivers and scripts running on a Windows Execution Server now execute on Python 3.13, so driver code and `requirements.txt` must be valid on 3.13 — the most common breakage is the `collections` ABC aliases (for example `collections.Sequence`), removed in Python 3.10 in favor of `collections.abc`. Python 2.7.18 is unchanged. Linux Execution Servers, the Linux virtual appliance and the Docker Execution Server image still provide Python 3.9.9, so shells running on both platforms must stay compatible with 3.9 and 3.13. | 2026.1 | +| Global inputs kept on save as blueprint | Saving a sandbox as a blueprint now keeps global inputs that were linked to a resource requirement, where previously they were dropped. Where the requirement is carried over to the saved blueprint the input is linked back to it; where the resource was pinned down the input is kept as a plain value linked to nothing. These inputs are visible in the Reserve dialog and in the blueprint editor. Set `KeepResourceGlobalInputsOnSaveAsBlueprint=false` in `customer.config` to drop them instead and restore the previous behavior. | 2026.1 | +| Blueprint import fails on a missing category | Importing a blueprint that references a category that does not exist in the target domain now fails the import with an explicit error. Previously the blueprint imported successfully and the category association was silently dropped. Create the missing categories in the target domain before importing, or remove the category references from the blueprint. | 2026.1 | | Erlang version | To accommodate the upgraded RabbitMQ version (3.12.0) explained in [Breaking Changes](#breaking-changes), Erlang will be upgraded to newer version 25.2.3. This version is the maximum supported Erlang for RabbitMQ 3.12.0. Environment variables will be updated accordingly to suite the new Erlang version. | 2023.2 EA | | Python versions | In 2022.1, we updated CloudShell's Python versions as follows: This may cause unexpected behavior if your automation is constrained to use specific Python versions. | 2022.1 EA | | API tokens | To increase security and to allow time-based token access to the system, CloudShell 2022.1 generates a time-based token for our product APIs. In previous versions, only some of the APIs used such a system. By default, the token validity period is 5 hours. Notes: | 2022.1 EA | diff --git a/docs/release-notes/whats-new.md b/docs/release-notes/whats-new.md index ee294812d4..99ea447e85 100644 --- a/docs/release-notes/whats-new.md +++ b/docs/release-notes/whats-new.md @@ -1,201 +1,254 @@ ---- -sidebar_position: 2 ---- - -CloudShell Release History -========== - -## Version 2026.1 - -### Maintenance Window By Domain -Administrators can define maintenance windows scoped to individual domains. This enables planned downtime or restricted access for specific teams without affecting other domains. - -### Deprecate Properties Capability — All Standards -The `deprecate_properties` capability is now recognized across all CloudShell resource standards. Previously only supported on a subset of core standards. - -### Security Updates -Updated bundled third-party components: -| Component | Previous | New | -|-----------|----------|-----| -| Apache httpd (+OpenSSL) | 2.4.65 | 2.4.66 | -| Node.js | 22.15.0 | 24.14.0 (LTS) | -| Erlang OTP | 25.2.3 | 26.2.3 | -| MongoDB | 6.0.4 | 7.0.30 | - -:::warning Breaking Change -Node.js 24 dropped 32-bit (x86) Windows support. The x86 Node.js prerequisite has been removed from the installer. -::: - -### Export Diagram as PNG -Export sandbox diagrams as PNG images directly from the browser. Available in the diagram toolbar under Export → PNG. - -### AI Chat Integration -Configurable AI Assistant menu item in the Portal. Administrators can set a URL template to integrate with AI chat services. - -### Portal Session Resilience -Portal users — including those signing in via SSO/SAML — are no longer logged out when the Portal application pool recycles. CloudShell rebuilds the session from the existing sign-in cookie, so open tabs and background page refreshes keep working without a forced re-login, and a transient CloudShell Server outage no longer signs users out. Controlled by the `EnableSessionRehydration` setting (enabled by default). - -### Custom PyPI Repository Honored at Execution Server Setup -A configured custom PyPI repository (`RequirementsRepository`, `RequirementsTrustedHost`, `RequirementsExtraRepository`) is now used during Execution Server setup and default-environment bootstrap, not only when running driver commands. Environments with a private or HTTPS-only PyPI index can complete Execution Server setup against a reachable custom index without a workaround. - -### Server Default Changes -- `UseRabbitServer` now defaults to `false` -- `UseEmbeddedSandboxService` now defaults to `false` -- Job Scheduling now follows the global `UseRabbitServer` setting instead of an independent default, so scheduled and manually launched reservations take the same messaging path - -### Docker Execution Server -- Consolidated Dockerfile with Python 3 virtualenv and TLS/Kerberos compatibility -- Support for passing Execution Server Selector attributes to Docker containers - -### Application Links Management API -New TestShell API methods for managing application links (SSH, Telnet, RDP, etc.) on resources programmatically. Administrators can disable specific links per resource or set family-wide defaults: -- `SetResourceApplicationLinks` — Set which application links are disabled for a specific resource -- `GetResourceApplicationLinks` — Get the current application links configuration for a resource -- `SetFamilyDefaultApplicationLinks` — Set default disabled links for an entire resource family -- `GetFamilyDefaultApplicationLinks` — Get the family-level default configuration - -### GetResourceReservations API -New TestShell API method that returns the list of reservations (current and historical) associated with a given resource. - -### Improved Abstract Resource Resolution Diagnostics -When a blueprint reservation fails due to unresolvable abstract resources or route conflicts, the error message now includes detailed diagnostics — showing which resources could not be resolved, which routes failed, and the specific conflicts that prevented resolution. - -### Bug Fixes -- Fixed an issue where App deployment could retry unnecessarily on certain internal errors instead of failing fast with clear diagnostics. -- Fixed SSO (SAML) users being bounced to the login page in a loop, instead of seeing the maintenance page, when signing in during a maintenance window. Aborted logins no longer leave a half-authenticated session. -- Fixed an active maintenance window being left stranded open when its end time was edited to a past time. Such edits are now rejected — use **Stop** to end an active window immediately. -- Fixed the RabbitMQ messaging service failing to start after an Erlang upgrade. CloudShell now validates and refreshes stale Erlang location settings automatically. -- Fixed abstract resource port names in Assembly Lab work order fields and route tooltips intermittently truncating to the leaf port name instead of the full path. -- Fixed the Sandbox API crashing on the Node.js 24 runtime when handling conditional (cache-revalidation) requests to the explore endpoints. -- Restored the full Ansible package (with bundled collections) in the Docker Execution Server image, fixing playbooks that failed with missing-module errors. -- The About dialog now shows the full four-part product version, including the build number (for example, `2026.1.0.52`). - ---- - -## Version 2025.1 - -### RemoveEntitiesFromTopology API -New API method for programmatically removing services and abstract resources from a topology/blueprint. - -### PostgreSQL Database Support (Beta) -CloudShell now supports PostgreSQL as an alternative database backend. Contact Quali Support for evaluation access. - ---- - -## Post-2024.1 GA Patch Releases - -### 2024.1.0.2534 (October 2024) -- **Abstract Editor: Collapse Nodes** — Collapse abstract nodes in the diagram editor for cleaner visualization -- **Reservation State Filter** — Now visible for all domain types in the Reservations Dashboard -- **L1 Port Filter** — Filter resources by L1 ports when adding resources to a reservation -- **Block Recurring Sandboxes in Assembly Lab** — Recurring reservations are blocked in Assembly Lab domains - -### 2024.1.0.2540 (November 2024) -- **Sticky Notes Activity Feed** — When updating sticky notes, a notification appears in the reservation activity feed -- **Work Order Enhancements** — Block connectivity changes in pending state; show full abstract port names in Blueprint route editor - -### 2024.1.0.2596 (February 2025) -- **Attribute Changed Event** — Now publishable for MQ integration -- **SSO Login Event** — Login events are now created for SSO logins -- **Sandbox API: Schedule Future Reservations** — New `Start_Time` parameter to schedule reservations for a future time -- **Save As Template Confirmation** — Confirmation dialogs added for "Save As Template" and "Save a Copy" actions -- **Work Order Improvements** — Recursive state updates, alphabetical route sorting, sort resources by request name -- **Domain ID in Events** — Domain ID now passed in certain events to simplify handling - -### 2024.1.0.2603 (March 2025) -- **Copiable Side Panel Text** — Text in side panels (activity feed, resource info) is now selectable and copiable -- **Sandbox API: Cancel Pending Reservation** — API now supports canceling pending reservations, not just stopping active ones -- **Assembly Lab: Exclusive Requirements** — Exclusive requirements now solved only by the device itself, not the entire graph -- **Performance Improvements** — Faster entity path queries, optimized published properties retrieval - -### 2024.1.0.2624 (April 2025) -- **Smart Route Creation** — When creating routes between concrete devices, the system prioritizes using existing L1 infrastructure segments (patch panels, Layer 1 switches). Falls back to a provisional direct connection if no valid route exists -- **Node.js Upgrade** — Bundled Node.js upgraded from 18.13.0 to 22.15.0 -- **Security: L1 Driver Logs** — Passwords redacted from Layer 1 driver logs -- **Performance** — Reduced CPU usage, faster resource deletion, reduced thread starvation, caching for high-frequency calls - -### 2024.1.0.2634 (May 2025) -- **PostgreSQL Support (Experimental)** — Experimental database support for PostgreSQL. Contact Quali Support for details. - -### 2024.1.0.2650 (June 2025) -- **Sticky Note Colors** — Choose color for sticky notes in sandboxes -- **New API: UndeployApps** — Remove an app from the cloud provider while keeping the CloudShell resource. Useful for bulk deletion scenarios. - -### 2024.1.0.2669 (July 2025) -- **AllowUnicodeForCommandContext** — New configuration option to support passing unicode characters to script environment variables (useful when usernames contain unicode) - -### 2024.1.0.2682 (August 2025) -- **Alias in Assembly Lab** — Resource alias now appearing in Assembly Lab reservations -- **Environment Variable Config Override** — Override `customer.config` values using environment variables -- **Permissions Screen Sort** — Groups sorted alphabetically in the Permissions screen -- **Connection Properties** — Side panel shows changes immediately after modification - -### 2024.1.0.2686 (October 2025) -- **L1 Port Route Solving** — When solving an abstract in a route, if the solution is connected to an L1 port, the port is automatically added to the route -- **Per-Domain Notification Settings API** — New `UpdateDomainSetting` and `GetDomainSettings` API methods for managing notification settings per domain - ---- - -## Version 2024.1 - -### Assembly Lab - -A radically different mode of operation for CloudShell is now available! - -- Manage devices on a part by part basis - - Move sub resources from one device to another - - Solve abstracts using parts from different devices - -- Sandboxes can be partially solved by algorithm and partially by human involvement - - Select solutions for abstract requests - - Change solutions - - -#### For more information on Assembly lab, follow these links - -- [Assembly Lab Overview](../admin/setting-up-cloudshell/assembly-lab/index.md) -- [Configure an Assembly Lab domain](../admin/setting-up-cloudshell/assembly-lab/configure-assembly-lab-domain.md) - -### Capabilities - -CloudShell's RBAC implementation, you can now associate user groups with capability sets. -Each capability set can specifically allow or block certain capabilities, overriding the defaults provided by the group role. - -[Read more here](../admin/cloudshell-identity-management/managing-cloudshell-permissions/capabilities/index.md) - -### Display attributes in Resource Search directly on cards - -[Configure specific attributes](../admin/setting-up-cloudshell/cloudshell-configuration-options/resource-search-customizations.md) to appear directly on resource search results. - -![SearchResultsWithAttribute](/Images/Admin-Guide/ResourceSearchCustomization/SearchResultsWithLocation.png) - -### Filter sandboxes by user input and display the user input in Sandboxes Dashboard - -- Configure an attribute to be displayed in sandbox dashboard -- Show only sandboxes which passed a particular value - -![Sandbox Dashboard Customization](/Images/Admin-Guide/CustomizingSandboxesDashboard/filter.gif) - -[For more details](../admin/setting-up-cloudshell/cloudshell-configuration-options/customizing-sandboxes-dashboard.md) - -### Minimum Lead Time - -You now have the ability to establish a minimum lead time for reserving Sandboxes within a specific domain. This means that when this setting is configured, any sandbox reservations must be made for a date in the future, not for immediate use. - -To implement this, you need to adjust the `MinimumLeadTimeMinutes` parameter via a specific API call. Detailed instructions on how to make this API call can be found in [this guide](../api-guide/cs-admin-rest-api/edit-domain.md). - -### API Changes - -#### GetResourcesAttributeValues -Receives a list of resources and returns the values of all the attributes in bulk. This method can be more performant than calling GetResourceAttributeValues or GetResourceDetails in a loop. -Available in Cloudshell Automation API. - -#### GetExecutionServers & DeleteExecutionServer - -API calls for getting Execution Servers and removing them using automation. - -#### GetResourceDetails changes - -GetResourceDetails will now show Create & Modified Date for the resource. - +--- +sidebar_position: 2 +--- + +CloudShell Release History +========== + +## Version 2026.1 + +### Maintenance Window By Domain +Administrators can define maintenance windows scoped to individual domains. This enables planned downtime or restricted access for specific teams without affecting other domains. + +### Deprecate Properties Capability — All Standards +The `deprecate_properties` capability is now recognized across all CloudShell resource standards. Previously only supported on a subset of core standards. + +### Security Updates +Updated bundled third-party components: +| Component | Previous | New | +|-----------|----------|-----| +| Apache httpd (+OpenSSL) | 2.4.65 | 2.4.66 | +| Node.js | 22.15.0 | 24.14.0 (LTS) | +| Erlang OTP | 25.2.3 | 26.2.3 | +| MongoDB | 6.0.4 | 7.0.30 | + +:::warning Breaking Change +Node.js 24 dropped 32-bit (x86) Windows support. The x86 Node.js prerequisite has been removed from the installer. +::: + +Also fixed: an XML External Entity (XXE) vulnerability (CWE-611) on the Portal's SAML assertion consumer service endpoint, which could be reached without authentication. Deployments using SSO/SAML should upgrade. + +### Export Diagram as PNG +Export sandbox diagrams as PNG images directly from the browser. Available in the diagram toolbar under Export → PNG. + +### AI Chat Integration +Configurable AI Assistant menu item in the Portal. Administrators can set a URL template to integrate with AI chat services. + +### Portal Session Resilience +Portal users — including those signing in via SSO/SAML — are no longer logged out when the Portal application pool recycles. CloudShell rebuilds the session from the existing sign-in cookie, so open tabs and background page refreshes keep working without a forced re-login, and a transient CloudShell Server outage no longer signs users out. Controlled by the `EnableSessionRehydration` setting (enabled by default). + +### Custom PyPI Repository Honored at Execution Server Setup +A configured custom PyPI repository (`RequirementsRepository`, `RequirementsTrustedHost`, `RequirementsExtraRepository`) is now used during Execution Server setup and default-environment bootstrap, not only when running driver commands. Environments with a private or HTTPS-only PyPI index can complete Execution Server setup against a reachable custom index without a workaround. + +### Server Default Changes +- `UseRabbitServer` now defaults to `false` +- `UseEmbeddedSandboxService` now defaults to `false` +- Job Scheduling now follows the global `UseRabbitServer` setting instead of an independent default, so scheduled and manually launched reservations take the same messaging path + +### Docker Execution Server +- Consolidated Dockerfile with Python 3 virtualenv and TLS/Kerberos compatibility +- Support for passing Execution Server Selector attributes to Docker containers + +### Application Links Management API +New TestShell API methods for managing application links (SSH, Telnet, RDP, etc.) on resources programmatically. Administrators can disable specific links per resource or set family-wide defaults: +- `SetResourceApplicationLinks` — Set which application links are disabled for a specific resource +- `GetResourceApplicationLinks` — Get the current application links configuration for a resource +- `SetFamilyDefaultApplicationLinks` — Set default disabled links for an entire resource family +- `GetFamilyDefaultApplicationLinks` — Get the family-level default configuration + +### GetResourceReservations API +New TestShell API method that returns the list of reservations (current and historical) associated with a given resource. + +### Improved Abstract Resource Resolution Diagnostics +When a blueprint reservation fails due to unresolvable abstract resources or route conflicts, the error message now includes detailed diagnostics — showing which resources could not be resolved, which routes failed, and the specific conflicts that prevented resolution. + +### Preserve the Diagram Arrangement When the View Style Changes +Changing a diagram's **View Style** can now resize the resource cards in place and keep the saved arrangement, instead of applying the legacy per-axis resize (Large ×2/×3, Small ÷2.7 and ×1.3) that visibly displaces resources and link endpoints. This is opt-in — set `PreserveDiagramLayoutOnViewStyleChange` to `True` in the Portal's `customer.config`; the default is unchanged behavior. + +Independently of that setting, three flows that could move or persist diagram coordinates incorrectly were fixed: **Arrange**, dragging resources to new positions, and resizing a sticky note. + +### Execution Server Resilience on Linux +Execution Servers running on Linux/Mono handle bursts of driver launches more reliably. Under a burst, reads from driver child processes could starve the socket-completion callbacks that service the Execution Server's messaging channel, wedging the agent until it was restarted. The Execution Server now reserves a floor of thread-pool worker threads at startup so the two cannot compete, and CloudShell Server tolerates a much longer transient stall — up to roughly 100 seconds — when dispatching an execution request to an Execution Server, instead of giving up after a few seconds. + +Also fixed: virtual environments on Linux Execution Servers were resolved using the Windows interpreter path layout (`Scripts` rather than `bin`). + +### Driver Command Queue Inspection and Recovery API +New system-administrator Automation API methods for seeing which resource driver commands are queued or running, and cancelling them. They address a resource left blocked by a command belonging to a previous — possibly already ended — sandbox, which a new sandbox could not previously see or cancel: + +- `GetRunningCommands` — the driver commands queued or running in a reservation. +- `GetResourceCommandExecutions` — the driver commands queued or running on a resource, across all reservations. +- `CancelResourceCommand` — cancel one command by its execution id. +- `ClearResourceCommands` — cancel every command queued or running on a resource. Does not wait behind the command it is clearing, so it can be called from a Setup script. + +For details and examples, see [Inspecting and Clearing Driver Commands on a Resource](../devguide/available-cs-api/useful-cs-api-examples/inspect-and-clear-driver-commands.md). + +### Sandbox Owners and Permitted Users Accepted by Display Name +Creating a sandbox could fail with `User "" does not exist` for a user who did exist, when that user's display name differed from their username — most often for users provisioned through SSO or Active Directory, where the directory supplies a display name such as `Jane Doe (Engineering)` while the login remains `jdoe`. Sandbox owners and permitted users may now be given as a user ID, a username, or a display name. + +Usernames are matched first, so no existing behavior changes. Because display names are not required to be unique, a display name shared by more than one user is rejected rather than resolved arbitrarily, and the error asks for the username instead. Permissions are unchanged — a user resolved this way must still be allowed to own a sandbox in the relevant domain. + +### Bundled Python 3 Upgraded to 3.13 (Windows) +The Python 3 interpreter bundled with CloudShell on Windows has been upgraded from CPython 3.9.9 (32-bit) to **3.13.15 (64-bit)**. Shell drivers and orchestration scripts that run on a Windows Execution Server now execute on Python 3.13. The bundled Python 2.7.18 slot is unchanged and still ships, so legacy Python 2 shells are unaffected. + +:::warning Driver compatibility +Driver code and its `requirements.txt` must be valid on Python 3.13. Modules and aliases removed between 3.9 and 3.13 are the most common cause of breakage — for example the `collections` aliases for the abstract base classes (`collections.Sequence`), which were removed in Python 3.10 and must be imported from `collections.abc` instead. Test your shells against Python 3.13 before upgrading. +::: + +:::note Linux and Docker Execution Servers still use Python 3.9.9 +This upgrade covers the Python bundled with CloudShell on Windows. Linux Execution Servers — including the Linux virtual appliance and the Docker Execution Server image — still provide Python 3.9.9. If your shells run on both Windows and Linux Execution Servers, keep driver code compatible with both 3.9 and 3.13. +::: + +### Global Inputs Kept When Saving a Sandbox as a Blueprint +Saving a sandbox as a blueprint now keeps global inputs that were linked to a resource requirement, instead of dropping them: + +- Where the requirement is carried over to the saved blueprint (the work order flow), the kept global input is linked back to that requirement, so it still drives something. +- Where the resource was pinned down as a concrete resource, there is nothing left to link to, so the input is kept as a plain value. + +Controlled by the `KeepResourceGlobalInputsOnSaveAsBlueprint` key (default `true`). Set it to `false` to drop these inputs instead, which restores the previous behavior. + +### Blueprint Import Validates Categories +Importing a blueprint that references a category that does not exist in the target domain now fails the import with an explicit error, instead of importing the blueprint and silently dropping the category association. This completes the import validation set — family, model, attribute, script, driver and resource references already failed the import when missing. + +### Bug Fixes +- Fixed an issue where App deployment could retry unnecessarily on certain internal errors instead of failing fast with clear diagnostics. +- Fixed SSO (SAML) users being bounced to the login page in a loop, instead of seeing the maintenance page, when signing in during a maintenance window. Aborted logins no longer leave a half-authenticated session. +- Fixed an active maintenance window being left stranded open when its end time was edited to a past time. Such edits are now rejected — use **Stop** to end an active window immediately. +- Fixed the RabbitMQ messaging service failing to start after an Erlang upgrade. CloudShell now validates and refreshes stale Erlang location settings automatically. +- Fixed abstract resource port names in Assembly Lab work order fields and route tooltips intermittently truncating to the leaf port name instead of the full path. +- Fixed the Sandbox API crashing on the Node.js 24 runtime when handling conditional (cache-revalidation) requests to the explore endpoints. +- Restored the full Ansible package (with bundled collections) in the Docker Execution Server image, fixing playbooks that failed with missing-module errors. +- The About dialog now shows the full four-part product version, including the build number (for example, `2026.1.0.52`). +- Fixed a resource placed directly into a blueprint being labeled with its own name twice on the sandbox diagram — for example `server1 (server1)` instead of `server1`. A resource that does resolve an abstract still shows that abstract's alias, and where an abstract's alias is identical to the resource name the diagram now shows the name once, matching the resource side pane. +- Fixed a **Blueprint not found** message repeating indefinitely when the active domain was switched with a blueprint open, which prevented the redirect from completing. The message is now shown once and the redirect proceeds. +- Fixed a server error (HTTP 500) when downloading a shell or provisioning script whose stored file name has no extension. +- Fixed the sandbox **Properties** dialog showing a non-admin user an end time the sandbox does not have, for a sandbox that had been extended beyond the duration cap of its blueprint or user group. The dialog now shows the sandbox's real schedule, and opening it no longer silently shortens the sandbox. + +--- + +## Version 2025.1 + +### RemoveEntitiesFromTopology API +New API method for programmatically removing services and abstract resources from a topology/blueprint. + +### PostgreSQL Database Support (Beta) +CloudShell now supports PostgreSQL as an alternative database backend. Contact Quali Support for evaluation access. + +--- + +## Post-2024.1 GA Patch Releases + +### 2024.1.0.2534 (October 2024) +- **Abstract Editor: Collapse Nodes** — Collapse abstract nodes in the diagram editor for cleaner visualization +- **Reservation State Filter** — Now visible for all domain types in the Reservations Dashboard +- **L1 Port Filter** — Filter resources by L1 ports when adding resources to a reservation +- **Block Recurring Sandboxes in Assembly Lab** — Recurring reservations are blocked in Assembly Lab domains + +### 2024.1.0.2540 (November 2024) +- **Sticky Notes Activity Feed** — When updating sticky notes, a notification appears in the reservation activity feed +- **Work Order Enhancements** — Block connectivity changes in pending state; show full abstract port names in Blueprint route editor + +### 2024.1.0.2596 (February 2025) +- **Attribute Changed Event** — Now publishable for MQ integration +- **SSO Login Event** — Login events are now created for SSO logins +- **Sandbox API: Schedule Future Reservations** — New `Start_Time` parameter to schedule reservations for a future time +- **Save As Template Confirmation** — Confirmation dialogs added for "Save As Template" and "Save a Copy" actions +- **Work Order Improvements** — Recursive state updates, alphabetical route sorting, sort resources by request name +- **Domain ID in Events** — Domain ID now passed in certain events to simplify handling + +### 2024.1.0.2603 (March 2025) +- **Copiable Side Panel Text** — Text in side panels (activity feed, resource info) is now selectable and copiable +- **Sandbox API: Cancel Pending Reservation** — API now supports canceling pending reservations, not just stopping active ones +- **Assembly Lab: Exclusive Requirements** — Exclusive requirements now solved only by the device itself, not the entire graph +- **Performance Improvements** — Faster entity path queries, optimized published properties retrieval + +### 2024.1.0.2624 (April 2025) +- **Smart Route Creation** — When creating routes between concrete devices, the system prioritizes using existing L1 infrastructure segments (patch panels, Layer 1 switches). Falls back to a provisional direct connection if no valid route exists +- **Node.js Upgrade** — Bundled Node.js upgraded from 18.13.0 to 22.15.0 +- **Security: L1 Driver Logs** — Passwords redacted from Layer 1 driver logs +- **Performance** — Reduced CPU usage, faster resource deletion, reduced thread starvation, caching for high-frequency calls + +### 2024.1.0.2634 (May 2025) +- **PostgreSQL Support (Experimental)** — Experimental database support for PostgreSQL. Contact Quali Support for details. + +### 2024.1.0.2650 (June 2025) +- **Sticky Note Colors** — Choose color for sticky notes in sandboxes +- **New API: UndeployApps** — Remove an app from the cloud provider while keeping the CloudShell resource. Useful for bulk deletion scenarios. + +### 2024.1.0.2669 (July 2025) +- **AllowUnicodeForCommandContext** — New configuration option to support passing unicode characters to script environment variables (useful when usernames contain unicode) + +### 2024.1.0.2682 (August 2025) +- **Alias in Assembly Lab** — Resource alias now appearing in Assembly Lab reservations +- **Environment Variable Config Override** — Override `customer.config` values using environment variables +- **Permissions Screen Sort** — Groups sorted alphabetically in the Permissions screen +- **Connection Properties** — Side panel shows changes immediately after modification + +### 2024.1.0.2686 (October 2025) +- **L1 Port Route Solving** — When solving an abstract in a route, if the solution is connected to an L1 port, the port is automatically added to the route +- **Per-Domain Notification Settings API** — New `UpdateDomainSetting` and `GetDomainSettings` API methods for managing notification settings per domain + +--- + +## Version 2024.1 + +### Assembly Lab + +A radically different mode of operation for CloudShell is now available! + +- Manage devices on a part by part basis + - Move sub resources from one device to another + - Solve abstracts using parts from different devices + +- Sandboxes can be partially solved by algorithm and partially by human involvement + - Select solutions for abstract requests + - Change solutions + + +#### For more information on Assembly lab, follow these links + +- [Assembly Lab Overview](../admin/setting-up-cloudshell/assembly-lab/index.md) +- [Configure an Assembly Lab domain](../admin/setting-up-cloudshell/assembly-lab/configure-assembly-lab-domain.md) + +### Capabilities + +CloudShell's RBAC implementation, you can now associate user groups with capability sets. +Each capability set can specifically allow or block certain capabilities, overriding the defaults provided by the group role. + +[Read more here](../admin/cloudshell-identity-management/managing-cloudshell-permissions/capabilities/index.md) + +### Display attributes in Resource Search directly on cards + +[Configure specific attributes](../admin/setting-up-cloudshell/cloudshell-configuration-options/resource-search-customizations.md) to appear directly on resource search results. + +![SearchResultsWithAttribute](/Images/Admin-Guide/ResourceSearchCustomization/SearchResultsWithLocation.png) + +### Filter sandboxes by user input and display the user input in Sandboxes Dashboard + +- Configure an attribute to be displayed in sandbox dashboard +- Show only sandboxes which passed a particular value + +![Sandbox Dashboard Customization](/Images/Admin-Guide/CustomizingSandboxesDashboard/filter.gif) + +[For more details](../admin/setting-up-cloudshell/cloudshell-configuration-options/customizing-sandboxes-dashboard.md) + +### Minimum Lead Time + +You now have the ability to establish a minimum lead time for reserving Sandboxes within a specific domain. This means that when this setting is configured, any sandbox reservations must be made for a date in the future, not for immediate use. + +To implement this, you need to adjust the `MinimumLeadTimeMinutes` parameter via a specific API call. Detailed instructions on how to make this API call can be found in [this guide](../api-guide/cs-admin-rest-api/edit-domain.md). + +### API Changes + +#### GetResourcesAttributeValues +Receives a list of resources and returns the values of all the attributes in bulk. This method can be more performant than calling GetResourceAttributeValues or GetResourceDetails in a loop. +Available in Cloudshell Automation API. + +#### GetExecutionServers & DeleteExecutionServer + +API calls for getting Execution Servers and removing them using automation. + +#### GetResourceDetails changes + +GetResourceDetails will now show Create & Modified Date for the resource. + --- \ No newline at end of file