diff --git a/docs/admin/cloudshell-event-queue.md b/docs/admin/cloudshell-event-queue.md index b10997548a..4e3ad64b71 100644 --- a/docs/admin/cloudshell-event-queue.md +++ b/docs/admin/cloudshell-event-queue.md @@ -89,7 +89,7 @@ In the above example, Cloudshell Server would only emit events related to new us **UserUpdatedEvent**: This event happens when a user's details are updated. -**LoginEvent**: This event is triggered when a user logs in. +**LoginEvent**: This event is triggered when a user logs in. *Since CloudShell 2024.1.0.2596*, login events are also generated for SSO (Single Sign-On) logins. Previously, login events were only created for direct authentication. **UserGroupAddedEvent**: This event occurs when a new user group is added. @@ -162,3 +162,11 @@ In the above example, Cloudshell Server would only emit events related to new us **WorkOrderResourceUnsolvedEvent**: This event is fired when a concrete match for a work order resource is unselected in an assembly lab sandbox. **WorkOrderResourceRemovedEvent**: This event happens when a work order resource is removed in an assembly lab sandbox. + +**AttributeChangedEvent** *(Added in CloudShell 2024.1)*: This event is triggered when an attribute value is changed on a resource. Useful for monitoring attribute changes via MQ integration for audit or automation purposes. + +## Domain ID in Events + +*Added in CloudShell 2024.1.0.2596* + +Certain server events now include a `DomainId` field in their message payload. This simplifies event handling and filtering by domain in MQ consumers, allowing subscribers to process only events relevant to a specific domain without additional API lookups. diff --git a/docs/admin/cloudshell-manage-dashboard/maintenance-window.md b/docs/admin/cloudshell-manage-dashboard/maintenance-window.md index 9b2958033c..e3c76889a5 100644 --- a/docs/admin/cloudshell-manage-dashboard/maintenance-window.md +++ b/docs/admin/cloudshell-manage-dashboard/maintenance-window.md @@ -61,6 +61,26 @@ The maintenance window's areas are arranged as follows: | 9 | Warning on Reserve | The message shown to non-admin users who try in advance to create a sandbox that starts and ends outside the maintenance window. The user is presented with the option to either **Continue** or **Cancel**. If they select to continue, the sandbox will be created and remain active during the maintenance period, but it will be inaccessible.
In the API, there is no warning, and the action is allowed. | | 10 | Delete button | | +## Maintenance Window By Domain + +*New in CloudShell 2026.1* + +In addition to the system-wide maintenance window described above, administrators can define maintenance windows scoped to individual domains. During a domain-scoped maintenance window, sandbox creation and modifications are restricted in that domain, while other domains continue operating normally. + +This is useful for planned infrastructure maintenance, upgrades, or other activities that require temporarily restricting access to specific lab resources without affecting other teams. + +### Configuring a Domain Maintenance Window + +To set a maintenance window for a specific domain, use the API: + +- **UpdateDomainSetting** — Set maintenance window parameters for a specific domain +- **GetDomainSettings** — Retrieve current domain settings including maintenance window configuration + +:::note +The system-wide maintenance window (configured from the **Manage** dashboard) takes precedence over domain-level maintenance windows. If both are active, the system-wide restrictions apply. +::: + ## Related Topics - [Manage Dashboard Overview](../../admin/cloudshell-manage-dashboard/manage-dashboard-overview.md) +- [CloudShell Domains](../../admin/cloudshell-identity-management/cloudshell-domains/index.md) diff --git a/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/aws-ec2-dp-attributes.md b/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/aws-ec2-dp-attributes.md index 0a5fc5d30d..655e216fff 100644 --- a/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/aws-ec2-dp-attributes.md +++ b/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/aws-ec2-dp-attributes.md @@ -82,7 +82,7 @@ If not specified, the protocol defaults to TCP. :::tip Tips - To allow QualiX in-browser connections to the VM from the sandbox, include port "22". -- To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/2024.1/TestShell-API/TestShell%20XML%20RPC%20API.html) method instead. Unlike the Inbound Ports attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md). +- To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/latest/TestShell-API/TestShell%20XML%20RPC%20API.html) method instead. Unlike the Inbound Ports attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md). ::: diff --git a/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-custom-image-dp-attributes.md b/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-custom-image-dp-attributes.md index 6ee3f2fee6..9d11e68d16 100644 --- a/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-custom-image-dp-attributes.md +++ b/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-custom-image-dp-attributes.md @@ -214,7 +214,7 @@ If not specified, the protocol defaults to TCP. ::: :::tip Tips - To allow QualiX in-browser connections to the VM from the sandbox, include port "22". -- To set more specific security groups, it is recommended to use the TestShell API's [SetAppSecurityGroups](pathname:///api-docs/2024.1/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Ports** attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md). +- To set more specific security groups, it is recommended to use the TestShell API's [SetAppSecurityGroups](pathname:///api-docs/latest/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Ports** attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md). ::: diff --git a/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-galery-dp-attributes.md b/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-galery-dp-attributes.md index 09618fbe62..e206752e8c 100644 --- a/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-galery-dp-attributes.md +++ b/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-galery-dp-attributes.md @@ -191,7 +191,7 @@ If not specified, the protocol defaults to TCP. ::: :::tip Tips - To allow QualiX in-browser connections to the VM from the sandbox, include port "22". -- To set more specific security groups, it is recommended to use the TestShell API's [SetAppSecurityGroups](pathname:///api-docs/2024.1/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Ports** attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md). +- To set more specific security groups, it is recommended to use the TestShell API's [SetAppSecurityGroups](pathname:///api-docs/latest/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Ports** attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md). ::: diff --git a/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-marketplace-dp-attributes.md b/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-marketplace-dp-attributes.md index 522d43e5a5..3b8269a227 100644 --- a/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-marketplace-dp-attributes.md +++ b/docs/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-marketplace-dp-attributes.md @@ -217,7 +217,7 @@ If not specified, the protocol defaults to TCP. ::: :::tip Tips - To allow QualiX in-browser connections to the VM from the sandbox, include port "22". -- To set more specific security groups, it is recommended to use the TestShell API's [SetAppSecurityGroups](pathname:///api-docs/2024.1/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the Inbound Ports attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md). +- To set more specific security groups, it is recommended to use the TestShell API's [SetAppSecurityGroups](pathname:///api-docs/latest/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the Inbound Ports attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md). ::: diff --git a/docs/admin/setting-up-cloudshell/assembly-lab/index.md b/docs/admin/setting-up-cloudshell/assembly-lab/index.md index 71edff2b11..59b0f8bb88 100644 --- a/docs/admin/setting-up-cloudshell/assembly-lab/index.md +++ b/docs/admin/setting-up-cloudshell/assembly-lab/index.md @@ -11,16 +11,40 @@ In the standard mode, the entire blueprint must be solved satisfactorily, or the In Assembly Lab, solving the blueprint partially is possible, and it is expected that further changes to the inventory OR to the request (originally a blueprint, but now a pending sandbox) will eventually bring the sandbox to the desired state. +## Diagram Editor + +### Collapsing Abstract Nodes + +When working with complex blueprints that contain many abstract requirements, users can collapse abstract nodes in the diagram editor for a cleaner visualization. Right-click an abstract node and select **Collapse** to hide its child elements. This helps manage large diagrams while retaining access to the full structure when needed. + ## Assembly Lab Rules ### Route Handling If there is a route between resources, the route will not be solved (i.e., Layer 1 ports will not be reserved). However, the system will attempt to select resources that are connected to Layer 1 switches. +### Smart Route Creation with L1 Priority + +When creating routes between concrete devices in the sandbox, the system prioritizes using existing route segments (patch panels, Layer 1 infrastructure). If a valid route can be established through existing L1 infrastructure, it will be used automatically. + +If no valid route can be established through existing L1 infrastructure, a provisional direct connection (device-to-device) is created. This placeholder route can later be refined by selecting appropriate connections through Layer 1 switches or patch panels. + +### L1 Port Auto-Add on Solve + +When solving an abstract requirement that is part of a route, if the solution resource is connected to a Layer 1 port, that port is automatically added to the route and reservation. This eliminates the need to manually manage L1 port assignments when resolving abstract requirements within routes. + +Conversely, when unsolving an abstract, the associated L1 port is automatically removed from the route and reservation. + ### Sandbox Creation A sandbox is always created, even if not all requirements are met. This approach ensures that users can proceed with their projects while resolving outstanding requirements. +### Exclusive Requirement Solving + +When solving exclusive abstract requirements, only the device itself is used as the solution — not the entire resource graph beneath it. This ensures that exclusive reservations are scoped precisely to the required resource. + +Additionally, the "unsolve abstract" operation accurately determines which resources to remove from the reservation, preventing unintended removal of resources that are still needed by other requirements. + ### Whole Resource Utilization As many resource requirements as possible will be solved with whole resources. This approach minimizes fragmentation and maintains the integrity of individual resources. diff --git a/docs/admin/setting-up-cloudshell/assembly-lab/work-order-management.md b/docs/admin/setting-up-cloudshell/assembly-lab/work-order-management.md index b89f7f067e..520586dd6b 100644 --- a/docs/admin/setting-up-cloudshell/assembly-lab/work-order-management.md +++ b/docs/admin/setting-up-cloudshell/assembly-lab/work-order-management.md @@ -15,7 +15,32 @@ Until each work order resource has a concrete resource that matches the abstract The Routes tab displays either cable routes or logical routes used to apply Layer 1 connectivity. -Each record in the Routes tab represents a single route. +Each record in the Routes tab represents a single route. Routes are sorted alphabetically for easier navigation. -- For cable routes (known as "direct" in the work order), if both work order resources at the terminus have been selected, users can apply "connect" to indicate that the devices have been wired together in the lab (or "disconnect" for the inverse). -- For Layer 1 routes, users can assign the work order resource to be connected to another device in the lab. \ No newline at end of file +- For cable routes (known as "direct" in the work order), if both work order resources at the terminus have been selected, users can apply "connect" to indicate that the devices have been wired together in the lab (or "disconnect" for the inverse). The **Save & Connect** button is disabled for Cable type routes since no Layer 1 connection is needed. +- For Layer 1 routes, users can assign the work order resource to be connected to another device in the lab. + +### Route Search + +When searching for resources to assign to a route, the following search capabilities are available: + +- **L1Connectables filter** — filters the resource search to show only resources that can be connected via Layer 1 infrastructure. +- **Free text search** — type any text to filter route entries by name or other attributes. + +## Permissions and State Management + +### Work Order Permissions + +Only administrators or users who have been explicitly granted permission can update work orders. This ensures that work order modifications are controlled and auditable. + +### Recursive State Updates + +When setting a parent resource's state to **Completed**, all child ports under that parent are automatically set to Completed as well. This eliminates the need to manually update each sub-resource individually. + +### Pending Sandbox Restrictions + +When a sandbox is in **Pending** state, connectivity changes (connecting or disconnecting routes) are blocked. The sandbox must transition out of the Pending state before route connectivity operations can be performed. + +### Resource Sorting + +Resources in the work order view are sorted by their request name, making it easier to find and manage specific work order items. \ No newline at end of file diff --git a/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/advanced-cloudshell-customizations.md b/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/advanced-cloudshell-customizations.md index 55923874af..2c22a5b684 100644 --- a/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/advanced-cloudshell-customizations.md +++ b/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/advanced-cloudshell-customizations.md @@ -1866,7 +1866,7 @@ Apps based on a public cloud provider, such as AWS EC2 and Azure, cannot be used By default, when trying to open a URL to a sandbox from a domain you can access but are not currently logged into, CloudShell prompts the user to switch to the domain (assuming the blueprint is public and the user is permitted to access the sandbox/blueprint). If the user confirms the switch, CloudShell will then open the sandbox/blueprint in its domain. However, you can choose to prevent this domain switch by setting the `AutoSwitchDomain` key. For additional information, see [Opening Sandboxes](../../../portal/sandboxes/opening-sandboxes.md). :::note -When opening a blueprint from a URL, the domain switch only works if the blueprint URL includes the domain ID. To obtain a blueprint URL with the domain ID, use the CloudShell Automation API's [GetTopologyUrls](pathname:///api-docs/2024.1/python-api/cloudshell.api.html?#cloudshell.api.cloudshell_api.CloudShellAPISession.GetTopologyUrls) method. +When opening a blueprint from a URL, the domain switch only works if the blueprint URL includes the domain ID. To obtain a blueprint URL with the domain ID, use the CloudShell Automation API's [GetTopologyUrls](pathname:///api-docs/latest/python-api/cloudshell.api.html?#cloudshell.api.cloudshell_api.CloudShellAPISession.GetTopologyUrls) method. ::: **To disable the domain switch when accessing a sandbox/blueprint link:** diff --git a/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/general.md b/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/general.md index d086639ab9..512472edd9 100644 --- a/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/general.md +++ b/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/general.md @@ -722,4 +722,111 @@ Python 3 automation requires Microsoft Visual C++ Redistributable 2015 x86 and x 2024.1 and above + + +## Environment variable configuration overrides + +*Starting with CloudShell 2024.1*, CloudShell supports overriding `customer.config` values using environment variables. This enables configuration management without modifying files directly, which is useful for containerized deployments and automation scenarios. + +To override a configuration key, set an environment variable with the prefix `QS_` followed by the key name (with dots replaced by underscores). For example, to override ``, set the environment variable `QS_MyKey`. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyN/A (environment variable prefix: `QS_`)
Possible valuesAny value that would be valid in the corresponding `customer.config` key
Where to add/changeSystem environment variables on the machine running the CloudShell component
Default valueN/A
Affected CloudShell ComponentAll (Quali Server, Portal, Execution Server)
Version2024.1 and above
+ +:::note +Environment variable overrides take precedence over values defined in `customer.config`. This allows you to manage configuration centrally (e.g., via orchestration tools or container runtime) without modifying config files on disk. +::: + +## Allow unicode characters in script command context + +When set to `true`, allows passing unicode characters to script environment variables. This is useful when usernames or other context values contain unicode characters. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible valuesTrue/False
Where to add/change`customer.config` CloudShell Server installation directory
Default valueFalse
Affected CloudShell ComponentCloudShell Server
Version2024.1 and above
+ +## Configure AI Assistant chat menu item in Portal + +Administrators can configure an AI Assistant menu item in the Portal by setting a URL template. This adds a menu item that opens an AI chat interface, optionally passing context about the current page or resource. + +The URL template can include placeholders that are replaced with context values at runtime, such as `{resource}` or `{page}`. + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible valuesA URL template. Supported placeholders: `{page}`, `{resource}`, `{sandbox}`
Where to add/change`customer.config` CloudShell Portal installation directory
Default valueN/A (disabled)
Affected CloudShell ComponentCloudShell Portal
Version2026.2 and above
\ No newline at end of file diff --git a/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/new-job-scheduling.md b/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/new-job-scheduling.md index b925594ee1..2f00b96a19 100644 --- a/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/new-job-scheduling.md +++ b/docs/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/new-job-scheduling.md @@ -25,7 +25,7 @@ False: Use Kubernetes-based Sandbox Service Default value - True + False (changed from True in 2026.2). Deployments that rely on the embedded sandbox service must explicitly set this to `True`. Affected CloudShell Component @@ -114,3 +114,36 @@ RabbitPort - port number +## Enable RabbitMQ for server events + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Key``
Possible values + True: Use RabbitMQ for server event notifications (requires a running RabbitMQ instance) + +False: Disable RabbitMQ-based server events +
Where to add/change`customer.config` CloudShell Server installation directory
Default valueFalse (changed from True in 2026.2). Deployments that rely on RabbitMQ for server events must explicitly set this to `True`.
Affected CloudShell ComponentCloudShell Server
Version2020.2 and above
diff --git a/docs/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-app-template.md b/docs/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-app-template.md index efe62c5273..e8532c8c3f 100644 --- a/docs/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-app-template.md +++ b/docs/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-app-template.md @@ -164,7 +164,7 @@ The App template defines the settings and configurations of the VM to be deploye ::: :::tip Tips: - To allow QualiX in-browser connections to the VM from the sandbox, include port "22". - - To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/2024.1/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Ports** attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../setappsecuritygroups-code-example.md). + - To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/latest/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Ports** attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../setappsecuritygroups-code-example.md). ::: diff --git a/docs/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md b/docs/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md index 758b10aa7b..cb07ad0edc 100644 --- a/docs/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md +++ b/docs/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md @@ -289,7 +289,7 @@ The App template defines the settings and configurations of the VM to be deploye ::: :::tip Tips: - To allow QualiX in-browser connections to the VM from the sandbox, include port "22". - - To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/2024.1/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Port**s attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../setappsecuritygroups-code-example.md). + - To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/latest/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Port**s attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../setappsecuritygroups-code-example.md). ::: @@ -537,7 +537,7 @@ The App template defines the settings and configurations of the VM to be deploye ::: :::tip Tips: - To allow QualiX in-browser connections to the VM from the sandbox, include port "22". - - To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/2024.1/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Port**s attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../setappsecuritygroups-code-example.md). + - To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/latest/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Port**s attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../setappsecuritygroups-code-example.md). ::: @@ -759,7 +759,7 @@ The App template defines the settings and configurations of the VM to be deploye ::: :::tip Tips: - To allow QualiX in-browser connections to the VM from the sandbox, include port "22". - - To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/2024.1/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Ports** attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../setappsecuritygroups-code-example.md). + - To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/latest/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Ports** attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../setappsecuritygroups-code-example.md). ::: diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-domain-by-id.md b/docs/api-guide/cs-admin-rest-api/get-domain-settings.md similarity index 50% rename from versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-domain-by-id.md rename to docs/api-guide/cs-admin-rest-api/get-domain-settings.md index 18e082df59..7dfb3e23dc 100644 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-domain-by-id.md +++ b/docs/api-guide/cs-admin-rest-api/get-domain-settings.md @@ -1,60 +1,59 @@ ---- -sidebar_position: 5 ---- - -# Get domain by ID - -### Description - -Get a domain's details. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/domains/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Domain's ID. Can be retrieved via [Get all domains](./get-all-domains.md). | - -### HTTP method - -`GET` - -### Request - -
-Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - - -
- -### Response - -
-Response example - -```javascript -{ - "Id": "5c966733-c496-486d-8b1a-963c13e9a103", - "Archived": false, - "EndTime": null, - "LicensePoolId": null, - "Description": "New York team's domain", - "Name": "New York" -} -``` -
- -
-Response code - -```javascript -200 OK -``` -
\ No newline at end of file +--- +sidebar_position: 8 +--- + +# Get Domain Settings + +### Description + +*Added in CloudShell 2024.1.* + +Gets all settings for a specific domain. Domain settings control per-domain behavior such as email notification timing. + +### URL + +`http://{Admin API IP}:{port#}/api/v1/domains/{id}/settings` + +| Parameter | Description/Comments | +| --- | --- | +| ID | (string) Domain's ID. Can be retrieved via [Get all domains](./get-all-domains.md). | + +### HTTP method + +`GET` + +### Request + +
+Headers + +Example header format: + +`Authorization: Basic ` + +`Content-Type: application/json` + +
+ +### Response + +
+Response example + +```javascript +[ + { + "Name": "NotificationMinutesBeforeEnd", + "Value": "10" + } +] +``` +
+ +
+Response code + +```javascript +200 OK +``` +
diff --git a/docs/api-guide/cs-admin-rest-api/index.md b/docs/api-guide/cs-admin-rest-api/index.md index 95a2310e13..dcdfcc9ef9 100644 --- a/docs/api-guide/cs-admin-rest-api/index.md +++ b/docs/api-guide/cs-admin-rest-api/index.md @@ -18,6 +18,13 @@ Manage CloudShell domains. - [Edit domain](./edit-domain.md) - [Delete domain](./delete-domain.md) +**DomainSettings:** + +Manage per-domain settings (e.g., notification preferences). + +- [Get domain settings](./get-domain-settings.md) +- [Update domain setting](./update-domain-setting.md) + **DomainBlueprints:** Manage a domain's blueprints. diff --git a/docs/api-guide/cs-admin-rest-api/update-domain-setting.md b/docs/api-guide/cs-admin-rest-api/update-domain-setting.md new file mode 100644 index 0000000000..1ea7daa149 --- /dev/null +++ b/docs/api-guide/cs-admin-rest-api/update-domain-setting.md @@ -0,0 +1,73 @@ +--- +sidebar_position: 9 +--- + +# Update Domain Setting + +### Description + +*Added in CloudShell 2024.1.* + +Updates a specific setting for a domain. Use this to configure per-domain behavior such as email notification timing. + +### URL + +`http://{Admin API IP}:{port#}/api/v1/domains/{id}/settings` + +| Parameter | Description/Comments | +| --- | --- | +| ID | (string) Domain's ID. Can be retrieved via [Get all domains](./get-all-domains.md). | + +### HTTP method + +`PUT` + +### Request + +
+Headers + +Example header format: + +`Authorization: Basic ` + +`Content-Type: application/json` + +
+ +
+Request body + +| Parameter | Description/Comments | +| --- | --- | +| `Name` | The name of the domain setting to update. `(string)` | +| `Value` | The new value for the setting. `(string)` | + +
+ +
+Request example + +```javascript +{ + "Name": "NotificationMinutesBeforeEnd", + "Value": "15" +} +``` +
+ +### Response + +
+Response code + +```javascript +200 OK +``` +
+ +### Available Domain Settings + +| Setting Name | Description | +| --- | --- | +| `NotificationMinutesBeforeEnd` | Number of minutes before sandbox end time to send an email notification to the sandbox owner. | diff --git a/docs/api-guide/cs-api-overview.md b/docs/api-guide/cs-api-overview.md index 1abaa9b1a4..7c8f208c71 100644 --- a/docs/api-guide/cs-api-overview.md +++ b/docs/api-guide/cs-api-overview.md @@ -29,7 +29,7 @@ A RESTful API designed to facilitate the consumption of public blueprints for CI ## Automation API -This API is an official Python package utilizing XMLRPC protocol to communicate with CloudShell. It's designed to automate CloudShell from Python scripts and drivers. The CloudShell Automation API is based on the XML RPC API. For details, see the [CloudShell Automation API](./shell-dev-blueprint-design-api/cs-automation-api.md) article, or check out our API guides. The Python package [API guide](pathname:///api-docs/2024.1/Python-API/) includes additional information like return objects and is intended for experienced Python developers, while for beginners, we recommend to use the [TestShell API Python Reference Guide](pathname:///api-docs/2024.1/TestShell-API/TestShell%20Python%20API.html), which features an easy to understand format and code examples. +This API is an official Python package utilizing XMLRPC protocol to communicate with CloudShell. It's designed to automate CloudShell from Python scripts and drivers. The CloudShell Automation API is based on the XML RPC API. For details, see the [CloudShell Automation API](./shell-dev-blueprint-design-api/cs-automation-api.md) article, or check out our API guides. The Python package [API guide](pathname:///api-docs/latest/Python-API/) includes additional information like return objects and is intended for experienced Python developers, while for beginners, we recommend to use the [TestShell API Python Reference Guide](pathname:///api-docs/latest/TestShell-API/TestShell%20Python%20API.html), which features an easy to understand format and code examples. To learn how to implement this API in .NET or XML RPC, see [TestShell API](./shell-dev-blueprint-design-api/testshell-api.md). @@ -37,9 +37,9 @@ To learn how to implement this API in .NET or XML RPC, see [TestShell API](./she A RESTful API designed to control the scheduling and queuing of test automation suites. Quali API can be used in several protocols (C#, TCL). This API is also used for importing and exporting packages and Shells, getting sandbox attachments, and execution server details. For details, see [Quali API](./quali-api.md), or check out the appropriate Quali API reference guide: -- [Quali API Library Reference Guide](pathname:///api-docs/2024.1/Quali-API/Quali%20API%20Library.html): is available by default in the TestShell Studio tools and can be added as a DLL asset to a project in CloudShell Authoring. -- [Quali API C# Reference Guide](pathname:///api-docs/2024.1/Quali-API/Quali%20cSharp%20API.html "Quali API C# Reference Guide"): for .NET -- [Quali API REST Reference Guide](pathname:///api-docs/2024.1/Quali-API/Quali%20REST%20API.html "Quali API REST Reference Guide"): for APIs using the REST client +- [Quali API Library Reference Guide](pathname:///api-docs/latest/Quali-API/Quali%20API%20Library.html): is available by default in the TestShell Studio tools and can be added as a DLL asset to a project in CloudShell Authoring. +- [Quali API C# Reference Guide](pathname:///api-docs/latest/Quali-API/Quali%20cSharp%20API.html "Quali API C# Reference Guide"): for .NET +- [Quali API REST Reference Guide](pathname:///api-docs/latest/Quali-API/Quali%20REST%20API.html "Quali API REST Reference Guide"): for APIs using the REST client The default port for Quali API in the Quali Server is 9000. diff --git a/docs/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/blueprint-start.md b/docs/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/blueprint-start.md index 0f6d8a5c33..661e46bda3 100644 --- a/docs/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/blueprint-start.md +++ b/docs/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/blueprint-start.md @@ -49,7 +49,7 @@ The scheduling and input parameters of the sandbox in JSON format. The elements | --- | --- | | `name` | The name of the sandbox. `(string)`
If you do not specify a name, you will get the following error message: "Reservation name and duration must be specified in request body". | | `duration` | The duration for this sandbox. Time must be specified in ISO 8601 format (for example PT23H). `(string)`
If you do not specify the duration, you will get the following error message: "Duration format must be a valid 'ISO 8601' (e.g 'PT23H' or 'PT4H2M')". | -| `start_time` | Optional parameter, if not provided the sandbox will start immediatly. Must conform to ISO 8601 standard, which means that a timezone offset is passed with the value. For UTC: 2039-09-07T15:50+00Z. For UTC+2: 2039-09-26T07:58:30.996+0200". | +| `start_time` | (*Added in CloudShell 2024.1*) Optional parameter, if not provided the sandbox will start immediately. Must conform to ISO 8601 standard, which means that a timezone offset is passed with the value. For UTC: `2039-09-07T15:50+00Z`. For UTC+2: `2039-09-26T07:58:30.996+0200`. | | `params` | Any published input parameters defined for the blueprint and its abstract resources. Input parameters that have no default must be included in the request. Abstract resource input parameters must be associated to global inputs (specify the global inputs in the request). `(Array)`
If you do not specify the input parameters, you will get the following error message: "Blueprint has invalid inputs". | | `permitted_users` | Users permitted to use the sandbox. Permitted users must have access to the logged-in domain. | @@ -62,6 +62,7 @@ The scheduling and input parameters of the sandbox in JSON format. The elements { "name":"testbp-sndbx", "duration":"PT2H5M", + "start_time":"2039-09-07T15:50:00+00:00", "params":[ { "name":"global1", diff --git a/docs/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprint-start.md b/docs/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprint-start.md index 3e699b5bc8..8c44bdca94 100644 --- a/docs/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprint-start.md +++ b/docs/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprint-start.md @@ -48,7 +48,7 @@ The scheduling and input parameters of the sandbox in JSON format. The elements | --- | --- | | `name` | The name of the sandbox. `(string)`
If you do not specify a name, you will get the following error message: "Reservation name and duration must be specified in request body". | | `duration` | The duration for this sandbox. Time must be specified in ISO 8601 format (for example PT23H). `(string)`
If you do not specify the duration, you will get the following error message: "Duration format must be a valid 'ISO 8601' (e.g 'PT23H' or 'PT4H2M')". | -| `start_time` | Optional parameter, if not provided the sandbox will start immediatly. Must conform to ISO 8601 standard, which means that a timezone offset is passed with the value. For UTC: 2039-09-07T15:50+00Z. For UTC+2: 2039-09-26T07:58:30.996+0200". | +| `start_time` | (*Added in CloudShell 2024.1*) Optional parameter, if not provided the sandbox will start immediately. Must conform to ISO 8601 standard, which means that a timezone offset is passed with the value. For UTC: `2039-09-07T15:50+00Z`. For UTC+2: `2039-09-26T07:58:30.996+0200`. | | `params` | Any published input parameters defined for the blueprint and its abstract resources. Input parameters that have no default must be included in the request. Abstract resource input parameters must be associated to global inputs (specify the global inputs in the request). `(Array)`
If you do not specify the input parameters, you will get the following error message: "Blueprint has invalid inputs". | | `permitted_users` | Users permitted to use the sandbox. Permitted users must have access to the logged-in domain. | @@ -61,6 +61,7 @@ The scheduling and input parameters of the sandbox in JSON format. The elements { "name":"testbp-sndbx", "duration":"PT2H5M", + "start_time":"2039-09-07T15:50:00+00:00", "params":[ { "name":"global1", diff --git a/docs/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-stop.md b/docs/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-stop.md index 4c065e1447..1b8b012c3d 100644 --- a/docs/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-stop.md +++ b/docs/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-stop.md @@ -8,6 +8,10 @@ sidebar_position: 16 Ends a sandbox per specified sandbox ID. Returns a successful response when the sandbox is stopped. +:::note +*Added in CloudShell 2024.1:* This method also supports canceling **pending** (future/scheduled) reservations, not just stopping active sandboxes. +::: + ### URL `http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/{sandbox_identifier}/stop` diff --git a/docs/api-guide/new-jss-rest-api/api-support-for-jss-and-js.md b/docs/api-guide/new-jss-rest-api/api-support-for-jss-and-js.md index defa763fea..3d6cc1c77d 100644 --- a/docs/api-guide/new-jss-rest-api/api-support-for-jss-and-js.md +++ b/docs/api-guide/new-jss-rest-api/api-support-for-jss-and-js.md @@ -4,7 +4,7 @@ sidebar_position: 20 # API Support for New Job Scheduling and Job Scheduling (1st Gen) -The section compares the APIs for the different Job Scheduling features. The New Job Scheduling has a dedicated RESTful API while the original Job Scheduling uses the [Quali API](pathname:///api-docs/2024.1/Quali-API/Quali%20API%20Library.html). +The section compares the APIs for the different Job Scheduling features. The New Job Scheduling has a dedicated RESTful API while the original Job Scheduling uses the [Quali API](pathname:///api-docs/latest/Quali-API/Quali%20API%20Library.html). :::note For brevity, the term "Job Scheduling (1st Gen)" denotes the original Job Scheduling which is accessed via CloudShell Portal. diff --git a/docs/api-guide/quali-api.md b/docs/api-guide/quali-api.md index 053c673ea6..b0c855f4df 100644 --- a/docs/api-guide/quali-api.md +++ b/docs/api-guide/quali-api.md @@ -10,15 +10,15 @@ For additional information, see the following Quali API guides: - **Quali API Library**: is available by default in the TestShell Studio tools and can be added as a DLL asset to a project in CloudShell Authoring, the driver builder. -For the complete list of Quali API Library functions, see [Quali API Library Reference Guide](pathname:///api-docs/2024.1/Quali-API/Quali%20API%20Library.html). +For the complete list of Quali API Library functions, see [Quali API Library Reference Guide](pathname:///api-docs/latest/Quali-API/Quali%20API%20Library.html). - **Quali C# API**: for .NET - For the complete list of Quali API C# functions, see [Quali API C# Reference Guide](pathname:///api-docs/2024.1/Quali-API/Quali%20cSharp%20API.html "Quali API C# Reference Guide"). + For the complete list of Quali API C# functions, see [Quali API C# Reference Guide](pathname:///api-docs/latest/Quali-API/Quali%20cSharp%20API.html "Quali API C# Reference Guide"). - **Quali REST API**: for APIs using the REST client - For the complete list of Quali API REST functions, see [Quali API REST Reference Guide](pathname:///api-docs/2024.1/Quali-API/Quali%20REST%20API.html "Quali API REST Reference Guide"). + For the complete list of Quali API REST functions, see [Quali API REST Reference Guide](pathname:///api-docs/latest/Quali-API/Quali%20REST%20API.html "Quali API REST Reference Guide"). :::note Notes for Quali REST API: - Input parameters must be in JSON format. diff --git a/docs/api-guide/shell-dev-blueprint-design-api/cs-automation-api.md b/docs/api-guide/shell-dev-blueprint-design-api/cs-automation-api.md index c17dd37cd4..fb62457ddf 100644 --- a/docs/api-guide/shell-dev-blueprint-design-api/cs-automation-api.md +++ b/docs/api-guide/shell-dev-blueprint-design-api/cs-automation-api.md @@ -17,10 +17,50 @@ The CloudShell Automation API package includes the following API modules for use The CloudShell Automation API reference documentation comes in two versions: -The Python package [API guide](pathname:///api-docs/2024.1/Python-API/) includes additional information like class structure and return objects and is intended for experienced Python developers, while the [TestShell API Python Reference Guide](pathname:///api-docs/2024.1/TestShell-API/TestShell%20Python%20API.html) is intended for developers who are newer to Python, as it features an easy to understand format and code examples. +The Python package [API guide](pathname:///api-docs/latest/Python-API/) includes additional information like class structure and return objects and is intended for experienced Python developers, while the [TestShell API Python Reference Guide](pathname:///api-docs/latest/TestShell-API/TestShell%20Python%20API.html) is intended for developers who are newer to Python, as it features an easy to understand format and code examples. :::note -CloudShell Automation API uses UTC timezone by default, but you can change to a different timezone using the [CloudShellAPISession](pathname:///api-docs/2024.1/Python-API/cloudshell.api.html#cloudshell.api.cloudshell_api.CloudShellAPISession). +CloudShell Automation API uses UTC timezone by default, but you can change to a different timezone using the [CloudShellAPISession](pathname:///api-docs/latest/Python-API/cloudshell.api.html#cloudshell.api.cloudshell_api.CloudShellAPISession). ::: -For information about installing Python and pip, and for further information about using Python scripts and drivers, see [The CloudShell DevGuide](../../devguide/index.md). \ No newline at end of file +For information about installing Python and pip, and for further information about using Python scripts and drivers, see [The CloudShell DevGuide](../../devguide/index.md). + +## New API Methods + +### UndeployApps *(Added in CloudShell 2024.1)* + +The `UndeployApps` method removes an App's deployed instance from the cloud provider while keeping the CloudShell resource intact. This is useful in bulk deletion scenarios where you want to batch delete-instance commands on the cloud provider side rather than tearing down each App individually. + +**Method signature:** + +```python +session.UndeployApps(reservationId, appNames) +``` + +| Parameter | Description | +| --- | --- | +| `reservationId` | The ID of the sandbox containing the Apps. `(string)` | +| `appNames` | A list of App names to undeploy. `(list of strings)` | + +:::note +After calling `UndeployApps`, the App resources remain in the sandbox in an "undeployed" state and can be re-deployed later if needed. +::: + +### RemoveEntitiesFromTopology *(Added in CloudShell 2025.1)* + +The `RemoveEntitiesFromTopology` method programmatically removes services and abstract resources from a topology (blueprint). This enables automation of blueprint management workflows. + +**Method signature:** + +```python +session.RemoveEntitiesFromTopology(topologyFullPath, entityNames) +``` + +| Parameter | Description | +| --- | --- | +| `topologyFullPath` | The full path of the topology/blueprint. `(string)` | +| `entityNames` | A list of entity names (services or abstract resources) to remove from the topology. `(list of strings)` | + +:::note +This method only removes services and abstract resources. Physical resources connected to the blueprint must be removed using other methods. +::: \ No newline at end of file diff --git a/docs/api-guide/shell-dev-blueprint-design-api/testshell-api.md b/docs/api-guide/shell-dev-blueprint-design-api/testshell-api.md index 278e8592ee..e5956c0d8d 100644 --- a/docs/api-guide/shell-dev-blueprint-design-api/testshell-api.md +++ b/docs/api-guide/shell-dev-blueprint-design-api/testshell-api.md @@ -12,19 +12,19 @@ The TestShell API provided implementations are available from the following link - **TestShell API Library**: The TestShell API library is available by default in TestShell Authoring tools, and can be added as a DLL asset to a project in CloudShell Authoring, the driver builder. -For the complete list of TestShell API Library functions, see [TestShell API Library Reference Guide](pathname:///api-docs/2024.1/TestShell-API/TestShell%20API%20Library.html). +For the complete list of TestShell API Library functions, see [TestShell API Library Reference Guide](pathname:///api-docs/latest/TestShell-API/TestShell%20API%20Library.html). - **TestShell C# API**: It is possible to add the TestShell API library to a C# project and use its methods. - For the complete list of TestShell API C# functions, see [TestShell API C# Reference Guide](pathname:///api-docs/2024.1/TestShell-API/TestShell%20cSharp%20API.html). + For the complete list of TestShell API C# functions, see [TestShell API C# Reference Guide](pathname:///api-docs/latest/TestShell-API/TestShell%20cSharp%20API.html). - **TestShell TCL API**: Each CloudShell version comes with a TCL client that supports all the TestShell API methods using TCL syntax. The TCL client can be found in `%InstallationFolder%\Integration\TestShell API\TestShell TCL API`. - For the complete list of TestShell API TCL functions, see [TestShell API TCL Reference Guide](pathname:///api-docs/2024.1/TestShell-API/TestShell%20TCL%20API.html "TestShell API TCL Reference Guide") + For the complete list of TestShell API TCL functions, see [TestShell API TCL Reference Guide](pathname:///api-docs/latest/TestShell-API/TestShell%20TCL%20API.html "TestShell API TCL Reference Guide") - **TestShell XML RPC API**: Direct XML (Remote Procedure Call) RPC commands are also supported for TestShell API methods. When using XML RPC API, the data needs to be wrapped in a specific way and sent to the relevant port in the server. To test XML RPC API, Quali uses an internal tool that creates this wrap automatically, and so you only need to insert the parameters for the various methods. - For the complete list of TestShell API XML RPC functions, see [TestShell API XML RPC Reference Guide](pathname:///api-docs/2024.1/TestShell-API/TestShell%20XML%20RPC%20API.html "TestShell API XML RPC Reference Guide"). + For the complete list of TestShell API XML RPC functions, see [TestShell API XML RPC Reference Guide](pathname:///api-docs/latest/TestShell-API/TestShell%20XML%20RPC%20API.html "TestShell API XML RPC Reference Guide"). The TestShell API library is a DLL file that is loaded to the database. (You can view and edit the library file and version in the **Libraries** tab in the TestShell Studio while logged as an admin.) diff --git a/docs/devguide/available-cs-api/automate-cs-sandboxes-for-devops.md b/docs/devguide/available-cs-api/automate-cs-sandboxes-for-devops.md index c3a7437a8f..047c7d9b11 100644 --- a/docs/devguide/available-cs-api/automate-cs-sandboxes-for-devops.md +++ b/docs/devguide/available-cs-api/automate-cs-sandboxes-for-devops.md @@ -25,7 +25,7 @@ The Sandbox API live documentation page is installed with CloudShell. To access #### CloudShell Automation API -The latest Automation API online help is available [here](pathname:///api-docs/2024.1/Python-API). +The latest Automation API online help is available [here](pathname:///api-docs/latest/Python-API). When using the cloudshell\-automation-api package, make sure to install the version of the API which is compatible with your CloudShell version. To make the task of finding the right version easier, this package follows a versioning schema different from other CloudShell packages. The major and minor version of the cloudshell\-automation-api package will always match the CloudShell release its compatible with. Therefore, to install the latest compatible version you need to add these version requirements when installing from pip. diff --git a/docs/devguide/available-cs-api/index.md b/docs/devguide/available-cs-api/index.md index e42642d375..f296ab2cc7 100644 --- a/docs/devguide/available-cs-api/index.md +++ b/docs/devguide/available-cs-api/index.md @@ -14,7 +14,7 @@ For implementation examples, visit our [TeamCity](https://github.com/QualiSyste ## CloudShell Automation API -CloudShell Automation API is a Python open source package you can use to develop CloudShell orchestration and automation capabilities. Using the CloudShell Automation API, you can design orchestration scripts that communicate and run operations on CloudShell, from administrative operations like adding users, to sandbox-level operations like provisioning resources, resolving connectivity and running health check on the sandbox’s elements. For additional information, see [CloudShell Automation API](../../api-guide/shell-dev-blueprint-design-api/cs-automation-api.md) and [CloudShell Automation API Reference Guide](pathname:///api-docs/2024.1/Python-API). +CloudShell Automation API is a Python open source package you can use to develop CloudShell orchestration and automation capabilities. Using the CloudShell Automation API, you can design orchestration scripts that communicate and run operations on CloudShell, from administrative operations like adding users, to sandbox-level operations like provisioning resources, resolving connectivity and running health check on the sandbox’s elements. For additional information, see [CloudShell Automation API](../../api-guide/shell-dev-blueprint-design-api/cs-automation-api.md) and [CloudShell Automation API Reference Guide](pathname:///api-docs/latest/Python-API). Note that since CloudShell Automation API can perform sandbox and CloudShell\-level operations, it mostly applies to orchestration scripts and is not recommended to be used in shells. Having said that, there are two methods in the API that apply directly to shells: WriteMessageToReservationOutput allows the driver to print messages in real time to the output console, and SetResourceLiveStatus allows the driver to indicate the resource’s state with an icon. For example, online and offline. @@ -28,13 +28,13 @@ The **TestShell API** allows designing orchestration and automation using C#, For additional information, see the appropriate TestShell API Reference Guide: -- [TestShell API Library Reference Guide](pathname:///api-docs/2024.1/testshell-api/TestShell%20API%20Library.html) +- [TestShell API Library Reference Guide](pathname:///api-docs/latest/testshell-api/TestShell%20API%20Library.html) -- [TestShell API C# Reference Guide](pathname:///api-docs/2024.1/testshell-api/TestShell%20cSharp%20API.html) +- [TestShell API C# Reference Guide](pathname:///api-docs/latest/testshell-api/TestShell%20cSharp%20API.html) -- [TestShell API TCL Reference Guide](pathname:///api-docs/2024.1/testshell-api/TestShell%20TCL%20API.html) +- [TestShell API TCL Reference Guide](pathname:///api-docs/latest/testshell-api/TestShell%20TCL%20API.html) -- [TestShell API XML RPC Reference Guide](pathname:///api-docs/2024.1/testshell-api/TestShell%20XML%20RPC%20API.html) +- [TestShell API XML RPC Reference Guide](pathname:///api-docs/latest/testshell-api/TestShell%20XML%20RPC%20API.html) ## Quali API @@ -43,11 +43,11 @@ Quali API allows you to automate the scheduling and queuing of test automation s For additional information, see the appropriate Quali API Reference Guide: -- [Quali API Library Reference Guide](pathname:///api-docs/2024.1/quali-api/Quali%20API%20Library.html) +- [Quali API Library Reference Guide](pathname:///api-docs/latest/quali-api/Quali%20API%20Library.html) -- [Quali API C# Reference Guide](pathname:///api-docs/2024.1/quali-api/Quali%20cSharp%20API.html) +- [Quali API C# Reference Guide](pathname:///api-docs/latest/quali-api/Quali%20cSharp%20API.html) -- [Quali API REST Reference Guide](pathname:///api-docs/2024.1/quali-api/Quali%20REST%20API.html) +- [Quali API REST Reference Guide](pathname:///api-docs/latest/quali-api/Quali%20REST%20API.html) ## Packaging API diff --git a/docs/devguide/developing-shells/override-old-shell-attributes.md b/docs/devguide/developing-shells/override-old-shell-attributes.md index 6b6bab8222..44638d0964 100644 --- a/docs/devguide/developing-shells/override-old-shell-attributes.md +++ b/docs/devguide/developing-shells/override-old-shell-attributes.md @@ -6,6 +6,10 @@ sidebar_position: 13 By default, CloudShell does not allow updating a shell if the newer version is missing attributes that exist on the old version. However, you can remove this limitation to allow the update of an old shell containing attributes that have been deprecated or are no longer in use. +:::tip Supported Standards (2026.1+) +Starting with CloudShell 2026.1, the `deprecate_properties` capability is supported across **all** CloudShell resource standards, including broadband media, cloud provider, custom service, generic resource, traffic generator, and others. Previously, this capability only worked on a subset of core standards, which could cause `shellfoundry install` to fail when using deprecated property definitions on other standards. +::: + ## Allowing overriding attributes on the shell's root 1. Open the `shell-definition.yaml` in your preferred IDE: diff --git a/docs/devguide/reference/common-cs-packages.md b/docs/devguide/reference/common-cs-packages.md index a1df5fa082..44bb624a68 100644 --- a/docs/devguide/reference/common-cs-packages.md +++ b/docs/devguide/reference/common-cs-packages.md @@ -16,7 +16,7 @@ This article lists the basic Python packages you would need for shells and scrip | Package | Python version | Description | Links | | --- | --- | --- | --- | | cloudshell\-orch-core | Python 2/3 | Package for writing CloudShell orchestration scripts. For additional information, see [Best Practices for working with orchestration scripts](../develop-orch-scripts/getting-started-with-orch-scripts.md#best-practices-for-working-with-orchestration-scripts). | [PyPi](https://pypi.org/project/cloudshell-orch-core/)/[GitHub](https://github.com/QualiSystems/cloudshell-orch-core) | -| cloudshell\-automation-api | Python 2/3 | Package for working with CloudShell Automation API. | [PyPi](https://pypi.org/project/cloudshell-automation-api/)/[Documentation](pathname:///api-docs/2024.1/Python-API/) | +| cloudshell\-automation-api | Python 2/3 | Package for working with CloudShell Automation API. | [PyPi](https://pypi.org/project/cloudshell-automation-api/)/[Documentation](pathname:///api-docs/latest/Python-API/) | | cloudshell\-logging | Python 2/3 | Package for creating shell loggers. | [PyPi](https://pypi.org/project/cloudshell-logging)/[GitHub](https://github.com/QualiSystems/cloudshell-logging) | | cloudshell\-core | Python 2 | Legacy logging package (replaced with *cloudshell\-logging* in version 9.3). | [PyPi](https://pypi.org/project/cloudshell-core/)/[GitHub](https://github.com/QualiSystems/cloudshell-core) | | cloudshell\-snmp | Python 2/3 | Package for developing shell communication with devices via SNMP. | [PyPi](https://pypi.org/project/cloudshell-snmp/)/[GitHub](https://github.com/QualiSystems/cloudshell-snmp) | 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 6fa2941b03..ea438441cf 100644 --- a/docs/install-configure/cs-system-requirements/third-party-software.md +++ b/docs/install-configure/cs-system-requirements/third-party-software.md @@ -19,13 +19,25 @@ If any of the below 3rd Party components are missing from your computer, the Clo - Microsoft Visual C++ Runtime 10.0 - Microsoft Visual C++ 14.0 or greater - Microsoft Windows Installer 4.5 -- Node.js 18.13.0 +- 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 - RabbitMQ 3.12.0 (installed as part of the Quali Server installation) -- Erlang 25.2.3 +- Erlang 26.2.3 - VCTools++ (For all users. Required for compiling Python dependencies) -- Apache HTTP Server 2.4.54 +- Apache HTTP Server 2.4.66 + +:::info Version updates in CloudShell 2026.1 +The following bundled prerequisites were updated: +- **Apache httpd**: 2.4.65 → 2.4.66 (OpenSSL security fixes) +- **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 + +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. +::: ## Optional diff --git a/docs/install-configure/linux-virtual-appliance/installation-procedure/create-es-from-docker.md b/docs/install-configure/linux-virtual-appliance/installation-procedure/create-es-from-docker.md index 1d73922b89..e8b9965c99 100644 --- a/docs/install-configure/linux-virtual-appliance/installation-procedure/create-es-from-docker.md +++ b/docs/install-configure/linux-virtual-appliance/installation-procedure/create-es-from-docker.md @@ -4,6 +4,8 @@ sidebar_position: 4 # Create Execution Server On Any Linux VM Using Docker +*Since CloudShell 2026.1*, the Docker Execution Server image uses a consolidated Dockerfile with Python 3 virtualenv support and TLS/Kerberos compatibility fixes, providing a more robust and consistent deployment. + **Prerequisites:** - Docker installed on any Docker supported Linux VM: https://docs.docker.com/engine/install/ @@ -48,6 +50,24 @@ sudo docker run -d --name ExecutionServer --restart unless-stopped -p 5093:5093 :::warning Inside PARAMS="" you need to specify your Cloudshell server IP, Cloudshell Admin username, password, desirable name for the Execution Server. Example: -e PARAMS="192.168.25.4,admin,admin,ES-Docker" ::: + +## Passing Attributes to the Docker Execution Server + +*Added in CloudShell 2026.1* + +The Docker Execution Server supports passing CloudShell attributes to containers via environment variables. This allows you to configure driver behavior through CloudShell attributes when running in Docker. + +To pass attributes, add `-e` flags to the `docker run` command using the format `ATTRIBUTE_=`: + +```javascript +sudo docker run -d --name ExecutionServer --restart unless-stopped -p 5093:5093 \ + -e PARAMS="192.168.25.4,admin,admin,ES-Docker" \ + -e ATTRIBUTE_MyAttribute="MyValue" \ + -e ATTRIBUTE_Region="US-East" \ + -v ~/customer.config:/opt/ExecutionServer/customer.config qualihub/executionserver +``` + +These attributes are then available to drivers and scripts running on this Execution Server, enabling environment-specific configuration without modifying the driver code. :::info - If you want to specify the version, you can edit the end of the command to include the version number. Example: qualihub/executionserver:2024.1 - See what versions are available here: https://hub.docker.com/r/qualihub/executionserver/tags diff --git a/docs/install-configure/linux-virtual-appliance/installation-procedure/index.md b/docs/install-configure/linux-virtual-appliance/installation-procedure/index.md index 955b710e5f..20a6aefcbf 100644 --- a/docs/install-configure/linux-virtual-appliance/installation-procedure/index.md +++ b/docs/install-configure/linux-virtual-appliance/installation-procedure/index.md @@ -10,6 +10,6 @@ This chapter explains how to install **CloudShell Execution Server Linux Virtual - For Linux KVM users: [Create VM using the qcow2 Image File (KVM)](./create-es-from-qcow2.md) - If you already have an available Linux VM: - [Create the Linux Execution Server from a Script](./create-es-from-script.md) - - [Create Execution Server On Any Linux VM Using Docker](./create-es-from-docker.md)(CloudShell 2024.1 and above) + - [Create Execution Server On Any Linux VM Using Docker](./create-es-from-docker.md) 2. Perform the post installation procedures described here: [Post Installation](../../install-configure/linux-virtual-appliance/post-installation). \ No newline at end of file diff --git a/docs/intro/Term.md b/docs/intro/Term.md index 6d4c2efb68..ad0d4f68ae 100644 --- a/docs/intro/Term.md +++ b/docs/intro/Term.md @@ -118,7 +118,7 @@ The term "package" may refer to blueprint package, shell package or Python packa - [Packaging API](../api-guide/packaging-api/index.md) (API for automating the creation and configuration of blueprint packages) - - [Export Package](pathname:///api-docs/2024.1/Quali-API/Quali%20API%20Library.html#Export%20Package) (export a blueprint package into CloudShell via Quali API ) + - [Export Package](pathname:///api-docs/latest/Quali-API/Quali%20API%20Library.html#Export%20Package) (export a blueprint package into CloudShell via Quali API ) - Shell package contains the definition of a shell, which can be imported into CloudShell. For details, see [Shells Overview](../intro/features/shells.md). diff --git a/docs/portal/blueprints/creating-blueprints/add-user-inputs.md b/docs/portal/blueprints/creating-blueprints/add-user-inputs.md index 971391690a..532a2612c0 100644 --- a/docs/portal/blueprints/creating-blueprints/add-user-inputs.md +++ b/docs/portal/blueprints/creating-blueprints/add-user-inputs.md @@ -43,7 +43,7 @@ Global inputs are a simple way to request information from the user when they re - Setup scripts that use global inputs with empty spaces before or after the input value may sometimes fail. - When a single Lookup attribute is linked, all of the attribute's values are available for selection from the input. However, when linked to multiple Lookup attributes, the input will only contain values that are both published (on the abstract resource or service) and shared by all linked attributes. ::: -- A **Password** input accepts a freetext password value. The value is displayed as a masked value (\*\*\*\*\*). This type of global input cannot be linked to other inputs. Note that the value can be decrypted using the CloudShell Automation API's [DecryptPassword](pathname:///api-docs/2024.1/Python-API/cloudshell.api.html?highlight=decryptpassword#cloudshell.api.cloudshell_api.CloudShellAPISession.DecryptPassword) method. +- A **Password** input accepts a freetext password value. The value is displayed as a masked value (\*\*\*\*\*). This type of global input cannot be linked to other inputs. Note that the value can be decrypted using the CloudShell Automation API's [DecryptPassword](pathname:///api-docs/latest/Python-API/cloudshell.api.html?highlight=decryptpassword#cloudshell.api.cloudshell_api.CloudShellAPISession.DecryptPassword) method. :::tip Tip for admins It is possible to resize the global text boxes of the global inputs. For details, see [Resizing the value box of "text" global inputs](../../../admin/setting-up-cloudshell/cloudshell-configuration-options/resizing-the-value-box-of-text-global-inputs.md). diff --git a/docs/portal/blueprints/creating-blueprints/duplicate-blueprint.md b/docs/portal/blueprints/creating-blueprints/duplicate-blueprint.md index c1e173c947..4787c5f306 100644 --- a/docs/portal/blueprints/creating-blueprints/duplicate-blueprint.md +++ b/docs/portal/blueprints/creating-blueprints/duplicate-blueprint.md @@ -13,10 +13,12 @@ This article explains how to create an exact copy of an existing blueprint, incl ![](/Images/CloudShell-Portal/Lab-Management/Environments/BlueprintSaveCopy.png) +3. In the confirmation dialog, click **OK** to proceed. + The new blueprint's properties page is displayed. -3. Rename the blueprint as appropriate and make the necessary changes. -4. Click **Update** at the bottom right of the page. +4. Rename the blueprint as appropriate and make the necessary changes. +5. Click **Update** at the bottom right of the page. ## Related Topics diff --git a/docs/portal/blueprints/creating-blueprints/resources/update-resource-attr.md b/docs/portal/blueprints/creating-blueprints/resources/update-resource-attr.md index 889e7597a8..b02aded98f 100644 --- a/docs/portal/blueprints/creating-blueprints/resources/update-resource-attr.md +++ b/docs/portal/blueprints/creating-blueprints/resources/update-resource-attr.md @@ -8,8 +8,8 @@ You can prepare or assign, from within the blueprint workspace, resource attribu :::note **Points to consider:** CloudShell does not automatically set the new values on the resource, as it does when you set custom resource attribute values in the sandbox. -- You need to first apply the changes using the [Activate-topology](pathname:///api-docs/2024.1/Python-API/cloudshell.api.html?highlight=activatetopology#cloudshell.api.cloudshell_api.CloudShellAPISession.ActivateTopology) API, which can be added to the setup flow. Please take into account that this API will also trigger the connection of all the L1 routes. -- Alternatively, you can read the updated values from the blueprint's information using the [GetTopologyDetails](pathname:///api-docs/2024.1/Python-API/cloudshell.api.html?highlight=gettopologydetails#cloudshell.api.cloudshell_api.CloudShellAPISession.GetTopologyDetails) API, and either use it to set the values on the resource or just use it as part of the scripts. +- You need to first apply the changes using the [Activate-topology](pathname:///api-docs/latest/Python-API/cloudshell.api.html?highlight=activatetopology#cloudshell.api.cloudshell_api.CloudShellAPISession.ActivateTopology) API, which can be added to the setup flow. Please take into account that this API will also trigger the connection of all the L1 routes. +- Alternatively, you can read the updated values from the blueprint's information using the [GetTopologyDetails](pathname:///api-docs/latest/Python-API/cloudshell.api.html?highlight=gettopologydetails#cloudshell.api.cloudshell_api.CloudShellAPISession.GetTopologyDetails) API, and either use it to set the values on the resource or just use it as part of the scripts. ::: **To modify resource attributes:** diff --git a/docs/portal/blueprints/creating-blueprints/save-as-template.md b/docs/portal/blueprints/creating-blueprints/save-as-template.md index dbdd9b4910..f411f34d09 100644 --- a/docs/portal/blueprints/creating-blueprints/save-as-template.md +++ b/docs/portal/blueprints/creating-blueprints/save-as-template.md @@ -17,9 +17,11 @@ This article explains how to create a template from an existing blueprint. This ![](/Images/CloudShell-Portal/Lab-Management/Environments/BlueprintSaveAsTemplate.png) +3. In the confirmation dialog, click **OK** to proceed. + The new blueprint template is displayed. -3. Make the necessary changes. +4. Make the necessary changes. ## Related Topics diff --git a/docs/portal/blueprints/opening-blueprints.md b/docs/portal/blueprints/opening-blueprints.md index 332eaf044d..4ec6e9ee95 100644 --- a/docs/portal/blueprints/opening-blueprints.md +++ b/docs/portal/blueprints/opening-blueprints.md @@ -27,7 +27,7 @@ Both methods only apply to blueprints you are permitted to access. These include To allow CloudShell users to conveniently share and collaborate on blueprints and sandboxes, we implemented support for opening blueprint and sandbox URLs in the diagram's domain, even if CloudShell Portal is currently open in a different domain. This option is enabled by default and can be disabled using the `AutoSwitchDomain` admin key. :::note -Since blueprint URLs do not include the blueprint's domain, the URLs need to be generated using the `GetTopologyUrls` API method, which includes this information in the link. The method is available in the [CloudShell Automation API](pathname:///api-docs/2024.1/Python-API/cloudshell.api.html?highlight=gettopologyurls#cloudshell.api.cloudshell_api.CloudShellAPISession.GetTopologyUrls) and [TestShell API](pathname:///api-docs/2024.1/TestShell-API/TestShell%20XML%20RPC%20API.html#GetTopologyUrls). +Since blueprint URLs do not include the blueprint's domain, the URLs need to be generated using the `GetTopologyUrls` API method, which includes this information in the link. The method is available in the [CloudShell Automation API](pathname:///api-docs/latest/Python-API/cloudshell.api.html?highlight=gettopologyurls#cloudshell.api.cloudshell_api.CloudShellAPISession.GetTopologyUrls) and [TestShell API](pathname:///api-docs/latest/TestShell-API/TestShell%20XML%20RPC%20API.html#GetTopologyUrls). ::: **To open a blueprint link:** diff --git a/docs/portal/sandboxes/sandbox-workspace/export-diagrams-and-connections.md b/docs/portal/sandboxes/sandbox-workspace/export-diagrams-and-connections.md index 2968512995..a3aa82d850 100644 --- a/docs/portal/sandboxes/sandbox-workspace/export-diagrams-and-connections.md +++ b/docs/portal/sandboxes/sandbox-workspace/export-diagrams-and-connections.md @@ -14,6 +14,21 @@ This topic describes how to export a PDF file illustrating the diagram. This in 2. In the sandbox workspace, click the **Sandbox** menu and select **Export Diagram (pdf)**. 3. Save the package zip file in the required location. +## Exporting Diagram as PNG + +*New in CloudShell 2026.2* + +You can export the sandbox diagram as a PNG image file: + +1. In the sandbox workspace, click **Export** in the diagram toolbar. +2. Select **PNG**. + +The diagram is captured at full resolution regardless of your current zoom level. The exported image includes all visible resources, connections, and annotations. + +:::note +PNG export captures the diagram as rendered in your browser. For a print-quality export, use the PDF option. +::: + ## Exporting Connections This topic describes how to export a CSV file of the connections between the resources, services and Apps in the diagram. Note that connections involving abstract resources are not included in the CSV. diff --git a/docs/portal/sandboxes/sandbox-workspace/index.md b/docs/portal/sandboxes/sandbox-workspace/index.md index 6e96257012..c1bfa6fe9e 100644 --- a/docs/portal/sandboxes/sandbox-workspace/index.md +++ b/docs/portal/sandboxes/sandbox-workspace/index.md @@ -135,6 +135,15 @@ Downloading attached files is available only to permitted users. The file is downloaded to your local drive. If the file type is identified, it will automatically open once the download is complete. +### Sticky notes + +You can add sticky notes to the sandbox diagram canvas to clarify requirements and communicate important information to other sandbox users. + +Sticky notes support the following features: + +- **Color selection**: Choose a color for each sticky note to visually categorize or prioritize notes in the sandbox. +- **Activity feed notifications**: When a sticky note is updated, a notification appears in the sandbox's activity feed, keeping collaborators informed of changes. + ### Custom sandbox data Starting with CloudShell 9.2, it is possible to add custom data to the sandbox to be used by automation processes running in the sandbox. Note that this information is not presented in CloudShell Portal and can only be managed via the API. For additional information, see CloudShell Dev Guide's [Custom Sandbox Metadata](../../../devguide/reference/custom-sandbox-metadata.md). \ No newline at end of file diff --git a/docs/portal/sandboxes/sandbox-workspace/system-messages/activity-feed-pane.md b/docs/portal/sandboxes/sandbox-workspace/system-messages/activity-feed-pane.md index b10e8bf8a9..d7236c7ecb 100644 --- a/docs/portal/sandboxes/sandbox-workspace/system-messages/activity-feed-pane.md +++ b/docs/portal/sandboxes/sandbox-workspace/system-messages/activity-feed-pane.md @@ -13,6 +13,10 @@ The **Activity Feed** also enables you to display information for a specific com - The retention period for sandbox events data is controlled by the `SandboxLogAndOutputSaveDuration` admin configuration key. ::: +:::tip +Text in the Activity Feed pane is selectable and can be copied to the clipboard. This also applies to other side panels such as resource information and connection properties. +::: + **To open the Activity Feed:** 1. In the **Diagram** toolbar of the Sandbox workspace, click the ![](/Images/CloudShell-Portal/Lab-Management/Reservations/ResActivityPaneButton.png) button. diff --git a/docs/portal/sandboxes/sandboxes-dashboard.md b/docs/portal/sandboxes/sandboxes-dashboard.md index d2f065ec6d..abbfe4d34e 100644 --- a/docs/portal/sandboxes/sandboxes-dashboard.md +++ b/docs/portal/sandboxes/sandboxes-dashboard.md @@ -4,7 +4,7 @@ sidebar_position: 1 # Sandboxes Dashboard -The Sandboxes dashboard displays current, future and historic sandboxes that either you created or were created by users within domains you are permitted to access. It provides an overview of the current state of each sandbox, and a central place from which you can view and access sandboxes. Sandboxes are colored according to their present state - see [Filtering sandbox state (Administrators only)](#filtering-sandbox-state-administrators-only). +The Sandboxes dashboard displays current, future and historic sandboxes that either you created or were created by users within domains you are permitted to access. It provides an overview of the current state of each sandbox, and a central place from which you can view and access sandboxes. Sandboxes are colored according to their present state - see [Filtering sandbox state](#filtering-sandbox-state). There are two types of environments in CloudShell Pro and both are displayed and managed from the Sandboxes dashboard: regular time-limited sandbox environments and persistent environments that have no end time. For details, see [Persistent Sandboxes Overview](../../intro/features/persistent-sandboxes.md). @@ -65,9 +65,9 @@ The **Sandboxes** filter group in the left sidebar allows users to select one or - Scheduled - Shows only sandboxes scheduled for a future time - Historic - Shows only completed sandboxes -#### Filtering sandbox state (Administrators only) +#### Filtering sandbox state -The State filter group is visible to administrators only. It enables you to filter sandboxes by their current state. The sandbox state can be one of the following: +The State filter group enables you to filter sandboxes by their current state. It is visible for all domain types. The sandbox state can be one of the following: | State | Description | | --- | --- | diff --git a/docs/release-notes/_category_.json b/docs/release-notes/_category_.json index 7cc71806da..0b68e979ee 100644 --- a/docs/release-notes/_category_.json +++ b/docs/release-notes/_category_.json @@ -1,4 +1,4 @@ { - "label": "CloudShell 2024.1 Release Notes", + "label": "CloudShell Release Notes", "position": 12 } diff --git a/docs/release-notes/behavior-change.md b/docs/release-notes/behavior-change.md index 2018708fae..166863ae9b 100644 --- a/docs/release-notes/behavior-change.md +++ b/docs/release-notes/behavior-change.md @@ -38,4 +38,22 @@ The following list includes capabilities that have been removed from CloudShell | Partial search in sandboxes dashboard | The **Sandboxes** dashboard does not support searching by partial sandbox id. | 2021.2 EA | | Blueprint Build Type - Deprecation | It is no longer possible to reserve blueprints of type _Build_. | 2020.2 GA | | Licensing | As of version 9.3, customers that have a Team Tier license will not be able to:
  • 1. Have more than 50 concurrent licenses
  • 2. Use white labeling
  • 3. SSO to the system
| 9.3 GA | -| Licensing | Customers that will not have a job scheduling add-on license will not see the job scheduling tab in the portal, and will not be able to start jobs using API calls. | 9.3 GA | \ No newline at end of file +| Licensing | Customers that will not have a job scheduling add-on license will not see the job scheduling tab in the portal, and will not be able to start jobs using API calls. | 9.3 GA | + +## Version 2026.2 + +### Server Defaults Changed +- `UseRabbitServer` now defaults to `false` (previously `true`) +- `UseEmbeddedSandboxService` now defaults to `false` (previously `true`) + +If your deployment relies on RabbitMQ for server events or the embedded sandbox service, you must explicitly set these to `true` in your `customer.config` after upgrading. + +## Version 2026.1 + +### Node.js x86 Support Removed +Node.js 24 dropped 32-bit (x86) Windows support. The x86 Node.js prerequisite has been removed from the CloudShell installer. Environments running 32-bit Windows for CloudShell components that require Node.js (Sandbox API Gateway) must migrate to 64-bit. + +### Third-Party Component Major Version Changes +- **Erlang OTP**: 25.2.3 → 26.2.3 — If you have custom Erlang or RabbitMQ configurations, verify compatibility after upgrade +- **MongoDB**: 6.0.4 → 7.0.30 — If using standalone MongoDB (not installer-managed), upgrade MongoDB to 7.0.x before upgrading CloudShell +- **Node.js**: 22.15.0 → 24.14.0 — Major version jump; custom JS scripts in Sandbox API Gateway should be verified \ No newline at end of file diff --git a/docs/release-notes/index.md b/docs/release-notes/index.md index e82a938743..208f809f9b 100644 --- a/docs/release-notes/index.md +++ b/docs/release-notes/index.md @@ -1,8 +1,8 @@ -# CloudShell 2024.1 Release Notes +# CloudShell Release Notes ## Planning to upgrade? -You can upgrade to CloudShell 2024.1 from any CloudShell version [that is under support](./supported-versions.md) (either Premier or Extended support phases). To upgrade from a version that is no longer supported, contact your Technical Account Manager. +You can upgrade to CloudShell from any CloudShell version [that is under support](./supported-versions.md) (either Premier or Extended support phases). To upgrade from a version that is no longer supported, contact your Technical Account Manager. Before performing an upgrade, please make sure to review the [CloudShell System Requirements](../install-configure/cs-system-requirements/index.md) and [Known Upgrade Issues](../install-configure/cloudshell-suite/appendix/known-upgrade-issues.md). diff --git a/docs/release-notes/supported-versions.md b/docs/release-notes/supported-versions.md index 54e62c62d5..bbcacaa679 100644 --- a/docs/release-notes/supported-versions.md +++ b/docs/release-notes/supported-versions.md @@ -14,20 +14,22 @@ CloudShell offers two support phases: | Release | GA Version release date | End of Premier support (18 months) | End of Extended support (30 months) | | --- | --- | --- | --- | -| 2024.1 | August 2024 | Feb 1, 2026 | Feb 1, 2027 | -| 2023.3 | December 2023 | July 1, 2025 | July 1, 2026 | -| 2023.2 | July 2023 | Feb 1, 2025 | Feb 1, 2026 | -| 2023.1 | March 2023 | Oct 1, 2024 | Oct 1, 2025 | -| 2022.2 | September 2022 | Apr 1, 2024 | Apr 1, 2025 | -| 2022.1 | February 2022 | Sept 1, 2023 | Sept 1, 2024 | -| 2021.2 | August 2021 | Jan 1, 2023 | Jan 1, 2024 | -| 2021.1 | April 2021 | Nov 1, 2022 | Nov 1, 2023 | +| 2026.1 | March 2026 | September 1, 2027 | September 1, 2028 | +| 2025.1 | November 2025 | May 1, 2027 | May 1, 2028 | +| 2024.1 | August 2024 | February 1, 2026 | February 1, 2027 | +| 2023.3 | December 2023 | July 1, 2025 | July 1, 2026 | +| 2023.2 | July 2023 | February 1, 2025 | February 1, 2026 | +| 2023.1 | March 2023 | October 1, 2024 | October 1, 2025 | +| 2022.2 | September 2022 | April 1, 2024 | April 1, 2025 | +| 2022.1 | February 2022 | September 1, 2023 | September 1, 2024 | +| 2021.2 | August 2021 | January 1, 2023 | January 1, 2024 | +| 2021.1 | April 2021 | November 1, 2022 | November 1, 2023 | | 2020.2 | October 2020 | May 1, 2022 | May 1, 2023 | -| 2020.1 | June 2020 | Jan 1, 2022 | Jan 1, 2023 | -| 9.3 | September 2019 | Apr 1, 2021 | Apr 1, 2022 | -| 9.2 | May 2019 | Dec 1, 2020 | Dec 1, 2021 | -| 9.1 | January 2019 | Aug 1 2020 | Aug 1, 2021 | -| 9.0 | September 2018 | April 1, 2020 | Apr 1, 2021 | -| 8.3 | April 2018 | Nov 1, 2019 | Nov 1, 2020 | +| 2020.1 | June 2020 | January 1, 2022 | January 1, 2023 | +| 9.3 | September 2019 | April 1, 2021 | April 1, 2022 | +| 9.2 | May 2019 | December 1, 2020 | December 1, 2021 | +| 9.1 | January 2019 | August 1 2020 | August 1, 2021 | +| 9.0 | September 2018 | April 1, 2020 | April 1, 2021 | +| 8.3 | April 2018 | November 1, 2019 | November 1, 2020 | | 8.2 | December 2017 | July 1, 2019 | July 1, 2020 | | 8.1 | August 2017 | March 1, 2019 | March 1, 2020 | diff --git a/docs/release-notes/whats-new.md b/docs/release-notes/whats-new.md index 15f47fcd8d..8818acbb9e 100644 --- a/docs/release-notes/whats-new.md +++ b/docs/release-notes/whats-new.md @@ -2,14 +2,120 @@ sidebar_position: 2 --- -What's New in Version 2024.1 -============================ +What's New +========== -## Features and enhancements +## What's New in Version 2026.2 + +### 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. + +### Server Default Changes +- `UseRabbitServer` now defaults to `false` +- `UseEmbeddedSandboxService` now defaults to `false` + + +## What's New in 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. +::: + +### Docker Execution Server +- Consolidated Dockerfile with Python 3 virtualenv and TLS/Kerberos compatibility +- Support for passing attributes to Docker Execution Server containers + +--- + +## What's New in 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 + +--- + +## What's New in Version 2024.1 + +### Features and enhancements This release includes the following features and enhancements. -### Assembly Lab +#### Assembly Lab A radically different mode of operation for CloudShell is now available! @@ -22,25 +128,25 @@ A radically different mode of operation for CloudShell is now available! - Change solutions -#### For more information on Assembly lab, follow these links +##### 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 +#### 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 +#### 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 +#### 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 @@ -49,22 +155,24 @@ Each capability set can specifically allow or block certain capabilities, overri [For more details](../admin/setting-up-cloudshell/cloudshell-configuration-options/customizing-sandboxes-dashboard.md) -### Minimum Lead Time +#### 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 +#### API Changes -#### GetResourcesAttributeValues +##### 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 +##### GetExecutionServers & DeleteExecutionServer API calls for getting Execution Servers and removing them using automation. -#### GetResourceDetails changes +##### GetResourceDetails changes GetResourceDetails will now show Create & Modified Date for the resource. + +--- \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index b512c8ff2a..5691ac2231 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,16 +15,16 @@ "@docusaurus/preset-classic": "^3.5.2", "@easyops-cn/docusaurus-search-local": "^0.44.5", "@mdx-js/react": "^3.0.0", - "@swc/core": "^1.7.14", "clsx": "^2.0.0", "prism-react-renderer": "^2.3.0", "react": "^18.0.0", - "react-dom": "^18.0.0", - "swc-loader": "^0.2.6" + "react-dom": "^18.0.0" }, "devDependencies": { "@docusaurus/module-type-aliases": "^3.5.2", - "@docusaurus/types": "^3.5.2" + "@docusaurus/types": "^3.5.2", + "@swc/core": "^1.15.32", + "swc-loader": "^0.2.7" }, "engines": { "node": ">=18.0" @@ -3729,13 +3729,15 @@ } }, "node_modules/@swc/core": { - "version": "1.7.14", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.14.tgz", - "integrity": "sha512-9aeXeifnyuvc2pcuuhPQgVUwdpGEzZ+9nJu0W8/hNl/aESFsJGR5i9uQJRGu0atoNr01gK092fvmqMmQAPcKow==", + "version": "1.15.32", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.32.tgz", + "integrity": "sha512-/eWL0n43D64QWEUHLtTE+jDqjkJhyidjkDhv6f0uJohOUAhywxQ9wXYp845DNNds0JpCdI4Uo0a9bl+vbXf+ew==", + "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.12" + "@swc/types": "^0.1.26" }, "engines": { "node": ">=10" @@ -3745,19 +3747,21 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.7.14", - "@swc/core-darwin-x64": "1.7.14", - "@swc/core-linux-arm-gnueabihf": "1.7.14", - "@swc/core-linux-arm64-gnu": "1.7.14", - "@swc/core-linux-arm64-musl": "1.7.14", - "@swc/core-linux-x64-gnu": "1.7.14", - "@swc/core-linux-x64-musl": "1.7.14", - "@swc/core-win32-arm64-msvc": "1.7.14", - "@swc/core-win32-ia32-msvc": "1.7.14", - "@swc/core-win32-x64-msvc": "1.7.14" - }, - "peerDependencies": { - "@swc/helpers": "*" + "@swc/core-darwin-arm64": "1.15.32", + "@swc/core-darwin-x64": "1.15.32", + "@swc/core-linux-arm-gnueabihf": "1.15.32", + "@swc/core-linux-arm64-gnu": "1.15.32", + "@swc/core-linux-arm64-musl": "1.15.32", + "@swc/core-linux-ppc64-gnu": "1.15.32", + "@swc/core-linux-s390x-gnu": "1.15.32", + "@swc/core-linux-x64-gnu": "1.15.32", + "@swc/core-linux-x64-musl": "1.15.32", + "@swc/core-win32-arm64-msvc": "1.15.32", + "@swc/core-win32-ia32-msvc": "1.15.32", + "@swc/core-win32-x64-msvc": "1.15.32" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" }, "peerDependenciesMeta": { "@swc/helpers": { @@ -3766,12 +3770,14 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.7.14", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.14.tgz", - "integrity": "sha512-V0OUXjOH+hdGxDYG8NkQzy25mKOpcNKFpqtZEzLe5V/CpLJPnpg1+pMz70m14s9ZFda9OxsjlvPbg1FLUwhgIQ==", + "version": "1.15.32", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.32.tgz", + "integrity": "sha512-/YWMvJDPu+AAwuUsM2G+DNQ/7zhodURGzdQyewEqcvgklAdDHs3LwQmLLnyn6SJl8DT8UOxkbzK+D1PmPeelRg==", "cpu": [ "arm64" ], + "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "darwin" @@ -3781,12 +3787,14 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.7.14", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.14.tgz", - "integrity": "sha512-9iFvUnxG6FC3An5ogp5jbBfQuUmTTwy8KMB+ZddUoPB3NR1eV+Y9vOh/tfWcenSJbgOKDLgYC5D/b1mHAprsrQ==", + "version": "1.15.32", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.32.tgz", + "integrity": "sha512-KOTXJXdAhWL+hZ77MYP3z+4pcMFaQhQ74yqyN1uz093q0YnbxpqMtYpPISbYvMHzVRNNx5kN+9RZAXEaadhWVA==", "cpu": [ "x64" ], + "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "darwin" @@ -3796,12 +3804,14 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.7.14", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.14.tgz", - "integrity": "sha512-zGJsef9qPivKSH8Vv4F/HiBXBTHZ5Hs3ZjVGo/UIdWPJF8fTL9OVADiRrl34Q7zOZEtGXRwEKLUW1SCQcbDvZA==", + "version": "1.15.32", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.32.tgz", + "integrity": "sha512-oOoxLweljlc0A4X8ybsgxV7cVaYTwBOg2iMDJcFR3Sr48C+lsv9VzSmqdK/IVIXF4W4GjLc3VqTAdSMXlfVLuQ==", "cpu": [ "arm" ], + "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -3811,12 +3821,14 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.7.14", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.14.tgz", - "integrity": "sha512-AxV3MPsoI7i4B8FXOew3dx3N8y00YoJYvIPfxelw07RegeCEH3aHp2U2DtgbP/NV1ugZMx0TL2Z2DEvocmA51g==", + "version": "1.15.32", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.32.tgz", + "integrity": "sha512-oDzEkdl6D6BAWdMtU5KGO7y3HR5fJcvByNLyEk9+ugj8nP5Ovb7P4kBcStBXc4MPExFGQryehiINMlmY8HlclA==", "cpu": [ "arm64" ], + "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -3826,12 +3838,48 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.7.14", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.14.tgz", - "integrity": "sha512-JDLdNjUj3zPehd4+DrQD8Ltb3B5lD8D05IwePyDWw+uR/YPc7w/TX1FUVci5h3giJnlMCJRvi1IQYV7K1n7KtQ==", + "version": "1.15.32", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.32.tgz", + "integrity": "sha512-omcqjoZP/b8D8PuczVoRwJieC6ibj7qIxTftNYokz4/aSmKFHvsd7nIFfPk5ZvtzncbH4AY7+Dkr/Lp2gWxYeA==", "cpu": [ "arm64" ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-ppc64-gnu": { + "version": "1.15.32", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.32.tgz", + "integrity": "sha512-KGkTMyz/Tbn3PBNu0AVZ4GTDFKnICrYcTiNPZq8DrvK42pnFsf3GNDrIG9E5AtQlTmC0YigkWKmu0eMcfTrmgA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-s390x-gnu": { + "version": "1.15.32", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.32.tgz", + "integrity": "sha512-G3Aa4tVS/3OGZBkoNIwUF9F6RAy+Osb4GOlo62SinLmDiErz/ykmM7KH0wkz6l9kM8jJq1HyAM6atJTUEbBk7g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -3841,12 +3889,14 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.7.14", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.14.tgz", - "integrity": "sha512-Siy5OvPCLLWmMdx4msnEs8HvEVUEigSn0+3pbLjv78iwzXd0qSBNHUPZyC1xeurVaUbpNDxZTpPRIwpqNE2+Og==", + "version": "1.15.32", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.32.tgz", + "integrity": "sha512-ERsjfGcj6CBmj3vJnGDO8m8rTvw6RqMcWo1dogOtNx3/+/0+NNpJiXDobJrr1GwInI/BHAEkvSFIH6d2LqPcUQ==", "cpu": [ "x64" ], + "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -3856,12 +3906,14 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.7.14", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.14.tgz", - "integrity": "sha512-FtEGm9mwtRYQNK43WMtUIadxHs/ja2rnDurB99os0ZoFTGG2IHuht2zD97W0wB8JbqEabT1XwSG9Y5wmN+ciEQ==", + "version": "1.15.32", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.32.tgz", + "integrity": "sha512-N4Ggahe/8SUbTX50P6EdhbW9YWcgbZVb52R4cq6MK+zsoMjRq7rGvV5ztA05QnbaCYqMYx8rTY7KAIA3Crdo4Q==", "cpu": [ "x64" ], + "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -3871,12 +3923,14 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.7.14", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.14.tgz", - "integrity": "sha512-Jp8KDlfq7Ntt2/BXr0y344cYgB1zf0DaLzDZ1ZJR6rYlAzWYSccLYcxHa97VGnsYhhPspMpmCvHid97oe2hl4A==", + "version": "1.15.32", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.32.tgz", + "integrity": "sha512-01yN0o9jvo8xBTP12aPK2wW8b41jmOlGbDDlAnoynotc4pO6xA0zby9f1z6j++qXDpGBttLySq1omgVrlQKYcw==", "cpu": [ "arm64" ], + "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -3886,12 +3940,14 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.7.14", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.14.tgz", - "integrity": "sha512-I+cFsXF0OU0J9J4zdWiQKKLURO5dvCujH9Jr8N0cErdy54l9d4gfIxdctfTF+7FyXtWKLTCkp+oby9BQhkFGWA==", + "version": "1.15.32", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.32.tgz", + "integrity": "sha512-fLagI9XZYNpTcmlqAcp3KBtmj7E19WCmYD80Jxj1Kn5tGNa7yxNLd3NNdWxuZGUPl5iC0/KqZru7g08gF6Fsrw==", "cpu": [ "ia32" ], + "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -3901,12 +3957,14 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.7.14", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.14.tgz", - "integrity": "sha512-NNrprQCK6d28mG436jVo2TD+vACHseUECacEBGZ9Ef0qfOIWS1XIt2MisQKG0Oea2VvLFl6tF/V4Lnx/H0Sn3Q==", + "version": "1.15.32", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.32.tgz", + "integrity": "sha512-gbc2bQ/T2CiR+w0OvcVKwLOFAcPZBvmWmolbwpg1E8UrpeC03DGtyMUApOHNXNYWA3SHFrYXCQtosrcMza1YFg==", "cpu": [ "x64" ], + "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -3918,12 +3976,15 @@ "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true }, "node_modules/@swc/types": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.12.tgz", - "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==", + "version": "0.1.26", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.26.tgz", + "integrity": "sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" } @@ -14052,9 +14113,11 @@ } }, "node_modules/swc-loader": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.6.tgz", - "integrity": "sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.7.tgz", + "integrity": "sha512-nwYWw3Fh9ame3Rtm7StS9SBLpHRRnYcK7bnpF3UKZmesAK0gw2/ADvlURFAINmPvKtDLzp+GBiP9yLoEjg6S9w==", + "dev": true, + "license": "MIT", "dependencies": { "@swc/counter": "^0.1.3" }, diff --git a/package.json b/package.json index 62efe398bd..47848ecbcc 100644 --- a/package.json +++ b/package.json @@ -26,16 +26,16 @@ "@docusaurus/preset-classic": "^3.5.2", "@easyops-cn/docusaurus-search-local": "^0.44.5", "@mdx-js/react": "^3.0.0", - "@swc/core": "^1.7.14", "clsx": "^2.0.0", "prism-react-renderer": "^2.3.0", "react": "^18.0.0", - "react-dom": "^18.0.0", - "swc-loader": "^0.2.6" + "react-dom": "^18.0.0" }, "devDependencies": { "@docusaurus/module-type-aliases": "^3.5.2", - "@docusaurus/types": "^3.5.2" + "@docusaurus/types": "^3.5.2", + "@swc/core": "^1.15.32", + "swc-loader": "^0.2.7" }, "browserslist": { "production": [ diff --git a/static/api-docs/2023.3/Python-API/.buildinfo b/static/api-docs/2023.3/Python-API/.buildinfo deleted file mode 100644 index 35e4d7845f..0000000000 --- a/static/api-docs/2023.3/Python-API/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 25c6c9d68ece59081974bc5509b2dd63 -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/static/api-docs/2023.3/Python-API/_modules/cloudshell/api/cloudshell_api.html b/static/api-docs/2023.3/Python-API/_modules/cloudshell/api/cloudshell_api.html deleted file mode 100644 index 6349edc5e5..0000000000 --- a/static/api-docs/2023.3/Python-API/_modules/cloudshell/api/cloudshell_api.html +++ /dev/null @@ -1,5147 +0,0 @@ - - - - - - cloudshell.api.cloudshell_api — CloudShell Python API 2022.3.0.185573 documentation - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for cloudshell.api.cloudshell_api

-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-import json
-import socket
-import base64
-
-from cloudshell.api.common_cloudshell_api import CommonAPISession, CloudShellAPIError
-from cloudshell.api.common_cloudshell_api import CommonResponseInfo
-from cloudshell.api.common_cloudshell_api import CommonAPIRequest
-
-from collections import OrderedDict
-
-
-
[docs]class SecurityGroupRule(CommonAPIRequest): - def __init__(self, FromPort, ToPort, Protocol, Source): - """ - :param str FromPort: constructor parameter - :param str ToPort: constructor parameter - :param str Protocol: constructor parameter - :param str Source: constructor parameter - """ - CommonAPIRequest.__init__(self, FromPort=FromPort, ToPort=ToPort, Protocol=Protocol, Source=Source)
- -
[docs]class SecurityGroupsConfiguration(CommonAPIRequest): - def __init__(self, SubnetId, Rules): - """ - :param str SubnetId: constructor parameter - :param list[SecurityGroupRule] Rules: constructor parameter - """ - CommonAPIRequest.__init__(self, SubnetId=SubnetId, Rules=Rules)
- -
[docs]class SecurityGroup(CommonAPIRequest): - def __init__(self, Name, SecurityGroupsConfigurations): - """ - :param str Name: constructor parameter - :param list[SecurityGroupsConfiguration] SecurityGroupsConfigurations: constructor parameter - """ - CommonAPIRequest.__init__(self, Name=Name, SecurityGroupsConfigurations=SecurityGroupsConfigurations)
- -
[docs]class AttributeNameValue(CommonAPIRequest): - def __init__(self, Name, Value): - """ - :param str Name: constructor parameter - :param str Value: constructor parameter - """ - CommonAPIRequest.__init__(self, Name=Name, Value=Value)
- -
[docs]class ResourceAttributesUpdateRequest(CommonAPIRequest): - def __init__(self, ResourceFullName, AttributeNamesValues): - """ - :param str ResourceFullName: constructor parameter - :param list[AttributeNameValue] AttributeNamesValues: constructor parameter - """ - CommonAPIRequest.__init__(self, ResourceFullName=ResourceFullName, AttributeNamesValues=AttributeNamesValues)
- -
[docs]class InputNameValue(CommonAPIRequest): - def __init__(self, Name, Value): - """ - :param str Name: constructor parameter - :param str Value: constructor parameter - """ - CommonAPIRequest.__init__(self, Name=Name, Value=Value)
- -
[docs]class UpdateRouteAliasRequest(CommonAPIRequest): - def __init__(self, SourceResourceName, TargetResourceName, Alias): - """ - :param str SourceResourceName: constructor parameter - :param str TargetResourceName: constructor parameter - :param str Alias: constructor parameter - """ - CommonAPIRequest.__init__(self, SourceResourceName=SourceResourceName, TargetResourceName=TargetResourceName, Alias=Alias)
- -
[docs]class UpdateTopologyGlobalInputsRequest(CommonAPIRequest): - def __init__(self, ParamName, Value): - """ - :param str ParamName: constructor parameter - :param str Value: constructor parameter - """ - CommonAPIRequest.__init__(self, ParamName=ParamName, Value=Value)
- -
[docs]class UpdateTopologyRequirementsInputsRequest(CommonAPIRequest): - def __init__(self, ResourceName, ParamName, Value, Type): - """ - :param str ResourceName: constructor parameter - :param str ParamName: constructor parameter - :param str Value: constructor parameter - :param str Type: constructor parameter - """ - CommonAPIRequest.__init__(self, ResourceName=ResourceName, ParamName=ParamName, Value=Value, Type=Type)
- -
[docs]class UpdateTopologyAdditionalInfoInputsRequest(CommonAPIRequest): - def __init__(self, ResourceName, ParamName, Value): - """ - :param str ResourceName: constructor parameter - :param str ParamName: constructor parameter - :param str Value: constructor parameter - """ - CommonAPIRequest.__init__(self, ResourceName=ResourceName, ParamName=ParamName, Value=Value)
- -
[docs]class ConfigParam(CommonAPIRequest): - def __init__(self, Name, Value): - """ - :param str Name: constructor parameter - :param str Value: constructor parameter - """ - CommonAPIRequest.__init__(self, Name=Name, Value=Value)
- -
[docs]class ConfigurationManagementData(CommonAPIRequest): - def __init__(self, Alias, ConfigParams): - """ - :param str Alias: constructor parameter - :param list[ConfigParam] ConfigParams: constructor parameter - """ - CommonAPIRequest.__init__(self, Alias=Alias, ConfigParams=ConfigParams)
- -
[docs]class AppConfigurationData(CommonAPIRequest): - def __init__(self, AppName, ConfigurationManagementDatas): - """ - :param str AppName: constructor parameter - :param list[ConfigurationManagementData] ConfigurationManagementDatas: constructor parameter - """ - CommonAPIRequest.__init__(self, AppName=AppName, ConfigurationManagementDatas=ConfigurationManagementDatas)
- -
[docs]class ResourceInfoDto(CommonAPIRequest): - def __init__(self, Family, Model, FullName, Address, FolderFullpath, ParentFullName, Description): - """ - :param str Family: constructor parameter - :param str Model: constructor parameter - :param str FullName: constructor parameter - :param str Address: constructor parameter - :param str FolderFullpath: constructor parameter - :param str ParentFullName: constructor parameter - :param str Description: constructor parameter - """ - CommonAPIRequest.__init__(self, Family=Family, Model=Model, FullName=FullName, Address=Address, FolderFullpath=FolderFullpath, ParentFullName=ParentFullName, Description=Description)
- -
[docs]class DeployAppInput(CommonAPIRequest): - def __init__(self, AppName, Name, Value): - """ - :param str AppName: constructor parameter - :param str Name: constructor parameter - :param str Value: constructor parameter - """ - CommonAPIRequest.__init__(self, AppName=AppName, Name=Name, Value=Value)
- -
[docs]class AppConfiguration(CommonAPIRequest): - def __init__(self, AppName, ConfigParams): - """ - :param str AppName: constructor parameter - :param list[ConfigParam] ConfigParams: constructor parameter - """ - CommonAPIRequest.__init__(self, AppName=AppName, ConfigParams=ConfigParams)
- -
[docs]class PhysicalConnectionUpdateRequest(CommonAPIRequest): - def __init__(self, ResourceAFullName, ResourceBFullName, ConnectionWeight): - """ - :param str ResourceAFullName: constructor parameter - :param str ResourceBFullName: constructor parameter - :param str ConnectionWeight: constructor parameter - """ - CommonAPIRequest.__init__(self, ResourceAFullName=ResourceAFullName, ResourceBFullName=ResourceBFullName, ConnectionWeight=ConnectionWeight)
- -
[docs]class Attribute(CommonAPIRequest): - def __init__(self, Name, RestrictedValue): - """ - :param str Name: constructor parameter - :param str RestrictedValue: constructor parameter - """ - CommonAPIRequest.__init__(self, Name=Name, RestrictedValue=RestrictedValue)
- -
[docs]class AddRestrictionRequest(CommonAPIRequest): - def __init__(self, FamilyName, ModelName, Alphabetic, Attributes): - """ - :param str FamilyName: constructor parameter - :param str ModelName: constructor parameter - :param str Alphabetic: constructor parameter - :param list[Attribute] Attributes: constructor parameter - """ - CommonAPIRequest.__init__(self, FamilyName=FamilyName, ModelName=ModelName, Alphabetic=Alphabetic, Attributes=Attributes)
- -
[docs]class UserUpdateRequest(CommonAPIRequest): - def __init__(self, Username, MaxConcurrentReservations, MaxReservationDuration, MaxSavedSandboxes, MaxScheduledSandboxes, MaxOwnedBlueprints): - """ - :param str Username: constructor parameter - :param str MaxConcurrentReservations: constructor parameter - :param str MaxReservationDuration: constructor parameter - :param str MaxSavedSandboxes: constructor parameter - :param str MaxScheduledSandboxes: constructor parameter - :param str MaxOwnedBlueprints: constructor parameter - """ - CommonAPIRequest.__init__(self, Username=Username, MaxConcurrentReservations=MaxConcurrentReservations, MaxReservationDuration=MaxReservationDuration, MaxSavedSandboxes=MaxSavedSandboxes, MaxScheduledSandboxes=MaxScheduledSandboxes, MaxOwnedBlueprints=MaxOwnedBlueprints)
- -
[docs]class SandboxDataKeyValue(CommonAPIRequest): - def __init__(self, Key, Value): - """ - :param str Key: constructor parameter - :param str Value: constructor parameter - """ - CommonAPIRequest.__init__(self, Key=Key, Value=Value)
- -
[docs]class SetConnectorRequest(CommonAPIRequest): - def __init__(self, SourceResourceFullName, TargetResourceFullName, Direction, Alias): - """ - :param str SourceResourceFullName: constructor parameter - :param str TargetResourceFullName: constructor parameter - :param str Direction: constructor parameter - :param str Alias: constructor parameter - """ - CommonAPIRequest.__init__(self, SourceResourceFullName=SourceResourceFullName, TargetResourceFullName=TargetResourceFullName, Direction=Direction, Alias=Alias)
- -
[docs]class RemoveRestrictionRequest(CommonAPIRequest): - def __init__(self, FamilyName, ModelName, Attributes): - """ - :param str FamilyName: constructor parameter - :param str ModelName: constructor parameter - :param list[Attribute] Attributes: constructor parameter - """ - CommonAPIRequest.__init__(self, FamilyName=FamilyName, ModelName=ModelName, Attributes=Attributes)
- -
[docs]class ResourceLockInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ReservationName = str - """:type : str""" - self.MachineName = str - """:type : str""" - self.Username = str - """:type : str""" - self.Created = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyShortInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Alias = str - """:type : str""" - self.State = str - """:type : str""" - self.Type = str - """:type : str""" - self.Name = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class Group(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Role = str - """:type : str""" - self.Name = str - """:type : str""" - self.Description = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class Topology(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Name = str - """:type : str""" - self.Description = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class Resource(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Path = str - """:type : str""" - self.Name = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class DomainInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Archived = str - """:type : str""" - self.TopologiesFolder = str - """:type : str""" - self.Name = str - """:type : str""" - self.Description = str - """:type : str""" - self.Topologies = {'list': Topology} - """:type : list[Topology]""" - self.Resources = {'list': Resource} - """:type : list[Resource]""" - self.Groups = {'list': Group} - """:type : list[Group]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class AdditionalDataParam(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Name = str - """:type : str""" - self.Value = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class VmDetailsNetworkInterface(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.NetworkId = str - """:type : str""" - self.IsPrimary = bool - """:type : bool""" - self.AdditionalData = {'list': AdditionalDataParam} - """:type : list[AdditionalDataParam]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class VmCustomParam(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Name = str - """:type : str""" - self.Value = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class VmInstanceParam(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Name = str - """:type : str""" - self.Value = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ResourceInfoVmDetails(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.UID = str - """:type : str""" - self.CloudProviderFullName = str - """:type : str""" - self.NetworkData = {'list': VmDetailsNetworkInterface} - """:type : list[VmDetailsNetworkInterface]""" - self.VmCustomParams = {'list': VmCustomParam} - """:type : list[VmCustomParam]""" - self.InstanceData = {'list': VmInstanceParam} - """:type : list[VmInstanceParam]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ResourceAttribute(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Type = str - """:type : str""" - self.Name = str - """:type : str""" - self.Value = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class Domain(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Name = str - """:type : str""" - self.Description = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class Connection(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.FullPath = str - """:type : str""" - self.Weight = int - """:type : int""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ResourceInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.CreatedByUser = str - """:type : str""" - self.ResourceLiveStatusDescription = str - """:type : str""" - self.Locked = bool - """:type : bool""" - self.Name = str - """:type : str""" - self.VmDetails = ResourceInfoVmDetails - """:type : ResourceInfoVmDetails""" - self.Permission = str - """:type : str""" - self.CreatedInReservationId = str - """:type : str""" - self.CreatedInReservation = str - """:type : str""" - self.FullAddress = str - """:type : str""" - self.ResourceLiveStatusName = str - """:type : str""" - self.CreatedInDomain = str - """:type : str""" - self.ResourceFamilyName = str - """:type : str""" - self.RootAddress = str - """:type : str""" - self.DriverName = str - """:type : str""" - self.Excluded = bool - """:type : bool""" - self.Address = str - """:type : str""" - self.FolderFullPath = str - """:type : str""" - self.LockInfo = ResourceLockInfo - """:type : ResourceLockInfo""" - self.ResourceModelName = str - """:type : str""" - self.UniqeIdentifier = str - """:type : str""" - self.Description = str - """:type : str""" - self.Domains = {'list': Domain} - """:type : list[Domain]""" - self.Connections = {'list': Connection} - """:type : list[Connection]""" - self.ChildResources = {'list': object} - """:type : list[ResourceInfo]""" - self.ResourceAttributes = {'list': ResourceAttribute} - """:type : list[ResourceAttribute]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ResourceLiveStatusInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.liveStatusName = str - """:type : str""" - self.liveStatusDescription = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservationLiveStatusInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ReservationLiveStatuses = {'list': ReservationLiveStatus} - """:type : list[ReservationLiveStatus]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservationLiveStatus(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ReservationLiveStatusDescription = str - """:type : str""" - self.ReservationId = str - """:type : str""" - self.ReservationLiveStatusName = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservationSlimStatusInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ReservationSlimStatus = ReservationSlimStatus - """:type : ReservationSlimStatus""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class DraftInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.DraftId = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservationSlimStatus(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Status = str - """:type : str""" - self.Booked = bool - """:type : bool""" - self.ProvisioningStatus = str - """:type : str""" - self.ReservationId = str - """:type : str""" - self.StartTime = str - """:type : str""" - self.EndTime = str - """:type : str""" - self.SetupStage = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class EndPointConnectionInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Routes = {'list': RouteInfo} - """:type : list[RouteInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class VisualConnectorsInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Connectors = {'list': Connector} - """:type : list[Connector]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyResourceInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Locked = bool - """:type : bool""" - self.Name = str - """:type : str""" - self.FullAddress = str - """:type : str""" - self.ResourceFamilyName = str - """:type : str""" - self.Alias = str - """:type : str""" - self.RootAddress = str - """:type : str""" - self.Excluded = bool - """:type : bool""" - self.Address = str - """:type : str""" - self.FolderFullPath = str - """:type : str""" - self.LockInfo = ResourceLockInfo - """:type : ResourceLockInfo""" - self.ResourceModelName = str - """:type : str""" - self.WillBeLocked = bool - """:type : bool""" - self.Connections = {'list': Connection} - """:type : list[Connection]""" - self.ResourceAttributes = {'list': ResourceAttribute} - """:type : list[ResourceAttribute]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ActiveTopologyResourceInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Locked = bool - """:type : bool""" - self.Name = str - """:type : str""" - self.FullAddress = str - """:type : str""" - self.ResourceFamilyName = str - """:type : str""" - self.Alias = str - """:type : str""" - self.RootAddress = str - """:type : str""" - self.Address = str - """:type : str""" - self.FolderFullPath = str - """:type : str""" - self.LockInfo = ResourceLockInfo - """:type : ResourceLockInfo""" - self.ResourceModelName = str - """:type : str""" - self.Connections = {'list': Connection} - """:type : list[Connection]""" - self.ResourceAttributes = {'list': ResourceAttribute} - """:type : list[ResourceAttribute]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class AbstractResourceAttribute(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Type = str - """:type : str""" - self.Name = str - """:type : str""" - self.Value = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class AbstractResourceRequiredAttribute(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Operator = str - """:type : str""" - self.Type = str - """:type : str""" - self.Name = str - """:type : str""" - self.Value = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyAbstractResourceInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.WillBeLocked = bool - """:type : bool""" - self.ResourceModelName = str - """:type : str""" - self.Alias = str - """:type : str""" - self.Valid = bool - """:type : bool""" - self.ResourceFamilyName = str - """:type : str""" - self.Quantity = int - """:type : int""" - self.Attributes = {'list': AbstractResourceAttribute} - """:type : list[AbstractResourceAttribute]""" - self.RequiredAttributes = {'list': AbstractResourceRequiredAttribute} - """:type : list[AbstractResourceRequiredAttribute]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class RouteSegmentInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Source = str - """:type : str""" - self.Target = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class RouteInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Target = str - """:type : str""" - self.Source = str - """:type : str""" - self.RouteConfiguration = RouteConfigurationInfo - """:type : RouteConfigurationInfo""" - self.Alias = str - """:type : str""" - self.Shared = bool - """:type : bool""" - self.IsTap = bool - """:type : bool""" - self.RouteType = str - """:type : str""" - self.Attributes = {'list': RouteAttributeInfo} - """:type : list[RouteAttributeInfo]""" - self.Segments = {'list': RouteSegmentInfo} - """:type : list[RouteSegmentInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservationAppResource(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.AppTemplateName = str - """:type : str""" - self.LogicalResource = LogicalResourceInfo - """:type : LogicalResourceInfo""" - self.Name = str - """:type : str""" - self.Description = str - """:type : str""" - self.AppConfigurationManagements = {'list': AppConfigurationManagement} - """:type : list[AppConfigurationManagement]""" - self.DeploymentPaths = {'list': DeploymentPathInfo} - """:type : list[DeploymentPathInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class AppConfigurationManagement(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Alias = str - """:type : str""" - self.Tool = str - """:type : str""" - self.AppConfigurationConnection = AppConfigurationConnection - """:type : AppConfigurationConnection""" - self.AnsibleInventoryGroups = str - """:type : str""" - self.ConnectionMethod = str - """:type : str""" - self.ScriptParameters = {'list': ParameterData} - """:type : list[ParameterData]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class AppConfigurationConnection(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.URL = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ParameterData(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Name = str - """:type : str""" - self.Value = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyAppResourceInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.LogicalResource = LogicalResourceInfo - """:type : LogicalResourceInfo""" - self.Name = str - """:type : str""" - self.Description = str - """:type : str""" - self.DeploymentPaths = {'list': DeploymentPathInfo} - """:type : list[DeploymentPathInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class Connector(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Direction = str - """:type : str""" - self.Target = str - """:type : str""" - self.Source = str - """:type : str""" - self.Alias = str - """:type : str""" - self.State = str - """:type : str""" - self.Type = str - """:type : str""" - self.Attributes = {'list': AttributeValueInfo} - """:type : list[AttributeValueInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class LogicalResourceInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Model = str - """:type : str""" - self.Driver = str - """:type : str""" - self.Description = str - """:type : str""" - self.Family = str - """:type : str""" - self.Attributes = {'list': AttributeValueInfo} - """:type : list[AttributeValueInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class DeploymentServiceInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Model = str - """:type : str""" - self.Driver = str - """:type : str""" - self.Name = str - """:type : str""" - self.CloudProvider = str - """:type : str""" - self.Attributes = {'list': AttributeValueInfo} - """:type : list[AttributeValueInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class DeploymentPathInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Name = str - """:type : str""" - self.IsDefault = bool - """:type : bool""" - self.DeploymentService = DeploymentServiceInfo - """:type : DeploymentServiceInfo""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class RouteConfigurationInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Interface = int - """:type : int""" - self.Duplex = int - """:type : int""" - self.Speed = int - """:type : int""" - self.SpeedSetting = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class RouteAttributeInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.AttributeName = str - """:type : str""" - self.AttributeValue = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class CategoryListInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Categories = {'list': str} - """:type : list[str]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologiesByCategoryInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Topologies = {'list': str} - """:type : list[str]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class CategoriesOfTopologyInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Categories = {'list': TopologyCategoryInfo} - """:type : list[TopologyCategoryInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyCategoryInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Name = str - """:type : str""" - self.Value = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyInputsInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.AttributeName = str - """:type : str""" - self.DefaultValue = str - """:type : str""" - self.AttributeId = str - """:type : str""" - self.Description = str - """:type : str""" - self.ParamName = str - """:type : str""" - self.PossibleValues = {'list': str} - """:type : list[str]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyGlobalInputsInfo(TopologyInputsInfo): - def __init__(self, xml_object, find_prefix): - TopologyInputsInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyAdditionalInfoInputsInfo(TopologyInputsInfo): - def __init__(self, xml_object, find_prefix): - self.ResourceName = str - """:type : str""" - self.LinkedToGlobal = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix) - TopologyInputsInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyRequirementsInputsInfo(TopologyInputsInfo): - def __init__(self, xml_object, find_prefix): - self.ResourceName = str - """:type : str""" - self.LinkedToGlobal = str - """:type : str""" - self.InputType = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix) - TopologyInputsInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyUrl(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.EncodedHtmlUri = str - """:type : str""" - self.DomainName = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyUrlsInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Alias = str - """:type : str""" - self.Name = str - """:type : str""" - self.TopologyUrls = {'list': TopologyUrl} - """:type : list[TopologyUrl]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.IsPublic = bool - """:type : bool""" - self.Description = str - """:type : str""" - self.Alias = str - """:type : str""" - self.DefaultDurationSeconds = str - """:type : str""" - self.CreateDate = str - """:type : str""" - self.EstimatedSetupDuration = str - """:type : str""" - self.Driver = str - """:type : str""" - self.IsPersistentSandbox = bool - """:type : bool""" - self.Owner = str - """:type : str""" - self.State = str - """:type : str""" - self.EstimatedTearDownDuration = str - """:type : str""" - self.ModificationDate = str - """:type : str""" - self.ParentTopology = TopologyShortInfo - """:type : TopologyShortInfo""" - self.Name = str - """:type : str""" - self.Type = str - """:type : str""" - self.MaxDuration = str - """:type : str""" - self.Instructions = str - """:type : str""" - self.AbstractResources = {'list': TopologyAbstractResourceInfo} - """:type : list[TopologyAbstractResourceInfo]""" - self.Apps = {'list': TopologyAppResourceInfo} - """:type : list[TopologyAppResourceInfo]""" - self.Services = {'list': ServiceInstance} - """:type : list[ServiceInstance]""" - self.Connectors = {'list': Connector} - """:type : list[Connector]""" - self.AdditionalInfoInputs = {'list': TopologyAdditionalInfoInputsInfo} - """:type : list[TopologyAdditionalInfoInputsInfo]""" - self.PermittedEditors = {'list': str} - """:type : list[str]""" - self.Routes = {'list': RouteInfo} - """:type : list[RouteInfo]""" - self.GlobalInputs = {'list': TopologyGlobalInputsInfo} - """:type : list[TopologyGlobalInputsInfo]""" - self.RequirementsInputs = {'list': TopologyRequirementsInputsInfo} - """:type : list[TopologyRequirementsInputsInfo]""" - self.Resources = {'list': TopologyResourceInfo} - """:type : list[TopologyResourceInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ActiveTopologyInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Username = str - """:type : str""" - self.MachineName = str - """:type : str""" - self.Name = str - """:type : str""" - self.Topology = str - """:type : str""" - self.Routes = {'list': RouteInfo} - """:type : list[RouteInfo]""" - self.Connectors = {'list': Connector} - """:type : list[Connector]""" - self.Resources = {'list': ActiveTopologyResourceInfo} - """:type : list[ActiveTopologyResourceInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyListInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Topologies = {'list': str} - """:type : list[str]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class LookupValuesInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.LookupValues = {'list': str} - """:type : list[str]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class AttributeValueInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Name = str - """:type : str""" - self.Value = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class SandboxDataKeyValueInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Value = str - """:type : str""" - self.Key = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class GetSandboxDataInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.SandboxDataKeyValues = {'list': SandboxDataKeyValueInfo} - """:type : list[SandboxDataKeyValueInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ResourceShortInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Locked = bool - """:type : bool""" - self.Name = str - """:type : str""" - self.Permission = str - """:type : str""" - self.FullAddress = str - """:type : str""" - self.ResourceFamilyName = str - """:type : str""" - self.RootAddress = str - """:type : str""" - self.Excluded = bool - """:type : bool""" - self.Address = str - """:type : str""" - self.FolderFullPath = str - """:type : str""" - self.LockInfo = ResourceLockInfo - """:type : ResourceLockInfo""" - self.ResourceModelName = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ResourceListInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Resources = {'list': ResourceShortInfo} - """:type : list[ResourceShortInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ServiceInstance(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Alias = str - """:type : str""" - self.ServiceName = str - """:type : str""" - self.Address = str - """:type : str""" - self.Attributes = {'list': AttributeValueInfo} - """:type : list[AttributeValueInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ServiceAttribute(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Name = str - """:type : str""" - self.DefaultValue = str - """:type : str""" - self.IsRequired = bool - """:type : bool""" - self.RestrictedValues = str - """:type : str""" - self.PossibleValues = str - """:type : str""" - self.Type = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ServiceInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.CategoryFullPath = str - """:type : str""" - self.Name = str - """:type : str""" - self.Description = str - """:type : str""" - self.Attributes = {'list': ServiceAttribute} - """:type : list[ServiceAttribute]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ServicesListInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Services = {'list': ServiceInfo} - """:type : list[ServiceInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ContentShortInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Type = str - """:type : str""" - self.Name = str - """:type : str""" - self.Permission = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ContentListInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ContentArray = {'list': ContentShortInfo} - """:type : list[ContentShortInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservationListInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Reservations = {'list': ReservationInfo} - """:type : list[ReservationInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservationInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Owner = str - """:type : str""" - self.Created = str - """:type : str""" - self.Id = str - """:type : str""" - self.Name = str - """:type : str""" - self.LockedResources = {'list': ResourceShortInfo} - """:type : list[ResourceShortInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class Mapping(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Source = str - """:type : str""" - self.Target = str - """:type : str""" - self.RouteType = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ResourceMappingsInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Mapping = Mapping - """:type : Mapping""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class CreateReservationResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Reservation = ReservationShortInfo - """:type : ReservationShortInfo""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReplaceWithResourceResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.RootResources = {'list': str} - """:type : list[str]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class GetReservationsInRangeResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Reservations = {'list': ReservationShortInfo} - """:type : list[ReservationShortInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservationShortInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Status = str - """:type : str""" - self.ReservationLiveStatusDescription = str - """:type : str""" - self.Booked = bool - """:type : bool""" - self.ProvisioningStatus = str - """:type : str""" - self.Description = str - """:type : str""" - self.ReservationLiveStatusName = str - """:type : str""" - self.DomainName = str - """:type : str""" - self.CreateDate = str - """:type : str""" - self.ModificationDate = str - """:type : str""" - self.ActualEndTime = str - """:type : str""" - self.RecurrenceType = str - """:type : str""" - self.StartTime = str - """:type : str""" - self.Owner = str - """:type : str""" - self.Name = str - """:type : str""" - self.EndTime = str - """:type : str""" - self.Id = str - """:type : str""" - self.TeardownTime = str - """:type : str""" - self.Topologies = {'list': str} - """:type : list[str]""" - self.PermittedUsers = {'list': str} - """:type : list[str]""" - self.TopologiesInfo = {'list': TopologyShortInfo} - """:type : list[TopologyShortInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class SavedSandboxInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Description = str - """:type : str""" - self.DomainName = str - """:type : str""" - self.CreateDate = str - """:type : str""" - self.OriginatingSandboxId = str - """:type : str""" - self.State = str - """:type : str""" - self.OriginatingBlueprintName = str - """:type : str""" - self.OriginatingSandboxName = str - """:type : str""" - self.Owner = str - """:type : str""" - self.Id = str - """:type : str""" - self.Name = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class GetSavedSandboxesResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.SavedSandboxes = {'list': SavedSandboxInfo} - """:type : list[SavedSandboxInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservationDiagramLayoutResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ResourceDiagramLayouts = {'list': ResourceDiagramLayoutInfo} - """:type : list[ResourceDiagramLayoutInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ResourceDiagramLayoutInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Y = float - """:type : float""" - self.ResourceName = str - """:type : str""" - self.X = float - """:type : float""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class GetReservationDescriptionResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ReservationDescription = ReservationDescriptionInfo - """:type : ReservationDescriptionInfo""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservationAppsResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Apps = {'list': ReservationAppResource} - """:type : list[ReservationAppResource]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class GetReservationAppImageResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.AppTemplateImage = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class GetModelUsageReportResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ModelUsages = {'list': EntityUsage} - """:type : list[EntityUsage]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class EntityUsage(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Type = str - """:type : str""" - self.Name = str - """:type : str""" - self.BlueprintTemplates = {'list': UsageDetails} - """:type : list[UsageDetails]""" - self.Blueprints = {'list': UsageDetails} - """:type : list[UsageDetails]""" - self.Sandboxes = {'list': UsageDetails} - """:type : list[UsageDetails]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class UsageDetails(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Id = str - """:type : str""" - self.Name = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservationDescriptionInfo(ReservationShortInfo): - def __init__(self, xml_object, find_prefix): - self.SavedSandboxId = str - """:type : str""" - self.SetupStage = str - """:type : str""" - self.ReservationLiveStatus = ReservationLiveStatus - """:type : ReservationLiveStatus""" - self.TopologiesInstructionsInfo = {'list': TopologyInstructionsInfo} - """:type : list[TopologyInstructionsInfo]""" - self.TopologiesResourcesAttributeInfo = {'list': TopologiesResourcesAttributesInfo} - """:type : list[TopologiesResourcesAttributesInfo]""" - self.Apps = {'list': ReservationAppResource} - """:type : list[ReservationAppResource]""" - self.ActiveRoutesInfo = {'list': RouteInfo} - """:type : list[RouteInfo]""" - self.TopologiesReservedResources = {'list': TopologyReservedResourceInfo} - """:type : list[TopologyReservedResourceInfo]""" - self.Connectors = {'list': Connector} - """:type : list[Connector]""" - self.Services = {'list': ServiceInstance} - """:type : list[ServiceInstance]""" - self.Conflicts = {'list': ResourceConflictInfo} - """:type : list[ResourceConflictInfo]""" - self.RequestedRoutesInfo = {'list': RouteInfo} - """:type : list[RouteInfo]""" - self.Resources = {'list': ReservedResourceInfo} - """:type : list[ReservedResourceInfo]""" - self.TopologiesRouteInfo = {'list': TopologyRoutesInfo} - """:type : list[TopologyRoutesInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix) - ReservationShortInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class GetReservationInputsResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.GlobalInputs = {'list': ReservedTopologyGlobalInputsInfo} - """:type : list[ReservedTopologyGlobalInputsInfo]""" - self.AdditionalInfoInputs = {'list': ReservedTopologyAdditionalInfoInputsInfo} - """:type : list[ReservedTopologyAdditionalInfoInputsInfo]""" - self.RequiredInputs = {'list': ReservedTopologyRequiredInputsInfo} - """:type : list[ReservedTopologyRequiredInputsInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservedTopologyInputsInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Value = str - """:type : str""" - self.ParamName = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservedTopologyGlobalInputsInfo(ReservedTopologyInputsInfo): - def __init__(self, xml_object, find_prefix): - self.PossibleValues = {'list': str} - """:type : list[str]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix) - ReservedTopologyInputsInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservedTopologyRequiredInputsInfo(ReservedTopologyInputsInfo): - def __init__(self, xml_object, find_prefix): - self.ResourceName = str - """:type : str""" - self.LinkedToGlobal = str - """:type : str""" - self.Type = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix) - ReservedTopologyInputsInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservedTopologyAdditionalInfoInputsInfo(ReservedTopologyInputsInfo): - def __init__(self, xml_object, find_prefix): - self.ResourceName = str - """:type : str""" - self.LinkedToGlobal = str - """:type : str""" - self.PossibleValues = {'list': str} - """:type : list[str]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix) - ReservedTopologyInputsInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologiesResourcesAttributesInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Usage = str - """:type : str""" - self.Alias = str - """:type : str""" - self.AttributeName = str - """:type : str""" - self.Name = str - """:type : str""" - self.TopologyName = str - """:type : str""" - self.AttributeValue = {'list': str} - """:type : list[str]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class AppInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.AppName = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReservedResourceInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.CreatedByUser = str - """:type : str""" - self.Locked = bool - """:type : bool""" - self.Name = str - """:type : str""" - self.VmDetails = ResourceInfoVmDetails - """:type : ResourceInfoVmDetails""" - self.AppTemplateName = str - """:type : str""" - self.FullAddress = str - """:type : str""" - self.CreatedInDomain = str - """:type : str""" - self.ResourceFamilyName = str - """:type : str""" - self.Released = bool - """:type : bool""" - self.AppDetails = AppInfo - """:type : AppInfo""" - self.CreatedInReservation = str - """:type : str""" - self.FolderFullPath = str - """:type : str""" - self.Shared = bool - """:type : bool""" - self.ResourceModelName = str - """:type : str""" - self.Availability = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyRoutesInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.TopologyName = str - """:type : str""" - self.Routes = {'list': RouteInfo} - """:type : list[RouteInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyInstructionsInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.TopologyName = str - """:type : str""" - self.Instructions = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyReservedResourceInfo(ReservedResourceInfo): - def __init__(self, xml_object, find_prefix): - self.Alias = str - """:type : str""" - self.TopologyName = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix) - ReservedResourceInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class GetActiveReservationsResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Reservations = {'list': ReservationShortInfo} - """:type : list[ReservationShortInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ResourceConflictInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ConflictWith = str - """:type : str""" - self.ConflictType = str - """:type : str""" - self.ConflictStarted = str - """:type : str""" - self.ResourceName = str - """:type : str""" - self.ConflictWithUser = str - """:type : str""" - self.ConflictPlannedEndTime = str - """:type : str""" - self.Topology = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReserveResourcesResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Conflicts = {'list': ResourceConflictInfo} - """:type : list[ResourceConflictInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class AddAppToReservationResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ReservedAppName = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ReserveTopologyResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Conflicts = {'list': ResourceConflictInfo} - """:type : list[ResourceConflictInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class CommandExecutionIdResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Id = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class CommandExecutionResultInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - pass
- -
[docs]class CommandExecutionResultListInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Results = {'list': CommandExecutionResultInfo} - """:type : list[CommandExecutionResultInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class CommandExecutionCompletedResultInfo(CommandExecutionResultInfo): - def __init__(self, xml_object, find_prefix): - self.Output = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix) - CommandExecutionResultInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class CommandExecutionCancelledResultInfo(CommandExecutionResultInfo): - def __init__(self, xml_object, find_prefix): - self.Message = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix) - CommandExecutionResultInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class CommandExecutionFailedResultInfo(CommandExecutionResultInfo): - def __init__(self, xml_object, find_prefix): - self.ErrorDescription = str - """:type : str""" - self.ErrorName = str - """:type : str""" - self.ErrorParameters = {'list': ErrorParameter} - """:type : list[ErrorParameter]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix) - CommandExecutionResultInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ErrorParameter(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Name = str - """:type : str""" - self.Value = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class LogonDomainInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.DomainId = str - """:type : str""" - self.Name = str - """:type : str""" - self.Description = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class LogonTokenInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Token = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class LogonResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Domain = LogonDomainInfo - """:type : LogonDomainInfo""" - self.Token = LogonTokenInfo - """:type : LogonTokenInfo""" - self.User = UserInfo - """:type : UserInfo""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class CommandParameter(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Mandatory = bool - """:type : bool""" - self.Name = str - """:type : str""" - self.DefaultValue = str - """:type : str""" - self.EnumValues = str - """:type : str""" - self.Type = str - """:type : str""" - self.Description = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ResourceCommandInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Tag = str - """:type : str""" - self.DisplayName = str - """:type : str""" - self.Name = str - """:type : str""" - self.Description = str - """:type : str""" - self.Parameters = {'list': CommandParameter} - """:type : list[CommandParameter]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ResourceCommandListInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Commands = {'list': ResourceCommandInfo} - """:type : list[ResourceCommandInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyCommandInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Name = str - """:type : str""" - self.Description = str - """:type : str""" - self.Parameters = {'list': CommandParameter} - """:type : list[CommandParameter]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TopologyCommandListInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Commands = {'list': TopologyCommandInfo} - """:type : list[TopologyCommandInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class EnvironmentCommandListInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Commands = {'list': EnvironmentCommandInfo} - """:type : list[EnvironmentCommandInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class EnvironmentCommandParameter(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Mandatory = bool - """:type : bool""" - self.Name = str - """:type : str""" - self.DefaultValue = str - """:type : str""" - self.EnumValues = str - """:type : str""" - self.DisplayName = str - """:type : str""" - self.Type = str - """:type : str""" - self.Description = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class EnvironmentCommandInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.DisplayName = str - """:type : str""" - self.Name = str - """:type : str""" - self.Description = str - """:type : str""" - self.Parameters = {'list': EnvironmentCommandParameter} - """:type : list[EnvironmentCommandParameter]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class FindResourceReservationInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ResourceFullName = str - """:type : str""" - self.ReservationName = str - """:type : str""" - self.ReservationId = str - """:type : str""" - self.StartTime = str - """:type : str""" - self.Owner = str - """:type : str""" - self.Shared = bool - """:type : bool""" - self.EndTime = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ResourcesUsageSummaryInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.NumOfNotInReservation = int - """:type : int""" - self.NumOfShared = int - """:type : int""" - self.NumOfReserved = int - """:type : int""" - self.ResourceFullName = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class FindResourceInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ReservedStatus = str - """:type : str""" - self.Description = str - """:type : str""" - self.UsageSummary = ResourcesUsageSummaryInfo - """:type : ResourcesUsageSummaryInfo""" - self.FullAddress = str - """:type : str""" - self.Permission = str - """:type : str""" - self.ConnectedTo = str - """:type : str""" - self.ResourceFamilyName = str - """:type : str""" - self.Excluded = bool - """:type : bool""" - self.Address = str - """:type : str""" - self.FullName = str - """:type : str""" - self.ResourceModelName = str - """:type : str""" - self.FullPath = str - """:type : str""" - self.Name = str - """:type : str""" - self.Reservations = {'list': FindResourceReservationInfo} - """:type : list[FindResourceReservationInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class FindResourceListInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Resources = {'list': FindResourceInfo} - """:type : list[FindResourceInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class GetReservationRemainingTimeInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.RemainingTimeInMinutes = float - """:type : float""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class UsersInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Users = {'list': UserInfo} - """:type : list[UserInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class UserInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.IsDomainAdmin = bool - """:type : bool""" - self.Name = str - """:type : str""" - self.DomainName = str - """:type : str""" - self.MaxSavedSandboxes = int - """:type : int""" - self.DisplayLanguage = str - """:type : str""" - self.MaxScheduledSandboxes = int - """:type : int""" - self.IsAdmin = bool - """:type : bool""" - self.MaxOwnedBlueprints = int - """:type : int""" - self.MaxReservationDuration = int - """:type : int""" - self.MaxConcurrentReservations = int - """:type : int""" - self.Timezone = str - """:type : str""" - self.Email = str - """:type : str""" - self.IsActive = bool - """:type : bool""" - self.Groups = {'list': GroupInfo} - """:type : list[GroupInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class GroupsInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Groups = {'list': GroupInfo} - """:type : list[GroupInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TestShellDomainInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Id = str - """:type : str""" - self.Name = str - """:type : str""" - self.Description = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class GroupInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.GroupRole = str - """:type : str""" - self.Name = str - """:type : str""" - self.Description = str - """:type : str""" - self.TestShellDomains = {'list': TestShellDomainInfo} - """:type : list[TestShellDomainInfo]""" - self.Users = {'list': UserInfo} - """:type : list[UserInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class UtilizationReport(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.UtilizationReportRows = {'list': UtilizationReportRow} - """:type : list[UtilizationReportRow]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class UtilizationReportRow(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Model = str - """:type : str""" - self.ParentId = str - """:type : str""" - self.Name = str - """:type : str""" - self.Family = str - """:type : str""" - self.Utilization = float - """:type : float""" - self.Children = {'list': object} - """:type : list[UtilizationReportRow]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ServerTimeInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ServerDateTime = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ExportConfigurationInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Configuration = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class GetServerTimeZonesResponse(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.TimeZones = {'list': TimeZoneDefinition} - """:type : list[TimeZoneDefinition]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class TimeZoneDefinition(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.DisplayName = str - """:type : str""" - self.Id = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class AbstractTemplateShortInfoList(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.AbstractTemplates = {'list': AbstractTemplateShortInfo} - """:type : list[AbstractTemplateShortInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class AbstractTemplateShortInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Description = str - """:type : str""" - self.DomainName = str - """:type : str""" - self.CreateDate = str - """:type : str""" - self.ResourceModelName = str - """:type : str""" - self.Valid = bool - """:type : bool""" - self.Owner = str - """:type : str""" - self.ResourceFamilyName = str - """:type : str""" - self.Name = str - """:type : str""" - self.Domains = {'list': str} - """:type : list[str]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class BulkAppDeploymentyResultItem(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ErrorCode = int - """:type : int""" - self.AppDeploymentyInfo = AppDeploymentyInfo - """:type : AppDeploymentyInfo""" - self.AppName = str - """:type : str""" - self.Success = bool - """:type : bool""" - self.Error = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class BulkAppDeploymentyInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ResultItems = {'list': BulkAppDeploymentyResultItem} - """:type : list[BulkAppDeploymentyResultItem]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class AppDeploymentyInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.VmUuid = str - """:type : str""" - self.CloudProviderResourceName = str - """:type : str""" - self.LogicalResourceName = str - """:type : str""" - self.VisualConnectors = {'list': AppVisualConnector} - """:type : list[AppVisualConnector]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class AppVisualConnector(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Alias = str - """:type : str""" - self.Target = str - """:type : str""" - self.Source = str - """:type : str""" - self.Attributes = {'list': AttributeValueInfo} - """:type : list[AttributeValueInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class NumericRange(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Start = int - """:type : int""" - self.End = int - """:type : int""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class CheckoutFromPoolInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Items = {'list': str} - """:type : list[str]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class CommandNamesListInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.CommandNames = {'list': str} - """:type : list[str]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ConfigureAppsInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ResultItems = {'list': ConfigureAppInfo} - """:type : list[ConfigureAppInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class ConfigureAppInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ErrorCode = int - """:type : int""" - self.AppName = str - """:type : str""" - self.Success = bool - """:type : bool""" - self.Error = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class SetSecurityGroupsInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ResultItems = {'list': SetSecurityGroupInfo} - """:type : list[SetSecurityGroupInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class SetSecurityGroupInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Error = str - """:type : str""" - self.Success = bool - """:type : bool""" - self.AppName = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class RemapConnectionResultInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ResultItems = {'list': RemapConnectionResultItem} - """:type : list[RemapConnectionResultItem]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class RemapConnectionResultItem(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.RemapOperationSummary = str - """:type : str""" - self.Success = bool - """:type : bool""" - self.RemapedVia = str - """:type : str""" - self.ErrorCode = int - """:type : int""" - self.Output = str - """:type : str""" - self.Error = str - """:type : str""" - self.ResourceName = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class SaveSandboxResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.SavedSandboxId = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class CategoryInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Type = str - """:type : str""" - self.Name = str - """:type : str""" - self.Description = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class CategoryListBriefInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Categories = {'list': CategoryInfo} - """:type : list[CategoryInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class GetAllApprovalRequestsResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.ApprovalRequestResponseInfos = {'list': GetApprovalRequestResponseInfo} - """:type : list[GetApprovalRequestResponseInfo]""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class GetApprovalRequestResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Inputs = str - """:type : str""" - self.CreationDate = str - """:type : str""" - self.StartTime = str - """:type : str""" - self.RequestNotes = str - """:type : str""" - self.EntityName = str - """:type : str""" - self.RequestedEntityId = str - """:type : str""" - self.IsApprover = bool - """:type : bool""" - self.State = str - """:type : str""" - self.UserInfoId = int - """:type : int""" - self.ModifiedDate = str - """:type : str""" - self.ApproveNotes = str - """:type : str""" - self.Duration = int - """:type : int""" - self.RequestedEntityType = str - """:type : str""" - self.EndTime = str - """:type : str""" - self.Id = int - """:type : int""" - self.RequesterName = str - """:type : str""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- -
[docs]class CreateApprovalRequestResponseInfo(CommonResponseInfo): - def __init__(self, xml_object, find_prefix): - self.Id = int - """:type : int""" - CommonResponseInfo.__init__(self, xml_object, find_prefix)
- - - -
[docs]class ApiEditAppRequest(CommonAPIRequest): - def __init__(self, Name, NewName, Description, AppDetails, DefaultDeployment): - """ - :param str Name: constructor parameter - :param str NewName: constructor parameter - :param str Description: constructor parameter - :param AppDetails AppDetails: constructor parameter - :param DefaultDeployment DefaultDeployment: constructor parameter - """ - CommonAPIRequest.__init__(self, Name=Name, NewName=NewName, Description=Description, AppDetails=AppDetails, - DefaultDeployment=DefaultDeployment)
- - -
[docs]class AppDetails(CommonAPIRequest): - def __init__(self, ModelName, Attributes, Driver): - """ - :param str ModelName: constructor parameter - :param list[NameValuePair] Attributes: constructor parameter - :param str Driver: constructor parameter - """ - CommonAPIRequest.__init__(self, ModelName=ModelName, Attributes=Attributes, Driver=Driver)
- - -
[docs]class NameValuePair(CommonAPIRequest): - def __init__(self, Name, Value): - """ - :param str Name: constructor parameter - :param str Value: constructor parameter - """ - CommonAPIRequest.__init__(self, Name=Name, Value=Value)
- - -
[docs]class DefaultDeployment(CommonAPIRequest): - def __init__(self, Name, Deployment): - """ - :param str Name: constructor parameter - :param Deployment Deployment: constructor parameter - """ - CommonAPIRequest.__init__(self, Name=Name, Deployment=Deployment)
- - -
[docs]class Deployment(CommonAPIRequest): - def __init__(self, Attributes): - """ - :param list[NameValuePair] Attributes: constructor parameter - """ - CommonAPIRequest.__init__(self, Attributes=Attributes)
- - -
[docs]class QualiApiClient(object): - def __init__(self, url, port, host, quali_api_scheme, http, api_response_handler, credentials): - self.token = '' - self.url = url - self.url = "{cs_api_scheme}://{host}:{port}{uri}".format(cs_api_scheme=quali_api_scheme, - host=host, - port=port, - uri=url) - self._http = http - self._api_response_handler = api_response_handler - if len(credentials.token_id)==0: - self._rest_logon(credentials.username, credentials.password, credentials.domain) - else: - self._rest_secure_logon(credentials.token_id, credentials.domain) - - -
[docs] def enrich_logon(self, xml_rpc_logon): - return self._wrap_xmlrpc_logon(xml_rpc_logon, self._rest_logon)
- -
[docs] def enrich_secure_logon(self, xml_rpc_logon): - return self._wrap_xmlrpc_logon(xml_rpc_logon, self._rest_secure_logon)
- - def _wrap_xmlrpc_logon(self, xml_rpc_logon, rest_logon): - logon = xml_rpc_logon - def dual_logon(*args, **kwargs): - response_info = logon(*args, **kwargs) - rest_logon(*args, **kwargs) - return response_info - return dual_logon - - def _rest_logon(self, username, password, domain): - self.token = self._inner_logon({"username": username, "password": password, "domain": domain}) - - def _rest_secure_logon(self, token_id, domain): - self.token = self._inner_logon({"username": "", "password": "", "domain": domain, "token": token_id}) - - def _inner_logon(self, data): - return json.loads(self.send_rest( - 'Auth/Login', - data=data, - method="PUT", - is_xml=False)) - -
[docs] def send_rest(self, operation, data, method="POST", is_xml=True): - response = self._http.request(method, - self._get_operation_uri(operation), - body=json.dumps(data).encode("utf-8"), - headers=self._get_headers()) - - return self._api_response_handler(response.data) if is_xml else response.data
- - def _get_operation_uri(self, operation): - return str(self.url + operation) - - def _get_headers(self): - headers = {'Content-Type': 'application/json'} - if self.token: - headers["Authorization"] = 'Bearer ' + self.token - return headers
- - -
[docs]class Credentials(object): - def __init__(self, username='', password='', domain='', token_id=''): - """ Data object that stores the credentials used to logon to Cloudshell API - - Args: - username (str, optional): [description]. Defaults to ''. - password (str, optional): [description]. Defaults to ''. - domain (str, optional): [description]. Defaults to ''. - token_id (str, optional): [description]. Defaults to ''. - """ - self.username = username - self.password = password - self.domain = domain - self.token_id = token_id
- - -
[docs]class LogonManager(object): - def __init__(self, credentials, logon, secure_logon): - """ Responsible for logging on to the XMLRPC endpoint - using the correct logon method based on which credentials were passed - - Args: - credentials (Credentials): [description] - logon (callable): CloudshellAPISession.Logon - secure_logon (callable): CloudshellAPISession.SecureLogon - """ - self.username = credentials.username - self.password = credentials.password - self.domain = credentials.domain - self.token_id = credentials.token_id - self._logon = logon - self._secure_logon = secure_logon - -
[docs] def logon(self): - if len(self.token_id) == 0: - return self._logon(self.username, self.password, self.domain) - else: - return self._secure_logon(self.token_id, self.domain)
- - -
[docs]class Authentication(object): - def __init__(self, logon_manager): - """ provides authentication for xml rpc calls; if not authenticated calls logon - - - Args: - logon_manager (LogonManager): performs logon to the XMLRPC endpoint - """ - self._xmlrpc_token = None - self.logon_manager = logon_manager - - def logon(self): - """ Logon explicitly, instead of checking if token was not set yet. - """ - self._xmlrpc_token = '' - - - @property - def xmlrpc_token(self): - if self._xmlrpc_token is None: - self.logon() - return self._xmlrpc_token - -
[docs] def logon(self): - self._xmlrpc_token = '' - response_info = self.logon_manager.logon() - self._xmlrpc_token = response_info.Token.Token
- - -
[docs]class CloudShellAPISession(CommonAPISession): - def __init__(self, host, username='', password='', domain='', timezone='UTC', datetimeformat='MM/dd/yyyy HH:mm', - token_id='', port=8029, uri='/ResourceManagerApiService/', - cloudshell_api_scheme="http", - quali_api_scheme='http', - quali_api_port=9000, - quali_api_uri='/Api/', - use_webapi_endpoint=False): - CommonAPISession.__init__(self, host, username, password, domain) - - self.port = str(port) - self.quali_api_port = str(port) - self.hostname = socket.gethostname() + ':' + self.port - self.headers = self.create_headers(timezone, datetimeformat) - - self.url = "{cs_api_scheme}://{host}:{port}{uri}".format(cs_api_scheme=cloudshell_api_scheme, - host=host, - port=self.port, - uri=uri) - - credentials = Credentials(username, password, domain, token_id) - self.use_webapi_endpoint = use_webapi_endpoint # used in rest api method template - if use_webapi_endpoint: - self._quali_api_client = QualiApiClient(quali_api_uri, quali_api_port, host, quali_api_scheme, self._http, - self._handle_api_response, credentials) - self.Logon = self._quali_api_client.enrich_logon(self.Logon) - self.SecureLogon = self._quali_api_client.enrich_secure_logon(self.SecureLogon) - - self.authentication = Authentication(LogonManager(credentials, self.Logon, self.SecureLogon)) - if not use_webapi_endpoint: - self.authentication.logon() - - - - -
[docs] def create_headers(self, timezone, datetimeformat): - return { 'Content-Type': 'text/xml', 'Accept': '*/*', 'ClientTimeZoneId': timezone, 'DateTimeFormat': datetimeformat }
- - def _sendRest(self, operation, data): - return self._quali_api_client.send_rest(operation, data) - - def _sendRequest(self, operation, message): - request_headers = self.headers.copy() - - request_headers['Content-Length'] = len(message) - request_headers['Host'] = "{host}:{port}".format(host=self.host, port=self.port) - request_headers['Authorization'] =\ - "MachineName={hostname};Token={token_id}"\ - .format(hostname=self.hostname, token_id=self.authentication.xmlrpc_token) - - return CommonAPISession._sendRequest(self, operation, message, request_headers) - -
[docs] def UpdateDriver(self, driverName='', driverFileName=''): - """ - Updating driver in cloudshell - - :param driverName: str - :param driverFile: str - :param driverFileName: str - :return: string - """ - driverFile = open(driverFileName, 'rb').read() - - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateDriver'), ('driverName', driverName), - ('driverFile', base64.b64encode(driverFile).decode()), - ('driverFileName', driverFileName)]))
- -
[docs] def UpdateScript(self, scriptName='', scriptFileName=''): - """ - Updating driver in cloudshell - - :param driverName: str - :param driverFile: str - :param driverFileName: str - :return: string - """ - scriptFile = open(scriptFileName, 'rb').read() - - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateScript'), ('scriptName', scriptName), - ('scriptFile', base64.b64encode(scriptFile).decode()), - ('scriptFileName', scriptFileName)]))
- -
[docs] def GetAppsDetailsInReservation(self, reservationId='', appNames=[]): - """ - Retrieves information on the specified apps in the reservation. - - :param str reservationId: Specify the string that represents the reservation's unique identifier. - :param list[str] appNames: Specify the apps names. - - :rtype: ReservationAppsResponseInfo - """ - return self.generateAPIRequest(OrderedDict( - [('method_name', 'GetAppsDetailsInReservation'), ('reservationId', reservationId), ('appNames', appNames)]))
- - -
[docs] def ActivateTopology(self, reservationId='', topologyFullPath=''): - """ - Resolves all connectivity requests in the sandbox, and marks unshared resources as "in use". - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str topologyFullPath: Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - - :rtype: ActiveTopologyInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ActivateTopology'), ('reservationId', reservationId), ('topologyFullPath', topologyFullPath)]))
- -
[docs] def AddGroupsToDomain(self, domainName='', groupNames=[], readOnly=False): - """ - Add groups to a domain. - - :param str domainName: Specify the name of the domain. - :param list[str] groupNames: Specify an array of one or more groups. - :param bool readOnly: Specify if the array of group should be added with view only permissions. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddGroupsToDomain'), ('domainName', domainName), ('groupNames', groupNames), ('readOnly', readOnly)]))
- -
[docs] def AddNewDomain(self, domainName='', description=''): - """ - Adds a new domain. - - :param str domainName: Specify the name of the domain. - :param str description: Specify the description of the domain. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddNewDomain'), ('domainName', domainName), ('description', description)]))
- -
[docs] def AddNewGroup(self, groupName='', description='', groupRole=''): - """ - Adds a new users group - - :param str groupName: Specify the name of the group. - :param str description: Provide a short description of the group. - :param str groupRole: Specify the role of the group, possible values: External, Regular, DomainAdmin. - - :rtype: GroupInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddNewGroup'), ('groupName', groupName), ('description', description), ('groupRole', groupRole)]))
- -
[docs] def AddNewUser(self, username='', password='', email='', isActive=False, isAdmin=False): - """ - Configures user login details and permissions. Use AddUsersToGroup to specify the user’s domain access. - - :param str username: Specify the name of the user. - :param str password: Specify the user’s login password. - :param str email: Specify the user’s email address. - :param bool isActive: Grant or deny active access to the application. - :param bool isAdmin: Add the user to the System Administrators group. - - :rtype: UserInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddNewUser'), ('username', username), ('password', password), ('email', email), ('isActive', isActive), ('isAdmin', isAdmin)]))
- -
[docs] def AddPermittedUsersToReservation(self, reservationId='', usernames=[]): - """ - Add one or more permitted users to the specified reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] usernames: List of users to permit access to the reservation. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddPermittedUsersToReservation'), ('reservationId', reservationId), ('usernames', usernames)]))
- -
[docs] def AddResourcesToDomain(self, domainName='', resourcesNames=[], includeDecendants=True): - """ - Add resources to a domain. - - :param str domainName: Specify the name of the domain. - :param list[str] resourcesNames: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - :param bool includeDecendants: Specify whether to include child resources. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddResourcesToDomain'), ('domainName', domainName), ('resourcesNames', resourcesNames), ('includeDecendants', includeDecendants)]))
- -
[docs] def AddResourcesToReservation(self, reservationId='', resourcesFullPath=[], shared=False): - """ - Reserves resources to be locked. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] resourcesFullPath: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - :param bool shared: Specify whether all resources will be shared among other enviroments - - :rtype: ReserveResourcesResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddResourcesToReservation'), ('reservationId', reservationId), ('resourcesFullPath', resourcesFullPath), ('shared', shared)]))
- -
[docs] def AddRoutesToReservation(self, reservationId='', sourceResourcesFullPath=[], targetResourcesFullPath=[], mappingType='', maxHops=0, routeAlias='', isShared=False): - """ - Adds (but does not connect) routes between all pairs of source and target endpoints, adding additional connectivity ports when required. Use ConnectRoutesInReservation to connect the routes. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] sourceResourcesFullPath: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - :param list[str] targetResourcesFullPath: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - :param str mappingType: Specify bidirectional or unidirectional as the mapping type. - :param int maxHops: Specify the maximum number or allowed hops. - :param str routeAlias: Specify the route’s alias. - :param bool isShared: Specify whether these routes are shared. Shared routes can be used in more than one reservation. - - :rtype: RouteInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddRoutesToReservation'), ('reservationId', reservationId), ('sourceResourcesFullPath', sourceResourcesFullPath), ('targetResourcesFullPath', targetResourcesFullPath), ('mappingType', mappingType), ('maxHops', maxHops), ('routeAlias', routeAlias), ('isShared', isShared)]))
- -
[docs] def AddTopologiesToDomain(self, domainName='', topologyNames=[], validateResourceAvailability=True): - """ - Adds a list of one or more topologies to a domain. - - :param str domainName: Specify the name of the domain. - :param list[str] topologyNames: Specify a list of topology names. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - :param bool validateResourceAvailability: Validates the existence of the resource resolution in the target domain. Default value: 'True'. Note: when value 'False' is supplied, there is no process of associating resources and routes with the target domain. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddTopologiesToDomain'), ('domainName', domainName), ('topologyNames', topologyNames), ('validateResourceAvailability', validateResourceAvailability)]))
- -
[docs] def AddUsersToGroup(self, usernames=[], groupName=''): - """ - Adds a list of one or more users to the specified group. - - :param list[str] usernames: Specify an array of one or more users. - :param str groupName: Specify the name of the group. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddUsersToGroup'), ('usernames', usernames), ('groupName', groupName)]))
- -
[docs] def AutoLoad(self, resourceFullPath=''): - """ - Overrides the data of a specified L1 switch with current device settings and mappings. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - - :rtype: str - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/AutoLoad', OrderedDict([('resourceFullPath', resourceFullPath)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'AutoLoad'), ('resourceFullPath', resourceFullPath)])) - return result
- -
[docs] def AddAttributeRestrictedValues(self, addAttributeRestrictionRequests=[]): - """ - add attribute restrictions to family/model - - :param list[AddRestrictionRequest] addAttributeRestrictionRequests: Attribute restrictions to add. - For example: [AddRestrictionRequest('family_name', 'model_name', sort_values_alphabetically, [Attribute('attribute_name','possible_value')] - - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddAttributeRestrictedValues'), ('addAttributeRestrictionRequests', CommonAPIRequest.toContainer(addAttributeRestrictionRequests))]))
- -
[docs] def ArchiveDomain(self, domainName=''): - """ - Archive a domain. All future reservation will be deleted. - - :param str domainName: Specify the name of the domain. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ArchiveDomain'), ('domainName', domainName)]))
- -
[docs] def AddAppToReservation(self, reservationId='', appName='', deploymentPath='', positionX=100, positionY=100): - """ - Add an App resource to an existing reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str appName: Specify the App template's name. - :param str deploymentPath: Specify the way the app will be deploy from a given list of options. - :param float positionX: Specify the x coordinate of the App's top left corner. - :param float positionY: Specify the y coordinate of the App's top left corner. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddAppToReservation'), ('reservationId', reservationId), ('appName', appName), ('deploymentPath', deploymentPath), ('positionX', positionX), ('positionY', positionY)]))
- -
[docs] def AddServiceToReservation(self, reservationId='', serviceName='', alias='', attributes=[]): - """ - Add service resource to existing reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str serviceName: Specify the service name. - :param str alias: Specify the service alias. - :param list[AttributeNameValue] attributes: Specify a matrix of attributes and associated attribute values. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddServiceToReservation'), ('reservationId', reservationId), ('serviceName', serviceName), ('alias', alias), ('attributes', CommonAPIRequest.toContainer(attributes))]))
- -
[docs] def CopyDomainsResources(self, domainNameSources=[], domainNameDestination=''): - """ - Copy resources from a list of source domains to a target domain. - - :param list[str] domainNameSources: Specify the names of the source domains. - :param str domainNameDestination: Specify the name of the target domain. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CopyDomainsResources'), ('domainNameSources', domainNameSources), ('domainNameDestination', domainNameDestination)]))
- -
[docs] def ClearAndResetConsole(self, reservationId='', resourceFullPath='', consolePortsFullPath=[], baudRate=0): - """ - Clears and resets specified resource console ports. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param list[str] consolePortsFullPath: Specify a list of console ports according to their location in the Resource Explorer. Include the full path from the root to each console port, separated by slashes. For example: Console/Ports/PortName. - :param int baudRate: Specify the baud rate to apply to the ports. - - :rtype: CommandExecutionCompletedResultInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ClearAndResetConsole'), ('reservationId', reservationId), ('resourceFullPath', resourceFullPath), ('consolePortsFullPath', consolePortsFullPath), ('baudRate', baudRate)]))
- -
[docs] def ConnectRoutesInReservation(self, reservationId='', endpoints=[], mappingType=''): - """ - Connects requested routes. It locks the resources and adds route mappings. The routes must already exist in the reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] endpoints: The routes’ endpoints to connect. - :param str mappingType: Specify bidirectional or unidirectional as the mapping type. - - :rtype: EndPointConnectionInfo - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/ConnectRoutesInReservation', OrderedDict([('reservationId', reservationId), ('endpoints', CommonAPIRequest.toContainer(endpoints)), ('mappingType', mappingType)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'ConnectRoutesInReservation'), ('reservationId', reservationId), ('endpoints', CommonAPIRequest.toContainer(endpoints)), ('mappingType', mappingType)])) - return result
- -
[docs] def CreateFolder(self, folderFullPath=''): - """ - Adds a new folder to the specified path. - - :param str folderFullPath: Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CreateFolder'), ('folderFullPath', folderFullPath)]))
- -
[docs] def CreateImmediateReservation(self, reservationName='', owner='', durationInMinutes=0, notifyOnStart=False, notifyOnEnd=False, notificationMinutesBeforeEnd=0, isTerminationProtectionEnabled=False, approvalSid=''): - """ - Defines a reservation to be started immediately. - - :param str reservationName: Specify the name of the reservation. - :param str owner: Specify the user name of the reservation owner. - :param int durationInMinutes: Specify the length of the reservation. (in minutes) - :param bool notifyOnStart: Indicate whether to notify the reservation owner when the reservation starts. - :param bool notifyOnEnd: Indicate whether to notify the reservation owner when the reservation ends. - :param int notificationMinutesBeforeEnd: Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled) - :param bool isTerminationProtectionEnabled: Indicate whether to protect the reservation from being terminated. - :param str approvalSid: Leave empty. Used for internal purposes. - - :rtype: CreateReservationResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CreateImmediateReservation'), ('reservationName', reservationName), ('owner', owner), ('durationInMinutes', durationInMinutes), ('notifyOnStart', notifyOnStart), ('notifyOnEnd', notifyOnEnd), ('notificationMinutesBeforeEnd', notificationMinutesBeforeEnd), ('isTerminationProtectionEnabled', isTerminationProtectionEnabled), ('approvalSid', approvalSid)]))
- -
[docs] def CreateImmediatePersistentReservation(self, reservationName='', owner='', notifyOnStart=False, notifyOnEnd=False, topologyFullPath='', globalInputs=[], requirementsInputs=[], additionalInfoInputs=[], notifyOnSetupComplete=False): - """ - Defines a reservation to be started immediately. - - :param str reservationName: Specify the name of the reservation. - :param str owner: Specify the user name of the reservation owner. - :param bool notifyOnStart: Indicate whether to notify the reservation owner when the reservation starts. - :param bool notifyOnEnd: Indicate whether to notify the reservation owner when the reservation ends. - :param str topologyFullPath: Specify the full topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - :param list[UpdateTopologyGlobalInputsRequest] globalInputs: Global inputs associated with the specified topology. For example: {['Input Name', 'Value';]}. - :param list[UpdateTopologyRequirementsInputsRequest] requirementsInputs: Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. - :param list[UpdateTopologyAdditionalInfoInputsRequest] additionalInfoInputs: Additional info inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value';]}. - :param bool notifyOnSetupComplete: Indicate whether to notify the reservation owner when the reservation setup completes. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CreateImmediatePersistentReservation'), ('reservationName', reservationName), ('owner', owner), ('notifyOnStart', notifyOnStart), ('notifyOnEnd', notifyOnEnd), ('topologyFullPath', topologyFullPath), ('globalInputs', CommonAPIRequest.toContainer(globalInputs)), ('requirementsInputs', CommonAPIRequest.toContainer(requirementsInputs)), ('additionalInfoInputs', CommonAPIRequest.toContainer(additionalInfoInputs)), ('notifyOnSetupComplete', notifyOnSetupComplete)]))
- -
[docs] def CreateImmediateTopologyReservation(self, reservationName='', owner='', durationInMinutes=0, notifyOnStart=False, notifyOnEnd=False, notificationMinutesBeforeEnd=0, topologyFullPath='', globalInputs=[], requirementsInputs=[], additionalInfoInputs=[], notifyOnSetupComplete=False): - """ - Defines a reservation to be started immediately. The reservation will start regardless of conflicting resources. - - :param str reservationName: Specify the name of the reservation. - :param str owner: Specify the user name of the reservation owner. - :param int durationInMinutes: Specify the length of the reservation. (in minutes) - :param bool notifyOnStart: Indicate whether to notify the reservation owner when the reservation starts. - :param bool notifyOnEnd: Indicate whether to notify the reservation owner when the reservation ends. - :param int notificationMinutesBeforeEnd: Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled) - :param str topologyFullPath: Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - :param list[UpdateTopologyGlobalInputsRequest] globalInputs: Global inputs associated with the specified topology. For example: [UpdateTopologyGlobalInputsRequest('param-name','value')] - :param list[UpdateTopologyRequirementsInputsRequest] requirementsInputs: - Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. - - The Value field can be used to input to requirement fields with different operator types. - - If pass value as is, it will be treated as "equals", for example if pass "5" it will indicate to system that seek requirement that fulfills =5 - Other operators (aside from equals) can be fulfilled using this convention: - in the value field, write use the format symbol[space]value - for example - - for numeric values - > 4 - < 4 - >= 4 - <= 4 - = 4 - != 4 - - for textual values - = "hi there" - != "hi there" - startswith hi there - endswith hi there - contains hi there - doesnotcontain hi there - - :param list[UpdateTopologyAdditionalInfoInputsRequest] additionalInfoInputs: Additional info inputs associated with the specified topology. - :param bool notifyOnSetupComplete: Indicate whether to notify the reservation owner when the reservation setup completes. - - :rtype: CreateReservationResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CreateImmediateReservation'), ('reservationName', reservationName), ('owner', owner), ('durationInMinutes', durationInMinutes), ('notifyOnStart', notifyOnStart), ('notifyOnEnd', notifyOnEnd), ('notificationMinutesBeforeEnd', notificationMinutesBeforeEnd), ('topologyFullPath', topologyFullPath), ('globalInputs', CommonAPIRequest.toContainer(globalInputs)), ('requirementsInputs', CommonAPIRequest.toContainer(requirementsInputs)), ('additionalInfoInputs', CommonAPIRequest.toContainer(additionalInfoInputs)), ('notifyOnSetupComplete', notifyOnSetupComplete)]))
- -
[docs] def CreateReservation(self, reservationName='', owner='', startTime='', endTime='', notifyOnStart=False, notifyOnEnd=False, notificationMinutesBeforeEnd=0, isTerminationProtectionEnabled=False, approvalSid=''): - """ - Defines a new reservation. - - :param str reservationName: Specify the name of the reservation. - :param str owner: Specify the user name of the reservation owner. - :param str startTime: The start time of the reservation. - :param str endTime: The end time of the reservation. - :param bool notifyOnStart: Indicate whether to notify the reservation owner when the reservation starts. - :param bool notifyOnEnd: Indicate whether to notify the reservation owner when the reservation ends. - :param int notificationMinutesBeforeEnd: Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled) - :param bool isTerminationProtectionEnabled: Indicate whether to protect the reservation from being terminated. - :param str approvalSid: Leave empty. Used for internal purposes. - - :rtype: CreateReservationResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CreateReservation'), ('reservationName', reservationName), ('owner', owner), ('startTime', startTime), ('endTime', endTime), ('notifyOnStart', notifyOnStart), ('notifyOnEnd', notifyOnEnd), ('notificationMinutesBeforeEnd', notificationMinutesBeforeEnd), ('isTerminationProtectionEnabled', isTerminationProtectionEnabled), ('approvalSid', approvalSid)]))
- -
[docs] def CreatePersistentReservation(self, reservationName='', owner='', startTime='', notifyOnStart=False, notifyOnEnd=False, topologyFullPath='', globalInputs=[], requirementsInputs=[], additionalInfoInputs=[], notifyOnSetupComplete=False): - """ - Defines a new reservation. - - :param str reservationName: Specify the name of the reservation. - :param str owner: Specify the user name of the reservation owner. - :param str startTime: The start time of the reservation. - :param bool notifyOnStart: Indicate whether to notify the reservation owner when the reservation starts. - :param bool notifyOnEnd: Indicate whether to notify the reservation owner when the reservation ends. - :param str topologyFullPath: Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - :param list[UpdateTopologyGlobalInputsRequest] globalInputs: Global inputs associated with the specified topology. For example: {['Input Name', 'Value';]}. - :param list[UpdateTopologyRequirementsInputsRequest] requirementsInputs: Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. - :param list[UpdateTopologyAdditionalInfoInputsRequest] additionalInfoInputs: Additional info inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value';]}. - :param bool notifyOnSetupComplete: Indicate whether to notify the reservation owner when the reservation setup completes. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CreatePersistentReservation'), ('reservationName', reservationName), ('owner', owner), ('startTime', startTime), ('notifyOnStart', notifyOnStart), ('notifyOnEnd', notifyOnEnd), ('topologyFullPath', topologyFullPath), ('globalInputs', CommonAPIRequest.toContainer(globalInputs)), ('requirementsInputs', CommonAPIRequest.toContainer(requirementsInputs)), ('additionalInfoInputs', CommonAPIRequest.toContainer(additionalInfoInputs)), ('notifyOnSetupComplete', notifyOnSetupComplete)]))
- -
[docs] def CreateTopologyReservation(self, reservationName='', owner='', startTime='', endTime='', notifyOnStart=False, notifyOnEnd=False, notificationMinutesBeforeEnd=0, topologyFullPath='', globalInputs=[], requirementsInputs=[], additionalInfoInputs=[], notifyOnSetupComplete=False): - """ - Defines a new reservation. - - :param str reservationName: Specify the name of the reservation. - :param str owner: Specify the user name of the reservation owner. - :param str startTime: The start time of the reservation. - :param str endTime: The end time of the reservation. - :param bool notifyOnStart: Indicate whether to notify the reservation owner when the reservation starts. - :param bool notifyOnEnd: Indicate whether to notify the reservation owner when the reservation ends. - :param int notificationMinutesBeforeEnd: Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled) - :param str topologyFullPath: Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - :param list[UpdateTopologyGlobalInputsRequest] globalInputs: Global inputs associated with the specified topology. - :param list[UpdateTopologyRequirementsInputsRequest] requirementsInputs: - Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. - - The Value field can be used to input to requirement fields with different operator types. - - If pass value as is, it will be treated as "equals", for example if pass "5" it will indicate to system that seek requirement that fulfills =5 - Other operators (aside from equals) can be fulfilled using this convention: - in the value field, write use the format symbol[space]value - for example - - for numeric values - > 4 - < 4 - >= 4 - <= 4 - = 4 - != 4 - - for textual values - = "hi there" - != "hi there" - startswith hi there - endswith hi there - contains hi there - doesnotcontain hi there - - :param list[UpdateTopologyAdditionalInfoInputsRequest] additionalInfoInputs: Additional info inputs associated with the specified topology. - :param bool notifyOnSetupComplete: Indicate whether to notify the reservation owner when the reservation setup completes. - - :rtype: CreateReservationResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CreateReservation'), ('reservationName', reservationName), ('owner', owner), ('startTime', startTime), ('endTime', endTime), ('notifyOnStart', notifyOnStart), ('notifyOnEnd', notifyOnEnd), ('notificationMinutesBeforeEnd', notificationMinutesBeforeEnd), ('topologyFullPath', topologyFullPath), ('globalInputs', CommonAPIRequest.toContainer(globalInputs)), ('requirementsInputs', CommonAPIRequest.toContainer(requirementsInputs)), ('additionalInfoInputs', CommonAPIRequest.toContainer(additionalInfoInputs)), ('notifyOnSetupComplete', notifyOnSetupComplete)]))
- -
[docs] def CreateResource(self, resourceFamily='', resourceModel='', resourceName='', resourceAddress='', folderFullPath='', parentResourceFullPath='', resourceDescription=''): - """ - Adds a new resource. - - :param str resourceFamily: Specify the name of the resource family (optional). - :param str resourceModel: Specify the resource model. - :param str resourceName: Specify the resource name. - :param str resourceAddress: Specify the resource address. - :param str folderFullPath: Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder. - :param str parentResourceFullPath: Specify the full path from the root to a parent resource, separated by slashes. For example: Traffic Generators/Generic. - :param str resourceDescription: Provide a short description to help identify the resource. - - :rtype: ResourceInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CreateResource'), ('resourceFamily', resourceFamily), ('resourceModel', resourceModel), ('resourceName', resourceName), ('resourceAddress', resourceAddress), ('folderFullPath', folderFullPath), ('parentResourceFullPath', parentResourceFullPath), ('resourceDescription', resourceDescription)]))
- -
[docs] def CreateResources(self, resourceInfoDtos=[]): - """ - Adds new resources. - - :param list[ResourceInfoDto] resourceInfoDtos: List of resources to add. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CreateResources'), ('resourceInfoDtos', CommonAPIRequest.toContainer(resourceInfoDtos))]))
- -
[docs] def CreateRouteInReservation(self, reservationId='', sourceResourceFullPath='', targetResourceFullPath='', overrideActiveRoutes=False, mappingType='', maxHops=0, routeAlias='', isShared=False): - """ - Creates a route between the specified source and target resources. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str sourceResourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str targetResourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param bool overrideActiveRoutes: Specify whether the new route can override existing routes. - :param str mappingType: Specify bidirectional or unidirectional as the mapping type. - :param int maxHops: Specify the maximum number or allowed hops. - :param str routeAlias: Specify the route’s alias. - :param bool isShared: Specify whether this route is shared. Shared routes can be used in more than one reservation. - - :rtype: EndPointConnectionInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CreateRouteInReservation'), ('reservationId', reservationId), ('sourceResourceFullPath', sourceResourceFullPath), ('targetResourceFullPath', targetResourceFullPath), ('overrideActiveRoutes', overrideActiveRoutes), ('mappingType', mappingType), ('maxHops', maxHops), ('routeAlias', routeAlias), ('isShared', isShared)]))
- -
[docs] def CreateRoutesInReservation(self, reservationId='', sourceResourcesFullPath=[], targetResourcesFullPath=[], overrideActiveRoutes=False, mappingType='', maxHops=0, routeAlias='', isShared=False): - """ - Create routes between the listed source and target resources. Routes will be created for each pair of source and target resources. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] sourceResourcesFullPath: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - :param list[str] targetResourcesFullPath: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - :param bool overrideActiveRoutes: Specify whether the new route can override existing routes. - :param str mappingType: Specify bidirectional or unidirectional as the mapping type. - :param int maxHops: Specify the maximum number or allowed hops. - :param str routeAlias: Specify the route’s alias. - :param bool isShared: Specify whether these routes are shared. Shared routes can be used in more than one reservation. - - :rtype: EndPointConnectionInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CreateRoutesInReservation'), ('reservationId', reservationId), ('sourceResourcesFullPath', sourceResourcesFullPath), ('targetResourcesFullPath', targetResourcesFullPath), ('overrideActiveRoutes', overrideActiveRoutes), ('mappingType', mappingType), ('maxHops', maxHops), ('routeAlias', routeAlias), ('isShared', isShared)]))
- -
[docs] def DeleteDomain(self, domainName=''): - """ - Deletes a domain. - - :param str domainName: Specify the name of the domain. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'DeleteDomain'), ('domainName', domainName)]))
- -
[docs] def DeleteTopology(self, topologyFullPath=''): - """ - Deletes the specified topology. - - :param str topologyFullPath: Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'DeleteTopology'), ('topologyFullPath', topologyFullPath)]))
- -
[docs] def DeleteFolder(self, folderFullPath=''): - """ - Deletes the specified folder. - - :param str folderFullPath: Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'DeleteFolder'), ('folderFullPath', folderFullPath)]))
- -
[docs] def DeleteGroup(self, groupName=''): - """ - Deletes the specified group. - - :param str groupName: Specify the name of the group. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'DeleteGroup'), ('groupName', groupName)]))
- -
[docs] def DeleteReservation(self, reservationId='', unmap=False): - """ - - Deletes the specified reservation. - Important: DeleteReservation does not perform teardown and therefore does not revert and clean up the sandbox environment. - - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param bool unmap: Specify whether to keep mappings or release mapped resources when deleting the reservation. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'DeleteReservation'), ('reservationId', reservationId), ('unmap', unmap)]))
- -
[docs] def DeleteResource(self, resourceFullPath=''): - """ - Deletes the specified resource. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'DeleteResource'), ('resourceFullPath', resourceFullPath)]))
- -
[docs] def DeleteResources(self, resourcesFullPath=[]): - """ - Deletes the specified resources. - - :param list[str] resourcesFullPath: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'DeleteResources'), ('resourcesFullPath', resourcesFullPath)]))
- -
[docs] def DeleteUser(self, username=''): - """ - Deletes the specified user. - - :param str username: Specify the name of the user. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'DeleteUser'), ('username', username)]))
- -
[docs] def DisconnectRoutesInReservation(self, reservationId='', endpoints=[]): - """ - Disconnects requested routes. It unlocks the resources (if locked), and removes route mappings, but does not remove the route resources from the reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] endpoints: The routes endpoints to disconnect. - - :rtype: EndPointConnectionInfo - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/DisconnectRoutesInReservation', OrderedDict([('reservationId', reservationId), ('endpoints', CommonAPIRequest.toContainer(endpoints))])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'DisconnectRoutesInReservation'), ('reservationId', reservationId), ('endpoints', CommonAPIRequest.toContainer(endpoints))])) - return result
- -
[docs] def DecryptPassword(self, encryptedString=''): - """ - Decrypt a password. - - :param str encryptedString: The encrypted string for decryption. - - :rtype: AttributeValueInfo - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/DecryptPassword', OrderedDict([('encryptedString', encryptedString)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'DecryptPassword'), ('encryptedString', encryptedString)])) - return result
- -
[docs] def DeleteResourceTemplate(self, resourceTemplateName=''): - """ - Deletes a specific resource template. - - :param str resourceTemplateName: Specify the resource template name. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'DeleteResourceTemplate'), ('resourceTemplateName', resourceTemplateName)]))
- -
[docs] def EndReservation(self, reservationId='', unmap=False): - """ - Ends the specified reservation and optionally, unlocks and releases all reservation resources. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param bool unmap: Specify whether to keep mappings or release mapped resources when deleting the reservation. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'EndReservation'), ('reservationId', reservationId), ('unmap', unmap)]))
- -
[docs] def ExcludeResource(self, resourceFullPath=''): - """ - Excludes a specified resource. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ExcludeResource'), ('resourceFullPath', resourceFullPath)]))
- -
[docs] def ExcludeResources(self, resourcesFullPath=[]): - """ - Excludes the specified resources. - - :param list[str] resourcesFullPath: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ExcludeResources'), ('resourcesFullPath', resourcesFullPath)]))
- -
[docs] def SetResourceVisibility(self, resourceFullPath='', newVisibility=''): - """ - Set the resource visibility State - Admin Only, Everyone or Family Default. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str newVisibility: The new visibility state for the resource. options: AdminOnly, Everyone or FamilyDefault - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetResourceVisibility'), ('resourceFullPath', resourceFullPath), ('newVisibility', newVisibility)]))
- -
[docs] def SetResourceShareLevel(self, resourceFullPath='', newShareLevel=''): - """ - Sets a resource's default share level. - - :param str resourceFullPath: Specify the full path of the resource. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str newShareLevel: The new share level of the resource. Options: FamilyDefault, Shared or Unshared. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetResourceShareLevel'), ('resourceFullPath', resourceFullPath), ('newShareLevel', newShareLevel)]))
- -
[docs] def EnqueueResourceCommand(self, reservationId='', resourceFullPath='', commandName='', parameterValues=[], printOutput=False): - """ - [Deprecated] Enqueues a command to be executed for the specified driver. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str commandName: Specify the name of the command. - :param list[str] parameterValues: Specify the list of parameters values required for executing the command. - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'EnqueueResourceCommand'), ('reservationId', reservationId), ('resourceFullPath', resourceFullPath), ('commandName', commandName), ('parameterValues', parameterValues), ('printOutput', printOutput)]))
- -
[docs] def EnqueueServiceCommand(self, reservationId='', serviceAlias='', commandName='', parameterValues=[], printOutput=False): - """ - [Deprecated] Enqueues a command to be executed for the specified driver. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str serviceAlias: Specify the alias of the service. The service alias is its identifier in the environment context. It can be retrieved via the environment details API and is displayed visually on the diagram. - :param str commandName: Specify the name of the command. - :param list[str] parameterValues: Specify the list of parameters values required for executing the command. - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'EnqueueServiceCommand'), ('reservationId', reservationId), ('serviceAlias', serviceAlias), ('commandName', commandName), ('parameterValues', parameterValues), ('printOutput', printOutput)]))
- -
[docs] def ExecuteResourceCommand(self, reservationId='', resourceFullPath='', commandName='', parameterValues=[], printOutput=False): - """ - [Deprecated] Executes a command for the specified driver. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str commandName: Specify the name of the command. - :param list[str] parameterValues: Specify the list of parameters values required for executing the command. - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: CommandExecutionCompletedResultInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ExecuteResourceCommand'), ('reservationId', reservationId), ('resourceFullPath', resourceFullPath), ('commandName', commandName), ('parameterValues', parameterValues), ('printOutput', printOutput)]))
- -
[docs] def ExecuteResourceConnectedCommand(self, reservationId='', resourceFullPath='', commandName='', commandTag='', parameterValues=[], connectedPortsFullPath=[], printOutput=False): - """ - Executes a command for the specified driver. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RouterA/Port1. - :param str commandName: Specify the name of the command. - :param str commandTag: Specify the command tag. Connected command tags are used to define categories of functionality (e.g 'virtualization'). - :param list[str] parameterValues: Specify the list of parameters values required for executing the command. - :param list[str] connectedPortsFullPath: Specify the list of connected ports to use in this operation. Include the full path from the root resource to each port, separated by slashes. For example: Switch20/Blade5/PowerPort1. Leave blank to perform the connected operation on all of the specified resource’s connected ports. - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: CommandExecutionCompletedResultInfo - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/ExecuteResourceConnectedCommand', OrderedDict([('reservationId', reservationId), ('resourceFullPath', resourceFullPath), ('commandName', commandName), ('commandTag', commandTag), ('parameterValues', parameterValues), ('connectedPortsFullPath', connectedPortsFullPath), ('printOutput', printOutput)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'ExecuteResourceConnectedCommand'), ('reservationId', reservationId), ('resourceFullPath', resourceFullPath), ('commandName', commandName), ('commandTag', commandTag), ('parameterValues', parameterValues), ('connectedPortsFullPath', connectedPortsFullPath), ('printOutput', printOutput)])) - return result
- -
[docs] def EnqueueTopologyCommand(self, reservationId='', commandName='', parameterValues=[], printOutput=False): - """ - [Deprecated] Enqueues a command to be executed for the specified reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str commandName: Specify the name of the command. - :param list[str] parameterValues: Specify the list of parameters values required for executing the command. - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'EnqueueTopologyCommand'), ('reservationId', reservationId), ('commandName', commandName), ('parameterValues', parameterValues), ('printOutput', printOutput)]))
- -
[docs] def ExecuteTopologyCommand(self, reservationId='', commandName='', parameterValues=[], printOutput=False): - """ - [Deprecated] Executes a command for the specified reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str commandName: Specify the name of the command. - :param list[str] parameterValues: Specify the list of parameters values required for executing the command. - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: CommandExecutionCompletedResultInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ExecuteTopologyCommand'), ('reservationId', reservationId), ('commandName', commandName), ('parameterValues', parameterValues), ('printOutput', printOutput)]))
- -
[docs] def ExtendReservation(self, reservationId='', minutesToAdd=0): - """ - Extends the duration of the specified reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param int minutesToAdd: Specify the number of minutes to add to the specified reservation. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ExtendReservation'), ('reservationId', reservationId), ('minutesToAdd', minutesToAdd)]))
- -
[docs] def UpdateReservationEndTime(self, reservationId='', isPersistent=False, endTime=''): - """ - Extends the duration of the specified reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param bool isPersistent: Enable or disable Reservation Persistence. - :param str endTime: The end time of the reservation. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateReservationEndTime'), ('reservationId', reservationId), ('isPersistent', isPersistent), ('endTime', endTime)]))
- -
[docs] def ExportFamiliesAndModels(self): - """ - Exports the resource families, models, attributes and structure configuration. - - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ExportFamiliesAndModels')]))
- -
[docs] def ExecuteServiceCommand(self, reservationId='', serviceAlias='', commandName='', parameterValues=[], printOutput=False): - """ - [Deprecated] Executes a command for the specified service driver. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str serviceAlias: Specify the alias of the service. - :param str commandName: Specify the name of the command. - :param list[str] parameterValues: Specify the list of parameters values required for executing the command. - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: CommandExecutionCompletedResultInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ExecuteServiceCommand'), ('reservationId', reservationId), ('serviceAlias', serviceAlias), ('commandName', commandName), ('parameterValues', parameterValues), ('printOutput', printOutput)]))
- -
[docs] def DeployAppToCloudProvider(self, reservationId='', appName='', commandInputs=[], printOutput=False): - """ - Executes deploy command for the specified app driver. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str appName: Specify the name of the app. - :param list[InputNameValue] commandInputs: Specify a list of input names and values required for executing the command. Note that to change a deployed App's name, specify the new name as an input value - for example: api.DeployAppToCloudProvider(reservation_id, "Azure Ubuntu", [InputNameValue("Name", "myvm01")]). - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'DeployAppToCloudProvider'), ('reservationId', reservationId), ('appName', appName), ('commandInputs', CommonAPIRequest.toContainer(commandInputs)), ('printOutput', printOutput)]))
- -
[docs] def DeployAppToCloudProviderBulk(self, reservationId='', appNames=[], commandInputs=[], printOutput=False): - """ - Executes deploy command for the specified apps. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] appNames: Specify the names of the apps to deploy. - :param list[DeployAppInput] commandInputs: Specify a list of input names and values required for executing the command [appName, InputName, InputValue]. Note that to change a deployed App's name, specify the new name as an input value - for example: api.DeployAppToCloudProvider(reservation_id, "Azure Ubuntu", [DeployAppInput("Azure Ubuntu", "Name", "myvm01")]). - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: BulkAppDeploymentyInfo - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/DeployAppToCloudProviderBulk', OrderedDict([('reservationId', reservationId), ('appNames', appNames), ('commandInputs', CommonAPIRequest.toContainer(commandInputs)), ('printOutput', printOutput)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'DeployAppToCloudProviderBulk'), ('reservationId', reservationId), ('appNames', appNames), ('commandInputs', CommonAPIRequest.toContainer(commandInputs)), ('printOutput', printOutput)])) - return result
- -
[docs] def RefreshAppInBlueprints(self, appTemplateName='', topologyNames=[]): - """ - Refresh Apps in the list of blueprints. This applies to blueprints in all domains and can be used by system administrators only. - - :param str appTemplateName: Specify the name of the App template to be used to refresh the App instances. - :param list[str] topologyNames: Specify an optional list of blueprint names. Include the full path from the root to the blueprint, separated by slashes. For example: FolderName/Topologies/TopologyName. If the list is not specified, Apps in all blueprints will be refreshed. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RefreshAppInBlueprints'), ('appTemplateName', appTemplateName), ('topologyNames', topologyNames)]))
- -
[docs] def RefreshVMDetails(self, reservationId='', deployedAppNames=[]): - """ - Refreshes VM Details on deployed apps. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] deployedAppNames: Names of deployed apps whose vm details will be refreshed. - - :rtype: str - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/RefreshVMDetails', OrderedDict([('reservationId', reservationId), ('deployedAppNames', deployedAppNames)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'RefreshVMDetails'), ('reservationId', reservationId), ('deployedAppNames', deployedAppNames)])) - return result
- -
[docs] def EditAppsInReservation(self, reservationId='', editAppsRequests=[]): - """ - Edit Apps in a reservation - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[ApiEditAppRequest] editAppsRequests: Changes to implement in the App. Please note that when modifying attributes, *all* the attributes in deployed app must be updated. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'EditAppsInReservation'), ('reservationId', reservationId), ('editAppsRequests', CommonAPIRequest.toContainer(editAppsRequests))]))
- -
[docs] def PrepareSandboxConnectivity(self, reservationId=''): - """ - Prepare Sandbox Connectivity - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: str - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/PrepareSandboxConnectivity', OrderedDict([('reservationId', reservationId)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'PrepareSandboxConnectivity'), ('reservationId', reservationId)])) - return result
- -
[docs] def CleanupSandboxConnectivity(self, reservationId=''): - """ - Cleanup Sandbox Connectivity - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: str - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/CleanupSandboxConnectivity', OrderedDict([('reservationId', reservationId)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'CleanupSandboxConnectivity'), ('reservationId', reservationId)])) - return result
- -
[docs] def ConfigureApps(self, reservationId='', appConfigurations=[], printOutput=False): - """ - Run Configuration Management scripts for the apps in the blueprint. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[AppConfiguration] appConfigurations: Configuration details. Note: Running ConfigureApps with parameters that are missing from the App returns a success message. - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: ConfigureAppsInfo - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/ConfigureApps', OrderedDict([('reservationId', reservationId), ('appConfigurations', CommonAPIRequest.toContainer(appConfigurations)), ('printOutput', printOutput)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'ConfigureApps'), ('reservationId', reservationId), ('appConfigurations', CommonAPIRequest.toContainer(appConfigurations)), ('printOutput', printOutput)])) - return result
- -
[docs] def ConfigureAppsV2(self, reservationId='', appConfigurationsData=[], printOutput=False): - """ - Run Configuration Management scripts for the apps in the blueprint. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[AppConfigurationData] appConfigurationsData: Configuration details. Note: Running ConfigureAppsV2 with parameters that are missing from the App returns a success message. - :param bool printOutput: Defines whether to print the command output in the sandbox command output window. - - :rtype: ConfigureAppsInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ConfigureAppsV2'), ('reservationId', reservationId), ('appConfigurationsData', CommonAPIRequest.toContainer(appConfigurationsData)), ('printOutput', printOutput)]))
- -
[docs] def CheckoutFromPool(self, selectionCriteriaJson=''): - """ - Request to checkout an item from a pool. - - :param str selectionCriteriaJson: Json string that represents a selection request for an item or multiple items from a pool. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CheckoutFromPool'), ('selectionCriteriaJson', selectionCriteriaJson)]))
- -
[docs] def GetModelUsageReport(self, modelName=''): - """ - Retrieves the model usages information in Resources, Apps, Abstract Resources and Abstract Templates at Blueprints, Blueprints templates and Sandboxes. - - :param str modelName: Specify the name of the model to retrieve usages for. - - :rtype: GetModelUsageReportResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetModelUsageReport'), ('modelName', modelName)]))
- -
[docs] def SetCustomShellAttribute(self, modelName='', attributeName='', defaultValue='', restrictedValues=[]): - """ - Add a custom attribute to an existing shell model - - :param str modelName: Specify the name of the model to add the attribute to. - :param str attributeName: Specify the name of the attribute to add/update. - :param str defaultValue: Specify the default value to set for the attribute. - :param list[str] restrictedValues: Specify the restricted values for the attribute. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetCustomShellAttribute'), ('modelName', modelName), ('attributeName', attributeName), ('defaultValue', defaultValue), ('restrictedValues', restrictedValues)]))
- -
[docs] def RemoveCustomShellAttribute(self, modelName='', attributeName=''): - """ - Remove a custom attribute from an existing shell - - :param str modelName: Specify the name of the model to remove the attribute from. - :param str attributeName: Specify the name of the attribute to remove. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RemoveCustomShellAttribute'), ('modelName', modelName), ('attributeName', attributeName)]))
- -
[docs] def ReleaseFromPool(self, values=[], poolId='', reservationId='', ownerId=''): - """ - Request to release an item from a pool. - - :param list[str] values: Values to release from the pool. - :param str poolId: The specific pool where to search for the values that you want to release. - :param str reservationId: Reservation id that is assoicated with the pool values. It can also be an empty string if the values are not associated with a reservation. - :param str ownerId: The owner of the pool values. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ReleaseFromPool'), ('values', values), ('poolId', poolId), ('reservationId', reservationId), ('ownerId', ownerId)]))
- -
[docs] def EnqueueEnvironmentCommand(self, reservationId='', commandName='', commandInputs=[], printOutput=False): - """ - Enqueues a command to be executed for the specified reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str commandName: Specify the name of the command. - :param list[InputNameValue] commandInputs: Specify a matrix of input names and values required for executing the command. - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'EnqueueEnvironmentCommand'), ('reservationId', reservationId), ('commandName', commandName), ('commandInputs', CommonAPIRequest.toContainer(commandInputs)), ('printOutput', printOutput)]))
- -
[docs] def ExecuteEnvironmentCommand(self, reservationId='', commandName='', commandInputs=[], printOutput=False): - """ - Executes a command for the specified reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str commandName: Specify the name of the command. - :param list[InputNameValue] commandInputs: Specify a matrix of input names and values required for executing the command. - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: CommandExecutionCompletedResultInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ExecuteEnvironmentCommand'), ('reservationId', reservationId), ('commandName', commandName), ('commandInputs', CommonAPIRequest.toContainer(commandInputs)), ('printOutput', printOutput)]))
- -
[docs] def EnqueueCommand(self, reservationId='', targetName='', targetType='', commandName='', commandInputs=[], printOutput=False): - """ - Enqueues a command to be executed for the specified target. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str targetName: Specify the name of the target according to the target type: for resources - specify the resouce's name, for services - the service's alias. - :param str targetType: Specify the target type for command execution, possible values are: Resource, Service, App. - :param str commandName: Specify the name of the command. - :param list[InputNameValue] commandInputs: Specify a matrix of input names and values required for executing the command. - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: str - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/EnqueueCommand', OrderedDict([('reservationId', reservationId), ('targetName', targetName), ('targetType', targetType), ('commandName', commandName), ('commandInputs', CommonAPIRequest.toContainer(commandInputs)), ('printOutput', printOutput)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'EnqueueCommand'), ('reservationId', reservationId), ('targetName', targetName), ('targetType', targetType), ('commandName', commandName), ('commandInputs', CommonAPIRequest.toContainer(commandInputs)), ('printOutput', printOutput)])) - return result
- -
[docs] def ExecuteCommand(self, reservationId='', targetName='', targetType='', commandName='', commandInputs=[], printOutput=False): - """ - Executes a command for the specified target. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str targetName: Specify the name of the target according to the target type: for resources - specify the resouce's name, for services - the service's alias. - :param str targetType: Specify the target type for command execution, possible values are: Resource, Service, App. - :param str commandName: Specify the name of the command. - :param list[InputNameValue] commandInputs: Specify a matrix of input names and values required for executing the command. - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: CommandExecutionCompletedResultInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ExecuteCommand'), ('reservationId', reservationId), ('targetName', targetName), ('targetType', targetType), ('commandName', commandName), ('commandInputs', CommonAPIRequest.toContainer(commandInputs)), ('printOutput', printOutput)]))
- -
[docs] def FindResources(self, resourceFamily='', resourceModel='', attributeValues=[], showAllDomains=False, resourceFullName='', exactName=True, includeSubResources=True, resourceAddress='', resourceUniqueIdentifier='', maxResults=500, includeExcludedResources=False): - """ - Retrieves resources that match all the specified search parameters, and all reservations associated with the search results. - - :param str resourceFamily: Specify the name of the resource family. - :param str resourceModel: Specify the resource model. - :param list[AttributeNameValue] attributeValues: Specify an array of one or more attributes and attribute values. - :param bool showAllDomains: Show all domains associated with the logged in user. - :param str resourceFullName: Specify part of or the full name of the resource. - :param bool exactName: Specify whether to search the exact given name or not. - :param bool includeSubResources: Specify whether to retrieve the sub resources once the parent matches the name. - :param str resourceAddress: Specify the resource address. Can be partial (e.g. '192.168.'). - :param str resourceUniqueIdentifier: Specify the resource unique identifier. - :param int maxResults: Specify the maximum number of resources to return. - :param bool includeExcludedResources: Specify whether to retrieve resources that are excluded - - :rtype: FindResourceListInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'FindResources'), ('resourceFamily', resourceFamily), ('resourceModel', resourceModel), ('attributeValues', CommonAPIRequest.toContainer(attributeValues)), ('showAllDomains', showAllDomains), ('resourceFullName', resourceFullName), ('exactName', exactName), ('includeSubResources', includeSubResources), ('resourceAddress', resourceAddress), ('resourceUniqueIdentifier', resourceUniqueIdentifier), ('maxResults', maxResults), ('includeExcludedResources', includeExcludedResources)]))
- -
[docs] def FindResourcesInTimeRange(self, resourceFamily='', resourceModel='', fromTime='', untilTime='', attributeValues=[], showAllDomains=False, resourceFullName='', exactName=True, includeSubResources=True, resourceAddress='', resourceUniqueIdentifier='', maxResults=500): - """ - Retrieves resources that match all the specified search parameters, and all reservations in the specified time range associated with the search results. - - :param str resourceFamily: Specify the name of the resource family. - :param str resourceModel: Specify the resource model. - :param str fromTime: Specify from which future time and date to check the resource's availability. - :param str untilTime: Specify until which time and date to check the resource's availability. - :param list[AttributeNameValue] attributeValues: Specify an array of one or more attributes and attribute values. - :param bool showAllDomains: Show all domains associated with the logged in user. - :param str resourceFullName: Specify part of or the full name of the resource. - :param bool exactName: Specify whether to search the exact given name or not. - :param bool includeSubResources: Specify whether to retrieve the sub resources once the parent matches the name. - :param str resourceAddress: Specify the resource address. Can be partial (e.g. '192.168.'). - :param str resourceUniqueIdentifier: Specify the resource unique identifier. - :param int maxResults: Specify the maximum number of resources to return. - - :rtype: FindResourceListInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'FindResourcesInTimeRange'), ('resourceFamily', resourceFamily), ('resourceModel', resourceModel), ('fromTime', fromTime), ('untilTime', untilTime), ('attributeValues', CommonAPIRequest.toContainer(attributeValues)), ('showAllDomains', showAllDomains), ('resourceFullName', resourceFullName), ('exactName', exactName), ('includeSubResources', includeSubResources), ('resourceAddress', resourceAddress), ('resourceUniqueIdentifier', resourceUniqueIdentifier), ('maxResults', maxResults)]))
- -
[docs] def GetReservationResourcesPositions(self, reservationId=''): - """ - Retrieves the x/y coordinates for all resources in the reservation's diagram. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: ReservationDiagramLayoutResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetReservationResourcesPositions'), ('reservationId', reservationId)]))
- -
[docs] def GetRoutesSolution(self, reservationId='', sourceResourcesFullPath=[], targetResourcesFullPath=[], mappingType='', maxHops=0, isShared=False): - """ - Calculates possible routes between the supplied endpoints and returns their details, without saving, connecting or modifying the reservation in any way. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] sourceResourcesFullPath: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RootResourceName/ResourceName - :param list[str] targetResourcesFullPath: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RootResourceName/ResourceName - :param str mappingType: Specify bidirectional or unidirectional as the mapping type. - :param int maxHops: Specify the maximum number or allowed hops. - :param bool isShared: Specify whether these routes are shared. Shared routes can be used in more than one reservation. - - :rtype: EndPointConnectionInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetRoutesSolution'), ('reservationId', reservationId), ('sourceResourcesFullPath', sourceResourcesFullPath), ('targetResourcesFullPath', targetResourcesFullPath), ('mappingType', mappingType), ('maxHops', maxHops), ('isShared', isShared)]))
- -
[docs] def GenerateUtilizationReport(self, resourceFamilyName='', fromDate='', toDate='', resourceFullName='', resourceModelName='', includeChildResources=False, groupBy='', utilizationReportType=''): - """ - Generates a utilization report for the specified resources. To generate a report for all resources, leave the resourceFullName and resourceModel parameters blank. - - :param str resourceFamilyName: Specify the name of the resource family. - :param str fromDate: Specify the start time and date. - :param str toDate: Specify the end time and date. - :param str resourceFullName: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName. - :param str resourceModelName: Specify the resource model. - :param bool includeChildResources: Specify whether to include child resources utilization. - :param str groupBy: Specify how to group the utilization results: Resource, User, or Machine - :param str utilizationReportType: Specify the report type: Lock or Mapping. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GenerateUtilizationReport'), ('resourceFamilyName', resourceFamilyName), ('fromDate', fromDate), ('toDate', toDate), ('resourceFullName', resourceFullName), ('resourceModelName', resourceModelName), ('includeChildResources', includeChildResources), ('groupBy', groupBy), ('utilizationReportType', utilizationReportType)]))
- -
[docs] def GetActiveTopologyNames(self): - """ - Retrieves all active reserved topologies for the current (logged in) user. - - - :rtype: TopologyListInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetActiveTopologyNames')]))
- -
[docs] def GetAllUsersDetails(self): - """ - Retrieves all users and their settings. - - - :rtype: UsersInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetAllUsersDetails')]))
- -
[docs] def GetAttributeValue(self, resourceFullPath='', attributeName=''): - """ - Retrieves the value of the specified attribute - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str attributeName: Specify the attribute name. - - :rtype: AttributeValueInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetAttributeValue'), ('resourceFullPath', resourceFullPath), ('attributeName', attributeName)]))
- -
[docs] def GetCategoriesOfTopology(self, topologyPath=''): - """ - Retrieves all categories of given topology. - - :param str topologyPath: Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - - :rtype: CategoriesOfTopologyInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetCategoriesOfTopology'), ('topologyPath', topologyPath)]))
- -
[docs] def GetCurrentReservations(self, reservationOwner=''): - """ - Retrieves current reservations for the specified owner. If an owner is not provided, this method retrieves all current reservations. - - :param str reservationOwner: Specify the user name of the reservation owner. - - :rtype: GetActiveReservationsResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetCurrentReservations'), ('reservationOwner', reservationOwner)]))
- -
[docs] def GetDomainDetails(self, domainName=''): - """ - Retrieves a domain's details including groups, topologies and resources associated with the specified domain. - - :param str domainName: Specify the name of the domain. - - :rtype: DomainInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetDomainDetails'), ('domainName', domainName)]))
- -
[docs] def GetFolderContent(self, fullPath='', showAllDomains=False): - """ - Retrieves content for the specified path. - - :param str fullPath: Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder. - :param bool showAllDomains: Show all domains associated with the logged in user. - - :rtype: ContentListInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetFolderContent'), ('fullPath', fullPath), ('showAllDomains', showAllDomains)]))
- -
[docs] def MoveFolder(self, originalFolder='', targetFolder=''): - """ - Move a folder (and all its content, including sub folders) in the folder hierarchy. - - :param str originalFolder: Path of the folder to be moved. - :param str targetFolder: The path of the new containing folder. To move a folder to root, value should be empty. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'MoveFolder'), ('originalFolder', originalFolder), ('targetFolder', targetFolder)]))
- -
[docs] def GetGroupDomains(self, groupName=''): - """ - Retrieves all domains associated with a group. - - :param str groupName: Specify the name of the group. - - :rtype: GroupInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetGroupDomains'), ('groupName', groupName)]))
- -
[docs] def GetGroupsDetails(self): - """ - Retrieves all groups, including members, roles and associated domains for each group. - - - :rtype: GroupsInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetGroupsDetails')]))
- -
[docs] def GetLockedResources(self, user='', machine='', folderFullPath=''): - """ - Retrieves locked resources for a specific user, a specific computer, or a specific folder. If none of these are specified, this method retrieves the list of locked resources for all users, on all machines, in all folders. - - :param str user: Specify a user name to retrieve locked resources for that user. - :param str machine: Specify a machine name to retrieve locked resources for that computer. - :param str folderFullPath: Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder. - - :rtype: ReservationInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetLockedResources'), ('user', user), ('machine', machine), ('folderFullPath', folderFullPath)]))
- -
[docs] def GetReservationDetails(self, reservationId='', disableCache=False): - """ - Retrieves all details and parameters for a specified reservation, including its resources, routes and route segments, topologies, and reservation conflicts.The data cached for 5 seconds. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param bool disableCache: Specify if the reservation detail is new or cached - - :rtype: GetReservationDescriptionResponseInfo - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/GetReservationDetails', OrderedDict([('reservationId', reservationId), ('disableCache', disableCache)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'GetReservationDetails'), ('reservationId', reservationId), ('disableCache', disableCache)])) - return result
- -
[docs] def GetReservationAppImage(self, reservationId='', appName=''): - """ - Retrieves the photo of an app. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str appName: Specify the name of the app. - - :rtype: GetReservationAppImageResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetReservationAppImage'), ('reservationId', reservationId), ('appName', appName)]))
- -
[docs] def GetReservationStatus(self, reservationId=''): - """ - Retrieves status for a specified reservation - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: ReservationSlimStatusInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetReservationStatus'), ('reservationId', reservationId)]))
- -
[docs] def GetReservationInputs(self, reservationId=''): - """ - Retrieves all topology inputs for a specified reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: GetReservationInputsResponseInfo - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/GetReservationInputs', OrderedDict([('reservationId', reservationId)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'GetReservationInputs'), ('reservationId', reservationId)])) - return result
- -
[docs] def GetReservationRemainingTime(self, reservationId=''): - """ - Retrieves the number of minutes remaining until the end of a specified reservation. If the reservation is running overtime, the remaining time will be reported as -1 minutes. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: GetReservationRemainingTimeInfo - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/GetReservationRemainingTime', OrderedDict([('reservationId', reservationId)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'GetReservationRemainingTime'), ('reservationId', reservationId)])) - return result
- -
[docs] def GetResourceAvailability(self, resourcesNames=[], showAllDomains=False): - """ - Get resource availability for the resources. - - :param list[str] resourcesNames: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - :param bool showAllDomains: Show all domains associated with the logged in user. - - :rtype: FindResourceListInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetResourceAvailability'), ('resourcesNames', resourcesNames), ('showAllDomains', showAllDomains)]))
- -
[docs] def GetResourceAvailabilityInTimeRange(self, resourcesNames=[], startTime='', endTime='', showAllDomains=False): - """ - Get resource availability for the resources in the specified time range. - - :param list[str] resourcesNames: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - :param str startTime: The start time of the reservation. - :param str endTime: The end time of the reservation. - :param bool showAllDomains: Show all domains associated with the logged in user. - - :rtype: FindResourceListInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetResourceAvailabilityInTimeRange'), ('resourcesNames', resourcesNames), ('startTime', startTime), ('endTime', endTime), ('showAllDomains', showAllDomains)]))
- -
[docs] def GetResourceCommands(self, resourceFullPath=''): - """ - Retrieves driver commands and parameters for a specified resource. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - - :rtype: ResourceCommandListInfo - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/GetResourceCommands', OrderedDict([('resourceFullPath', resourceFullPath)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'GetResourceCommands'), ('resourceFullPath', resourceFullPath)])) - return result
- -
[docs] def GetServiceCommands(self, serviceName=''): - """ - Retrieves driver commands and parameters for a specified service. - - :param str serviceName: Specify the service name. - - :rtype: ResourceCommandListInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetServiceCommands'), ('serviceName', serviceName)]))
- -
[docs] def GetResourceConnectedCommands(self, resourceFullPath=''): - """ - Gets commands which are added to the resource from connected resources such as power or virtualization. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - - :rtype: ResourceCommandListInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetResourceConnectedCommands'), ('resourceFullPath', resourceFullPath)]))
- -
[docs] def GetResourceDetails(self, resourceFullPath='', showAllDomains=False): - """ - Retrieves resource descriptions for the specified resource, and a matrix of all its associated attributes and attribute values. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param bool showAllDomains: Show all domains associated with the logged in user. - - :rtype: ResourceInfo - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/GetResourceDetails', OrderedDict([('resourceFullPath', resourceFullPath), ('showAllDomains', showAllDomains)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'GetResourceDetails'), ('resourceFullPath', resourceFullPath), ('showAllDomains', showAllDomains)])) - return result
- -
[docs] def GetResourceList(self, folderFullPath=''): - """ - Retrieves resources and resource values for the specified folder path. - - :param str folderFullPath: Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder. - - :rtype: ResourceListInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetResourceList'), ('folderFullPath', folderFullPath)]))
- -
[docs] def GetResourceLiveStatus(self, resourceFullPath=''): - """ - Gets the live status of the resource. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA. - - :rtype: ResourceLiveStatusInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetResourceLiveStatus'), ('resourceFullPath', resourceFullPath)]))
- -
[docs] def GetReservationsLiveStatus(self, reservationsId=[]): - """ - Gets the live status of the reservations. - - :param list[str] reservationsId: Specifies a string array that represents reservation unique identifiers. - - :rtype: ReservationLiveStatusInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetReservationsLiveStatus'), ('reservationsId', reservationsId)]))
- -
[docs] def GetResourceMappings(self, resources=[]): - """ - Retrieves mappings for a list of one or more resources. - - :param list[str] resources: Specify a list of resources. - - :rtype: ResourceMappingsInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetResourceMappings'), ('resources', resources)]))
- -
[docs] def GetRouteSegments(self, resource=''): - """ - Retrieves all the ports on the route from the selected endpoint to the target endpoint. - - :param str resource: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - - :rtype: EndPointConnectionInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetRouteSegments'), ('resource', resource)]))
- -
[docs] def GetScheduledReservations(self, fromTime='', untilTime='', ownerName=''): - """ - Retrieves all reservations scheduled between the specified start and end times. - - :param str fromTime: Specify from which time and date to search. - :param str untilTime: Specify until which time and date to search. - :param str ownerName: Specify reservation owner name - - :rtype: GetReservationsInRangeResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetScheduledReservations'), ('fromTime', fromTime), ('untilTime', untilTime), ('ownerName', ownerName)]))
- -
[docs] def CreateDraft(self, topology='', draftName=''): - """ - Create a private draft of a blueprint. - - :param str topology: Specify the topology id, or name or the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - :param str draftName: Optionally specify the name of the draft. Leave empty for an automatically generated name based on original - - :rtype: DraftInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CreateDraft'), ('topology', topology), ('draftName', draftName)]))
- -
[docs] def PromoteDraft(self, draft=''): - """ - Overrwrite the original blueprint with the draft, and delete the draft. - - :param str draft: Specify the draft id, or name or the full path from the root to the draft, separated by slashes. For example: FolderName/Topologies/DraftName. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'PromoteDraft'), ('draft', draft)]))
- -
[docs] def DeleteDraft(self, draft=''): - """ - Delete a private draft of a blueprint. - - :param str draft: Specify the draft id, or name or the full path from the root to the draft, separated by slashes. For example: FolderName/Topologies/DraftName. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'DeleteDraft'), ('draft', draft)]))
- -
[docs] def GetServerDateAndTime(self): - """ - Retrieves the server’s UTC date and time. - - - :rtype: ServerTimeInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetServerDateAndTime')]))
- -
[docs] def GetTopologyCommands(self, reservationId=''): - """ - [Deprecated] Retrieves driver commands and parameters for a specified reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: TopologyCommandListInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetTopologyCommands'), ('reservationId', reservationId)]))
- -
[docs] def GetEnvironmentCommands(self, reservationId=''): - """ - Retrieves driver commands and parameters for a specified reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: EnvironmentCommandListInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetEnvironmentCommands'), ('reservationId', reservationId)]))
- -
[docs] def GetTopologyUrls(self, topologyFullPath=''): - """ - Retrieves topology urls to the blueprint for every domain that the blueprint belongs to. - - :param str topologyFullPath: Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - - :rtype: TopologyUrlsInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetTopologyUrls'), ('topologyFullPath', topologyFullPath)]))
- -
[docs] def GetTopologyDetails(self, topologyFullPath=''): - """ - Retrieves all resources and attributes associated with the specified topology. - - :param str topologyFullPath: Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - - :rtype: TopologyInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetTopologyDetails'), ('topologyFullPath', topologyFullPath)]))
- -
[docs] def GetTopologiesByCategory(self, categoryName='', categoryValue=''): - """ - Retrives full topology path for each topology that contains given category name (and value if entered). - - :param str categoryName: Specify the category's name, If category name is not provided will return all topologies in domain. - :param str categoryValue: Specify the category's value/sub category - - :rtype: TopologiesByCategoryInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetTopologiesByCategory'), ('categoryName', categoryName), ('categoryValue', categoryValue)]))
- -
[docs] def GetTopologyCategories(self): - """ - Retrieves all root categories from 'Environment' catalog. - - - :rtype: CategoryListInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetTopologyCategories')]))
- -
[docs] def GetCategories(self, type=''): - """ - Retrieves all the logged in user's root categories and sub categories for Topologies and Services from the 'Environment' catalog. - - :param str type: Specify the categoriy type: Services, Environment or empty for both. - - :rtype: CategoryListBriefInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetCategories'), ('type', type)]))
- -
[docs] def GetUserDetails(self, username=''): - """ - Retrieves the specified user's configuration settings and associated domains. - - :param str username: Specify the name of the user. - - :rtype: UserInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetUserDetails'), ('username', username)]))
- -
[docs] def GetAbstractTemplateList(self): - """ - Retrieve a list of abstract templates. - - - :rtype: AbstractTemplateShortInfoList - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetAbstractTemplateList')]))
- -
[docs] def GetServices(self, categoryName='', serviceName=''): - """ - Retrieve a list of services and their attributes. - - :param str categoryName: The name of the category of the services you want to receive. - :param str serviceName: The name of the service you want to receive. - - :rtype: ServicesListInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetServices'), ('categoryName', categoryName), ('serviceName', serviceName)]))
- -
[docs] def GetReservationServicesPositions(self, reservationId=''): - """ - Retrieves the x/y coordinates for all services in the reservation's diagram. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: ReservationDiagramLayoutResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetReservationServicesPositions'), ('reservationId', reservationId)]))
- -
[docs] def IncludeResource(self, resourceFullPath=''): - """ - Includes a specified resource. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'IncludeResource'), ('resourceFullPath', resourceFullPath)]))
- -
[docs] def IncludeResources(self, resourcesFullPath=[]): - """ - Includes the specified resources. - - :param list[str] resourcesFullPath: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'IncludeResources'), ('resourcesFullPath', resourcesFullPath)]))
- -
[docs] def LockResource(self, reservationId='', resourceFullPath=''): - """ - Locks a specified resource. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'LockResource'), ('reservationId', reservationId), ('resourceFullPath', resourceFullPath)]))
- -
[docs] def LockResources(self, reservationId='', resourcesFullPath=[]): - """ - Locks multiple resources. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] resourcesFullPath: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'LockResources'), ('reservationId', reservationId), ('resourcesFullPath', resourcesFullPath)]))
- -
[docs] def Logoff(self): - """ - Logs out the current user. - - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'Logoff')]))
- -
[docs] def Logon(self, username='', password='', domainName='Global'): - """ - Logs in a user. If no user is specified, this method logs in the current user. If no domain is specified, this method logs the user in to the global (default) domain. - - :param str username: Username to logon with. - :param str password: Specify the user’s login password. - :param str domainName: Specify the name of the domain. If no domain is specified, it logs the user in to the global (default) domain. - - :rtype: LogonResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'Logon'), ('username', username), ('password', password), ('domainName', domainName)]))
- -
[docs] def LogoutTNSession(self, reservationId='', resourceFullPath='', consolePortsFullPath=[], baudRate=0): - """ - Logs the user out from a console port TN session. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param list[str] consolePortsFullPath: Specify a list of console ports according to their location in the Resource Explorer. Include the full path from the root to each console port, separated by slashes. For example: Console/Ports/PortName. - :param int baudRate: Specify the baud rate to apply to the ports. - - :rtype: CommandExecutionCompletedResultInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'LogoutTNSession'), ('reservationId', reservationId), ('resourceFullPath', resourceFullPath), ('consolePortsFullPath', consolePortsFullPath), ('baudRate', baudRate)]))
- -
[docs] def MapPorts(self, sourcePort='', destinationPort='', mappingType=''): - """ - Maps a pair of ports on a physical (L1) switch. - - :param str sourcePort: Specify the source port. - :param str destinationPort: Specify the destination port. - :param str mappingType: Specify bidirectional or unidirectional as the mapping type. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'MapPorts'), ('sourcePort', sourcePort), ('destinationPort', destinationPort), ('mappingType', mappingType)]))
- -
[docs] def PowerCycleResource(self, reservationId='', resourceFullPath='', powerPortsFullPath=[], delay=0): - """ - Cycles the power options for resource power ports. - - :param str reservationId: Specify the reservation’s unique identifier. Admin users may leave this parameter blank to perform power operations on excluded resources. - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param list[str] powerPortsFullPath: Specify the list of power ports to use in this operation. Include the full path from the root resource to each power port, separated by slashes. For example: Switch20/Blade5/PowerPort1. Leave blank to perform the power operation on all of the specified resource’s power ports. - :param float delay: Specify the number of seconds to delay between each power cycle. - - :rtype: CommandExecutionCompletedResultInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'PowerCycleResource'), ('reservationId', reservationId), ('resourceFullPath', resourceFullPath), ('powerPortsFullPath', powerPortsFullPath), ('delay', delay)]))
- -
[docs] def PowerOffResource(self, reservationId='', resourceFullPath='', powerPortsFullPath=[]): - """ - Powers off specified power ports. - - :param str reservationId: Specify the reservation’s unique identifier. Admin users may leave this parameter blank to perform power operations on excluded resources. - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param list[str] powerPortsFullPath: Specify the list of power ports to use in this operation. Include the full path from the root resource to each power port, separated by slashes. For example: Switch20/Blade5/PowerPort1. Leave blank to perform the power operation on all of the specified resource’s power ports. - - :rtype: CommandExecutionCompletedResultInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'PowerOffResource'), ('reservationId', reservationId), ('resourceFullPath', resourceFullPath), ('powerPortsFullPath', powerPortsFullPath)]))
- -
[docs] def PowerOnResource(self, reservationId='', resourceFullPath='', powerPortsFullPath=[]): - """ - Powers on resource power ports. - - :param str reservationId: Specify the reservation’s unique identifier. Admin users may leave this parameter blank to perform power operations on excluded resources. - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param list[str] powerPortsFullPath: Specify the list of power ports to use in this operation. Include the full path from the root resource to each power port, separated by slashes. For example: Switch20/Blade5/PowerPort1. Leave blank to perform the power operation on all of the specified resource’s power ports. - - :rtype: CommandExecutionCompletedResultInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'PowerOnResource'), ('reservationId', reservationId), ('resourceFullPath', resourceFullPath), ('powerPortsFullPath', powerPortsFullPath)]))
- -
[docs] def RemoveAttributeRestrictedValues(self, removeAttributeRestrictionRequests=[]): - """ - remove attribute restrictions from family/model - - :param list[RemoveRestrictionRequest] removeAttributeRestrictionRequests: Attribute restrictions to remove". - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RemoveAttributeRestrictedValues'), ('removeAttributeRestrictionRequests', CommonAPIRequest.toContainer(removeAttributeRestrictionRequests))]))
- -
[docs] def RecheckConflicts(self, reservationId=''): - """ - Updates the list of available resources for a reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RecheckConflicts'), ('reservationId', reservationId)]))
- -
[docs] def ReleaseResourcesFromReservation(self, reservationId='', resourcesFullPath=[]): - """ - Releases occupied testing resources that would not otherwise be available until the end of the current reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] resourcesFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ReleaseResourcesFromReservation'), ('reservationId', reservationId), ('resourcesFullPath', resourcesFullPath)]))
- -
[docs] def ReleaseTopologyResources(self, reservationId='', topologyFullPath=''): - """ - Releases resources used in topology. A reservation will not end until all used resources are released. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str topologyFullPath: Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ReleaseTopologyResources'), ('reservationId', reservationId), ('topologyFullPath', topologyFullPath)]))
- -
[docs] def RemoveGroupsFromDomain(self, domainName='', groupNames=[]): - """ - Remove groups from a domain. - - :param str domainName: Specify the name of the domain. - :param list[str] groupNames: Specify an array of one or more groups. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RemoveGroupsFromDomain'), ('domainName', domainName), ('groupNames', groupNames)]))
- -
[docs] def RemovePermittedUsersFromReservation(self, reservationId='', usernames=[]): - """ - Remove one or more permitted users from the specified reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] usernames: List of permitted users to remove from the reservation. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RemovePermittedUsersFromReservation'), ('reservationId', reservationId), ('usernames', usernames)]))
- -
[docs] def RemoveResourcesFromDomain(self, domainName='', resourcesNames=[]): - """ - Remove resources from a domain. - - :param str domainName: Specify the name of the domain. - :param list[str] resourcesNames: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RemoveResourcesFromDomain'), ('domainName', domainName), ('resourcesNames', resourcesNames)]))
- -
[docs] def RemoveResourcesFromReservation(self, reservationId='', resourcesFullPath=[], deleteDeployedApps=True): - """ - Unlocks and removes resources from a reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] resourcesFullPath: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - :param bool deleteDeployedApps: Specify false to block deletion of deployed apps when removing them from reservation - only applies to resources of that are deployed apps, when applied to other resources argument is ignored. Parameter is optional and can be left empty - - :rtype: ReserveResourcesResponseInfo - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/RemoveResourcesFromReservation', OrderedDict([('reservationId', reservationId), ('resourcesFullPath', resourcesFullPath), ('deleteDeployedApps', deleteDeployedApps)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'RemoveResourcesFromReservation'), ('reservationId', reservationId), ('resourcesFullPath', resourcesFullPath), ('deleteDeployedApps', deleteDeployedApps)])) - return result
- -
[docs] def RemoveConnectorsFromReservation(self, reservationId='', endpoints=[]): - """ - Removes the mapped connector between given end points. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] endpoints: The list of removed endpoints. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RemoveConnectorsFromReservation'), ('reservationId', reservationId), ('endpoints', CommonAPIRequest.toContainer(endpoints))]))
- -
[docs] def RemoveRoutesFromReservation(self, reservationId='', endpoints=[], mappingType=''): - """ - Disconnects a list of endpoints and removes the mapped route between them. Will only disconnect endpoints using resources reserved to the logged-in user . - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] endpoints: The list of removed endpoints. - :param str mappingType: Specify bidirectional or unidirectional as the mapping type. - - :rtype: EndPointConnectionInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RemoveRoutesFromReservation'), ('reservationId', reservationId), ('endpoints', CommonAPIRequest.toContainer(endpoints)), ('mappingType', mappingType)]))
- -
[docs] def RemoveTopologiesFromDomain(self, domainName='', topologyNames=[]): - """ - Removes a list of one or more topologies from a domain. - - :param str domainName: Specify the name of the domain. - :param list[str] topologyNames: Specify a list of topology names. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RemoveTopologiesFromDomain'), ('domainName', domainName), ('topologyNames', topologyNames)]))
- -
[docs] def RemoveUsersFromGroup(self, usernames=[], groupName=''): - """ - Removes a list of one or more users from the specified group. - - :param list[str] usernames: Specify an array of one or more users. - :param str groupName: Specify the name of the group. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RemoveUsersFromGroup'), ('usernames', usernames), ('groupName', groupName)]))
- -
[docs] def RemoveTopologyCategory(self, topologyFullPath='', categoryName=''): - """ - Removes a category from given topology. - - :param str topologyFullPath: Specify the topology (name or full path), from which to remove the category. For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - :param str categoryName: Specify the category's name which we want to remove. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RemoveTopologyCategory'), ('topologyFullPath', topologyFullPath), ('categoryName', categoryName)]))
- -
[docs] def MoveResources(self, resourcesName=[], targetFolder=''): - """ - Allows to change the folder that the specified root resources belong to. - - :param list[str] resourcesName: Specify the name of the root resources to move to the new target folder. - :param str targetFolder: The path of the target folder. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'MoveResources'), ('resourcesName', resourcesName), ('targetFolder', targetFolder)]))
- -
[docs] def RenameResource(self, resourceFullPath='', resourceName=''): - """ - Renames the specified resource. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str resourceName: Specify a new resource name. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RenameResource'), ('resourceFullPath', resourceFullPath), ('resourceName', resourceName)]))
- -
[docs] def ResetResourceDriver(self, reservationId='', resourceFullPath=''): - """ - Cancel the currently executing command, remove all pending command executions and reset the driver to its initial state. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - - :rtype: CommandExecutionCompletedResultInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ResetResourceDriver'), ('reservationId', reservationId), ('resourceFullPath', resourceFullPath)]))
- -
[docs] def RemoveAppFromReservation(self, reservationId='', appName=''): - """ - Remove a deployed App resource from existing reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str appName: Specify the name of the App. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RemoveAppFromReservation'), ('reservationId', reservationId), ('appName', appName)]))
- -
[docs] def RemoveServicesFromReservation(self, reservationId='', services=[]): - """ - Remove services and apps from existing reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] services: List of aliases. This list should contain the aliases for both the services and apps that should be removed. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RemoveServicesFromReservation'), ('reservationId', reservationId), ('services', services)]))
- -
[docs] def SaveReservationAsTopology(self, reservationId='', folderFullPath='', topologyName='', includeInactiveRoutes=False): - """ - Creates a topology from an existing reservation. Leave the folder path blank to save the topology directly under the root. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str folderFullPath: Full container folder path where the new topology will be saved. leaving the folder path empty will try saving the topology under the root. For example: FolderName/FolderNameA. - :param str topologyName: Specify the new name for the new topology. - :param bool includeInactiveRoutes: Include disconnected routes in the created topology - - :rtype: TopologyInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SaveReservationAsTopology'), ('reservationId', reservationId), ('folderFullPath', folderFullPath), ('topologyName', topologyName), ('includeInactiveRoutes', includeInactiveRoutes)]))
- -
[docs] def SecureLogon(self, token='', domainName='Global'): - """ - Logs in a user with a token. If no domain is specified, this method logs the user in to the global (default) domain. - - :param str token: Token to logon with. - :param str domainName: Specify the name of the domain. If no domain is specified, it logs the user in to the global (default) domain. - - :rtype: LogonResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SecureLogon'), ('token', token), ('domainName', domainName)]))
- -
[docs] def SetAttributeValue(self, resourceFullPath='', attributeName='', attributeValue=''): - """ - Sets the value of the specified attribute. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str attributeName: Specify the attribute name. - :param str attributeValue: Specify the attribute’s value. - - :rtype: str - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/SetAttributeValue', OrderedDict([('resourceFullPath', resourceFullPath), ('attributeName', attributeName), ('attributeValue', attributeValue)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'SetAttributeValue'), ('resourceFullPath', resourceFullPath), ('attributeName', attributeName), ('attributeValue', attributeValue)])) - return result
- -
[docs] def AddValueToLookupAttribute(self, attributeName='', newValue='', makeDefault=False): - """ - Adds a value to an existing lookup attribute. - - :param str attributeName: Specify the attribute's name. - :param str newValue: Specify the value to add to the attribute. - :param bool makeDefault: Set the new value as the attribute's default value. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddValueToLookupAttribute'), ('attributeName', attributeName), ('newValue', newValue), ('makeDefault', makeDefault)]))
- -
[docs] def RemoveValueFromLookupAttribute(self, attributeName='', removeValue='', defaultValue=''): - """ - Removes an existing value from a given lookup attribute. - - :param str attributeName: Specify the lookup attribute name. - :param str removeValue: Specify the attribute value to remove from the attribute. - :param str defaultValue: Specify the new default value for this attribute (required if removing the attribute's current default value). - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RemoveValueFromLookupAttribute'), ('attributeName', attributeName), ('removeValue', removeValue), ('defaultValue', defaultValue)]))
- -
[docs] def GetValuesForLookupAttribute(self, attributeName=''): - """ - Retrieve the list of existing values for a lookup attribute. - - :param str attributeName: Specify the lookup attribute name. - - :rtype: LookupValuesInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetValuesForLookupAttribute'), ('attributeName', attributeName)]))
- -
[docs] def SetAttributesValues(self, resourcesAttributesUpdateRequests=[]): - """ - Sets new attribute values for the specified resources. - - :param list[ResourceAttributesUpdateRequest] resourcesAttributesUpdateRequests: Specify a list of resources, attribute names, and new attribute values (up to 10000 rows). For example: [ResourceAttributesUpdateRequest('resourceFullName', [AttributeNameValue('attribute_name', 'attribute_value')]] - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetAttributesValues'), ('resourcesAttributesUpdateRequests', CommonAPIRequest.toContainer(resourcesAttributesUpdateRequests))]))
- -
[docs] def SetSandboxData(self, reservationId='', sandboxDataKeyValues=[]): - """ - Sets the SandboxData. Provide a key:value input. If the key exists it will override the value, if the key doesn't exist a new key will be created. The value is a string. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[SandboxDataKeyValue] sandboxDataKeyValues: sandboxDataKeyValues - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetSandboxData'), ('reservationId', reservationId), ('sandboxDataKeyValues', CommonAPIRequest.toContainer(sandboxDataKeyValues))]))
- -
[docs] def GetSandboxData(self, reservationId=''): - """ - Get the SandboxData content. Returns the whole list in a key:value format. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: GetSandboxDataInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetSandboxData'), ('reservationId', reservationId)]))
- -
[docs] def ClearSandboxData(self, reservationId=''): - """ - Clears the SandboxData content. Clears the whole list. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ClearSandboxData'), ('reservationId', reservationId)]))
- -
[docs] def SetBaudRate(self, reservationId='', resourceFullPath='', consolePortsFullPath=[], baudRate=0): - """ - Sets the baud rate for one or more console ports. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param list[str] consolePortsFullPath: Specify a list of console ports according to their location in the Resource Explorer. Include the full path from the root to each console port, separated by slashes. For example: Console/Ports/PortName. - :param int baudRate: Specify the baud rate to apply to the ports. - - :rtype: CommandExecutionCompletedResultInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetBaudRate'), ('reservationId', reservationId), ('resourceFullPath', resourceFullPath), ('consolePortsFullPath', consolePortsFullPath), ('baudRate', baudRate)]))
- -
[docs] def SetConsoleForXModem(self, reservationId='', resourceFullPath='', consolePortsFullPath=[], baudRate=0): - """ - Sets one or more consoles for Xmodem. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param list[str] consolePortsFullPath: Specify a list of console ports according to their location in the Resource Explorer. Include the full path from the root to each console port, separated by slashes. For example: Console/Ports/PortName. - :param int baudRate: Specify the baud rate to apply to the ports. - - :rtype: CommandExecutionCompletedResultInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetConsoleForXModem'), ('reservationId', reservationId), ('resourceFullPath', resourceFullPath), ('consolePortsFullPath', consolePortsFullPath), ('baudRate', baudRate)]))
- -
[docs] def SetResourceLiveStatus(self, resourceFullName='', liveStatusName='', additionalInfo=''): - """ - Sets the live status of the resource - - :param str resourceFullName: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA. - :param str liveStatusName: Resource live status name - :param str additionalInfo: Resource live status additional info - - :rtype: str - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/SetResourceLiveStatus', OrderedDict([('resourceFullName', resourceFullName), ('liveStatusName', liveStatusName), ('additionalInfo', additionalInfo)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'SetResourceLiveStatus'), ('resourceFullName', resourceFullName), ('liveStatusName', liveStatusName), ('additionalInfo', additionalInfo)])) - return result
- -
[docs] def SetReservationLiveStatus(self, reservationId='', liveStatusName='', additionalInfo=''): - """ - Sets the live status of the reservation - - :param str reservationId: Specifies the string that represents the reservation’s unique identifier. - :param str liveStatusName: Reservation live status name - :param str additionalInfo: Reservation live status additional info - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetReservationLiveStatus'), ('reservationId', reservationId), ('liveStatusName', liveStatusName), ('additionalInfo', additionalInfo)]))
- -
[docs] def SetResourceSharedState(self, reservationId='', resourcesFullName=[], isShared=False): - """ - Sets the resource sharing state. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] resourcesFullName: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - :param bool isShared: Specify whether to allow sharing of the resource. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetResourceSharedState'), ('reservationId', reservationId), ('resourcesFullName', resourcesFullName), ('isShared', isShared)]))
- -
[docs] def SetRouteAttributes(self, reservationId='', sourceResourceFullPath='', targetResourceFullPath='', applyChangesTo='', attributeRequests=[]): - """ - Sets attributes and associated values for a specified route. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str sourceResourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str targetResourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str applyChangesTo: Specify on which resources to apply the attribute changes: Source/Target/All.Source refers to the resource connected to the source endpoint of the route. Target refers to the resource connected to the target endpoint of the route. All encompasses all route resources. - :param list[str] attributeRequests: Specify an array of attributes and associated attribute values. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetRouteAttributes'), ('reservationId', reservationId), ('sourceResourceFullPath', sourceResourceFullPath), ('targetResourceFullPath', targetResourceFullPath), ('applyChangesTo', applyChangesTo), ('attributeRequests', attributeRequests)]))
- -
[docs] def SetRouteAttributesViaAlias(self, reservationId='', routeAlias='', applyChangesTo='', attributeRequests=[]): - """ - Sets attributes and associated values for a route specified via its alias. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str routeAlias: Specify the route’s alias. - :param str applyChangesTo: Specify on which resources to apply the attribute changes: Source/Target/All.Source refers to the resource connected to the source endpoint of the route. Target refers to the resource connected to the target endpoint of the route. All encompasses all route resources. - :param list[str] attributeRequests: Specify an array of attributes and associated attribute values. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetRouteAttributesViaAlias'), ('reservationId', reservationId), ('routeAlias', routeAlias), ('applyChangesTo', applyChangesTo), ('attributeRequests', attributeRequests)]))
- -
[docs] def SetConnectorAttributes(self, reservationId='', sourceResourceFullName='', targetResourceFullName='', attributeRequests=[]): - """ - Sets attributes and associated values for a specified connector. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str sourceResourceFullName: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str targetResourceFullName: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param list[AttributeNameValue] attributeRequests: Specify a matrix of attributes and associated attribute values. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetConnectorAttributes'), ('reservationId', reservationId), ('sourceResourceFullName', sourceResourceFullName), ('targetResourceFullName', targetResourceFullName), ('attributeRequests', CommonAPIRequest.toContainer(attributeRequests))]))
- -
[docs] def SetConnectorAttributesViaAlias(self, reservationId='', connectorAlias='', attributeRequests=[]): - """ - Sets attributes and associated values for a connector specified via its alias. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str connectorAlias: Specify the connector’s alias. - :param list[AttributeNameValue] attributeRequests: Specify a matrix of attributes and associated attribute values. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetConnectorAttributesViaAlias'), ('reservationId', reservationId), ('connectorAlias', connectorAlias), ('attributeRequests', CommonAPIRequest.toContainer(attributeRequests))]))
- -
[docs] def SetGroupDomainPermissions(self, domainName='', groupName='', viewOnly=False): - """ - Set the permission level of a group in domain. - - :param str domainName: Specify the name of the domain. - :param str groupName: Specify the group name. - :param bool viewOnly: Specify if the group should be have view only permissions. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetGroupDomainPermissions'), ('domainName', domainName), ('groupName', groupName), ('viewOnly', viewOnly)]))
- -
[docs] def SetConnectorsInReservation(self, reservationId='', connectors=[]): - """ - Adds connectors between source and target or update existing ones. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[SetConnectorRequest] connectors: List of connectors to set in the reservation. For example: [SetConnectorRequest('SourceResourceFullPath', 'TargetResourceFullPath', 'Direction', 'Alias')] - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetConnectorsInReservation'), ('reservationId', reservationId), ('connectors', CommonAPIRequest.toContainer(connectors))]))
- -
[docs] def SetTopologyCategory(self, topologyFullPath='', categoryName='', categoryValue=''): - """ - Set a category to given topology - - :param str topologyFullPath: Specify the topology (name or full path), to associate the category to. For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - :param str categoryName: Specify the category's name which we want to set - :param str categoryValue: Specify the category's value - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetTopologyCategory'), ('topologyFullPath', topologyFullPath), ('categoryName', categoryName), ('categoryValue', categoryValue)]))
- -
[docs] def SyncResourceFromDevice(self, resourceFullPath=''): - """ - Synchronizes the specified resource with current device settings and mappings. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SyncResourceFromDevice'), ('resourceFullPath', resourceFullPath)]))
- -
[docs] def SyncResourceToDevice(self, resourceFullPath=''): - """ - Updates device settings and mappings from the specified resource. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SyncResourceToDevice'), ('resourceFullPath', resourceFullPath)]))
- -
[docs] def SetReservationResourcePosition(self, reservationId='', resourceFullName='', x=0, y=0): - """ - Sets the location of a specified resource in the reservation diagram. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str resourceFullName: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName. - :param float x: Specify the x coordinate of the resource's top left corner. - :param float y: Specify the y coordinate of the resource's top left corner. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetReservationResourcePosition'), ('reservationId', reservationId), ('resourceFullName', resourceFullName), ('x', x), ('y', y)]))
- -
[docs] def SetServiceDriver(self, serviceName='', driverName=''): - """ - Sets the driver for a specified service model, if empty, removes its driver. - - :param str serviceName: Specify the name of the service model. - :param str driverName: Specify the name of the driver. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetServiceDriver'), ('serviceName', serviceName), ('driverName', driverName)]))
- -
[docs] def SetServiceLiveStatus(self, reservationId='', serviceAlias='', liveStatusName='', additionalInfo=''): - """ - Sets the live status of a service - - :param str reservationId: Specify the string that represents the reservation's unique identifier. - :param str serviceAlias: Specify the string that represents the service's alias. - :param str liveStatusName: Resource live status name - :param str additionalInfo: Resource live status additional info - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetServiceLiveStatus'), ('reservationId', reservationId), ('serviceAlias', serviceAlias), ('liveStatusName', liveStatusName), ('additionalInfo', additionalInfo)]))
- -
[docs] def SetServiceName(self, reservationId='', serviceName='', newServiceName=''): - """ - Edit Service alias name - - :param str reservationId: Specify the string that represents the reservation's unique identifier. - :param str serviceName: Specify the string that represents the service's name. - :param str newServiceName: Specify the string that represents the new service's name. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetServiceName'), ('reservationId', reservationId), ('serviceName', serviceName), ('newServiceName', newServiceName)]))
- -
[docs] def SetReservationServicePosition(self, reservationId='', serviceAlias='', x=0, y=0): - """ - Sets the location of a specified service in the reservation diagram. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str serviceAlias: Specify the alias of the service. - :param float x: Specify the x coordinate of the resource's top left corner. - :param float y: Specify the y coordinate of the resource's top left corner. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetReservationServicePosition'), ('reservationId', reservationId), ('serviceAlias', serviceAlias), ('x', x), ('y', y)]))
- -
[docs] def SetServiceAttributesValues(self, reservationId='', serviceAlias='', attributeRequests=[]): - """ - Sets attributes and associated values for a specified resource. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str serviceAlias: Specify the service name. - :param list[AttributeNameValue] attributeRequests: Specify a matrix of attributes and associated attribute values. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetServiceAttributesValues'), ('reservationId', reservationId), ('serviceAlias', serviceAlias), ('attributeRequests', CommonAPIRequest.toContainer(attributeRequests))]))
- -
[docs] def TerminateReservation(self, reservationId=''): - """ - Terminates the specified reservation if the reservation is in a state of teardown. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'TerminateReservation'), ('reservationId', reservationId)]))
- -
[docs] def UnlockResource(self, reservationId='', resourceFullPath=''): - """ - Unlocks the specified resource. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UnlockResource'), ('reservationId', reservationId), ('resourceFullPath', resourceFullPath)]))
- -
[docs] def UnlockResources(self, reservationId='', resourcesFullPath=[]): - """ - Unlocks multiple resources. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] resourcesFullPath: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UnlockResources'), ('reservationId', reservationId), ('resourcesFullPath', resourcesFullPath)]))
- -
[docs] def UnMapPorts(self, portA='', portB=''): - """ - Removes existing mapping between a pair of physical (L1) switch ports. - - :param str portA: Specify the source port. (i.e. Folder1/Chassis1/Blade1/Port1). - :param str portB: Specify the destination port. (i.e. Folder1/Chassis1/Blade1/Port1). - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UnMapPorts'), ('portA', portA), ('portB', portB)]))
- -
[docs] def UpdateConnectorAliasInReservation(self, reservationId='', sourceResourceFullName='', targetResourceFullName='', direction='', alias=''): - """ - Sets alias for a specified connector. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str sourceResourceFullName: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str targetResourceFullName: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str direction: Specify bidirectional or unidirectional as the connector direction. - :param str alias: Specify the connector’s alias. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateConnectorAliasInReservation'), ('reservationId', reservationId), ('sourceResourceFullName', sourceResourceFullName), ('targetResourceFullName', targetResourceFullName), ('direction', direction), ('alias', alias)]))
- -
[docs] def UpdateConnectionWeight(self, resourceAFullPath='', resourceBFullPath='', weight=0): - """ - Sets a weight score on a physical connection between two resources. Weights are used to optimize route resolution in physical switch scenarios. - - :param str resourceAFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str resourceBFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param int weight: Specify a number to represent the connection weight between the specified resources. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateConnectionWeight'), ('resourceAFullPath', resourceAFullPath), ('resourceBFullPath', resourceBFullPath), ('weight', weight)]))
- -
[docs] def UpdateDomainTopologiesFolder(self, domainName='', topologiesFolder=''): - """ - Update the domain’s topologies folder. - - :param str domainName: Specify the name of the domain. - :param str topologiesFolder: Specify the topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateDomainTopologiesFolder'), ('domainName', domainName), ('topologiesFolder', topologiesFolder)]))
- -
[docs] def UnarchiveDomain(self, domainName=''): - """ - Unarchive a domain. New reservation can be created. - - :param str domainName: Specify the name of the domain. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UnarchiveDomain'), ('domainName', domainName)]))
- -
[docs] def UpdateGroup(self, groupName='', newName='', description='', groupRole=''): - """ - Modifies the group name and description. - - :param str groupName: Specify the name of the group. - :param str newName: Specify the new group name. - :param str description: Provide a short description of the group. - :param str groupRole: Specify the role of the group, possible values: External, Regular, DomainAdmin or Ignore (to keep the current role). - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateGroup'), ('groupName', groupName), ('newName', newName), ('description', description), ('groupRole', groupRole)]))
- -
[docs] def UpdatePhysicalConnection(self, resourceAFullPath='', resourceBFullPath='', overrideExistingConnections=True): - """ - Define a physical connection (cable link) between two resources. - - :param str resourceAFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str resourceBFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. You may leave this parameter blank if you wish to disconnect the existing source resource connection. - :param bool overrideExistingConnections: Overriding existing connections will automatically remove existing physical connection if they conflict with the requested new connections. If set to 'No', an error message will be displayed if any port is already connected and the operation will be cancelled. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdatePhysicalConnection'), ('resourceAFullPath', resourceAFullPath), ('resourceBFullPath', resourceBFullPath), ('overrideExistingConnections', overrideExistingConnections)]))
- -
[docs] def UpdatePhysicalConnections(self, physicalConnectionUpdateRequest=[], overrideExistingConnections=True): - """ - Define physical connections (cable links) between resources. - - :param list[PhysicalConnectionUpdateRequest] physicalConnectionUpdateRequest: Specify a list of physical connections to update. For example: [PhysicalConnectionUpdateRequest('resource_a_fullname', 'resource_b_fullname', 'weight')] - :param bool overrideExistingConnections: Overriding existing connections will automatically remove existing physical connection if they conflict with the requested new connections. If set to 'No', an error message will be displayed if any port is already connected and the operation will be cancelled. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdatePhysicalConnections'), ('physicalConnectionUpdateRequest', CommonAPIRequest.toContainer(physicalConnectionUpdateRequest)), ('overrideExistingConnections', overrideExistingConnections)]))
- -
[docs] def RemapConnections(self, reservationId='', resourcesFullPath=[], printOutput=False): - """ - Remap connections between resources. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[str] resourcesFullPath: Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: RemapConnectionResultInfo - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/RemapConnections', OrderedDict([('reservationId', reservationId), ('resourcesFullPath', resourcesFullPath), ('printOutput', printOutput)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'RemapConnections'), ('reservationId', reservationId), ('resourcesFullPath', resourcesFullPath), ('printOutput', printOutput)])) - return result
- -
[docs] def UpdateReservationDescription(self, reservationId='', description=''): - """ - Modifies the description for a specified reservation. - - :param str reservationId: Specify the reservation ID. - :param str description: Provide an updated description of the reservation. This text will replace the current description. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateReservationDescription'), ('reservationId', reservationId), ('description', description)]))
- -
[docs] def UpdateReservationName(self, reservationId='', name=''): - """ - Modifies the name for a specified reservation. - - :param str reservationId: Specify the reservation ID. - :param str name: Provide an updated name of the reservation. This text will replace the current name. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateReservationName'), ('reservationId', reservationId), ('name', name)]))
- -
[docs] def UpdateReservationGlobalInputs(self, reservationId='', globalInputs=[]): - """ - Updates the unlinked global inputs in a specified reservation. - - :param str reservationId: Specify the reservation ID. - :param list[UpdateTopologyGlobalInputsRequest] globalInputs: Global inputs associated with the specified reservation. For example: [UpdateTopologyGlobalInputsRequest('input1','value1')] - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateReservationGlobalInputs'), ('reservationId', reservationId), ('globalInputs', CommonAPIRequest.toContainer(globalInputs))]))
- -
[docs] def ChangeReservationOwner(self, reservationId='', ownerName=''): - """ - Updates the owner in a specified reservation. - - :param str reservationId: Specify the reservation ID. - :param str ownerName: New owner for the reservation. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ChangeReservationOwner'), ('reservationId', reservationId), ('ownerName', ownerName)]))
- -
[docs] def UpdateResourceAddress(self, resourceFullPath='', resourceAddress=''): - """ - Modifies the address for a specified resource. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str resourceAddress: Specify the resource’s new address. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateResourceAddress'), ('resourceFullPath', resourceFullPath), ('resourceAddress', resourceAddress)]))
- -
[docs] def UpdateResourceDescription(self, resourceFullPath='', resourceDescription=''): - """ - Modifies the description for a specified resource. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str resourceDescription: Provide an updated description of the resource. This text will replace the current description. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateResourceDescription'), ('resourceFullPath', resourceFullPath), ('resourceDescription', resourceDescription)]))
- -
[docs] def UpdateResourceDriver(self, resourceFullPath='', driverName=''): - """ - Updates the driver for a specified resource. - - :param str resourceFullPath: Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. - :param str driverName: Specify the name of the driver. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateResourceDriver'), ('resourceFullPath', resourceFullPath), ('driverName', driverName)]))
- -
[docs] def UpdateTopologyOwner(self, topologyName='', ownerName=''): - """ - Update the topology owner. - - :param str topologyName: Specify the topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - :param str ownerName: Specify the topology owner. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateTopologyOwner'), ('topologyName', topologyName), ('ownerName', ownerName)]))
- -
[docs] def AddPermittedEditorsToTopology(self, topologyName='', editorNames=[]): - """ - Add permitted editors to a topology. - - :param str topologyName: Specify the topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - :param list[str] editorNames: A list of user names to be added as permitted editors to a topology. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'AddPermittedEditorsToTopology'), ('topologyName', topologyName), ('editorNames', CommonAPIRequest.toContainer(editorNames))]))
- -
[docs] def RemovePermittedEditorsFromTopology(self, topologyName='', editorNames=[]): - """ - Remove permitted editors from a topology. - - :param str topologyName: Specify the topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - :param list[str] editorNames: A list of user names to be removed as permitted editors from a topology. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RemovePermittedEditorsFromTopology'), ('topologyName', topologyName), ('editorNames', CommonAPIRequest.toContainer(editorNames))]))
- -
[docs] def UpdateTopologyDriver(self, topologyFullPath='', driverName=''): - """ - Update the topology driver. - - :param str topologyFullPath: Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - :param str driverName: Specify the name of the driver. Leave empty to remove associated driver. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateTopologyDriver'), ('topologyFullPath', topologyFullPath), ('driverName', driverName)]))
- -
[docs] def RenameBlueprint(self, topologyFullPath='', newName=''): - """ - Rename a blueprint. - - :param str topologyFullPath: Specify the topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName. - :param str newName: Specify the name of the driver. Leave empty to remove associated driver. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RenameBlueprint'), ('topologyFullPath', topologyFullPath), ('newName', newName)]))
- -
[docs] def UpdateUser(self, username='', email='', isActive=False): - """ - Configures a user's email and activity settings. - - :param str username: The username of the user you want to update. - :param str email: The new email address to update to. - :param bool isActive: Grant or deny active access to the application. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateUser'), ('username', username), ('email', email), ('isActive', isActive)]))
- -
[docs] def UpdateUsersLimitations(self, userUpdateRequests=[]): - """ - Update MaxConcurrentReservations, MaxReservationDuration, MaxSavedSandboxes, MaxScheduledSandboxes and MaxOwnedBlueprints. - - :param list[UserUpdateRequest] userUpdateRequests: List of Username, MaxConcurrentReservations, MaxReservationDuration, MaxSavedSandboxes, MaxScheduledSandboxes, and MaxOwnedBlueprints of the users you wish to update. For example: [UserUpdateRequest('user1','max_reservations','max_duration', 'max_save_sandbox', 'max_scheduled_sandboxes', 'max_owned_blueprints')] - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateUsersLimitations'), ('userUpdateRequests', CommonAPIRequest.toContainer(userUpdateRequests))]))
- -
[docs] def UpdateUserGroups(self, username='', groupsNames=[]): - """ - Update an existing user's groups (replaces existing user's groups). - - :param str username: Specify the name of the user. - :param list[str] groupsNames: Use this method to update a user's group memberships. Activating this method will replace the user's memberships with the specified list of groups. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateUserGroups'), ('username', username), ('groupsNames', groupsNames)]))
- -
[docs] def UpdateUserPassword(self, username='', password=''): - """ - Changes a user's password. - - :param str username: Specify the name of the user. - :param str password: Specify the user's new login password. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateUserPassword'), ('username', username), ('password', password)]))
- -
[docs] def UpdateRouteAliasesInReservation(self, reservationId='', routeAliases=[]): - """ - Update route aliases in a reservation. - - :param str reservationId: Specifies the string that represents the reservation’s unique identifier. - :param list[UpdateRouteAliasRequest] routeAliases: Specify a matrix of route source, route target and alias. For example: [UpdateRouteAliasRequest('source_fullname', 'target_fullname', 'alias')] - - :rtype: EndPointConnectionInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'UpdateRouteAliasesInReservation'), ('reservationId', reservationId), ('routeAliases', CommonAPIRequest.toContainer(routeAliases))]))
- -
[docs] def WriteMessageToReservationOutput(self, reservationId='', message=''): - """ - Allows sending output to the command output window in a reservation. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str message: Output message to the command output window. - - :rtype: str - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/WriteMessageToReservationOutput', OrderedDict([('reservationId', reservationId), ('message', message)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'WriteMessageToReservationOutput'), ('reservationId', reservationId), ('message', message)])) - return result
- -
[docs] def SetSetupStage(self, setupStage='', reservationId=''): - """ - Set the specified setup stage for the the sandbox. - - :param str setupStage: Specify the setup stage that will be set to the reservation. - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: str - """ - if self.use_webapi_endpoint: - result = self._sendRest('/RmApi/SetSetupStage', OrderedDict([('setupStage', setupStage), ('reservationId', reservationId)])) - else: - result = self.generateAPIRequest(OrderedDict([('method_name', 'SetSetupStage'), ('setupStage', setupStage), ('reservationId', reservationId)])) - return result
- -
[docs] def ResetSandboxProvisioningStatus(self, reservationId=''): - """ - Reset the status of the sandbox from Active (with error) to Active. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ResetSandboxProvisioningStatus'), ('reservationId', reservationId)]))
- -
[docs] def SaveSandbox(self, reservationId='', savedSandboxName='', savedSandboxDescription='', owner=''): - """ - Save the sandbox. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param str savedSandboxName: Specify the name of the saved sandbox - :param str savedSandboxDescription: provide a short description for the saved sandbox - :param str owner: Specify the owner of the saved sandbox - - :rtype: SaveSandboxResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SaveSandbox'), ('reservationId', reservationId), ('savedSandboxName', savedSandboxName), ('savedSandboxDescription', savedSandboxDescription), ('owner', owner)]))
- -
[docs] def RestoreSavedSandbox(self, reservationName='', owner='', durationInMinutes=0, notifyOnStart=False, notifyOnEnd=False, notificationMinutesBeforeEnd=0, savedSandboxId='', startTime='', endTime='', notifyOnSetupComplete=False, isTerminationProtectionEnabled=False): - """ - Restore a saved sandbox - - :param str reservationName: Specify the name of the reservation. - :param str owner: Specify the user name of the reservation owner. - :param int durationInMinutes: Specify the length of the reservation. (in minutes) - :param bool notifyOnStart: Indicate whether to notify the reservation owner when the reservation starts. - :param bool notifyOnEnd: Indicate whether to notify the reservation owner when the reservation ends. - :param int notificationMinutesBeforeEnd: Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled) - :param str savedSandboxId: Specify the saved sandbox id. - :param str startTime: The start time of the restored sandbox. - :param str endTime: The end time of the restored sandbox. - :param bool notifyOnSetupComplete: Indicate whether to notify the reservation owner when the reservation setup completes. - :param bool isTerminationProtectionEnabled: Indicate whether to protect the reservation from being terminated. - - :rtype: CreateReservationResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RestoreSavedSandbox'), ('reservationName', reservationName), ('owner', owner), ('durationInMinutes', durationInMinutes), ('notifyOnStart', notifyOnStart), ('notifyOnEnd', notifyOnEnd), ('notificationMinutesBeforeEnd', notificationMinutesBeforeEnd), ('savedSandboxId', savedSandboxId), ('startTime', startTime), ('endTime', endTime), ('notifyOnSetupComplete', notifyOnSetupComplete), ('isTerminationProtectionEnabled', isTerminationProtectionEnabled)]))
- -
[docs] def GetSavedSandboxes(self): - """ - Get all saved sandboxes. CreateDate default timezone is UTC. - - - :rtype: GetSavedSandboxesResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetSavedSandboxes')]))
- -
[docs] def DeleteSavedSandbox(self, savedSandboxId=''): - """ - Delete a saved sandbox - - :param str savedSandboxId: Specify the saved sandbox id - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'DeleteSavedSandbox'), ('savedSandboxId', savedSandboxId)]))
- -
[docs] def SetAppSecurityGroups(self, reservationId='', securityGroups=[], printOutput=False): - """ - Set security groups for apps. - - :param str reservationId: Specify the string that represents the reservation’s unique identifier. - :param list[SecurityGroup] securityGroups: Security Groups - :param bool printOutput: Defines whether to print the command output in the reservation command output window. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'SetAppSecurityGroups'), ('reservationId', reservationId), ('securityGroups', CommonAPIRequest.toContainer(securityGroups)), ('printOutput', printOutput)]))
- -
[docs] def GetAllApprovalRequests(self): - """ - Get all the approval requests. - - - :rtype: GetAllApprovalRequestsResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetAllApprovalRequests')]))
- -
[docs] def GetApprovalRequest(self, id=0): - """ - Get approval request info. - - :param int id: Specify the number that represents the request’s unique identifier. - - :rtype: GetApprovalRequestResponseInfo - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'GetApprovalRequest'), ('id', id)]))
- -
[docs] def CreateBlueprintApprovalRequest(self, entityId='', requestNotes='', globalInputs=[], requirementsInputs=[], additionalInfoInputs=[], startTime='', endTime='', duration=''): - """ - Create a new approval request. - - :param str entityId: Unique identifier of the entity (Blueprint id). - :param str requestNotes: Request description (optional). - :param list[UpdateTopologyGlobalInputsRequest] globalInputs: Global inputs associated with the specified topology. For example: {['Input Name', 'Value';]}. - :param list[UpdateTopologyRequirementsInputsRequest] requirementsInputs: Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. - :param list[UpdateTopologyAdditionalInfoInputsRequest] additionalInfoInputs: Additional info inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value';]}. - :param str startTime: Start time of the request (leave empty to immediately request approval). - :param str endTime: End time of the request, after which the request will be invalid (leave empty for unlimited request time). - :param str duration: Time in minutes to consume the entity. For example, sandbox duration (leave empty for unlimited consumption time). - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'CreateBlueprintApprovalRequest'), ('entityId', entityId), ('requestNotes', requestNotes), ('globalInputs', CommonAPIRequest.toContainer(globalInputs)), ('requirementsInputs', CommonAPIRequest.toContainer(requirementsInputs)), ('additionalInfoInputs', CommonAPIRequest.toContainer(additionalInfoInputs)), ('startTime', startTime), ('endTime', endTime), ('duration', duration)]))
- -
[docs] def DeleteApprovalRequest(self, id=0): - """ - Delete an approval request. - - :param int id: Unique id of the request. - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'DeleteApprovalRequest'), ('id', id)]))
- -
[docs] def ApproveApprovalRequest(self, id=0, message=''): - """ - Approve an approval request. - - :param int id: Unique id of the request. - :param str message: message (optional). - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ApproveApprovalRequest'), ('id', id), ('message', message)]))
- -
[docs] def RejectApprovalRequest(self, id=0, message=''): - """ - Reject an approval request. - - :param int id: Unique id of the request. - :param str message: message (optional). - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'RejectApprovalRequest'), ('id', id), ('message', message)]))
- -
[docs] def ConsumeApprovalRequest(self, id=0, name='', startTime='', endTime=''): - """ - Consume an approval request. - - :param int id: Unique id of the request. - :param str name: Name for the consumed entity (Sandbox name). - :param str startTime: Start time of the request (leave empty for immediate use). - :param str endTime: End time of the request (leave empty for unlimited duration). - - :rtype: str - """ - return self.generateAPIRequest(OrderedDict([('method_name', 'ConsumeApprovalRequest'), ('id', id), ('name', name), ('startTime', startTime), ('endTime', endTime)]))
- -
- -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/static/api-docs/2023.3/Python-API/_modules/cloudshell/api/common_cloudshell_api.html b/static/api-docs/2023.3/Python-API/_modules/cloudshell/api/common_cloudshell_api.html deleted file mode 100644 index 3c595c9021..0000000000 --- a/static/api-docs/2023.3/Python-API/_modules/cloudshell/api/common_cloudshell_api.html +++ /dev/null @@ -1,584 +0,0 @@ - - - - - - cloudshell.api.common_cloudshell_api — CloudShell Python API 2022.3.0.185573 documentation - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - - -
  • -
  • -
-
-
-
-
- -

Source code for cloudshell.api.common_cloudshell_api

-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-import importlib
-import types
-import ssl
-import sys
-import urllib3
-import urllib3.util as urllib_util
-import xml.etree.ElementTree as etree
-
-from collections import OrderedDict
-from xml.sax.saxutils import escape
-
-
-urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
-
-if sys.version_info.major == 2:
-    unicode = unicode
-    str = str
-    bytes = str
-    basestring = basestring
-    TYPE_TYPE = types.TypeType
-    TYPE_CLASS = types.ClassType
-elif sys.version_info.major == 3:
-    str = str
-    unicode = str
-    bytes = bytes
-    basestring = (str, bytes)
-    TYPE_TYPE = type
-    TYPE_CLASS = type
-else:
-    raise
-
-
-
[docs]class XMLWrapper: -
[docs] @staticmethod - def parseXML(xml_str): - return etree.fromstring(xml_str)
- -
[docs] @staticmethod - def getRootNode(node): - return node.getroot()
- -
[docs] @staticmethod - def getChildNode(parent_node, child_name, find_prefix=''): - return parent_node.find(find_prefix + child_name)
- -
[docs] @staticmethod - def getAllChildNode(parent_node, child_name, find_prefix=''): - return parent_node.findall(find_prefix + child_name)
- -
[docs] @staticmethod - def getChildNodeByAttr(parent_node, child_name, attr_name, attr_value): - return parent_node.find(child_name + '[@' + attr_name + '=\'' + attr_value + '\']')
- -
[docs] @staticmethod - def getAllChildNodeByAttr(parent_node, child_name, attr_name, attr_value): - return parent_node.findall(child_name + '[@' + attr_name + '=\'' + attr_value + '\']')
- -
[docs] @staticmethod - def getNodeName(node): - return node.tag
- -
[docs] @staticmethod - def getNodeText(node): - return node.text
- -
[docs] @staticmethod - def getNodeAttr(node, attribute_name, find_prefix=''): - return node.get(find_prefix + attribute_name)
- -
[docs] @staticmethod - def getNodePrefix(node, prefix_name): - prefix = '' - if len(node.attrib) == 0: - return prefix - for attrib_name, value in node.attrib.items(): - if attrib_name[0] == "{": - prefix, ignore, tag = attrib_name[1:].partition("}") - return "{" + prefix + "}" - - return prefix
- -
[docs] @staticmethod - def getStringFromXML(node, pretty_print=False): - return etree.tostring(node, pretty_print=pretty_print)
- - -# map request class -
[docs]class CommonAPIRequest: - def __init__(self, **kwarg): - self.attributes = [] - for key, value in sorted(kwarg.items()): - self.attributes.append(key) - setattr(self, key, value) - - @staticmethod - def _checkContainerValue(value): - result_value = None - if isinstance(value, list): - result_value = list() - for list_value in value: - result_value.append(CommonAPIRequest.toContainer(list_value)) - elif isinstance(value, CommonAPIRequest): - result_value = CommonAPIRequest.toContainer(value) - else: - result_value = value - - return result_value - -
[docs] @staticmethod - def toContainer(data): - if isinstance(data, dict) or isinstance(data, OrderedDict): - return data - - if isinstance(data, list): - data_list = list() - for value in data: - data_list.append(CommonAPIRequest._checkContainerValue(value)) - return data_list - - data_dict = OrderedDict() - data_dict['__name__'] = data.__class__.__name__ - for key in data.attributes: - data_dict[key] = CommonAPIRequest._checkContainerValue(getattr(data, key)) - # for key, value in data.__dict__.items(): - # data_dict[key] = CommonAPIRequest._checkContainerValue(value) - - return data_dict
-# end map request class - - -
[docs]class CommonResponseInfo: - def __init__(self, xml_object, find_prefix): - self._parseAttributesData(self.__class__, xml_object, find_prefix) - - def _attributeCastToType(self, data_str, cast_type_name): - default_value = 0 - if cast_type_name == 'bool': - default_value = False - elif cast_type_name == 'float': - default_value = 0.0 - elif cast_type_name == 'str': - default_value = '' - - cast_type = eval(cast_type_name) - data = None - if data_str is not None: - data = default_value - try: - if cast_type_name == 'bool': - data = (data_str.lower() in ['true', '1', 'yes', 'on']) - else: - data = cast_type(data_str) - - except UnicodeEncodeError as err: - try: - data = data_str.encode('utf-8') - except: - pass - except ValueError as err: - pass - - return data - - def _isAttributeTypeDefault(self, attr_type_name): - return (attr_type_name == 'int' or attr_type_name == 'long' or - attr_type_name == 'float' or attr_type_name == 'bool' or attr_type_name == 'str') - - def _is_empty_object(self, atrrib_data): - for key, value in atrrib_data.items(): - if isinstance(value, list) and len(value) > 0: - return False - - if value is not None: - return False - - return True - - def _append_object_list(self, attr_type_name, list_node, attr_type_instance, class_type, find_prefix): - if self._isAttributeTypeDefault(attr_type_name): - data_str = XMLWrapper.getNodeText(list_node) - data = self._attributeCastToType(data_str, attr_type_name) - else: - if attr_type_instance == object: - data = class_type(list_node, find_prefix) - else: - data = attr_type_instance(list_node, find_prefix) - - if not (hasattr(list_node, "attrib") and list_node.attrib): - setattr(data, "is_empty_object", True) - - if hasattr(data, "is_empty_object") and data.is_empty_object: - return None - else: - return data - - def _parseAttributesData(self, class_type, xml_object, find_prefix): - attrib_data_dict = dict() - - empty_object_size = len(self.__dict__) - - for name, attr_type in self.__dict__.items(): - if not isinstance(attr_type, (TYPE_TYPE, TYPE_CLASS)) and not isinstance(attr_type, dict): - continue - - if not isinstance(attr_type, dict): - data = None - attr_type_name = attr_type.__name__ - if self._isAttributeTypeDefault(attr_type_name): - data_str = XMLWrapper.getNodeAttr(xml_object, name) - if data_str is None: - child_attribute = XMLWrapper.getChildNode(xml_object, name) - if child_attribute is not None: - data_str = XMLWrapper.getNodeText(child_attribute) - - data = self._attributeCastToType(data_str, attr_type_name) - else: - child_node = XMLWrapper.getChildNode(xml_object, name) - - if child_node is not None: - child_type = XMLWrapper.getNodeAttr(child_node, 'type', find_prefix) - if child_type is None: - data = attr_type(child_node, find_prefix) - else: - data = child_type(child_node, find_prefix) - else: - # continue - data = None - - attrib_data_dict[name] = data - else: - child_node = XMLWrapper.getChildNode(xml_object, name) - - data_list = list() - attr_type_instance = attr_type['list'] - attr_type_name = attr_type_instance.__name__ - - if child_node is not None: - child_count = 0 - for list_node in child_node: - data_object = self._append_object_list(attr_type_name, list_node, attr_type_instance, - class_type, find_prefix) - - if data_object is not None: - data_list.append(data_object) - child_count += 1 - - # I think that it is a logical bug, but ... - if child_count == 0: - for list_node in xml_object: - if XMLWrapper.getNodeName(list_node) == name: - data_object = self._append_object_list(attr_type_name, list_node, attr_type_instance, - class_type, find_prefix) - - if data_object is not None: - data_list.append(data_object) - - attrib_data_dict[name] = data_list - - if not self._is_empty_object(attrib_data_dict): - for key, value in attrib_data_dict.items(): - setattr(self, key, value) - elif len(self.__dict__) == empty_object_size: - setattr(self, "is_empty_object", True)
- - -
[docs]class CommonApiResult: - def __init__(self, xml_object): - error_node = XMLWrapper.getChildNode(xml_object, 'Error') - self.error = None if error_node is None else XMLWrapper.getNodeText(error_node) - - error_code_node = XMLWrapper.getChildNode(xml_object, 'ErrorCode') - self.error_code = None if error_code_node is None else XMLWrapper.getNodeText(error_code_node) - - self.response_info = None - response_info_node = XMLWrapper.getChildNode(xml_object, 'ResponseInfo') - - if response_info_node is not None: - find_prefix = XMLWrapper.getNodePrefix(response_info_node, 'xsi') - type_attr = XMLWrapper.getNodeAttr(response_info_node, find_prefix + 'type') - if type_attr is not None: - response_class = CommonApiResult.importAPIClass(type_attr) - if response_class is not None: - self.response_info = response_class(response_info_node, find_prefix) - - success = XMLWrapper.getNodeAttr(xml_object, 'Success') - success = success.lower() - - self.success = success in ['true', 'yes', 'on'] - -
[docs] @staticmethod - def importAPIClass(name): - module = importlib.import_module('cloudshell.api.cloudshell_api') - if hasattr(module, name): - return getattr(module, name) - - return None
- - -
[docs]class CloudShellAPIError(Exception): - def __init__(self, code, message, rawxml): - self.code = code - self.message = message - self.rawxml = rawxml - - def __str__(self): - return 'CloudShell API error ' + str(self.code) + ': ' + self.message - - def __repr__(self): - return 'CloudShell API error ' + str(self.code) + ': ' + self.message
- - -
[docs]class CommonAPISession: - def __init__(self, host, username, password, domain, connection_pool_size=25): - self.host = host - self.username = username - self.password = password - self.domain = domain - - if sys.version_info[0] == 2 and sys.version_info[2] < 13: - ssl_protocol = ssl.PROTOCOL_SSLv23 - else: - ssl_protocol = ssl.PROTOCOL_TLS - ctx = urllib_util.SSLContext(ssl_protocol) - ctx.check_hostname = False - ctx.verify_mode = ssl.CERT_NONE - - self._http = urllib3.PoolManager(num_pools=connection_pool_size, ssl_context=ctx) - - def _parseXML(self, xml_str): - return etree.fromstring(xml_str) - - def _replaceSendValue(self, data): - """Normalize xml string, escape special xml characters - """ - if data is None: - return u'' - - try: - data_str = unicode(data) - except: - data_str = unicode(data.decode("utf-8")) - - data_str = u"".join([escape(char) for char in data_str]) - - if data_str == 'True' or data_str == 'False': - return data_str.lower() - else: - return data_str - - def _to_unicode_string(self, data): - if data is None: - return u'' - try: - return unicode(data) - except: - return unicode(data.decode("utf-8")) - - def _sendRequest(self, operation, message, request_headers): - """ Sending http POST request through URLLIB package - - :param operation: operation name - :param message: request body - :param request_headers: header of the request - - :return: responce string data - """ - operation_url = str(self.url + operation) - response = self._http.request("POST", operation_url, body=message.encode('utf-8'), headers=request_headers) - if not response.data: - raise Exception(response.reason) - return response.data - - - def _new_serializeRequestData(self, root_node, object_data, prev_type=None): - """Generate xml from received request data using etree.xml - """ - - if isinstance(object_data, dict): - if '__name__' in object_data: - working_node = etree.SubElement(root_node, object_data.pop('__name__')) - else: - working_node = root_node - - for key, value in object_data.items(): - if value is None: - continue - - if isinstance(value, basestring): - new_node = etree.SubElement(working_node, key) - new_node.text = value - elif isinstance(value, bool): - new_node = etree.SubElement(working_node, key) - new_node.text = str(value).lower() - else: - child_node = working_node - if isinstance(value, list): - child_node = etree.SubElement(working_node, key) - serialized_node = self._new_serializeRequestData(child_node, value) - return root_node - - elif isinstance(object_data, list): - for value in object_data: - serialized_node = self._new_serializeRequestData(root_node, value, list()) - - elif isinstance(object_data, basestring) or isinstance(object_data, int) or isinstance(object_data, float): - if prev_type is not None and isinstance(prev_type, list): - child_node = etree.SubElement(root_node, 'string') - child_node.text = object_data - elif isinstance(object_data, bool): - root_node.text = str(object_data).lower() - else: - root_node.text = self._to_unicode_string(object_data) - - return root_node - -
[docs] def generateAPIRequest(self, kwargs): - """ - Generic method for generation and sending XML requests - - :param return_type: type of returning data - :param kwargs: map of the parameters that need to be send to the server - - :return: string data or API object - """ - - if 'method_name' not in kwargs: - raise CloudShellAPIError(404, 'Key "method_name" not in input data!', '') - - method_name = kwargs.pop('method_name', None) - - message = self._serialize_request(kwargs, method_name) - - result = self._handle_api_response(self._sendRequest(method_name, message)) - - return result
- - def _handle_api_response(self, response_str): - ''' - :param str response_str: - :return: either string or deserialized instance representing the api response - ''' - response_str = self._remove_xml_namespace(response_str) - try: - api_response = self._deserialize_response(response_str) - except Exception: - raise Exception("Invalid Request: " + str(response_str)) - if not api_response.success: - raise CloudShellAPIError(api_response.error_code, api_response.error, response_str) - result = response_str - if api_response.response_info: - result = api_response.response_info - return result - - def _serialize_request(self, kwargs, method_name): - request_node = etree.Element(method_name) - # request_str = '<' + method_name + '>\n' - for name in kwargs: - child_node = etree.SubElement(request_node, name) - self._new_serializeRequestData(child_node, kwargs[name]) - return etree.tostring(request_node).decode("utf-8") - - def _deserialize_response(self, response_str): - response_xml = XMLWrapper.parseXML(response_str) - api_result = CommonApiResult(response_xml) - return api_result - - def _remove_xml_namespace(self, response_str): - return response_str.replace(b'xmlns="http://schemas.qualisystems.com/ResourceManagement/ApiCommandResult.xsd"', - b'') \ - .replace(b'&#x0;', b'<NUL>') - - def __prettify_xml(self, elem): - """Return a pretty-printed XML string for the Element. - """ - from xml.dom.minidom import parseString - rough_string = etree.tostring(elem, 'utf-8') - reparsed = parseString(rough_string) - return reparsed.toprettyxml(indent="\t")
-
- -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/static/api-docs/2023.3/Python-API/_modules/index.html b/static/api-docs/2023.3/Python-API/_modules/index.html deleted file mode 100644 index a06cb44cea..0000000000 --- a/static/api-docs/2023.3/Python-API/_modules/index.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - Overview: module code — CloudShell Python API 2022.3.0.185573 documentation - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- -

All modules for which code is available

- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/static/api-docs/2023.3/Python-API/_static/basic.css b/static/api-docs/2023.3/Python-API/_static/basic.css deleted file mode 100644 index 7577acb1ad..0000000000 --- a/static/api-docs/2023.3/Python-API/_static/basic.css +++ /dev/null @@ -1,903 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li p.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 360px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, figure.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, figure.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, figure.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar, -aside.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} - -nav.contents, -aside.topic, -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ - -nav.contents, -aside.topic, -div.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -aside.sidebar > :last-child, -nav.contents > :last-child, -aside.topic > :last-child, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -aside.sidebar::after, -nav.contents::after, -aside.topic::after, -div.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure, figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption, figcaption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number, -figcaption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text, -figcaption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - -/* -- object description styles --------------------------------------------- */ - -.sig { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; -} - -.sig-name, code.descname { - background-color: transparent; - font-weight: bold; -} - -.sig-name { - font-size: 1.1em; -} - -code.descname { - font-size: 1.2em; -} - -.sig-prename, code.descclassname { - background-color: transparent; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.sig-param.n { - font-style: italic; -} - -/* C++ specific styling */ - -.sig-inline.c-texpr, -.sig-inline.cpp-texpr { - font-family: unset; -} - -.sig.c .k, .sig.c .kt, -.sig.cpp .k, .sig.cpp .kt { - color: #0033B3; -} - -.sig.c .m, -.sig.cpp .m { - color: #1750EB; -} - -.sig.c .s, .sig.c .sc, -.sig.cpp .s, .sig.cpp .sc { - color: #067D17; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} - -aside.footnote > span, -div.citation > span { - float: left; -} -aside.footnote > span:last-of-type, -div.citation > span:last-of-type { - padding-right: 0.5em; -} -aside.footnote > p { - margin-left: 2em; -} -div.citation > p { - margin-left: 4em; -} -aside.footnote > p:last-of-type, -div.citation > p:last-of-type { - margin-bottom: 0em; -} -aside.footnote > p:last-of-type:after, -div.citation > p:last-of-type:after { - content: ""; - clear: both; -} - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0 0.5em; - content: ":"; - display: inline-block; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; - white-space: nowrap; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -span.linenos, -div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; - -webkit-user-select: text; /* Safari fallback only */ - -webkit-user-select: none; /* Chrome/Safari */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE10+ */ -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/static/api-docs/2023.3/Python-API/_static/css/theme.css b/static/api-docs/2023.3/Python-API/_static/css/theme.css deleted file mode 100644 index c03c88f06c..0000000000 --- a/static/api-docs/2023.3/Python-API/_static/css/theme.css +++ /dev/null @@ -1,4 +0,0 @@ -html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/static/api-docs/2023.3/Python-API/_static/documentation_options.js b/static/api-docs/2023.3/Python-API/_static/documentation_options.js deleted file mode 100644 index 05c95a2c62..0000000000 --- a/static/api-docs/2023.3/Python-API/_static/documentation_options.js +++ /dev/null @@ -1,14 +0,0 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '2022.3.0.185573', - LANGUAGE: 'en', - COLLAPSE_INDEX: false, - BUILDER: 'html', - FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false, - SHOW_SEARCH_SUMMARY: true, - ENABLE_SEARCH_SHORTCUTS: true, -}; \ No newline at end of file diff --git a/static/api-docs/2023.3/Python-API/_static/jquery-3.5.1.js b/static/api-docs/2023.3/Python-API/_static/jquery-3.5.1.js deleted file mode 100644 index 50937333b9..0000000000 --- a/static/api-docs/2023.3/Python-API/_static/jquery-3.5.1.js +++ /dev/null @@ -1,10872 +0,0 @@ -/*! - * jQuery JavaScript Library v3.5.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2020-05-04T22:49Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.5.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.5 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2020-03-14 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px"; - tr.style.height = "1px"; - trChild.style.height = "9px"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

cloudshell.api package

-
-

Submodules

-
-
-

cloudshell.api.cloudshell_api module

-
-
-class cloudshell.api.cloudshell_api.AbstractResourceAttribute(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Name
-

:type : str

-
- -
-
-Type
-

:type : str

-
- -
-
-Value
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.AbstractResourceRequiredAttribute(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Name
-

:type : str

-
- -
-
-Operator
-

:type : str

-
- -
-
-Type
-

:type : str

-
- -
-
-Value
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.AbstractTemplateShortInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-CreateDate
-

:type : str

-
- -
-
-Description
-

:type : str

-
- -
-
-DomainName
-

:type : str

-
- -
-
-Domains
-

:type : list[str]

-
- -
-
-Name
-

:type : str

-
- -
-
-Owner
-

:type : str

-
- -
-
-ResourceFamilyName
-

:type : str

-
- -
-
-ResourceModelName
-

:type : str

-
- -
-
-Valid
-

:type : bool

-
- -
- -
-
-class cloudshell.api.cloudshell_api.AbstractTemplateShortInfoList(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-AbstractTemplates
-

:type : list[AbstractTemplateShortInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ActiveTopologyInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Connectors
-

:type : list[Connector]

-
- -
-
-MachineName
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
-
-Resources
-

:type : list[ActiveTopologyResourceInfo]

-
- -
-
-Routes
-

:type : list[RouteInfo]

-
- -
-
-Topology
-

:type : str

-
- -
-
-Username
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Address
-

:type : str

-
- -
-
-Alias
-

:type : str

-
- -
-
-Connections
-

:type : list[Connection]

-
- -
-
-FolderFullPath
-

:type : str

-
- -
-
-FullAddress
-

:type : str

-
- -
-
-LockInfo
-

:type : ResourceLockInfo

-
- -
-
-Locked
-

:type : bool

-
- -
-
-Name
-

:type : str

-
- -
-
-ResourceAttributes
-

:type : list[ResourceAttribute]

-
- -
-
-ResourceFamilyName
-

:type : str

-
- -
-
-ResourceModelName
-

:type : str

-
- -
-
-RootAddress
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.AddAppToReservationResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ReservedAppName
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.AddRestrictionRequest(FamilyName, ModelName, Alphabetic, Attributes)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.AdditionalDataParam(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Name
-

:type : str

-
- -
-
-Value
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ApiEditAppRequest(Name, NewName, Description, AppDetails, DefaultDeployment)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.AppConfiguration(AppName, ConfigParams)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.AppConfigurationConnection(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-URL
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.AppConfigurationData(AppName, ConfigurationManagementDatas)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.AppConfigurationManagement(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Alias
-

:type : str

-
- -
-
-AnsibleInventoryGroups
-

:type : str

-
- -
-
-AppConfigurationConnection
-

:type : AppConfigurationConnection

-
- -
-
-ConnectionMethod
-

:type : str

-
- -
-
-ScriptParameters
-

:type : list[ParameterData]

-
- -
-
-Tool
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.AppDeploymentyInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-CloudProviderResourceName
-

:type : str

-
- -
-
-LogicalResourceName
-

:type : str

-
- -
-
-VisualConnectors
-

:type : list[AppVisualConnector]

-
- -
-
-VmUuid
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.AppDetails(ModelName, Attributes, Driver)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.AppInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-AppName
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.AppVisualConnector(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Alias
-

:type : str

-
- -
-
-Attributes
-

:type : list[AttributeValueInfo]

-
- -
-
-Source
-

:type : str

-
- -
-
-Target
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.Attribute(Name, RestrictedValue)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.AttributeNameValue(Name, Value)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.AttributeValueInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Name
-

:type : str

-
- -
-
-Value
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.Authentication(logon_manager)[source]
-

Bases: object

-
-
-logon()[source]
-
- -
-
-property xmlrpc_token
-
- -
- -
-
-class cloudshell.api.cloudshell_api.BulkAppDeploymentyInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ResultItems
-

:type : list[BulkAppDeploymentyResultItem]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.BulkAppDeploymentyResultItem(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-AppDeploymentyInfo
-

:type : AppDeploymentyInfo

-
- -
-
-AppName
-

:type : str

-
- -
-
-Error
-

:type : str

-
- -
-
-ErrorCode
-

:type : int

-
- -
-
-Success
-

:type : bool

-
- -
- -
-
-class cloudshell.api.cloudshell_api.CategoriesOfTopologyInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Categories
-

:type : list[TopologyCategoryInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.CategoryInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Description
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
-
-Type
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.CategoryListBriefInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Categories
-

:type : list[CategoryInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.CategoryListInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Categories
-

:type : list[str]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.CheckoutFromPoolInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Items
-

:type : list[str]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.CloudShellAPISession(host, username='', password='', domain='', timezone='UTC', datetimeformat='MM/dd/yyyy HH:mm', token_id='', port=8029, uri='/ResourceManagerApiService/', cloudshell_api_scheme='http', quali_api_scheme='http', quali_api_port=9000, quali_api_uri='/Api/', use_webapi_endpoint=False)[source]
-

Bases: CommonAPISession

-
-
-ActivateTopology(reservationId='', topologyFullPath='')[source]
-

Resolves all connectivity requests in the sandbox, and marks unshared resources as “in use”.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • topologyFullPath (str) – Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
-
-
Return type:
-

ActiveTopologyInfo

-
-
-
- -
-
-AddAppToReservation(reservationId='', appName='', deploymentPath='', positionX=100, positionY=100)[source]
-

Add an App resource to an existing reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • appName (str) – Specify the App template’s name.

  • -
  • deploymentPath (str) – Specify the way the app will be deploy from a given list of options.

  • -
  • positionX (float) – Specify the x coordinate of the App’s top left corner.

  • -
  • positionY (float) – Specify the y coordinate of the App’s top left corner.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-AddAttributeRestrictedValues(addAttributeRestrictionRequests=[])[source]
-

add attribute restrictions to family/model

-
-
Parameters:
-

addAttributeRestrictionRequests (list[AddRestrictionRequest]) – Attribute restrictions to add. -For example: [AddRestrictionRequest(‘family_name’, ‘model_name’, sort_values_alphabetically, [Attribute(‘attribute_name’,’possible_value’)]

-
-
Return type:
-

str

-
-
-
- -
-
-AddGroupsToDomain(domainName='', groupNames=[], readOnly=False)[source]
-

Add groups to a domain.

-
-
Parameters:
-
    -
  • domainName (str) – Specify the name of the domain.

  • -
  • groupNames (list[str]) – Specify an array of one or more groups.

  • -
  • readOnly (bool) – Specify if the array of group should be added with view only permissions.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-AddNewDomain(domainName='', description='')[source]
-

Adds a new domain.

-
-
Parameters:
-
    -
  • domainName (str) – Specify the name of the domain.

  • -
  • description (str) – Specify the description of the domain.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-AddNewGroup(groupName='', description='', groupRole='')[source]
-

Adds a new users group

-
-
Parameters:
-
    -
  • groupName (str) – Specify the name of the group.

  • -
  • description (str) – Provide a short description of the group.

  • -
  • groupRole (str) – Specify the role of the group, possible values: External, Regular, DomainAdmin.

  • -
-
-
Return type:
-

GroupInfo

-
-
-
- -
-
-AddNewUser(username='', password='', email='', isActive=False, isAdmin=False)[source]
-

Configures user login details and permissions. Use AddUsersToGroup to specify the user’s domain access.

-
-
Parameters:
-
    -
  • username (str) – Specify the name of the user.

  • -
  • password (str) – Specify the user’s login password.

  • -
  • email (str) – Specify the user’s email address.

  • -
  • isActive (bool) – Grant or deny active access to the application.

  • -
  • isAdmin (bool) – Add the user to the System Administrators group.

  • -
-
-
Return type:
-

UserInfo

-
-
-
- -
-
-AddPermittedEditorsToTopology(topologyName='', editorNames=[])[source]
-

Add permitted editors to a topology.

-
-
Parameters:
-
    -
  • topologyName (str) – Specify the topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
  • editorNames (list[str]) – A list of user names to be added as permitted editors to a topology.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-AddPermittedUsersToReservation(reservationId='', usernames=[])[source]
-

Add one or more permitted users to the specified reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • usernames (list[str]) – List of users to permit access to the reservation.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-AddResourcesToDomain(domainName='', resourcesNames=[], includeDecendants=True)[source]
-

Add resources to a domain.

-
-
Parameters:
-
    -
  • domainName (str) – Specify the name of the domain.

  • -
  • resourcesNames (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

  • -
  • includeDecendants (bool) – Specify whether to include child resources.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-AddResourcesToReservation(reservationId='', resourcesFullPath=[], shared=False)[source]
-

Reserves resources to be locked.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourcesFullPath (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

  • -
  • shared (bool) – Specify whether all resources will be shared among other enviroments

  • -
-
-
Return type:
-

ReserveResourcesResponseInfo

-
-
-
- -
-
-AddRoutesToReservation(reservationId='', sourceResourcesFullPath=[], targetResourcesFullPath=[], mappingType='', maxHops=0, routeAlias='', isShared=False)[source]
-

Adds (but does not connect) routes between all pairs of source and target endpoints, adding additional connectivity ports when required. Use ConnectRoutesInReservation to connect the routes.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • sourceResourcesFullPath (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

  • -
  • targetResourcesFullPath (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

  • -
  • mappingType (str) – Specify bidirectional or unidirectional as the mapping type.

  • -
  • maxHops (int) – Specify the maximum number or allowed hops.

  • -
  • routeAlias (str) – Specify the route’s alias.

  • -
  • isShared (bool) – Specify whether these routes are shared. Shared routes can be used in more than one reservation.

  • -
-
-
Return type:
-

RouteInfo

-
-
-
- -
-
-AddServiceToReservation(reservationId='', serviceName='', alias='', attributes=[])[source]
-

Add service resource to existing reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • serviceName (str) – Specify the service name.

  • -
  • alias (str) – Specify the service alias.

  • -
  • attributes (list[AttributeNameValue]) – Specify a matrix of attributes and associated attribute values.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-AddTopologiesToDomain(domainName='', topologyNames=[], validateResourceAvailability=True)[source]
-

Adds a list of one or more topologies to a domain.

-
-
Parameters:
-
    -
  • domainName (str) – Specify the name of the domain.

  • -
  • topologyNames (list[str]) – Specify a list of topology names. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
  • validateResourceAvailability (bool) – Validates the existence of the resource resolution in the target domain. Default value: ‘True’. Note: when value ‘False’ is supplied, there is no process of associating resources and routes with the target domain.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-AddUsersToGroup(usernames=[], groupName='')[source]
-

Adds a list of one or more users to the specified group.

-
-
Parameters:
-
    -
  • usernames (list[str]) – Specify an array of one or more users.

  • -
  • groupName (str) – Specify the name of the group.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-AddValueToLookupAttribute(attributeName='', newValue='', makeDefault=False)[source]
-

Adds a value to an existing lookup attribute.

-
-
Parameters:
-
    -
  • attributeName (str) – Specify the attribute’s name.

  • -
  • newValue (str) – Specify the value to add to the attribute.

  • -
  • makeDefault (bool) – Set the new value as the attribute’s default value.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-ApproveApprovalRequest(id=0, message='')[source]
-

Approve an approval request.

-
-
Parameters:
-
    -
  • id (int) – Unique id of the request.

  • -
  • message (str) – message (optional).

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-ArchiveDomain(domainName='')[source]
-

Archive a domain. All future reservation will be deleted.

-
-
Parameters:
-

domainName (str) – Specify the name of the domain.

-
-
Return type:
-

str

-
-
-
- -
-
-AutoLoad(resourceFullPath='')[source]
-

Overrides the data of a specified L1 switch with current device settings and mappings.

-
-
Parameters:
-

resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

-
-
Return type:
-

str

-
-
-
- -
-
-ChangeReservationOwner(reservationId='', ownerName='')[source]
-

Updates the owner in a specified reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the reservation ID.

  • -
  • ownerName (str) – New owner for the reservation.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-CheckoutFromPool(selectionCriteriaJson='')[source]
-

Request to checkout an item from a pool.

-
-
Parameters:
-

selectionCriteriaJson (str) – Json string that represents a selection request for an item or multiple items from a pool.

-
-
Return type:
-

str

-
-
-
- -
-
-CleanupSandboxConnectivity(reservationId='')[source]
-

Cleanup Sandbox Connectivity

-
-
Parameters:
-

reservationId (str) – Specify the string that represents the reservation’s unique identifier.

-
-
Return type:
-

str

-
-
-
- -
-
-ClearAndResetConsole(reservationId='', resourceFullPath='', consolePortsFullPath=[], baudRate=0)[source]
-

Clears and resets specified resource console ports.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • consolePortsFullPath (list[str]) – Specify a list of console ports according to their location in the Resource Explorer. Include the full path from the root to each console port, separated by slashes. For example: Console/Ports/PortName.

  • -
  • baudRate (int) – Specify the baud rate to apply to the ports.

  • -
-
-
Return type:
-

CommandExecutionCompletedResultInfo

-
-
-
- -
-
-ClearSandboxData(reservationId='')[source]
-

Clears the SandboxData content. Clears the whole list.

-
-
Parameters:
-

reservationId (str) – Specify the string that represents the reservation’s unique identifier.

-
-
Return type:
-

str

-
-
-
- -
-
-ConfigureApps(reservationId='', appConfigurations=[], printOutput=False)[source]
-

Run Configuration Management scripts for the apps in the blueprint.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • appConfigurations (list[AppConfiguration]) – Configuration details. Note: Running ConfigureApps with parameters that are missing from the App returns a success message.

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

ConfigureAppsInfo

-
-
-
- -
-
-ConfigureAppsV2(reservationId='', appConfigurationsData=[], printOutput=False)[source]
-

Run Configuration Management scripts for the apps in the blueprint.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • appConfigurationsData (list[AppConfigurationData]) – Configuration details. Note: Running ConfigureAppsV2 with parameters that are missing from the App returns a success message.

  • -
  • printOutput (bool) – Defines whether to print the command output in the sandbox command output window.

  • -
-
-
Return type:
-

ConfigureAppsInfo

-
-
-
- -
-
-ConnectRoutesInReservation(reservationId='', endpoints=[], mappingType='')[source]
-

Connects requested routes. It locks the resources and adds route mappings. The routes must already exist in the reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • endpoints (list[str]) – The routes’ endpoints to connect.

  • -
  • mappingType (str) – Specify bidirectional or unidirectional as the mapping type.

  • -
-
-
Return type:
-

EndPointConnectionInfo

-
-
-
- -
-
-ConsumeApprovalRequest(id=0, name='', startTime='', endTime='')[source]
-

Consume an approval request.

-
-
Parameters:
-
    -
  • id (int) – Unique id of the request.

  • -
  • name (str) – Name for the consumed entity (Sandbox name).

  • -
  • startTime (str) – Start time of the request (leave empty for immediate use).

  • -
  • endTime (str) – End time of the request (leave empty for unlimited duration).

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-CopyDomainsResources(domainNameSources=[], domainNameDestination='')[source]
-

Copy resources from a list of source domains to a target domain.

-
-
Parameters:
-
    -
  • domainNameSources (list[str]) – Specify the names of the source domains.

  • -
  • domainNameDestination (str) – Specify the name of the target domain.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-CreateBlueprintApprovalRequest(entityId='', requestNotes='', globalInputs=[], requirementsInputs=[], additionalInfoInputs=[], startTime='', endTime='', duration='')[source]
-

Create a new approval request.

-
-
Parameters:
-
    -
  • entityId (str) – Unique identifier of the entity (Blueprint id).

  • -
  • requestNotes (str) – Request description (optional).

  • -
  • globalInputs (list[UpdateTopologyGlobalInputsRequest]) – Global inputs associated with the specified topology. For example: {[‘Input Name’, ‘Value’;]}.

  • -
  • requirementsInputs (list[UpdateTopologyRequirementsInputsRequest]) – Requirements inputs associated with the specified topology. For example: {[‘Resource Name’, ‘Input Name’, ‘Value’, ‘AttributeType’;]}, AttributeType can be one of the following: Attributes/Models/Quantity.

  • -
  • additionalInfoInputs (list[UpdateTopologyAdditionalInfoInputsRequest]) – Additional info inputs associated with the specified topology. For example: {[‘Resource Name’, ‘Input Name’, ‘Value’;]}.

  • -
  • startTime (str) – Start time of the request (leave empty to immediately request approval).

  • -
  • endTime (str) – End time of the request, after which the request will be invalid (leave empty for unlimited request time).

  • -
  • duration (str) – Time in minutes to consume the entity. For example, sandbox duration (leave empty for unlimited consumption time).

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-CreateDraft(topology='', draftName='')[source]
-

Create a private draft of a blueprint.

-
-
Parameters:
-
    -
  • topology (str) – Specify the topology id, or name or the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
  • draftName (str) – Optionally specify the name of the draft. Leave empty for an automatically generated name based on original

  • -
-
-
Return type:
-

DraftInfo

-
-
-
- -
-
-CreateFolder(folderFullPath='')[source]
-

Adds a new folder to the specified path.

-
-
Parameters:
-

folderFullPath (str) – Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.

-
-
Return type:
-

str

-
-
-
- -
-
-CreateImmediatePersistentReservation(reservationName='', owner='', notifyOnStart=False, notifyOnEnd=False, topologyFullPath='', globalInputs=[], requirementsInputs=[], additionalInfoInputs=[], notifyOnSetupComplete=False)[source]
-

Defines a reservation to be started immediately.

-
-
Parameters:
-
    -
  • reservationName (str) – Specify the name of the reservation.

  • -
  • owner (str) – Specify the user name of the reservation owner.

  • -
  • notifyOnStart (bool) – Indicate whether to notify the reservation owner when the reservation starts.

  • -
  • notifyOnEnd (bool) – Indicate whether to notify the reservation owner when the reservation ends.

  • -
  • topologyFullPath (str) – Specify the full topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
  • globalInputs (list[UpdateTopologyGlobalInputsRequest]) – Global inputs associated with the specified topology. For example: {[‘Input Name’, ‘Value’;]}.

  • -
  • requirementsInputs (list[UpdateTopologyRequirementsInputsRequest]) – Requirements inputs associated with the specified topology. For example: {[‘Resource Name’, ‘Input Name’, ‘Value’, ‘AttributeType’;]}, AttributeType can be one of the following: Attributes/Models/Quantity.

  • -
  • additionalInfoInputs (list[UpdateTopologyAdditionalInfoInputsRequest]) – Additional info inputs associated with the specified topology. For example: {[‘Resource Name’, ‘Input Name’, ‘Value’;]}.

  • -
  • notifyOnSetupComplete (bool) – Indicate whether to notify the reservation owner when the reservation setup completes.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-CreateImmediateReservation(reservationName='', owner='', durationInMinutes=0, notifyOnStart=False, notifyOnEnd=False, notificationMinutesBeforeEnd=0, isTerminationProtectionEnabled=False, approvalSid='')[source]
-

Defines a reservation to be started immediately.

-
-
Parameters:
-
    -
  • reservationName (str) – Specify the name of the reservation.

  • -
  • owner (str) – Specify the user name of the reservation owner.

  • -
  • durationInMinutes (int) – Specify the length of the reservation. (in minutes)

  • -
  • notifyOnStart (bool) – Indicate whether to notify the reservation owner when the reservation starts.

  • -
  • notifyOnEnd (bool) – Indicate whether to notify the reservation owner when the reservation ends.

  • -
  • notificationMinutesBeforeEnd (int) – Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)

  • -
  • isTerminationProtectionEnabled (bool) – Indicate whether to protect the reservation from being terminated.

  • -
  • approvalSid (str) – Leave empty. Used for internal purposes.

  • -
-
-
Return type:
-

CreateReservationResponseInfo

-
-
-
- -
-
-CreateImmediateTopologyReservation(reservationName='', owner='', durationInMinutes=0, notifyOnStart=False, notifyOnEnd=False, notificationMinutesBeforeEnd=0, topologyFullPath='', globalInputs=[], requirementsInputs=[], additionalInfoInputs=[], notifyOnSetupComplete=False)[source]
-

Defines a reservation to be started immediately. The reservation will start regardless of conflicting resources.

-
-
Parameters:
-
    -
  • reservationName (str) – Specify the name of the reservation.

  • -
  • owner (str) – Specify the user name of the reservation owner.

  • -
  • durationInMinutes (int) – Specify the length of the reservation. (in minutes)

  • -
  • notifyOnStart (bool) – Indicate whether to notify the reservation owner when the reservation starts.

  • -
  • notifyOnEnd (bool) – Indicate whether to notify the reservation owner when the reservation ends.

  • -
  • notificationMinutesBeforeEnd (int) – Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)

  • -
  • topologyFullPath (str) – Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
  • globalInputs (list[UpdateTopologyGlobalInputsRequest]) – Global inputs associated with the specified topology. For example: [UpdateTopologyGlobalInputsRequest(‘param-name’,’value’)]

  • -
  • requirementsInputs (list[UpdateTopologyRequirementsInputsRequest]) –

    Requirements inputs associated with the specified topology. For example: {[‘Resource Name’, ‘Input Name’, ‘Value’, ‘AttributeType’;]}, AttributeType can be one of the following: Attributes/Models/Quantity.

    -

    The Value field can be used to input to requirement fields with different operator types.

    -

    If pass value as is, it will be treated as “equals”, for example if pass “5” it will indicate to system that seek requirement that fulfills =5 -Other operators (aside from equals) can be fulfilled using this convention: -in the value field, write use the format symbol[space]value -for example

    -

    for numeric values -> 4 -< 4 ->= 4 -<= 4 -= 4 -!= 4

    -

    for textual values -= “hi there” -!= “hi there” -startswith hi there -endswith hi there -contains hi there -doesnotcontain hi there

    -

  • -
  • additionalInfoInputs (list[UpdateTopologyAdditionalInfoInputsRequest]) – Additional info inputs associated with the specified topology.

  • -
  • notifyOnSetupComplete (bool) – Indicate whether to notify the reservation owner when the reservation setup completes.

  • -
-
-
Return type:
-

CreateReservationResponseInfo

-
-
-
- -
-
-CreatePersistentReservation(reservationName='', owner='', startTime='', notifyOnStart=False, notifyOnEnd=False, topologyFullPath='', globalInputs=[], requirementsInputs=[], additionalInfoInputs=[], notifyOnSetupComplete=False)[source]
-

Defines a new reservation.

-
-
Parameters:
-
    -
  • reservationName (str) – Specify the name of the reservation.

  • -
  • owner (str) – Specify the user name of the reservation owner.

  • -
  • startTime (str) – The start time of the reservation.

  • -
  • notifyOnStart (bool) – Indicate whether to notify the reservation owner when the reservation starts.

  • -
  • notifyOnEnd (bool) – Indicate whether to notify the reservation owner when the reservation ends.

  • -
  • topologyFullPath (str) – Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
  • globalInputs (list[UpdateTopologyGlobalInputsRequest]) – Global inputs associated with the specified topology. For example: {[‘Input Name’, ‘Value’;]}.

  • -
  • requirementsInputs (list[UpdateTopologyRequirementsInputsRequest]) – Requirements inputs associated with the specified topology. For example: {[‘Resource Name’, ‘Input Name’, ‘Value’, ‘AttributeType’;]}, AttributeType can be one of the following: Attributes/Models/Quantity.

  • -
  • additionalInfoInputs (list[UpdateTopologyAdditionalInfoInputsRequest]) – Additional info inputs associated with the specified topology. For example: {[‘Resource Name’, ‘Input Name’, ‘Value’;]}.

  • -
  • notifyOnSetupComplete (bool) – Indicate whether to notify the reservation owner when the reservation setup completes.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-CreateReservation(reservationName='', owner='', startTime='', endTime='', notifyOnStart=False, notifyOnEnd=False, notificationMinutesBeforeEnd=0, isTerminationProtectionEnabled=False, approvalSid='')[source]
-

Defines a new reservation.

-
-
Parameters:
-
    -
  • reservationName (str) – Specify the name of the reservation.

  • -
  • owner (str) – Specify the user name of the reservation owner.

  • -
  • startTime (str) – The start time of the reservation.

  • -
  • endTime (str) – The end time of the reservation.

  • -
  • notifyOnStart (bool) – Indicate whether to notify the reservation owner when the reservation starts.

  • -
  • notifyOnEnd (bool) – Indicate whether to notify the reservation owner when the reservation ends.

  • -
  • notificationMinutesBeforeEnd (int) – Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)

  • -
  • isTerminationProtectionEnabled (bool) – Indicate whether to protect the reservation from being terminated.

  • -
  • approvalSid (str) – Leave empty. Used for internal purposes.

  • -
-
-
Return type:
-

CreateReservationResponseInfo

-
-
-
- -
-
-CreateResource(resourceFamily='', resourceModel='', resourceName='', resourceAddress='', folderFullPath='', parentResourceFullPath='', resourceDescription='')[source]
-

Adds a new resource.

-
-
Parameters:
-
    -
  • resourceFamily (str) – Specify the name of the resource family (optional).

  • -
  • resourceModel (str) – Specify the resource model.

  • -
  • resourceName (str) – Specify the resource name.

  • -
  • resourceAddress (str) – Specify the resource address.

  • -
  • folderFullPath (str) – Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.

  • -
  • parentResourceFullPath (str) – Specify the full path from the root to a parent resource, separated by slashes. For example: Traffic Generators/Generic.

  • -
  • resourceDescription (str) – Provide a short description to help identify the resource.

  • -
-
-
Return type:
-

ResourceInfo

-
-
-
- -
-
-CreateResources(resourceInfoDtos=[])[source]
-

Adds new resources.

-
-
Parameters:
-

resourceInfoDtos (list[ResourceInfoDto]) – List of resources to add.

-
-
Return type:
-

str

-
-
-
- -
-
-CreateRouteInReservation(reservationId='', sourceResourceFullPath='', targetResourceFullPath='', overrideActiveRoutes=False, mappingType='', maxHops=0, routeAlias='', isShared=False)[source]
-

Creates a route between the specified source and target resources.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • sourceResourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • targetResourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • overrideActiveRoutes (bool) – Specify whether the new route can override existing routes.

  • -
  • mappingType (str) – Specify bidirectional or unidirectional as the mapping type.

  • -
  • maxHops (int) – Specify the maximum number or allowed hops.

  • -
  • routeAlias (str) – Specify the route’s alias.

  • -
  • isShared (bool) – Specify whether this route is shared. Shared routes can be used in more than one reservation.

  • -
-
-
Return type:
-

EndPointConnectionInfo

-
-
-
- -
-
-CreateRoutesInReservation(reservationId='', sourceResourcesFullPath=[], targetResourcesFullPath=[], overrideActiveRoutes=False, mappingType='', maxHops=0, routeAlias='', isShared=False)[source]
-

Create routes between the listed source and target resources. Routes will be created for each pair of source and target resources.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • sourceResourcesFullPath (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

  • -
  • targetResourcesFullPath (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

  • -
  • overrideActiveRoutes (bool) – Specify whether the new route can override existing routes.

  • -
  • mappingType (str) – Specify bidirectional or unidirectional as the mapping type.

  • -
  • maxHops (int) – Specify the maximum number or allowed hops.

  • -
  • routeAlias (str) – Specify the route’s alias.

  • -
  • isShared (bool) – Specify whether these routes are shared. Shared routes can be used in more than one reservation.

  • -
-
-
Return type:
-

EndPointConnectionInfo

-
-
-
- -
-
-CreateTopologyReservation(reservationName='', owner='', startTime='', endTime='', notifyOnStart=False, notifyOnEnd=False, notificationMinutesBeforeEnd=0, topologyFullPath='', globalInputs=[], requirementsInputs=[], additionalInfoInputs=[], notifyOnSetupComplete=False)[source]
-

Defines a new reservation.

-
-
Parameters:
-
    -
  • reservationName (str) – Specify the name of the reservation.

  • -
  • owner (str) – Specify the user name of the reservation owner.

  • -
  • startTime (str) – The start time of the reservation.

  • -
  • endTime (str) – The end time of the reservation.

  • -
  • notifyOnStart (bool) – Indicate whether to notify the reservation owner when the reservation starts.

  • -
  • notifyOnEnd (bool) – Indicate whether to notify the reservation owner when the reservation ends.

  • -
  • notificationMinutesBeforeEnd (int) – Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)

  • -
  • topologyFullPath (str) – Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
  • globalInputs (list[UpdateTopologyGlobalInputsRequest]) – Global inputs associated with the specified topology.

  • -
  • requirementsInputs (list[UpdateTopologyRequirementsInputsRequest]) –

    Requirements inputs associated with the specified topology. For example: {[‘Resource Name’, ‘Input Name’, ‘Value’, ‘AttributeType’;]}, AttributeType can be one of the following: Attributes/Models/Quantity.

    -

    The Value field can be used to input to requirement fields with different operator types.

    -

    If pass value as is, it will be treated as “equals”, for example if pass “5” it will indicate to system that seek requirement that fulfills =5 -Other operators (aside from equals) can be fulfilled using this convention: -in the value field, write use the format symbol[space]value -for example

    -

    for numeric values -> 4 -< 4 ->= 4 -<= 4 -= 4 -!= 4

    -

    for textual values -= “hi there” -!= “hi there” -startswith hi there -endswith hi there -contains hi there -doesnotcontain hi there

    -

  • -
  • additionalInfoInputs (list[UpdateTopologyAdditionalInfoInputsRequest]) – Additional info inputs associated with the specified topology.

  • -
  • notifyOnSetupComplete (bool) – Indicate whether to notify the reservation owner when the reservation setup completes.

  • -
-
-
Return type:
-

CreateReservationResponseInfo

-
-
-
- -
-
-DecryptPassword(encryptedString='')[source]
-

Decrypt a password.

-
-
Parameters:
-

encryptedString (str) – The encrypted string for decryption.

-
-
Return type:
-

AttributeValueInfo

-
-
-
- -
-
-DeleteApprovalRequest(id=0)[source]
-

Delete an approval request.

-
-
Parameters:
-

id (int) – Unique id of the request.

-
-
Return type:
-

str

-
-
-
- -
-
-DeleteDomain(domainName='')[source]
-

Deletes a domain.

-
-
Parameters:
-

domainName (str) – Specify the name of the domain.

-
-
Return type:
-

str

-
-
-
- -
-
-DeleteDraft(draft='')[source]
-

Delete a private draft of a blueprint.

-
-
Parameters:
-

draft (str) – Specify the draft id, or name or the full path from the root to the draft, separated by slashes. For example: FolderName/Topologies/DraftName.

-
-
Return type:
-

str

-
-
-
- -
-
-DeleteFolder(folderFullPath='')[source]
-

Deletes the specified folder.

-
-
Parameters:
-

folderFullPath (str) – Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.

-
-
Return type:
-

str

-
-
-
- -
-
-DeleteGroup(groupName='')[source]
-

Deletes the specified group.

-
-
Parameters:
-

groupName (str) – Specify the name of the group.

-
-
Return type:
-

str

-
-
-
- -
-
-DeleteReservation(reservationId='', unmap=False)[source]
-
-

Deletes the specified reservation. -Important: DeleteReservation does not perform teardown and therefore does not revert and clean up the sandbox environment.

-
-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • unmap (bool) – Specify whether to keep mappings or release mapped resources when deleting the reservation.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-DeleteResource(resourceFullPath='')[source]
-

Deletes the specified resource.

-
-
Parameters:
-

resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

-
-
Return type:
-

str

-
-
-
- -
-
-DeleteResourceTemplate(resourceTemplateName='')[source]
-

Deletes a specific resource template.

-
-
Parameters:
-

resourceTemplateName (str) – Specify the resource template name.

-
-
Return type:
-

str

-
-
-
- -
-
-DeleteResources(resourcesFullPath=[])[source]
-

Deletes the specified resources.

-
-
Parameters:
-

resourcesFullPath (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

-
-
Return type:
-

str

-
-
-
- -
-
-DeleteSavedSandbox(savedSandboxId='')[source]
-

Delete a saved sandbox

-
-
Parameters:
-

savedSandboxId (str) – Specify the saved sandbox id

-
-
Return type:
-

str

-
-
-
- -
-
-DeleteTopology(topologyFullPath='')[source]
-

Deletes the specified topology.

-
-
Parameters:
-

topologyFullPath (str) – Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

-
-
Return type:
-

str

-
-
-
- -
-
-DeleteUser(username='')[source]
-

Deletes the specified user.

-
-
Parameters:
-

username (str) – Specify the name of the user.

-
-
Return type:
-

str

-
-
-
- -
-
-DeployAppToCloudProvider(reservationId='', appName='', commandInputs=[], printOutput=False)[source]
-

Executes deploy command for the specified app driver.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • appName (str) – Specify the name of the app.

  • -
  • commandInputs (list[InputNameValue]) – Specify a list of input names and values required for executing the command. Note that to change a deployed App’s name, specify the new name as an input value - for example: api.DeployAppToCloudProvider(reservation_id, “Azure Ubuntu”, [InputNameValue(“Name”, “myvm01”)]).

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-DeployAppToCloudProviderBulk(reservationId='', appNames=[], commandInputs=[], printOutput=False)[source]
-

Executes deploy command for the specified apps.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • appNames (list[str]) – Specify the names of the apps to deploy.

  • -
  • commandInputs (list[DeployAppInput]) – Specify a list of input names and values required for executing the command [appName, InputName, InputValue]. Note that to change a deployed App’s name, specify the new name as an input value - for example: api.DeployAppToCloudProvider(reservation_id, “Azure Ubuntu”, [DeployAppInput(“Azure Ubuntu”, “Name”, “myvm01”)]).

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

BulkAppDeploymentyInfo

-
-
-
- -
-
-DisconnectRoutesInReservation(reservationId='', endpoints=[])[source]
-

Disconnects requested routes. It unlocks the resources (if locked), and removes route mappings, but does not remove the route resources from the reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • endpoints (list[str]) – The routes endpoints to disconnect.

  • -
-
-
Return type:
-

EndPointConnectionInfo

-
-
-
- -
-
-EditAppsInReservation(reservationId='', editAppsRequests=[])[source]
-

Edit Apps in a reservation

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • editAppsRequests (list[ApiEditAppRequest]) – Changes to implement in the App. Please note that when modifying attributes, all the attributes in deployed app must be updated.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-EndReservation(reservationId='', unmap=False)[source]
-

Ends the specified reservation and optionally, unlocks and releases all reservation resources.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • unmap (bool) – Specify whether to keep mappings or release mapped resources when deleting the reservation.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-EnqueueCommand(reservationId='', targetName='', targetType='', commandName='', commandInputs=[], printOutput=False)[source]
-

Enqueues a command to be executed for the specified target.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • targetName (str) – Specify the name of the target according to the target type: for resources - specify the resouce’s name, for services - the service’s alias.

  • -
  • targetType (str) – Specify the target type for command execution, possible values are: Resource, Service, App.

  • -
  • commandName (str) – Specify the name of the command.

  • -
  • commandInputs (list[InputNameValue]) – Specify a matrix of input names and values required for executing the command.

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-EnqueueEnvironmentCommand(reservationId='', commandName='', commandInputs=[], printOutput=False)[source]
-

Enqueues a command to be executed for the specified reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • commandName (str) – Specify the name of the command.

  • -
  • commandInputs (list[InputNameValue]) – Specify a matrix of input names and values required for executing the command.

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-EnqueueResourceCommand(reservationId='', resourceFullPath='', commandName='', parameterValues=[], printOutput=False)[source]
-

[Deprecated] Enqueues a command to be executed for the specified driver.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • commandName (str) – Specify the name of the command.

  • -
  • parameterValues (list[str]) – Specify the list of parameters values required for executing the command.

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-EnqueueServiceCommand(reservationId='', serviceAlias='', commandName='', parameterValues=[], printOutput=False)[source]
-

[Deprecated] Enqueues a command to be executed for the specified driver.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • serviceAlias (str) – Specify the alias of the service. The service alias is its identifier in the environment context. It can be retrieved via the environment details API and is displayed visually on the diagram.

  • -
  • commandName (str) – Specify the name of the command.

  • -
  • parameterValues (list[str]) – Specify the list of parameters values required for executing the command.

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-EnqueueTopologyCommand(reservationId='', commandName='', parameterValues=[], printOutput=False)[source]
-

[Deprecated] Enqueues a command to be executed for the specified reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • commandName (str) – Specify the name of the command.

  • -
  • parameterValues (list[str]) – Specify the list of parameters values required for executing the command.

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-ExcludeResource(resourceFullPath='')[source]
-

Excludes a specified resource.

-
-
Parameters:
-

resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

-
-
Return type:
-

str

-
-
-
- -
-
-ExcludeResources(resourcesFullPath=[])[source]
-

Excludes the specified resources.

-
-
Parameters:
-

resourcesFullPath (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

-
-
Return type:
-

str

-
-
-
- -
-
-ExecuteCommand(reservationId='', targetName='', targetType='', commandName='', commandInputs=[], printOutput=False)[source]
-

Executes a command for the specified target.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • targetName (str) – Specify the name of the target according to the target type: for resources - specify the resouce’s name, for services - the service’s alias.

  • -
  • targetType (str) – Specify the target type for command execution, possible values are: Resource, Service, App.

  • -
  • commandName (str) – Specify the name of the command.

  • -
  • commandInputs (list[InputNameValue]) – Specify a matrix of input names and values required for executing the command.

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

CommandExecutionCompletedResultInfo

-
-
-
- -
-
-ExecuteEnvironmentCommand(reservationId='', commandName='', commandInputs=[], printOutput=False)[source]
-

Executes a command for the specified reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • commandName (str) – Specify the name of the command.

  • -
  • commandInputs (list[InputNameValue]) – Specify a matrix of input names and values required for executing the command.

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

CommandExecutionCompletedResultInfo

-
-
-
- -
-
-ExecuteResourceCommand(reservationId='', resourceFullPath='', commandName='', parameterValues=[], printOutput=False)[source]
-

[Deprecated] Executes a command for the specified driver.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • commandName (str) – Specify the name of the command.

  • -
  • parameterValues (list[str]) – Specify the list of parameters values required for executing the command.

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

CommandExecutionCompletedResultInfo

-
-
-
- -
-
-ExecuteResourceConnectedCommand(reservationId='', resourceFullPath='', commandName='', commandTag='', parameterValues=[], connectedPortsFullPath=[], printOutput=False)[source]
-

Executes a command for the specified driver.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RouterA/Port1.

  • -
  • commandName (str) – Specify the name of the command.

  • -
  • commandTag (str) – Specify the command tag. Connected command tags are used to define categories of functionality (e.g ‘virtualization’).

  • -
  • parameterValues (list[str]) – Specify the list of parameters values required for executing the command.

  • -
  • connectedPortsFullPath (list[str]) – Specify the list of connected ports to use in this operation. Include the full path from the root resource to each port, separated by slashes. For example: Switch20/Blade5/PowerPort1. Leave blank to perform the connected operation on all of the specified resource’s connected ports.

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

CommandExecutionCompletedResultInfo

-
-
-
- -
-
-ExecuteServiceCommand(reservationId='', serviceAlias='', commandName='', parameterValues=[], printOutput=False)[source]
-

[Deprecated] Executes a command for the specified service driver.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • serviceAlias (str) – Specify the alias of the service.

  • -
  • commandName (str) – Specify the name of the command.

  • -
  • parameterValues (list[str]) – Specify the list of parameters values required for executing the command.

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

CommandExecutionCompletedResultInfo

-
-
-
- -
-
-ExecuteTopologyCommand(reservationId='', commandName='', parameterValues=[], printOutput=False)[source]
-

[Deprecated] Executes a command for the specified reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • commandName (str) – Specify the name of the command.

  • -
  • parameterValues (list[str]) – Specify the list of parameters values required for executing the command.

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

CommandExecutionCompletedResultInfo

-
-
-
- -
-
-ExportFamiliesAndModels()[source]
-

Exports the resource families, models, attributes and structure configuration.

-
-
Return type:
-

str

-
-
-
- -
-
-ExtendReservation(reservationId='', minutesToAdd=0)[source]
-

Extends the duration of the specified reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • minutesToAdd (int) – Specify the number of minutes to add to the specified reservation.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-FindResources(resourceFamily='', resourceModel='', attributeValues=[], showAllDomains=False, resourceFullName='', exactName=True, includeSubResources=True, resourceAddress='', resourceUniqueIdentifier='', maxResults=500, includeExcludedResources=False)[source]
-

Retrieves resources that match all the specified search parameters, and all reservations associated with the search results.

-
-
Parameters:
-
    -
  • resourceFamily (str) – Specify the name of the resource family.

  • -
  • resourceModel (str) – Specify the resource model.

  • -
  • attributeValues (list[AttributeNameValue]) – Specify an array of one or more attributes and attribute values.

  • -
  • showAllDomains (bool) – Show all domains associated with the logged in user.

  • -
  • resourceFullName (str) – Specify part of or the full name of the resource.

  • -
  • exactName (bool) – Specify whether to search the exact given name or not.

  • -
  • includeSubResources (bool) – Specify whether to retrieve the sub resources once the parent matches the name.

  • -
  • resourceAddress (str) – Specify the resource address. Can be partial (e.g. ‘192.168.’).

  • -
  • resourceUniqueIdentifier (str) – Specify the resource unique identifier.

  • -
  • maxResults (int) – Specify the maximum number of resources to return.

  • -
  • includeExcludedResources (bool) – Specify whether to retrieve resources that are excluded

  • -
-
-
Return type:
-

FindResourceListInfo

-
-
-
- -
-
-FindResourcesInTimeRange(resourceFamily='', resourceModel='', fromTime='', untilTime='', attributeValues=[], showAllDomains=False, resourceFullName='', exactName=True, includeSubResources=True, resourceAddress='', resourceUniqueIdentifier='', maxResults=500)[source]
-

Retrieves resources that match all the specified search parameters, and all reservations in the specified time range associated with the search results.

-
-
Parameters:
-
    -
  • resourceFamily (str) – Specify the name of the resource family.

  • -
  • resourceModel (str) – Specify the resource model.

  • -
  • fromTime (str) – Specify from which future time and date to check the resource’s availability.

  • -
  • untilTime (str) – Specify until which time and date to check the resource’s availability.

  • -
  • attributeValues (list[AttributeNameValue]) – Specify an array of one or more attributes and attribute values.

  • -
  • showAllDomains (bool) – Show all domains associated with the logged in user.

  • -
  • resourceFullName (str) – Specify part of or the full name of the resource.

  • -
  • exactName (bool) – Specify whether to search the exact given name or not.

  • -
  • includeSubResources (bool) – Specify whether to retrieve the sub resources once the parent matches the name.

  • -
  • resourceAddress (str) – Specify the resource address. Can be partial (e.g. ‘192.168.’).

  • -
  • resourceUniqueIdentifier (str) – Specify the resource unique identifier.

  • -
  • maxResults (int) – Specify the maximum number of resources to return.

  • -
-
-
Return type:
-

FindResourceListInfo

-
-
-
- -
-
-GenerateUtilizationReport(resourceFamilyName='', fromDate='', toDate='', resourceFullName='', resourceModelName='', includeChildResources=False, groupBy='', utilizationReportType='')[source]
-

Generates a utilization report for the specified resources. To generate a report for all resources, leave the resourceFullName and resourceModel parameters blank.

-
-
Parameters:
-
    -
  • resourceFamilyName (str) – Specify the name of the resource family.

  • -
  • fromDate (str) – Specify the start time and date.

  • -
  • toDate (str) – Specify the end time and date.

  • -
  • resourceFullName (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName.

  • -
  • resourceModelName (str) – Specify the resource model.

  • -
  • includeChildResources (bool) – Specify whether to include child resources utilization.

  • -
  • groupBy (str) – Specify how to group the utilization results: Resource, User, or Machine

  • -
  • utilizationReportType (str) – Specify the report type: Lock or Mapping.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-GetAbstractTemplateList()[source]
-

Retrieve a list of abstract templates.

-
-
Return type:
-

AbstractTemplateShortInfoList

-
-
-
- -
-
-GetActiveTopologyNames()[source]
-

Retrieves all active reserved topologies for the current (logged in) user.

-
-
Return type:
-

TopologyListInfo

-
-
-
- -
-
-GetAllApprovalRequests()[source]
-

Get all the approval requests.

-
-
Return type:
-

GetAllApprovalRequestsResponseInfo

-
-
-
- -
-
-GetAllUsersDetails()[source]
-

Retrieves all users and their settings.

-
-
Return type:
-

UsersInfo

-
-
-
- -
-
-GetApprovalRequest(id=0)[source]
-

Get approval request info.

-
-
Parameters:
-

id (int) – Specify the number that represents the request’s unique identifier.

-
-
Return type:
-

GetApprovalRequestResponseInfo

-
-
-
- -
-
-GetAppsDetailsInReservation(reservationId='', appNames=[])[source]
-

Retrieves information on the specified apps in the reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • appNames (list[str]) – Specify the apps names.

  • -
-
-
Return type:
-

ReservationAppsResponseInfo

-
-
-
- -
-
-GetAttributeValue(resourceFullPath='', attributeName='')[source]
-

Retrieves the value of the specified attribute

-
-
Parameters:
-
    -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • attributeName (str) – Specify the attribute name.

  • -
-
-
Return type:
-

AttributeValueInfo

-
-
-
- -
-
-GetCategories(type='')[source]
-

Retrieves all the logged in user’s root categories and sub categories for Topologies and Services from the ‘Environment’ catalog.

-
-
Parameters:
-

type (str) – Specify the categoriy type: Services, Environment or empty for both.

-
-
Return type:
-

CategoryListBriefInfo

-
-
-
- -
-
-GetCategoriesOfTopology(topologyPath='')[source]
-

Retrieves all categories of given topology.

-
-
Parameters:
-

topologyPath (str) – Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

-
-
Return type:
-

CategoriesOfTopologyInfo

-
-
-
- -
-
-GetCurrentReservations(reservationOwner='')[source]
-

Retrieves current reservations for the specified owner. If an owner is not provided, this method retrieves all current reservations.

-
-
Parameters:
-

reservationOwner (str) – Specify the user name of the reservation owner.

-
-
Return type:
-

GetActiveReservationsResponseInfo

-
-
-
- -
-
-GetDomainDetails(domainName='')[source]
-

Retrieves a domain’s details including groups, topologies and resources associated with the specified domain.

-
-
Parameters:
-

domainName (str) – Specify the name of the domain.

-
-
Return type:
-

DomainInfo

-
-
-
- -
-
-GetEnvironmentCommands(reservationId='')[source]
-

Retrieves driver commands and parameters for a specified reservation.

-
-
Parameters:
-

reservationId (str) – Specify the string that represents the reservation’s unique identifier.

-
-
Return type:
-

EnvironmentCommandListInfo

-
-
-
- -
-
-GetFolderContent(fullPath='', showAllDomains=False)[source]
-

Retrieves content for the specified path.

-
-
Parameters:
-
    -
  • fullPath (str) – Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.

  • -
  • showAllDomains (bool) – Show all domains associated with the logged in user.

  • -
-
-
Return type:
-

ContentListInfo

-
-
-
- -
-
-GetGroupDomains(groupName='')[source]
-

Retrieves all domains associated with a group.

-
-
Parameters:
-

groupName (str) – Specify the name of the group.

-
-
Return type:
-

GroupInfo

-
-
-
- -
-
-GetGroupsDetails()[source]
-

Retrieves all groups, including members, roles and associated domains for each group.

-
-
Return type:
-

GroupsInfo

-
-
-
- -
-
-GetLockedResources(user='', machine='', folderFullPath='')[source]
-

Retrieves locked resources for a specific user, a specific computer, or a specific folder. If none of these are specified, this method retrieves the list of locked resources for all users, on all machines, in all folders.

-
-
Parameters:
-
    -
  • user (str) – Specify a user name to retrieve locked resources for that user.

  • -
  • machine (str) – Specify a machine name to retrieve locked resources for that computer.

  • -
  • folderFullPath (str) – Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.

  • -
-
-
Return type:
-

ReservationInfo

-
-
-
- -
-
-GetModelUsageReport(modelName='')[source]
-

Retrieves the model usages information in Resources, Apps, Abstract Resources and Abstract Templates at Blueprints, Blueprints templates and Sandboxes.

-
-
Parameters:
-

modelName (str) – Specify the name of the model to retrieve usages for.

-
-
Return type:
-

GetModelUsageReportResponseInfo

-
-
-
- -
-
-GetReservationAppImage(reservationId='', appName='')[source]
-

Retrieves the photo of an app.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • appName (str) – Specify the name of the app.

  • -
-
-
Return type:
-

GetReservationAppImageResponseInfo

-
-
-
- -
-
-GetReservationDetails(reservationId='', disableCache=False)[source]
-

Retrieves all details and parameters for a specified reservation, including its resources, routes and route segments, topologies, and reservation conflicts.The data cached for 5 seconds.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • disableCache (bool) – Specify if the reservation detail is new or cached

  • -
-
-
Return type:
-

GetReservationDescriptionResponseInfo

-
-
-
- -
-
-GetReservationInputs(reservationId='')[source]
-

Retrieves all topology inputs for a specified reservation.

-
-
Parameters:
-

reservationId (str) – Specify the string that represents the reservation’s unique identifier.

-
-
Return type:
-

GetReservationInputsResponseInfo

-
-
-
- -
-
-GetReservationRemainingTime(reservationId='')[source]
-

Retrieves the number of minutes remaining until the end of a specified reservation. If the reservation is running overtime, the remaining time will be reported as -1 minutes.

-
-
Parameters:
-

reservationId (str) – Specify the string that represents the reservation’s unique identifier.

-
-
Return type:
-

GetReservationRemainingTimeInfo

-
-
-
- -
-
-GetReservationResourcesPositions(reservationId='')[source]
-

Retrieves the x/y coordinates for all resources in the reservation’s diagram.

-
-
Parameters:
-

reservationId (str) – Specify the string that represents the reservation’s unique identifier.

-
-
Return type:
-

ReservationDiagramLayoutResponseInfo

-
-
-
- -
-
-GetReservationServicesPositions(reservationId='')[source]
-

Retrieves the x/y coordinates for all services in the reservation’s diagram.

-
-
Parameters:
-

reservationId (str) – Specify the string that represents the reservation’s unique identifier.

-
-
Return type:
-

ReservationDiagramLayoutResponseInfo

-
-
-
- -
-
-GetReservationStatus(reservationId='')[source]
-

Retrieves status for a specified reservation

-
-
Parameters:
-

reservationId (str) – Specify the string that represents the reservation’s unique identifier.

-
-
Return type:
-

ReservationSlimStatusInfo

-
-
-
- -
-
-GetReservationsLiveStatus(reservationsId=[])[source]
-

Gets the live status of the reservations.

-
-
Parameters:
-

reservationsId (list[str]) – Specifies a string array that represents reservation unique identifiers.

-
-
Return type:
-

ReservationLiveStatusInfo

-
-
-
- -
-
-GetResourceAvailability(resourcesNames=[], showAllDomains=False)[source]
-

Get resource availability for the resources.

-
-
Parameters:
-
    -
  • resourcesNames (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

  • -
  • showAllDomains (bool) – Show all domains associated with the logged in user.

  • -
-
-
Return type:
-

FindResourceListInfo

-
-
-
- -
-
-GetResourceAvailabilityInTimeRange(resourcesNames=[], startTime='', endTime='', showAllDomains=False)[source]
-

Get resource availability for the resources in the specified time range.

-
-
Parameters:
-
    -
  • resourcesNames (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

  • -
  • startTime (str) – The start time of the reservation.

  • -
  • endTime (str) – The end time of the reservation.

  • -
  • showAllDomains (bool) – Show all domains associated with the logged in user.

  • -
-
-
Return type:
-

FindResourceListInfo

-
-
-
- -
-
-GetResourceCommands(resourceFullPath='')[source]
-

Retrieves driver commands and parameters for a specified resource.

-
-
Parameters:
-

resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

-
-
Return type:
-

ResourceCommandListInfo

-
-
-
- -
-
-GetResourceConnectedCommands(resourceFullPath='')[source]
-

Gets commands which are added to the resource from connected resources such as power or virtualization.

-
-
Parameters:
-

resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

-
-
Return type:
-

ResourceCommandListInfo

-
-
-
- -
-
-GetResourceDetails(resourceFullPath='', showAllDomains=False)[source]
-

Retrieves resource descriptions for the specified resource, and a matrix of all its associated attributes and attribute values.

-
-
Parameters:
-
    -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • showAllDomains (bool) – Show all domains associated with the logged in user.

  • -
-
-
Return type:
-

ResourceInfo

-
-
-
- -
-
-GetResourceList(folderFullPath='')[source]
-

Retrieves resources and resource values for the specified folder path.

-
-
Parameters:
-

folderFullPath (str) – Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.

-
-
Return type:
-

ResourceListInfo

-
-
-
- -
-
-GetResourceLiveStatus(resourceFullPath='')[source]
-

Gets the live status of the resource.

-
-
Parameters:
-

resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA.

-
-
Return type:
-

ResourceLiveStatusInfo

-
-
-
- -
-
-GetResourceMappings(resources=[])[source]
-

Retrieves mappings for a list of one or more resources.

-
-
Parameters:
-

resources (list[str]) – Specify a list of resources.

-
-
Return type:
-

ResourceMappingsInfo

-
-
-
- -
-
-GetRouteSegments(resource='')[source]
-

Retrieves all the ports on the route from the selected endpoint to the target endpoint.

-
-
Parameters:
-

resource (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

-
-
Return type:
-

EndPointConnectionInfo

-
-
-
- -
-
-GetRoutesSolution(reservationId='', sourceResourcesFullPath=[], targetResourcesFullPath=[], mappingType='', maxHops=0, isShared=False)[source]
-

Calculates possible routes between the supplied endpoints and returns their details, without saving, connecting or modifying the reservation in any way.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • sourceResourcesFullPath (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RootResourceName/ResourceName

  • -
  • targetResourcesFullPath (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RootResourceName/ResourceName

  • -
  • mappingType (str) – Specify bidirectional or unidirectional as the mapping type.

  • -
  • maxHops (int) – Specify the maximum number or allowed hops.

  • -
  • isShared (bool) – Specify whether these routes are shared. Shared routes can be used in more than one reservation.

  • -
-
-
Return type:
-

EndPointConnectionInfo

-
-
-
- -
-
-GetSandboxData(reservationId='')[source]
-

Get the SandboxData content. Returns the whole list in a key:value format.

-
-
Parameters:
-

reservationId (str) – Specify the string that represents the reservation’s unique identifier.

-
-
Return type:
-

GetSandboxDataInfo

-
-
-
- -
-
-GetSavedSandboxes()[source]
-

Get all saved sandboxes. CreateDate default timezone is UTC.

-
-
Return type:
-

GetSavedSandboxesResponseInfo

-
-
-
- -
-
-GetScheduledReservations(fromTime='', untilTime='', ownerName='')[source]
-

Retrieves all reservations scheduled between the specified start and end times.

-
-
Parameters:
-
    -
  • fromTime (str) – Specify from which time and date to search.

  • -
  • untilTime (str) – Specify until which time and date to search.

  • -
  • ownerName (str) – Specify reservation owner name

  • -
-
-
Return type:
-

GetReservationsInRangeResponseInfo

-
-
-
- -
-
-GetServerDateAndTime()[source]
-

Retrieves the server’s UTC date and time.

-
-
Return type:
-

ServerTimeInfo

-
-
-
- -
-
-GetServiceCommands(serviceName='')[source]
-

Retrieves driver commands and parameters for a specified service.

-
-
Parameters:
-

serviceName (str) – Specify the service name.

-
-
Return type:
-

ResourceCommandListInfo

-
-
-
- -
-
-GetServices(categoryName='', serviceName='')[source]
-

Retrieve a list of services and their attributes.

-
-
Parameters:
-
    -
  • categoryName (str) – The name of the category of the services you want to receive.

  • -
  • serviceName (str) – The name of the service you want to receive.

  • -
-
-
Return type:
-

ServicesListInfo

-
-
-
- -
-
-GetTopologiesByCategory(categoryName='', categoryValue='')[source]
-

Retrives full topology path for each topology that contains given category name (and value if entered).

-
-
Parameters:
-
    -
  • categoryName (str) – Specify the category’s name, If category name is not provided will return all topologies in domain.

  • -
  • categoryValue (str) – Specify the category’s value/sub category

  • -
-
-
Return type:
-

TopologiesByCategoryInfo

-
-
-
- -
-
-GetTopologyCategories()[source]
-

Retrieves all root categories from ‘Environment’ catalog.

-
-
Return type:
-

CategoryListInfo

-
-
-
- -
-
-GetTopologyCommands(reservationId='')[source]
-

[Deprecated] Retrieves driver commands and parameters for a specified reservation.

-
-
Parameters:
-

reservationId (str) – Specify the string that represents the reservation’s unique identifier.

-
-
Return type:
-

TopologyCommandListInfo

-
-
-
- -
-
-GetTopologyDetails(topologyFullPath='')[source]
-

Retrieves all resources and attributes associated with the specified topology.

-
-
Parameters:
-

topologyFullPath (str) – Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

-
-
Return type:
-

TopologyInfo

-
-
-
- -
-
-GetTopologyUrls(topologyFullPath='')[source]
-

Retrieves topology urls to the blueprint for every domain that the blueprint belongs to.

-
-
Parameters:
-

topologyFullPath (str) – Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

-
-
Return type:
-

TopologyUrlsInfo

-
-
-
- -
-
-GetUserDetails(username='')[source]
-

Retrieves the specified user’s configuration settings and associated domains.

-
-
Parameters:
-

username (str) – Specify the name of the user.

-
-
Return type:
-

UserInfo

-
-
-
- -
-
-GetValuesForLookupAttribute(attributeName='')[source]
-

Retrieve the list of existing values for a lookup attribute.

-
-
Parameters:
-

attributeName (str) – Specify the lookup attribute name.

-
-
Return type:
-

LookupValuesInfo

-
-
-
- -
-
-IncludeResource(resourceFullPath='')[source]
-

Includes a specified resource.

-
-
Parameters:
-

resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

-
-
Return type:
-

str

-
-
-
- -
-
-IncludeResources(resourcesFullPath=[])[source]
-

Includes the specified resources.

-
-
Parameters:
-

resourcesFullPath (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

-
-
Return type:
-

str

-
-
-
- -
-
-LockResource(reservationId='', resourceFullPath='')[source]
-

Locks a specified resource.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-LockResources(reservationId='', resourcesFullPath=[])[source]
-

Locks multiple resources.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourcesFullPath (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-Logoff()[source]
-

Logs out the current user.

-
-
Return type:
-

str

-
-
-
- -
-
-Logon(username='', password='', domainName='Global')[source]
-

Logs in a user. If no user is specified, this method logs in the current user. If no domain is specified, this method logs the user in to the global (default) domain.

-
-
Parameters:
-
    -
  • username (str) – Username to logon with.

  • -
  • password (str) – Specify the user’s login password.

  • -
  • domainName (str) – Specify the name of the domain. If no domain is specified, it logs the user in to the global (default) domain.

  • -
-
-
Return type:
-

LogonResponseInfo

-
-
-
- -
-
-LogoutTNSession(reservationId='', resourceFullPath='', consolePortsFullPath=[], baudRate=0)[source]
-

Logs the user out from a console port TN session.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • consolePortsFullPath (list[str]) – Specify a list of console ports according to their location in the Resource Explorer. Include the full path from the root to each console port, separated by slashes. For example: Console/Ports/PortName.

  • -
  • baudRate (int) – Specify the baud rate to apply to the ports.

  • -
-
-
Return type:
-

CommandExecutionCompletedResultInfo

-
-
-
- -
-
-MapPorts(sourcePort='', destinationPort='', mappingType='')[source]
-

Maps a pair of ports on a physical (L1) switch.

-
-
Parameters:
-
    -
  • sourcePort (str) – Specify the source port.

  • -
  • destinationPort (str) – Specify the destination port.

  • -
  • mappingType (str) – Specify bidirectional or unidirectional as the mapping type.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-MoveFolder(originalFolder='', targetFolder='')[source]
-

Move a folder (and all its content, including sub folders) in the folder hierarchy.

-
-
Parameters:
-
    -
  • originalFolder (str) – Path of the folder to be moved.

  • -
  • targetFolder (str) – The path of the new containing folder. To move a folder to root, value should be empty.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-MoveResources(resourcesName=[], targetFolder='')[source]
-

Allows to change the folder that the specified root resources belong to.

-
-
Parameters:
-
    -
  • resourcesName (list[str]) – Specify the name of the root resources to move to the new target folder.

  • -
  • targetFolder (str) – The path of the target folder.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-PowerCycleResource(reservationId='', resourceFullPath='', powerPortsFullPath=[], delay=0)[source]
-

Cycles the power options for resource power ports.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the reservation’s unique identifier. Admin users may leave this parameter blank to perform power operations on excluded resources.

  • -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • powerPortsFullPath (list[str]) – Specify the list of power ports to use in this operation. Include the full path from the root resource to each power port, separated by slashes. For example: Switch20/Blade5/PowerPort1. Leave blank to perform the power operation on all of the specified resource’s power ports.

  • -
  • delay (float) – Specify the number of seconds to delay between each power cycle.

  • -
-
-
Return type:
-

CommandExecutionCompletedResultInfo

-
-
-
- -
-
-PowerOffResource(reservationId='', resourceFullPath='', powerPortsFullPath=[])[source]
-

Powers off specified power ports.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the reservation’s unique identifier. Admin users may leave this parameter blank to perform power operations on excluded resources.

  • -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • powerPortsFullPath (list[str]) – Specify the list of power ports to use in this operation. Include the full path from the root resource to each power port, separated by slashes. For example: Switch20/Blade5/PowerPort1. Leave blank to perform the power operation on all of the specified resource’s power ports.

  • -
-
-
Return type:
-

CommandExecutionCompletedResultInfo

-
-
-
- -
-
-PowerOnResource(reservationId='', resourceFullPath='', powerPortsFullPath=[])[source]
-

Powers on resource power ports.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the reservation’s unique identifier. Admin users may leave this parameter blank to perform power operations on excluded resources.

  • -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • powerPortsFullPath (list[str]) – Specify the list of power ports to use in this operation. Include the full path from the root resource to each power port, separated by slashes. For example: Switch20/Blade5/PowerPort1. Leave blank to perform the power operation on all of the specified resource’s power ports.

  • -
-
-
Return type:
-

CommandExecutionCompletedResultInfo

-
-
-
- -
-
-PrepareSandboxConnectivity(reservationId='')[source]
-

Prepare Sandbox Connectivity

-
-
Parameters:
-

reservationId (str) – Specify the string that represents the reservation’s unique identifier.

-
-
Return type:
-

str

-
-
-
- -
-
-PromoteDraft(draft='')[source]
-

Overrwrite the original blueprint with the draft, and delete the draft.

-
-
Parameters:
-

draft (str) – Specify the draft id, or name or the full path from the root to the draft, separated by slashes. For example: FolderName/Topologies/DraftName.

-
-
Return type:
-

str

-
-
-
- -
-
-RecheckConflicts(reservationId='')[source]
-

Updates the list of available resources for a reservation.

-
-
Parameters:
-

reservationId (str) – Specify the string that represents the reservation’s unique identifier.

-
-
Return type:
-

str

-
-
-
- -
-
-RefreshAppInBlueprints(appTemplateName='', topologyNames=[])[source]
-

Refresh Apps in the list of blueprints. This applies to blueprints in all domains and can be used by system administrators only.

-
-
Parameters:
-
    -
  • appTemplateName (str) – Specify the name of the App template to be used to refresh the App instances.

  • -
  • topologyNames (list[str]) – Specify an optional list of blueprint names. Include the full path from the root to the blueprint, separated by slashes. For example: FolderName/Topologies/TopologyName. If the list is not specified, Apps in all blueprints will be refreshed.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RefreshVMDetails(reservationId='', deployedAppNames=[])[source]
-

Refreshes VM Details on deployed apps.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • deployedAppNames (list[str]) – Names of deployed apps whose vm details will be refreshed.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RejectApprovalRequest(id=0, message='')[source]
-

Reject an approval request.

-
-
Parameters:
-
    -
  • id (int) – Unique id of the request.

  • -
  • message (str) – message (optional).

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-ReleaseFromPool(values=[], poolId='', reservationId='', ownerId='')[source]
-

Request to release an item from a pool.

-
-
Parameters:
-
    -
  • values (list[str]) – Values to release from the pool.

  • -
  • poolId (str) – The specific pool where to search for the values that you want to release.

  • -
  • reservationId (str) – Reservation id that is assoicated with the pool values. It can also be an empty string if the values are not associated with a reservation.

  • -
  • ownerId (str) – The owner of the pool values.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-ReleaseResourcesFromReservation(reservationId='', resourcesFullPath=[])[source]
-

Releases occupied testing resources that would not otherwise be available until the end of the current reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourcesFullPath (list[str]) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-ReleaseTopologyResources(reservationId='', topologyFullPath='')[source]
-

Releases resources used in topology. A reservation will not end until all used resources are released.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • topologyFullPath (str) – Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RemapConnections(reservationId='', resourcesFullPath=[], printOutput=False)[source]
-

Remap connections between resources.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourcesFullPath (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

RemapConnectionResultInfo

-
-
-
- -
-
-RemoveAppFromReservation(reservationId='', appName='')[source]
-

Remove a deployed App resource from existing reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • appName (str) – Specify the name of the App.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RemoveAttributeRestrictedValues(removeAttributeRestrictionRequests=[])[source]
-

remove attribute restrictions from family/model

-
-
Parameters:
-

removeAttributeRestrictionRequests (list[RemoveRestrictionRequest]) – Attribute restrictions to remove”.

-
-
Return type:
-

str

-
-
-
- -
-
-RemoveConnectorsFromReservation(reservationId='', endpoints=[])[source]
-

Removes the mapped connector between given end points.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • endpoints (list[str]) – The list of removed endpoints.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RemoveCustomShellAttribute(modelName='', attributeName='')[source]
-

Remove a custom attribute from an existing shell

-
-
Parameters:
-
    -
  • modelName (str) – Specify the name of the model to remove the attribute from.

  • -
  • attributeName (str) – Specify the name of the attribute to remove.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RemoveGroupsFromDomain(domainName='', groupNames=[])[source]
-

Remove groups from a domain.

-
-
Parameters:
-
    -
  • domainName (str) – Specify the name of the domain.

  • -
  • groupNames (list[str]) – Specify an array of one or more groups.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RemovePermittedEditorsFromTopology(topologyName='', editorNames=[])[source]
-

Remove permitted editors from a topology.

-
-
Parameters:
-
    -
  • topologyName (str) – Specify the topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
  • editorNames (list[str]) – A list of user names to be removed as permitted editors from a topology.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RemovePermittedUsersFromReservation(reservationId='', usernames=[])[source]
-

Remove one or more permitted users from the specified reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • usernames (list[str]) – List of permitted users to remove from the reservation.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RemoveResourcesFromDomain(domainName='', resourcesNames=[])[source]
-

Remove resources from a domain.

-
-
Parameters:
-
    -
  • domainName (str) – Specify the name of the domain.

  • -
  • resourcesNames (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RemoveResourcesFromReservation(reservationId='', resourcesFullPath=[], deleteDeployedApps=True)[source]
-

Unlocks and removes resources from a reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourcesFullPath (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

  • -
  • deleteDeployedApps (bool) – Specify false to block deletion of deployed apps when removing them from reservation - only applies to resources of that are deployed apps, when applied to other resources argument is ignored. Parameter is optional and can be left empty

  • -
-
-
Return type:
-

ReserveResourcesResponseInfo

-
-
-
- -
-
-RemoveRoutesFromReservation(reservationId='', endpoints=[], mappingType='')[source]
-

Disconnects a list of endpoints and removes the mapped route between them. Will only disconnect endpoints using resources reserved to the logged-in user .

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • endpoints (list[str]) – The list of removed endpoints.

  • -
  • mappingType (str) – Specify bidirectional or unidirectional as the mapping type.

  • -
-
-
Return type:
-

EndPointConnectionInfo

-
-
-
- -
-
-RemoveServicesFromReservation(reservationId='', services=[])[source]
-

Remove services and apps from existing reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • services (list[str]) – List of aliases. This list should contain the aliases for both the services and apps that should be removed.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RemoveTopologiesFromDomain(domainName='', topologyNames=[])[source]
-

Removes a list of one or more topologies from a domain.

-
-
Parameters:
-
    -
  • domainName (str) – Specify the name of the domain.

  • -
  • topologyNames (list[str]) – Specify a list of topology names. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RemoveTopologyCategory(topologyFullPath='', categoryName='')[source]
-

Removes a category from given topology.

-
-
Parameters:
-
    -
  • topologyFullPath (str) – Specify the topology (name or full path), from which to remove the category. For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
  • categoryName (str) – Specify the category’s name which we want to remove.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RemoveUsersFromGroup(usernames=[], groupName='')[source]
-

Removes a list of one or more users from the specified group.

-
-
Parameters:
-
    -
  • usernames (list[str]) – Specify an array of one or more users.

  • -
  • groupName (str) – Specify the name of the group.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RemoveValueFromLookupAttribute(attributeName='', removeValue='', defaultValue='')[source]
-

Removes an existing value from a given lookup attribute.

-
-
Parameters:
-
    -
  • attributeName (str) – Specify the lookup attribute name.

  • -
  • removeValue (str) – Specify the attribute value to remove from the attribute.

  • -
  • defaultValue (str) – Specify the new default value for this attribute (required if removing the attribute’s current default value).

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RenameBlueprint(topologyFullPath='', newName='')[source]
-

Rename a blueprint.

-
-
Parameters:
-
    -
  • topologyFullPath (str) – Specify the topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
  • newName (str) – Specify the name of the driver. Leave empty to remove associated driver.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-RenameResource(resourceFullPath='', resourceName='')[source]
-

Renames the specified resource.

-
-
Parameters:
-
    -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • resourceName (str) – Specify a new resource name.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-ResetResourceDriver(reservationId='', resourceFullPath='')[source]
-

Cancel the currently executing command, remove all pending command executions and reset the driver to its initial state.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
-
-
Return type:
-

CommandExecutionCompletedResultInfo

-
-
-
- -
-
-ResetSandboxProvisioningStatus(reservationId='')[source]
-

Reset the status of the sandbox from Active (with error) to Active.

-
-
Parameters:
-

reservationId (str) – Specify the string that represents the reservation’s unique identifier.

-
-
Return type:
-

str

-
-
-
- -
-
-RestoreSavedSandbox(reservationName='', owner='', durationInMinutes=0, notifyOnStart=False, notifyOnEnd=False, notificationMinutesBeforeEnd=0, savedSandboxId='', startTime='', endTime='', notifyOnSetupComplete=False, isTerminationProtectionEnabled=False)[source]
-

Restore a saved sandbox

-
-
Parameters:
-
    -
  • reservationName (str) – Specify the name of the reservation.

  • -
  • owner (str) – Specify the user name of the reservation owner.

  • -
  • durationInMinutes (int) – Specify the length of the reservation. (in minutes)

  • -
  • notifyOnStart (bool) – Indicate whether to notify the reservation owner when the reservation starts.

  • -
  • notifyOnEnd (bool) – Indicate whether to notify the reservation owner when the reservation ends.

  • -
  • notificationMinutesBeforeEnd (int) – Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)

  • -
  • savedSandboxId (str) – Specify the saved sandbox id.

  • -
  • startTime (str) – The start time of the restored sandbox.

  • -
  • endTime (str) – The end time of the restored sandbox.

  • -
  • notifyOnSetupComplete (bool) – Indicate whether to notify the reservation owner when the reservation setup completes.

  • -
  • isTerminationProtectionEnabled (bool) – Indicate whether to protect the reservation from being terminated.

  • -
-
-
Return type:
-

CreateReservationResponseInfo

-
-
-
- -
-
-SaveReservationAsTopology(reservationId='', folderFullPath='', topologyName='', includeInactiveRoutes=False)[source]
-

Creates a topology from an existing reservation. Leave the folder path blank to save the topology directly under the root.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • folderFullPath (str) – Full container folder path where the new topology will be saved. leaving the folder path empty will try saving the topology under the root. For example: FolderName/FolderNameA.

  • -
  • topologyName (str) – Specify the new name for the new topology.

  • -
  • includeInactiveRoutes (bool) – Include disconnected routes in the created topology

  • -
-
-
Return type:
-

TopologyInfo

-
-
-
- -
-
-SaveSandbox(reservationId='', savedSandboxName='', savedSandboxDescription='', owner='')[source]
-

Save the sandbox.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • savedSandboxName (str) – Specify the name of the saved sandbox

  • -
  • savedSandboxDescription (str) – provide a short description for the saved sandbox

  • -
  • owner (str) – Specify the owner of the saved sandbox

  • -
-
-
Return type:
-

SaveSandboxResponseInfo

-
-
-
- -
-
-SecureLogon(token='', domainName='Global')[source]
-

Logs in a user with a token. If no domain is specified, this method logs the user in to the global (default) domain.

-
-
Parameters:
-
    -
  • token (str) – Token to logon with.

  • -
  • domainName (str) – Specify the name of the domain. If no domain is specified, it logs the user in to the global (default) domain.

  • -
-
-
Return type:
-

LogonResponseInfo

-
-
-
- -
-
-SetAppSecurityGroups(reservationId='', securityGroups=[], printOutput=False)[source]
-

Set security groups for apps.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • securityGroups (list[SecurityGroup]) – Security Groups

  • -
  • printOutput (bool) – Defines whether to print the command output in the reservation command output window.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetAttributeValue(resourceFullPath='', attributeName='', attributeValue='')[source]
-

Sets the value of the specified attribute.

-
-
Parameters:
-
    -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • attributeName (str) – Specify the attribute name.

  • -
  • attributeValue (str) – Specify the attribute’s value.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetAttributesValues(resourcesAttributesUpdateRequests=[])[source]
-

Sets new attribute values for the specified resources.

-
-
Parameters:
-

resourcesAttributesUpdateRequests (list[ResourceAttributesUpdateRequest]) – Specify a list of resources, attribute names, and new attribute values (up to 10000 rows). For example: [ResourceAttributesUpdateRequest(‘resourceFullName’, [AttributeNameValue(‘attribute_name’, ‘attribute_value’)]]

-
-
Return type:
-

str

-
-
-
- -
-
-SetBaudRate(reservationId='', resourceFullPath='', consolePortsFullPath=[], baudRate=0)[source]
-

Sets the baud rate for one or more console ports.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • consolePortsFullPath (list[str]) – Specify a list of console ports according to their location in the Resource Explorer. Include the full path from the root to each console port, separated by slashes. For example: Console/Ports/PortName.

  • -
  • baudRate (int) – Specify the baud rate to apply to the ports.

  • -
-
-
Return type:
-

CommandExecutionCompletedResultInfo

-
-
-
- -
-
-SetConnectorAttributes(reservationId='', sourceResourceFullName='', targetResourceFullName='', attributeRequests=[])[source]
-

Sets attributes and associated values for a specified connector.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • sourceResourceFullName (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • targetResourceFullName (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • attributeRequests (list[AttributeNameValue]) – Specify a matrix of attributes and associated attribute values.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetConnectorAttributesViaAlias(reservationId='', connectorAlias='', attributeRequests=[])[source]
-

Sets attributes and associated values for a connector specified via its alias.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • connectorAlias (str) – Specify the connector’s alias.

  • -
  • attributeRequests (list[AttributeNameValue]) – Specify a matrix of attributes and associated attribute values.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetConnectorsInReservation(reservationId='', connectors=[])[source]
-

Adds connectors between source and target or update existing ones.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • connectors (list[SetConnectorRequest]) – List of connectors to set in the reservation. For example: [SetConnectorRequest(‘SourceResourceFullPath’, ‘TargetResourceFullPath’, ‘Direction’, ‘Alias’)]

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetConsoleForXModem(reservationId='', resourceFullPath='', consolePortsFullPath=[], baudRate=0)[source]
-

Sets one or more consoles for Xmodem.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • consolePortsFullPath (list[str]) – Specify a list of console ports according to their location in the Resource Explorer. Include the full path from the root to each console port, separated by slashes. For example: Console/Ports/PortName.

  • -
  • baudRate (int) – Specify the baud rate to apply to the ports.

  • -
-
-
Return type:
-

CommandExecutionCompletedResultInfo

-
-
-
- -
-
-SetCustomShellAttribute(modelName='', attributeName='', defaultValue='', restrictedValues=[])[source]
-

Add a custom attribute to an existing shell model

-
-
Parameters:
-
    -
  • modelName (str) – Specify the name of the model to add the attribute to.

  • -
  • attributeName (str) – Specify the name of the attribute to add/update.

  • -
  • defaultValue (str) – Specify the default value to set for the attribute.

  • -
  • restrictedValues (list[str]) – Specify the restricted values for the attribute.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetGroupDomainPermissions(domainName='', groupName='', viewOnly=False)[source]
-

Set the permission level of a group in domain.

-
-
Parameters:
-
    -
  • domainName (str) – Specify the name of the domain.

  • -
  • groupName (str) – Specify the group name.

  • -
  • viewOnly (bool) – Specify if the group should be have view only permissions.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetReservationLiveStatus(reservationId='', liveStatusName='', additionalInfo='')[source]
-

Sets the live status of the reservation

-
-
Parameters:
-
    -
  • reservationId (str) – Specifies the string that represents the reservation’s unique identifier.

  • -
  • liveStatusName (str) – Reservation live status name

  • -
  • additionalInfo (str) – Reservation live status additional info

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetReservationResourcePosition(reservationId='', resourceFullName='', x=0, y=0)[source]
-

Sets the location of a specified resource in the reservation diagram.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourceFullName (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName.

  • -
  • x (float) – Specify the x coordinate of the resource’s top left corner.

  • -
  • y (float) – Specify the y coordinate of the resource’s top left corner.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetReservationServicePosition(reservationId='', serviceAlias='', x=0, y=0)[source]
-

Sets the location of a specified service in the reservation diagram.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • serviceAlias (str) – Specify the alias of the service.

  • -
  • x (float) – Specify the x coordinate of the resource’s top left corner.

  • -
  • y (float) – Specify the y coordinate of the resource’s top left corner.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetResourceLiveStatus(resourceFullName='', liveStatusName='', additionalInfo='')[source]
-

Sets the live status of the resource

-
-
Parameters:
-
    -
  • resourceFullName (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA.

  • -
  • liveStatusName (str) – Resource live status name

  • -
  • additionalInfo (str) – Resource live status additional info

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetResourceShareLevel(resourceFullPath='', newShareLevel='')[source]
-

Sets a resource’s default share level.

-
-
Parameters:
-
    -
  • resourceFullPath (str) – Specify the full path of the resource. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • newShareLevel (str) – The new share level of the resource. Options: FamilyDefault, Shared or Unshared.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetResourceSharedState(reservationId='', resourcesFullName=[], isShared=False)[source]
-

Sets the resource sharing state.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourcesFullName (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

  • -
  • isShared (bool) – Specify whether to allow sharing of the resource.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetResourceVisibility(resourceFullPath='', newVisibility='')[source]
-

Set the resource visibility State - Admin Only, Everyone or Family Default.

-
-
Parameters:
-
    -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • newVisibility (str) – The new visibility state for the resource. options: AdminOnly, Everyone or FamilyDefault

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetRouteAttributes(reservationId='', sourceResourceFullPath='', targetResourceFullPath='', applyChangesTo='', attributeRequests=[])[source]
-

Sets attributes and associated values for a specified route.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • sourceResourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • targetResourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • applyChangesTo (str) – Specify on which resources to apply the attribute changes: Source/Target/All.Source refers to the resource connected to the source endpoint of the route. Target refers to the resource connected to the target endpoint of the route. All encompasses all route resources.

  • -
  • attributeRequests (list[str]) – Specify an array of attributes and associated attribute values.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetRouteAttributesViaAlias(reservationId='', routeAlias='', applyChangesTo='', attributeRequests=[])[source]
-

Sets attributes and associated values for a route specified via its alias.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • routeAlias (str) – Specify the route’s alias.

  • -
  • applyChangesTo (str) – Specify on which resources to apply the attribute changes: Source/Target/All.Source refers to the resource connected to the source endpoint of the route. Target refers to the resource connected to the target endpoint of the route. All encompasses all route resources.

  • -
  • attributeRequests (list[str]) – Specify an array of attributes and associated attribute values.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetSandboxData(reservationId='', sandboxDataKeyValues=[])[source]
-

Sets the SandboxData. Provide a key:value input. If the key exists it will override the value, if the key doesn’t exist a new key will be created. The value is a string.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • sandboxDataKeyValues (list[SandboxDataKeyValue]) – sandboxDataKeyValues

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetServiceAttributesValues(reservationId='', serviceAlias='', attributeRequests=[])[source]
-

Sets attributes and associated values for a specified resource.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • serviceAlias (str) – Specify the service name.

  • -
  • attributeRequests (list[AttributeNameValue]) – Specify a matrix of attributes and associated attribute values.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetServiceDriver(serviceName='', driverName='')[source]
-

Sets the driver for a specified service model, if empty, removes its driver.

-
-
Parameters:
-
    -
  • serviceName (str) – Specify the name of the service model.

  • -
  • driverName (str) – Specify the name of the driver.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetServiceLiveStatus(reservationId='', serviceAlias='', liveStatusName='', additionalInfo='')[source]
-

Sets the live status of a service

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • serviceAlias (str) – Specify the string that represents the service’s alias.

  • -
  • liveStatusName (str) – Resource live status name

  • -
  • additionalInfo (str) – Resource live status additional info

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetServiceName(reservationId='', serviceName='', newServiceName='')[source]
-

Edit Service alias name

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • serviceName (str) – Specify the string that represents the service’s name.

  • -
  • newServiceName (str) – Specify the string that represents the new service’s name.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetSetupStage(setupStage='', reservationId='')[source]
-

Set the specified setup stage for the the sandbox.

-
-
Parameters:
-
    -
  • setupStage (str) – Specify the setup stage that will be set to the reservation.

  • -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SetTopologyCategory(topologyFullPath='', categoryName='', categoryValue='')[source]
-

Set a category to given topology

-
-
Parameters:
-
    -
  • topologyFullPath (str) – Specify the topology (name or full path), to associate the category to. For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
  • categoryName (str) – Specify the category’s name which we want to set

  • -
  • categoryValue (str) – Specify the category’s value

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-SyncResourceFromDevice(resourceFullPath='')[source]
-

Synchronizes the specified resource with current device settings and mappings.

-
-
Parameters:
-

resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

-
-
Return type:
-

str

-
-
-
- -
-
-SyncResourceToDevice(resourceFullPath='')[source]
-

Updates device settings and mappings from the specified resource.

-
-
Parameters:
-

resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

-
-
Return type:
-

str

-
-
-
- -
-
-TerminateReservation(reservationId='')[source]
-

Terminates the specified reservation if the reservation is in a state of teardown.

-
-
Parameters:
-

reservationId (str) – Specify the string that represents the reservation’s unique identifier.

-
-
Return type:
-

str

-
-
-
- -
-
-UnMapPorts(portA='', portB='')[source]
-

Removes existing mapping between a pair of physical (L1) switch ports.

-
-
Parameters:
-
    -
  • portA (str) – Specify the source port. (i.e. Folder1/Chassis1/Blade1/Port1).

  • -
  • portB (str) – Specify the destination port. (i.e. Folder1/Chassis1/Blade1/Port1).

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UnarchiveDomain(domainName='')[source]
-

Unarchive a domain. New reservation can be created.

-
-
Parameters:
-

domainName (str) – Specify the name of the domain.

-
-
Return type:
-

str

-
-
-
- -
-
-UnlockResource(reservationId='', resourceFullPath='')[source]
-

Unlocks the specified resource.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UnlockResources(reservationId='', resourcesFullPath=[])[source]
-

Unlocks multiple resources.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • resourcesFullPath (list[str]) – Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateConnectionWeight(resourceAFullPath='', resourceBFullPath='', weight=0)[source]
-

Sets a weight score on a physical connection between two resources. Weights are used to optimize route resolution in physical switch scenarios.

-
-
Parameters:
-
    -
  • resourceAFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • resourceBFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • weight (int) – Specify a number to represent the connection weight between the specified resources.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateConnectorAliasInReservation(reservationId='', sourceResourceFullName='', targetResourceFullName='', direction='', alias='')[source]
-

Sets alias for a specified connector.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • sourceResourceFullName (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • targetResourceFullName (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • direction (str) – Specify bidirectional or unidirectional as the connector direction.

  • -
  • alias (str) – Specify the connector’s alias.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateDomainTopologiesFolder(domainName='', topologiesFolder='')[source]
-

Update the domain’s topologies folder.

-
-
Parameters:
-
    -
  • domainName (str) – Specify the name of the domain.

  • -
  • topologiesFolder (str) – Specify the topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateDriver(driverName='', driverFileName='')[source]
-

Updating driver in cloudshell

-
-
Parameters:
-
    -
  • driverName – str

  • -
  • driverFile – str

  • -
  • driverFileName – str

  • -
-
-
Returns:
-

string

-
-
-
- -
-
-UpdateGroup(groupName='', newName='', description='', groupRole='')[source]
-

Modifies the group name and description.

-
-
Parameters:
-
    -
  • groupName (str) – Specify the name of the group.

  • -
  • newName (str) – Specify the new group name.

  • -
  • description (str) – Provide a short description of the group.

  • -
  • groupRole (str) – Specify the role of the group, possible values: External, Regular, DomainAdmin or Ignore (to keep the current role).

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdatePhysicalConnection(resourceAFullPath='', resourceBFullPath='', overrideExistingConnections=True)[source]
-

Define a physical connection (cable link) between two resources.

-
-
Parameters:
-
    -
  • resourceAFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • resourceBFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. You may leave this parameter blank if you wish to disconnect the existing source resource connection.

  • -
  • overrideExistingConnections (bool) – Overriding existing connections will automatically remove existing physical connection if they conflict with the requested new connections. If set to ‘No’, an error message will be displayed if any port is already connected and the operation will be cancelled.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdatePhysicalConnections(physicalConnectionUpdateRequest=[], overrideExistingConnections=True)[source]
-

Define physical connections (cable links) between resources.

-
-
Parameters:
-
    -
  • physicalConnectionUpdateRequest (list[PhysicalConnectionUpdateRequest]) – Specify a list of physical connections to update. For example: [PhysicalConnectionUpdateRequest(‘resource_a_fullname’, ‘resource_b_fullname’, ‘weight’)]

  • -
  • overrideExistingConnections (bool) – Overriding existing connections will automatically remove existing physical connection if they conflict with the requested new connections. If set to ‘No’, an error message will be displayed if any port is already connected and the operation will be cancelled.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateReservationDescription(reservationId='', description='')[source]
-

Modifies the description for a specified reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the reservation ID.

  • -
  • description (str) – Provide an updated description of the reservation. This text will replace the current description.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateReservationEndTime(reservationId='', isPersistent=False, endTime='')[source]
-

Extends the duration of the specified reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • isPersistent (bool) – Enable or disable Reservation Persistence.

  • -
  • endTime (str) – The end time of the reservation.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateReservationGlobalInputs(reservationId='', globalInputs=[])[source]
-

Updates the unlinked global inputs in a specified reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the reservation ID.

  • -
  • globalInputs (list[UpdateTopologyGlobalInputsRequest]) – Global inputs associated with the specified reservation. For example: [UpdateTopologyGlobalInputsRequest(‘input1’,’value1’)]

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateReservationName(reservationId='', name='')[source]
-

Modifies the name for a specified reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the reservation ID.

  • -
  • name (str) – Provide an updated name of the reservation. This text will replace the current name.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateResourceAddress(resourceFullPath='', resourceAddress='')[source]
-

Modifies the address for a specified resource.

-
-
Parameters:
-
    -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • resourceAddress (str) – Specify the resource’s new address.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateResourceDescription(resourceFullPath='', resourceDescription='')[source]
-

Modifies the description for a specified resource.

-
-
Parameters:
-
    -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • resourceDescription (str) – Provide an updated description of the resource. This text will replace the current description.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateResourceDriver(resourceFullPath='', driverName='')[source]
-

Updates the driver for a specified resource.

-
-
Parameters:
-
    -
  • resourceFullPath (str) – Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.

  • -
  • driverName (str) – Specify the name of the driver.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateRouteAliasesInReservation(reservationId='', routeAliases=[])[source]
-

Update route aliases in a reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specifies the string that represents the reservation’s unique identifier.

  • -
  • routeAliases (list[UpdateRouteAliasRequest]) – Specify a matrix of route source, route target and alias. For example: [UpdateRouteAliasRequest(‘source_fullname’, ‘target_fullname’, ‘alias’)]

  • -
-
-
Return type:
-

EndPointConnectionInfo

-
-
-
- -
-
-UpdateScript(scriptName='', scriptFileName='')[source]
-

Updating driver in cloudshell

-
-
Parameters:
-
    -
  • driverName – str

  • -
  • driverFile – str

  • -
  • driverFileName – str

  • -
-
-
Returns:
-

string

-
-
-
- -
-
-UpdateTopologyDriver(topologyFullPath='', driverName='')[source]
-

Update the topology driver.

-
-
Parameters:
-
    -
  • topologyFullPath (str) – Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
  • driverName (str) – Specify the name of the driver. Leave empty to remove associated driver.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateTopologyOwner(topologyName='', ownerName='')[source]
-

Update the topology owner.

-
-
Parameters:
-
    -
  • topologyName (str) – Specify the topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

  • -
  • ownerName (str) – Specify the topology owner.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateUser(username='', email='', isActive=False)[source]
-

Configures a user’s email and activity settings.

-
-
Parameters:
-
    -
  • username (str) – The username of the user you want to update.

  • -
  • email (str) – The new email address to update to.

  • -
  • isActive (bool) – Grant or deny active access to the application.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateUserGroups(username='', groupsNames=[])[source]
-

Update an existing user’s groups (replaces existing user’s groups).

-
-
Parameters:
-
    -
  • username (str) – Specify the name of the user.

  • -
  • groupsNames (list[str]) – Use this method to update a user’s group memberships. Activating this method will replace the user’s memberships with the specified list of groups.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateUserPassword(username='', password='')[source]
-

Changes a user’s password.

-
-
Parameters:
-
    -
  • username (str) – Specify the name of the user.

  • -
  • password (str) – Specify the user’s new login password.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-UpdateUsersLimitations(userUpdateRequests=[])[source]
-

Update MaxConcurrentReservations, MaxReservationDuration, MaxSavedSandboxes, MaxScheduledSandboxes and MaxOwnedBlueprints.

-
-
Parameters:
-

userUpdateRequests (list[UserUpdateRequest]) – List of Username, MaxConcurrentReservations, MaxReservationDuration, MaxSavedSandboxes, MaxScheduledSandboxes, and MaxOwnedBlueprints of the users you wish to update. For example: [UserUpdateRequest(‘user1’,’max_reservations’,’max_duration’, ‘max_save_sandbox’, ‘max_scheduled_sandboxes’, ‘max_owned_blueprints’)]

-
-
Return type:
-

str

-
-
-
- -
-
-WriteMessageToReservationOutput(reservationId='', message='')[source]
-

Allows sending output to the command output window in a reservation.

-
-
Parameters:
-
    -
  • reservationId (str) – Specify the string that represents the reservation’s unique identifier.

  • -
  • message (str) – Output message to the command output window.

  • -
-
-
Return type:
-

str

-
-
-
- -
-
-create_headers(timezone, datetimeformat)[source]
-
- -
- -
-
-class cloudshell.api.cloudshell_api.CommandExecutionCancelledResultInfo(xml_object, find_prefix)[source]
-

Bases: CommandExecutionResultInfo

-
-
-Message
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.CommandExecutionCompletedResultInfo(xml_object, find_prefix)[source]
-

Bases: CommandExecutionResultInfo

-
-
-Output
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.CommandExecutionFailedResultInfo(xml_object, find_prefix)[source]
-

Bases: CommandExecutionResultInfo

-
-
-ErrorDescription
-

:type : str

-
- -
-
-ErrorName
-

:type : str

-
- -
-
-ErrorParameters
-

:type : list[ErrorParameter]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.CommandExecutionIdResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Id
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.CommandExecutionResultInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
- -
-
-class cloudshell.api.cloudshell_api.CommandExecutionResultListInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Results
-

:type : list[CommandExecutionResultInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.CommandNamesListInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-CommandNames
-

:type : list[str]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.CommandParameter(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-DefaultValue
-

:type : str

-
- -
-
-Description
-

:type : str

-
- -
-
-EnumValues
-

:type : str

-
- -
-
-Mandatory
-

:type : bool

-
- -
-
-Name
-

:type : str

-
- -
-
-Type
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ConfigParam(Name, Value)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.ConfigurationManagementData(Alias, ConfigParams)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.ConfigureAppInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-AppName
-

:type : str

-
- -
-
-Error
-

:type : str

-
- -
-
-ErrorCode
-

:type : int

-
- -
-
-Success
-

:type : bool

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ConfigureAppsInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ResultItems
-

:type : list[ConfigureAppInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.Connection(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-FullPath
-

:type : str

-
- -
-
-Weight
-

:type : int

-
- -
- -
-
-class cloudshell.api.cloudshell_api.Connector(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Alias
-

:type : str

-
- -
-
-Attributes
-

:type : list[AttributeValueInfo]

-
- -
-
-Direction
-

:type : str

-
- -
-
-Source
-

:type : str

-
- -
-
-State
-

:type : str

-
- -
-
-Target
-

:type : str

-
- -
-
-Type
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ContentListInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ContentArray
-

:type : list[ContentShortInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ContentShortInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Name
-

:type : str

-
- -
-
-Permission
-

:type : str

-
- -
-
-Type
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.CreateApprovalRequestResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Id
-

:type : int

-
- -
- -
-
-class cloudshell.api.cloudshell_api.CreateReservationResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Reservation
-

:type : ReservationShortInfo

-
- -
- -
-
-class cloudshell.api.cloudshell_api.Credentials(username='', password='', domain='', token_id='')[source]
-

Bases: object

-
- -
-
-class cloudshell.api.cloudshell_api.DefaultDeployment(Name, Deployment)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.DeployAppInput(AppName, Name, Value)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.Deployment(Attributes)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.DeploymentPathInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-DeploymentService
-

:type : DeploymentServiceInfo

-
- -
-
-IsDefault
-

:type : bool

-
- -
-
-Name
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.DeploymentServiceInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Attributes
-

:type : list[AttributeValueInfo]

-
- -
-
-CloudProvider
-

:type : str

-
- -
-
-Driver
-

:type : str

-
- -
-
-Model
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.Domain(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Description
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.DomainInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Archived
-

:type : str

-
- -
-
-Description
-

:type : str

-
- -
-
-Groups
-

:type : list[Group]

-
- -
-
-Name
-

:type : str

-
- -
-
-Resources
-

:type : list[Resource]

-
- -
-
-Topologies
-

:type : list[Topology]

-
- -
-
-TopologiesFolder
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.DraftInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-DraftId
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.EndPointConnectionInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Routes
-

:type : list[RouteInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.EntityUsage(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-BlueprintTemplates
-

:type : list[UsageDetails]

-
- -
-
-Blueprints
-

:type : list[UsageDetails]

-
- -
-
-Name
-

:type : str

-
- -
-
-Sandboxes
-

:type : list[UsageDetails]

-
- -
-
-Type
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.EnvironmentCommandInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Description
-

:type : str

-
- -
-
-DisplayName
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
-
-Parameters
-

:type : list[EnvironmentCommandParameter]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.EnvironmentCommandListInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Commands
-

:type : list[EnvironmentCommandInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.EnvironmentCommandParameter(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-DefaultValue
-

:type : str

-
- -
-
-Description
-

:type : str

-
- -
-
-DisplayName
-

:type : str

-
- -
-
-EnumValues
-

:type : str

-
- -
-
-Mandatory
-

:type : bool

-
- -
-
-Name
-

:type : str

-
- -
-
-Type
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ErrorParameter(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Name
-

:type : str

-
- -
-
-Value
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ExportConfigurationInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Configuration
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.FindResourceInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Address
-

:type : str

-
- -
-
-ConnectedTo
-

:type : str

-
- -
-
-Description
-

:type : str

-
- -
-
-Excluded
-

:type : bool

-
- -
-
-FullAddress
-

:type : str

-
- -
-
-FullName
-

:type : str

-
- -
-
-FullPath
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
-
-Permission
-

:type : str

-
- -
-
-Reservations
-

:type : list[FindResourceReservationInfo]

-
- -
-
-ReservedStatus
-

:type : str

-
- -
-
-ResourceFamilyName
-

:type : str

-
- -
-
-ResourceModelName
-

:type : str

-
- -
-
-UsageSummary
-

:type : ResourcesUsageSummaryInfo

-
- -
- -
-
-class cloudshell.api.cloudshell_api.FindResourceListInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Resources
-

:type : list[FindResourceInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.FindResourceReservationInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-EndTime
-

:type : str

-
- -
-
-Owner
-

:type : str

-
- -
-
-ReservationId
-

:type : str

-
- -
-
-ReservationName
-

:type : str

-
- -
-
-ResourceFullName
-

:type : str

-
- -
-
-Shared
-

:type : bool

-
- -
-
-StartTime
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.GetActiveReservationsResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Reservations
-

:type : list[ReservationShortInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.GetAllApprovalRequestsResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ApprovalRequestResponseInfos
-

:type : list[GetApprovalRequestResponseInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ApproveNotes
-

:type : str

-
- -
-
-CreationDate
-

:type : str

-
- -
-
-Duration
-

:type : int

-
- -
-
-EndTime
-

:type : str

-
- -
-
-EntityName
-

:type : str

-
- -
-
-Id
-

:type : int

-
- -
-
-Inputs
-

:type : str

-
- -
-
-IsApprover
-

:type : bool

-
- -
-
-ModifiedDate
-

:type : str

-
- -
-
-RequestNotes
-

:type : str

-
- -
-
-RequestedEntityId
-

:type : str

-
- -
-
-RequestedEntityType
-

:type : str

-
- -
-
-RequesterName
-

:type : str

-
- -
-
-StartTime
-

:type : str

-
- -
-
-State
-

:type : str

-
- -
-
-UserInfoId
-

:type : int

-
- -
- -
-
-class cloudshell.api.cloudshell_api.GetModelUsageReportResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ModelUsages
-

:type : list[EntityUsage]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.GetReservationAppImageResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-AppTemplateImage
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.GetReservationDescriptionResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ReservationDescription
-

:type : ReservationDescriptionInfo

-
- -
- -
-
-class cloudshell.api.cloudshell_api.GetReservationInputsResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-AdditionalInfoInputs
-

:type : list[ReservedTopologyAdditionalInfoInputsInfo]

-
- -
-
-GlobalInputs
-

:type : list[ReservedTopologyGlobalInputsInfo]

-
- -
-
-RequiredInputs
-

:type : list[ReservedTopologyRequiredInputsInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.GetReservationRemainingTimeInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-RemainingTimeInMinutes
-

:type : float

-
- -
- -
-
-class cloudshell.api.cloudshell_api.GetReservationsInRangeResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Reservations
-

:type : list[ReservationShortInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.GetSandboxDataInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-SandboxDataKeyValues
-

:type : list[SandboxDataKeyValueInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.GetSavedSandboxesResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-SavedSandboxes
-

:type : list[SavedSandboxInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.GetServerTimeZonesResponse(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-TimeZones
-

:type : list[TimeZoneDefinition]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.Group(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Description
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
-
-Role
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.GroupInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Description
-

:type : str

-
- -
-
-GroupRole
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
-
-TestShellDomains
-

:type : list[TestShellDomainInfo]

-
- -
-
-Users
-

:type : list[UserInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.GroupsInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Groups
-

:type : list[GroupInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.InputNameValue(Name, Value)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.LogicalResourceInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Attributes
-

:type : list[AttributeValueInfo]

-
- -
-
-Description
-

:type : str

-
- -
-
-Driver
-

:type : str

-
- -
-
-Family
-

:type : str

-
- -
-
-Model
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.LogonDomainInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Description
-

:type : str

-
- -
-
-DomainId
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.LogonManager(credentials, logon, secure_logon)[source]
-

Bases: object

-
-
-logon()[source]
-
- -
- -
-
-class cloudshell.api.cloudshell_api.LogonResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Domain
-

:type : LogonDomainInfo

-
- -
-
-Token
-

:type : LogonTokenInfo

-
- -
-
-User
-

:type : UserInfo

-
- -
- -
-
-class cloudshell.api.cloudshell_api.LogonTokenInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Token
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.LookupValuesInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-LookupValues
-

:type : list[str]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.Mapping(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-RouteType
-

:type : str

-
- -
-
-Source
-

:type : str

-
- -
-
-Target
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.NameValuePair(Name, Value)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.NumericRange(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-End
-

:type : int

-
- -
-
-Start
-

:type : int

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ParameterData(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Name
-

:type : str

-
- -
-
-Value
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.PhysicalConnectionUpdateRequest(ResourceAFullName, ResourceBFullName, ConnectionWeight)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.QualiApiClient(url, port, host, quali_api_scheme, http, api_response_handler, credentials)[source]
-

Bases: object

-
-
-enrich_logon(xml_rpc_logon)[source]
-
- -
-
-enrich_secure_logon(xml_rpc_logon)[source]
-
- -
-
-send_rest(operation, data, method='POST', is_xml=True)[source]
-
- -
- -
-
-class cloudshell.api.cloudshell_api.RemapConnectionResultInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ResultItems
-

:type : list[RemapConnectionResultItem]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.RemapConnectionResultItem(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Error
-

:type : str

-
- -
-
-ErrorCode
-

:type : int

-
- -
-
-Output
-

:type : str

-
- -
-
-RemapOperationSummary
-

:type : str

-
- -
-
-RemapedVia
-

:type : str

-
- -
-
-ResourceName
-

:type : str

-
- -
-
-Success
-

:type : bool

-
- -
- -
-
-class cloudshell.api.cloudshell_api.RemoveRestrictionRequest(FamilyName, ModelName, Attributes)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.ReplaceWithResourceResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-RootResources
-

:type : list[str]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservationAppResource(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-AppConfigurationManagements
-

:type : list[AppConfigurationManagement]

-
- -
-
-AppTemplateName
-

:type : str

-
- -
-
-DeploymentPaths
-

:type : list[DeploymentPathInfo]

-
- -
-
-Description
-

:type : str

-
- -
-
-LogicalResource
-

:type : LogicalResourceInfo

-
- -
-
-Name
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservationAppsResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Apps
-

:type : list[ReservationAppResource]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservationDescriptionInfo(xml_object, find_prefix)[source]
-

Bases: ReservationShortInfo

-
-
-ActiveRoutesInfo
-

:type : list[RouteInfo]

-
- -
-
-Apps
-

:type : list[ReservationAppResource]

-
- -
-
-Conflicts
-

:type : list[ResourceConflictInfo]

-
- -
-
-Connectors
-

:type : list[Connector]

-
- -
-
-RequestedRoutesInfo
-

:type : list[RouteInfo]

-
- -
-
-ReservationLiveStatus
-

:type : ReservationLiveStatus

-
- -
-
-Resources
-

:type : list[ReservedResourceInfo]

-
- -
-
-SavedSandboxId
-

:type : str

-
- -
-
-Services
-

:type : list[ServiceInstance]

-
- -
-
-SetupStage
-

:type : str

-
- -
-
-TopologiesInstructionsInfo
-

:type : list[TopologyInstructionsInfo]

-
- -
-
-TopologiesReservedResources
-

:type : list[TopologyReservedResourceInfo]

-
- -
-
-TopologiesResourcesAttributeInfo
-

:type : list[TopologiesResourcesAttributesInfo]

-
- -
-
-TopologiesRouteInfo
-

:type : list[TopologyRoutesInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservationDiagramLayoutResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ResourceDiagramLayouts
-

:type : list[ResourceDiagramLayoutInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservationInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Created
-

:type : str

-
- -
-
-Id
-

:type : str

-
- -
-
-LockedResources
-

:type : list[ResourceShortInfo]

-
- -
-
-Name
-

:type : str

-
- -
-
-Owner
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservationListInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Reservations
-

:type : list[ReservationInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservationLiveStatus(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ReservationId
-

:type : str

-
- -
-
-ReservationLiveStatusDescription
-

:type : str

-
- -
-
-ReservationLiveStatusName
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservationLiveStatusInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ReservationLiveStatuses
-

:type : list[ReservationLiveStatus]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservationShortInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ActualEndTime
-

:type : str

-
- -
-
-Booked
-

:type : bool

-
- -
-
-CreateDate
-

:type : str

-
- -
-
-Description
-

:type : str

-
- -
-
-DomainName
-

:type : str

-
- -
-
-EndTime
-

:type : str

-
- -
-
-Id
-

:type : str

-
- -
-
-ModificationDate
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
-
-Owner
-

:type : str

-
- -
-
-PermittedUsers
-

:type : list[str]

-
- -
-
-ProvisioningStatus
-

:type : str

-
- -
-
-RecurrenceType
-

:type : str

-
- -
-
-ReservationLiveStatusDescription
-

:type : str

-
- -
-
-ReservationLiveStatusName
-

:type : str

-
- -
-
-StartTime
-

:type : str

-
- -
-
-Status
-

:type : str

-
- -
-
-TeardownTime
-

:type : str

-
- -
-
-Topologies
-

:type : list[str]

-
- -
-
-TopologiesInfo
-

:type : list[TopologyShortInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservationSlimStatus(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Booked
-

:type : bool

-
- -
-
-EndTime
-

:type : str

-
- -
-
-ProvisioningStatus
-

:type : str

-
- -
-
-ReservationId
-

:type : str

-
- -
-
-SetupStage
-

:type : str

-
- -
-
-StartTime
-

:type : str

-
- -
-
-Status
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservationSlimStatusInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ReservationSlimStatus
-

:type : ReservationSlimStatus

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReserveResourcesResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Conflicts
-

:type : list[ResourceConflictInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReserveTopologyResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Conflicts
-

:type : list[ResourceConflictInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservedResourceInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-AppDetails
-

:type : AppInfo

-
- -
-
-AppTemplateName
-

:type : str

-
- -
-
-Availability
-

:type : str

-
- -
-
-CreatedByUser
-

:type : str

-
- -
-
-CreatedInDomain
-

:type : str

-
- -
-
-CreatedInReservation
-

:type : str

-
- -
-
-FolderFullPath
-

:type : str

-
- -
-
-FullAddress
-

:type : str

-
- -
-
-Locked
-

:type : bool

-
- -
-
-Name
-

:type : str

-
- -
-
-Released
-

:type : bool

-
- -
-
-ResourceFamilyName
-

:type : str

-
- -
-
-ResourceModelName
-

:type : str

-
- -
-
-Shared
-

:type : bool

-
- -
-
-VmDetails
-

:type : ResourceInfoVmDetails

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservedTopologyAdditionalInfoInputsInfo(xml_object, find_prefix)[source]
-

Bases: ReservedTopologyInputsInfo

-
-
-LinkedToGlobal
-

:type : str

-
- -
-
-PossibleValues
-

:type : list[str]

-
- -
-
-ResourceName
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservedTopologyGlobalInputsInfo(xml_object, find_prefix)[source]
-

Bases: ReservedTopologyInputsInfo

-
-
-PossibleValues
-

:type : list[str]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservedTopologyInputsInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ParamName
-

:type : str

-
- -
-
-Value
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ReservedTopologyRequiredInputsInfo(xml_object, find_prefix)[source]
-

Bases: ReservedTopologyInputsInfo

-
-
-LinkedToGlobal
-

:type : str

-
- -
-
-ResourceName
-

:type : str

-
- -
-
-Type
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.Resource(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Name
-

:type : str

-
- -
-
-Path
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ResourceAttribute(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Name
-

:type : str

-
- -
-
-Type
-

:type : str

-
- -
-
-Value
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ResourceAttributesUpdateRequest(ResourceFullName, AttributeNamesValues)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.ResourceCommandInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Description
-

:type : str

-
- -
-
-DisplayName
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
-
-Parameters
-

:type : list[CommandParameter]

-
- -
-
-Tag
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ResourceCommandListInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Commands
-

:type : list[ResourceCommandInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ResourceConflictInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ConflictPlannedEndTime
-

:type : str

-
- -
-
-ConflictStarted
-

:type : str

-
- -
-
-ConflictType
-

:type : str

-
- -
-
-ConflictWith
-

:type : str

-
- -
-
-ConflictWithUser
-

:type : str

-
- -
-
-ResourceName
-

:type : str

-
- -
-
-Topology
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ResourceDiagramLayoutInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ResourceName
-

:type : str

-
- -
-
-X
-

:type : float

-
- -
-
-Y
-

:type : float

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ResourceInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Address
-

:type : str

-
- -
-
-ChildResources
-

:type : list[ResourceInfo]

-
- -
-
-Connections
-

:type : list[Connection]

-
- -
-
-CreatedByUser
-

:type : str

-
- -
-
-CreatedInDomain
-

:type : str

-
- -
-
-CreatedInReservation
-

:type : str

-
- -
-
-CreatedInReservationId
-

:type : str

-
- -
-
-Description
-

:type : str

-
- -
-
-Domains
-

:type : list[Domain]

-
- -
-
-DriverName
-

:type : str

-
- -
-
-Excluded
-

:type : bool

-
- -
-
-FolderFullPath
-

:type : str

-
- -
-
-FullAddress
-

:type : str

-
- -
-
-LockInfo
-

:type : ResourceLockInfo

-
- -
-
-Locked
-

:type : bool

-
- -
-
-Name
-

:type : str

-
- -
-
-Permission
-

:type : str

-
- -
-
-ResourceAttributes
-

:type : list[ResourceAttribute]

-
- -
-
-ResourceFamilyName
-

:type : str

-
- -
-
-ResourceLiveStatusDescription
-

:type : str

-
- -
-
-ResourceLiveStatusName
-

:type : str

-
- -
-
-ResourceModelName
-

:type : str

-
- -
-
-RootAddress
-

:type : str

-
- -
-
-UniqeIdentifier
-

:type : str

-
- -
-
-VmDetails
-

:type : ResourceInfoVmDetails

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ResourceInfoDto(Family, Model, FullName, Address, FolderFullpath, ParentFullName, Description)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.ResourceInfoVmDetails(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-CloudProviderFullName
-

:type : str

-
- -
-
-InstanceData
-

:type : list[VmInstanceParam]

-
- -
-
-NetworkData
-

:type : list[VmDetailsNetworkInterface]

-
- -
-
-UID
-

:type : str

-
- -
-
-VmCustomParams
-

:type : list[VmCustomParam]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ResourceListInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Resources
-

:type : list[ResourceShortInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ResourceLiveStatusInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-liveStatusDescription
-

:type : str

-
- -
-
-liveStatusName
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ResourceLockInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Created
-

:type : str

-
- -
-
-MachineName
-

:type : str

-
- -
-
-ReservationName
-

:type : str

-
- -
-
-Username
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ResourceMappingsInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Mapping
-

:type : Mapping

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ResourceShortInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Address
-

:type : str

-
- -
-
-Excluded
-

:type : bool

-
- -
-
-FolderFullPath
-

:type : str

-
- -
-
-FullAddress
-

:type : str

-
- -
-
-LockInfo
-

:type : ResourceLockInfo

-
- -
-
-Locked
-

:type : bool

-
- -
-
-Name
-

:type : str

-
- -
-
-Permission
-

:type : str

-
- -
-
-ResourceFamilyName
-

:type : str

-
- -
-
-ResourceModelName
-

:type : str

-
- -
-
-RootAddress
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ResourcesUsageSummaryInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-NumOfNotInReservation
-

:type : int

-
- -
-
-NumOfReserved
-

:type : int

-
- -
-
-NumOfShared
-

:type : int

-
- -
-
-ResourceFullName
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.RouteAttributeInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-AttributeName
-

:type : str

-
- -
-
-AttributeValue
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.RouteConfigurationInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Duplex
-

:type : int

-
- -
-
-Interface
-

:type : int

-
- -
-
-Speed
-

:type : int

-
- -
-
-SpeedSetting
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.RouteInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Alias
-

:type : str

-
- -
-
-Attributes
-

:type : list[RouteAttributeInfo]

-
- -
-
-IsTap
-

:type : bool

-
- -
-
-RouteConfiguration
-

:type : RouteConfigurationInfo

-
- -
-
-RouteType
-

:type : str

-
- -
-
-Segments
-

:type : list[RouteSegmentInfo]

-
- -
-
-Shared
-

:type : bool

-
- -
-
-Source
-

:type : str

-
- -
-
-Target
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.RouteSegmentInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Source
-

:type : str

-
- -
-
-Target
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.SandboxDataKeyValue(Key, Value)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.SandboxDataKeyValueInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Key
-

:type : str

-
- -
-
-Value
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.SaveSandboxResponseInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-SavedSandboxId
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.SavedSandboxInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-CreateDate
-

:type : str

-
- -
-
-Description
-

:type : str

-
- -
-
-DomainName
-

:type : str

-
- -
-
-Id
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
-
-OriginatingBlueprintName
-

:type : str

-
- -
-
-OriginatingSandboxId
-

:type : str

-
- -
-
-OriginatingSandboxName
-

:type : str

-
- -
-
-Owner
-

:type : str

-
- -
-
-State
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.SecurityGroup(Name, SecurityGroupsConfigurations)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.SecurityGroupRule(FromPort, ToPort, Protocol, Source)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.SecurityGroupsConfiguration(SubnetId, Rules)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.ServerTimeInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ServerDateTime
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ServiceAttribute(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-DefaultValue
-

:type : str

-
- -
-
-IsRequired
-

:type : bool

-
- -
-
-Name
-

:type : str

-
- -
-
-PossibleValues
-

:type : str

-
- -
-
-RestrictedValues
-

:type : str

-
- -
-
-Type
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ServiceInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Attributes
-

:type : list[ServiceAttribute]

-
- -
-
-CategoryFullPath
-

:type : str

-
- -
-
-Description
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ServiceInstance(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Address
-

:type : str

-
- -
-
-Alias
-

:type : str

-
- -
-
-Attributes
-

:type : list[AttributeValueInfo]

-
- -
-
-ServiceName
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.ServicesListInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Services
-

:type : list[ServiceInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.SetConnectorRequest(SourceResourceFullName, TargetResourceFullName, Direction, Alias)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.SetSecurityGroupInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-AppName
-

:type : str

-
- -
-
-Error
-

:type : str

-
- -
-
-Success
-

:type : bool

-
- -
- -
-
-class cloudshell.api.cloudshell_api.SetSecurityGroupsInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-ResultItems
-

:type : list[SetSecurityGroupInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TestShellDomainInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Description
-

:type : str

-
- -
-
-Id
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TimeZoneDefinition(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-DisplayName
-

:type : str

-
- -
-
-Id
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologiesByCategoryInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Topologies
-

:type : list[str]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologiesResourcesAttributesInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Alias
-

:type : str

-
- -
-
-AttributeName
-

:type : str

-
- -
-
-AttributeValue
-

:type : list[str]

-
- -
-
-Name
-

:type : str

-
- -
-
-TopologyName
-

:type : str

-
- -
-
-Usage
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.Topology(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Description
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyAbstractResourceInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Alias
-

:type : str

-
- -
-
-Attributes
-

:type : list[AbstractResourceAttribute]

-
- -
-
-Quantity
-

:type : int

-
- -
-
-RequiredAttributes
-

:type : list[AbstractResourceRequiredAttribute]

-
- -
-
-ResourceFamilyName
-

:type : str

-
- -
-
-ResourceModelName
-

:type : str

-
- -
-
-Valid
-

:type : bool

-
- -
-
-WillBeLocked
-

:type : bool

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyAdditionalInfoInputsInfo(xml_object, find_prefix)[source]
-

Bases: TopologyInputsInfo

-
-
-LinkedToGlobal
-

:type : str

-
- -
-
-ResourceName
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyAppResourceInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-DeploymentPaths
-

:type : list[DeploymentPathInfo]

-
- -
-
-Description
-

:type : str

-
- -
-
-LogicalResource
-

:type : LogicalResourceInfo

-
- -
-
-Name
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyCategoryInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Name
-

:type : str

-
- -
-
-Value
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyCommandInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Description
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
-
-Parameters
-

:type : list[CommandParameter]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyCommandListInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Commands
-

:type : list[TopologyCommandInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyGlobalInputsInfo(xml_object, find_prefix)[source]
-

Bases: TopologyInputsInfo

-
- -
-
-class cloudshell.api.cloudshell_api.TopologyInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-AbstractResources
-

:type : list[TopologyAbstractResourceInfo]

-
- -
-
-AdditionalInfoInputs
-

:type : list[TopologyAdditionalInfoInputsInfo]

-
- -
-
-Alias
-

:type : str

-
- -
-
-Apps
-

:type : list[TopologyAppResourceInfo]

-
- -
-
-Connectors
-

:type : list[Connector]

-
- -
-
-CreateDate
-

:type : str

-
- -
-
-DefaultDurationSeconds
-

:type : str

-
- -
-
-Description
-

:type : str

-
- -
-
-Driver
-

:type : str

-
- -
-
-EstimatedSetupDuration
-

:type : str

-
- -
-
-EstimatedTearDownDuration
-

:type : str

-
- -
-
-GlobalInputs
-

:type : list[TopologyGlobalInputsInfo]

-
- -
-
-Instructions
-

:type : str

-
- -
-
-IsPersistentSandbox
-

:type : bool

-
- -
-
-IsPublic
-

:type : bool

-
- -
-
-MaxDuration
-

:type : str

-
- -
-
-ModificationDate
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
-
-Owner
-

:type : str

-
- -
-
-ParentTopology
-

:type : TopologyShortInfo

-
- -
-
-PermittedEditors
-

:type : list[str]

-
- -
-
-RequirementsInputs
-

:type : list[TopologyRequirementsInputsInfo]

-
- -
-
-Resources
-

:type : list[TopologyResourceInfo]

-
- -
-
-Routes
-

:type : list[RouteInfo]

-
- -
-
-Services
-

:type : list[ServiceInstance]

-
- -
-
-State
-

:type : str

-
- -
-
-Type
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyInputsInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-AttributeId
-

:type : str

-
- -
-
-AttributeName
-

:type : str

-
- -
-
-DefaultValue
-

:type : str

-
- -
-
-Description
-

:type : str

-
- -
-
-ParamName
-

:type : str

-
- -
-
-PossibleValues
-

:type : list[str]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyInstructionsInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Instructions
-

:type : str

-
- -
-
-TopologyName
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyListInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Topologies
-

:type : list[str]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyRequirementsInputsInfo(xml_object, find_prefix)[source]
-

Bases: TopologyInputsInfo

-
-
-InputType
-

:type : str

-
- -
-
-LinkedToGlobal
-

:type : str

-
- -
-
-ResourceName
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyReservedResourceInfo(xml_object, find_prefix)[source]
-

Bases: ReservedResourceInfo

-
-
-Alias
-

:type : str

-
- -
-
-TopologyName
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyResourceInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Address
-

:type : str

-
- -
-
-Alias
-

:type : str

-
- -
-
-Connections
-

:type : list[Connection]

-
- -
-
-Excluded
-

:type : bool

-
- -
-
-FolderFullPath
-

:type : str

-
- -
-
-FullAddress
-

:type : str

-
- -
-
-LockInfo
-

:type : ResourceLockInfo

-
- -
-
-Locked
-

:type : bool

-
- -
-
-Name
-

:type : str

-
- -
-
-ResourceAttributes
-

:type : list[ResourceAttribute]

-
- -
-
-ResourceFamilyName
-

:type : str

-
- -
-
-ResourceModelName
-

:type : str

-
- -
-
-RootAddress
-

:type : str

-
- -
-
-WillBeLocked
-

:type : bool

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyRoutesInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Routes
-

:type : list[RouteInfo]

-
- -
-
-TopologyName
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyShortInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Alias
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
-
-State
-

:type : str

-
- -
-
-Type
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyUrl(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-DomainName
-

:type : str

-
- -
-
-EncodedHtmlUri
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.TopologyUrlsInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Alias
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
-
-TopologyUrls
-

:type : list[TopologyUrl]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.UpdateRouteAliasRequest(SourceResourceName, TargetResourceName, Alias)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.UpdateTopologyAdditionalInfoInputsRequest(ResourceName, ParamName, Value)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.UpdateTopologyGlobalInputsRequest(ParamName, Value)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.UpdateTopologyRequirementsInputsRequest(ResourceName, ParamName, Value, Type)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.UsageDetails(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Id
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.UserInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-DisplayLanguage
-

:type : str

-
- -
-
-DomainName
-

:type : str

-
- -
-
-Email
-

:type : str

-
- -
-
-Groups
-

:type : list[GroupInfo]

-
- -
-
-IsActive
-

:type : bool

-
- -
-
-IsAdmin
-

:type : bool

-
- -
-
-IsDomainAdmin
-

:type : bool

-
- -
-
-MaxConcurrentReservations
-

:type : int

-
- -
-
-MaxOwnedBlueprints
-

:type : int

-
- -
-
-MaxReservationDuration
-

:type : int

-
- -
-
-MaxSavedSandboxes
-

:type : int

-
- -
-
-MaxScheduledSandboxes
-

:type : int

-
- -
-
-Name
-

:type : str

-
- -
-
-Timezone
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.UserUpdateRequest(Username, MaxConcurrentReservations, MaxReservationDuration, MaxSavedSandboxes, MaxScheduledSandboxes, MaxOwnedBlueprints)[source]
-

Bases: CommonAPIRequest

-
- -
-
-class cloudshell.api.cloudshell_api.UsersInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Users
-

:type : list[UserInfo]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.UtilizationReport(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-UtilizationReportRows
-

:type : list[UtilizationReportRow]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.UtilizationReportRow(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Children
-

:type : list[UtilizationReportRow]

-
- -
-
-Family
-

:type : str

-
- -
-
-Model
-

:type : str

-
- -
-
-Name
-

:type : str

-
- -
-
-ParentId
-

:type : str

-
- -
-
-Utilization
-

:type : float

-
- -
- -
-
-class cloudshell.api.cloudshell_api.VisualConnectorsInfo(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Connectors
-

:type : list[Connector]

-
- -
- -
-
-class cloudshell.api.cloudshell_api.VmCustomParam(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Name
-

:type : str

-
- -
-
-Value
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.VmDetailsNetworkInterface(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-AdditionalData
-

:type : list[AdditionalDataParam]

-
- -
-
-IsPrimary
-

:type : bool

-
- -
-
-NetworkId
-

:type : str

-
- -
- -
-
-class cloudshell.api.cloudshell_api.VmInstanceParam(xml_object, find_prefix)[source]
-

Bases: CommonResponseInfo

-
-
-Name
-

:type : str

-
- -
-
-Value
-

:type : str

-
- -
- -
-
-

cloudshell.api.common_cloudshell_api module

-
-
-exception cloudshell.api.common_cloudshell_api.CloudShellAPIError(code, message, rawxml)[source]
-

Bases: Exception

-
- -
-
-class cloudshell.api.common_cloudshell_api.CommonAPIRequest(**kwarg)[source]
-

Bases: object

-
-
-static toContainer(data)[source]
-
- -
- -
-
-class cloudshell.api.common_cloudshell_api.CommonAPISession(host, username, password, domain, connection_pool_size=25)[source]
-

Bases: object

-
-
-generateAPIRequest(kwargs)[source]
-

Generic method for generation and sending XML requests

-
-
Parameters:
-
    -
  • return_type – type of returning data

  • -
  • kwargs – map of the parameters that need to be send to the server

  • -
-
-
Returns:
-

string data or API object

-
-
-
- -
- -
-
-class cloudshell.api.common_cloudshell_api.CommonApiResult(xml_object)[source]
-

Bases: object

-
-
-static importAPIClass(name)[source]
-
- -
- -
-
-class cloudshell.api.common_cloudshell_api.CommonResponseInfo(xml_object, find_prefix)[source]
-

Bases: object

-
- -
-
-class cloudshell.api.common_cloudshell_api.XMLWrapper[source]
-

Bases: object

-
-
-static getAllChildNode(parent_node, child_name, find_prefix='')[source]
-
- -
-
-static getAllChildNodeByAttr(parent_node, child_name, attr_name, attr_value)[source]
-
- -
-
-static getChildNode(parent_node, child_name, find_prefix='')[source]
-
- -
-
-static getChildNodeByAttr(parent_node, child_name, attr_name, attr_value)[source]
-
- -
-
-static getNodeAttr(node, attribute_name, find_prefix='')[source]
-
- -
-
-static getNodeName(node)[source]
-
- -
-
-static getNodePrefix(node, prefix_name)[source]
-
- -
-
-static getNodeText(node)[source]
-
- -
-
-static getRootNode(node)[source]
-
- -
-
-static getStringFromXML(node, pretty_print=False)[source]
-
- -
-
-static parseXML(xml_str)[source]
-
- -
- -
-
-

Module contents

-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/static/api-docs/2023.3/Python-API/cloudshell.helpers.html b/static/api-docs/2023.3/Python-API/cloudshell.helpers.html deleted file mode 100644 index 192b134bea..0000000000 --- a/static/api-docs/2023.3/Python-API/cloudshell.helpers.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - cloudshell.helpers package — CloudShell Python API 2022.3.0.185573 documentation - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

cloudshell.helpers package

-
-

Subpackages

-
-
-
-
-

Module contents

-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/static/api-docs/2023.3/Python-API/cloudshell.html b/static/api-docs/2023.3/Python-API/cloudshell.html deleted file mode 100644 index 7e2ddec225..0000000000 --- a/static/api-docs/2023.3/Python-API/cloudshell.html +++ /dev/null @@ -1,1476 +0,0 @@ - - - - - - - cloudshell package — CloudShell Python API 2022.3.0.185573 documentation - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

cloudshell package

-
-

Subpackages

-
- -
-
-
-

Module contents

-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/static/api-docs/2023.3/Python-API/genindex.html b/static/api-docs/2023.3/Python-API/genindex.html deleted file mode 100644 index 3d7059dd00..0000000000 --- a/static/api-docs/2023.3/Python-API/genindex.html +++ /dev/null @@ -1,2594 +0,0 @@ - - - - - - Index — CloudShell Python API 2022.3.0.185573 documentation - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- - -

Index

- -
- A - | B - | C - | D - | E - | F - | G - | I - | K - | L - | M - | N - | O - | P - | Q - | R - | S - | T - | U - | V - | W - | X - | Y - -
-

A

- - - -
- -

B

- - - -
- -

C

- - - -
- -

D

- - - -
- -

E

- - - -
- -

F

- - - -
- -

G

- - - -
- -

I

- - - -
- -

K

- - -
- -

L

- - - -
- -

M

- - - -
- -

N

- - - -
- -

O

- - - -
- -

P

- - - -
- -

Q

- - - -
- -

R

- - - -
- -

S

- - - -
- -

T

- - - -
- -

U

- - - -
- -

V

- - - -
- -

W

- - - -
- -

X

- - - -
- -

Y

- - -
- - - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/static/api-docs/2023.3/Python-API/index.html b/static/api-docs/2023.3/Python-API/index.html deleted file mode 100644 index e779f72387..0000000000 --- a/static/api-docs/2023.3/Python-API/index.html +++ /dev/null @@ -1,1475 +0,0 @@ - - - - - - - Welcome to CloudShell Python API Reference Guide! — CloudShell Python API 2022.3.0.185573 documentation - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Welcome to CloudShell Python API Reference Guide!

-

Contents:

-
- -
-
-
-

Indices and tables

- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/static/api-docs/2023.3/Python-API/objects.inv b/static/api-docs/2023.3/Python-API/objects.inv deleted file mode 100644 index ea86bd187b..0000000000 Binary files a/static/api-docs/2023.3/Python-API/objects.inv and /dev/null differ diff --git a/static/api-docs/2023.3/Python-API/py-modindex.html b/static/api-docs/2023.3/Python-API/py-modindex.html deleted file mode 100644 index f2e7a7051b..0000000000 --- a/static/api-docs/2023.3/Python-API/py-modindex.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - Python Module Index — CloudShell Python API 2022.3.0.185573 documentation - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- - -

Python Module Index

- -
- c -
- - - - - - - - - - - - - - - - - - - -
 
- c
- cloudshell -
    - cloudshell.api -
    - cloudshell.api.cloudshell_api -
    - cloudshell.api.common_cloudshell_api -
    - cloudshell.helpers -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/static/api-docs/2023.3/Python-API/search.html b/static/api-docs/2023.3/Python-API/search.html deleted file mode 100644 index 1ff0210a69..0000000000 --- a/static/api-docs/2023.3/Python-API/search.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - Search — CloudShell Python API 10.10.0.12 documentation - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- - - - -
- -
- -
-
- -
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/static/api-docs/2023.3/Python-API/searchindex.js b/static/api-docs/2023.3/Python-API/searchindex.js deleted file mode 100644 index a02abc67b0..0000000000 --- a/static/api-docs/2023.3/Python-API/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({"docnames": ["cloudshell", "cloudshell.api", "cloudshell.helpers", "index"], "filenames": ["cloudshell.rst", "cloudshell.api.rst", "cloudshell.helpers.rst", "index.rst"], "titles": ["cloudshell package", "cloudshell.api package", "cloudshell.helpers package", "Welcome to CloudShell Python API Reference Guide!"], "terms": {"api": 0, "submodul": [0, 3], "cloudshell_api": [0, 3], "abstractresourceattribut": [0, 1, 3], "name": [0, 1, 3], "type": [0, 1, 3], "valu": [0, 1, 3], "abstractresourcerequiredattribut": [0, 1, 3], "oper": [0, 1, 3], "abstracttemplateshortinfo": [0, 1, 3], "created": [0, 1, 3], "descript": [0, 1, 3], "domainnam": [0, 1, 3], "domain": [0, 1, 3], "owner": [0, 1, 3], "resourcefamilynam": [0, 1, 3], "resourcemodelnam": [0, 1, 3], "valid": [0, 1, 3], "abstracttemplateshortinfolist": [0, 1, 3], "abstracttempl": [0, 1, 3], "activetopologyinfo": [0, 1, 3], "connector": [0, 1, 3], "machinenam": [0, 1, 3], "resourc": [0, 1, 3], "rout": [0, 1, 3], "topologi": [0, 1, 3], "usernam": [0, 1, 3], "activetopologyresourceinfo": [0, 1, 3], "address": [0, 1, 3], "alia": [0, 1, 3], "connect": [0, 1, 3], "folderfullpath": [0, 1, 3], "fulladdress": [0, 1, 3], "lockinfo": [0, 1, 3], "lock": [0, 1, 3], "resourceattribut": [0, 1, 3], "rootaddress": [0, 1, 3], "addapptoreservationresponseinfo": [0, 1, 3], "reservedappnam": [0, 1, 3], "addrestrictionrequest": [0, 1, 3], "additionaldataparam": [0, 1, 3], "apieditapprequest": [0, 1, 3], "appconfigur": [0, 1, 3], "appconfigurationconnect": [0, 1, 3], "url": [0, 1, 3], "appconfigurationdata": [0, 1, 3], "appconfigurationmanag": [0, 1, 3], "ansibleinventorygroup": [0, 1, 3], "connectionmethod": [0, 1, 3], "scriptparamet": [0, 1, 3], "tool": [0, 1, 3], "appdeploymentyinfo": [0, 1, 3], "cloudproviderresourcenam": [0, 1, 3], "logicalresourcenam": [0, 1, 3], "visualconnector": [0, 1, 3], "vmuuid": [0, 1, 3], "appdetail": [0, 1, 3], "appinfo": [0, 1, 3], "appnam": [0, 1, 3], "appvisualconnector": [0, 1, 3], "attribut": [0, 1, 3], "sourc": [0, 1, 3], "target": [0, 1, 3], "attributenamevalu": [0, 1, 3], "attributevalueinfo": [0, 1, 3], "authent": [0, 1, 3], "logon": [0, 1, 3], "xmlrpc_token": [0, 1, 3], "bulkappdeploymentyinfo": [0, 1, 3], "resultitem": [0, 1, 3], "bulkappdeploymentyresultitem": [0, 1, 3], "error": [0, 1, 3], "errorcod": [0, 1, 3], "success": [0, 1, 3], "categoriesoftopologyinfo": [0, 1, 3], "categori": [0, 1, 3], "categoryinfo": [0, 1, 3], "categorylistbriefinfo": [0, 1, 3], "categorylistinfo": [0, 1, 3], "checkoutfrompoolinfo": [0, 1, 3], "item": [0, 1, 3], "cloudshellapisess": [0, 1, 3], "activatetopologi": [0, 1, 3], "addapptoreserv": [0, 1, 3], "addattributerestrictedvalu": [0, 1, 3], "addgroupstodomain": [0, 1, 3], "addnewdomain": [0, 1, 3], "addnewgroup": [0, 1, 3], "addnewus": [0, 1, 3], "addpermittededitorstotopologi": [0, 1, 3], "addpermitteduserstoreserv": [0, 1, 3], "addresourcestodomain": [0, 1, 3], "addresourcestoreserv": [0, 1, 3], "addroutestoreserv": [0, 1, 3], "addservicetoreserv": [0, 1, 3], "addtopologiestodomain": [0, 1, 3], "adduserstogroup": [0, 1, 3], "addvaluetolookupattribut": [0, 1, 3], "approveapprovalrequest": [0, 1, 3], "archivedomain": [0, 1, 3], "autoload": [0, 1, 3], "changereservationown": [0, 1, 3], "checkoutfrompool": [0, 1, 3], "cleanupsandboxconnect": [0, 1, 3], "clearandresetconsol": [0, 1, 3], "clearsandboxdata": [0, 1, 3], "configureapp": [0, 1, 3], "configureappsv2": [0, 1, 3], "connectroutesinreserv": [0, 1, 3], "consumeapprovalrequest": [0, 1, 3], "copydomainsresourc": [0, 1, 3], "createblueprintapprovalrequest": [0, 1, 3], "createdraft": [0, 1, 3], "createfold": [0, 1, 3], "createimmediatepersistentreserv": [0, 1, 3], "createimmediatereserv": [0, 1, 3], "createimmediatetopologyreserv": [0, 1, 3], "createpersistentreserv": [0, 1, 3], "createreserv": [0, 1, 3], "createresourc": [0, 1, 3], "createrouteinreserv": [0, 1, 3], "createroutesinreserv": [0, 1, 3], "createtopologyreserv": [0, 1, 3], "decryptpassword": [0, 1, 3], "deleteapprovalrequest": [0, 1, 3], "deletedomain": [0, 1, 3], "deletedraft": [0, 1, 3], "deletefold": [0, 1, 3], "deletegroup": [0, 1, 3], "deletereserv": [0, 1, 3], "deleteresourc": [0, 1, 3], "deleteresourcetempl": [0, 1, 3], "deletesavedsandbox": [0, 1, 3], "deletetopologi": [0, 1, 3], "deleteus": [0, 1, 3], "deployapptocloudprovid": [0, 1, 3], "deployapptocloudproviderbulk": [0, 1, 3], "disconnectroutesinreserv": [0, 1, 3], "editappsinreserv": [0, 1, 3], "endreserv": [0, 1, 3], "enqueuecommand": [0, 1, 3], "enqueueenvironmentcommand": [0, 1, 3], "enqueueresourcecommand": [0, 1, 3], "enqueueservicecommand": [0, 1, 3], "enqueuetopologycommand": [0, 1, 3], "excluderesourc": [0, 1, 3], "executecommand": [0, 1, 3], "executeenvironmentcommand": [0, 1, 3], "executeresourcecommand": [0, 1, 3], "executeresourceconnectedcommand": [0, 1, 3], "executeservicecommand": [0, 1, 3], "executetopologycommand": [0, 1, 3], "exportfamiliesandmodel": [0, 1, 3], "extendreserv": [0, 1, 3], "findresourc": [0, 1, 3], "findresourcesintimerang": [0, 1, 3], "generateutilizationreport": [0, 1, 3], "getabstracttemplatelist": [0, 1, 3], "getactivetopologynam": [0, 1, 3], "getallapprovalrequest": [0, 1, 3], "getallusersdetail": [0, 1, 3], "getapprovalrequest": [0, 1, 3], "getappsdetailsinreserv": [0, 1, 3], "getattributevalu": [0, 1, 3], "getcategori": [0, 1, 3], "getcategoriesoftopologi": [0, 1, 3], "getcurrentreserv": [0, 1, 3], "getdomaindetail": [0, 1, 3], "getenvironmentcommand": [0, 1, 3], "getfoldercont": [0, 1, 3], "getgroupdomain": [0, 1, 3], "getgroupsdetail": [0, 1, 3], "getlockedresourc": [0, 1, 3], "getmodelusagereport": [0, 1, 3], "getreservationappimag": [0, 1, 3], "getreservationdetail": [0, 1, 3], "getreservationinput": [0, 1, 3], "getreservationremainingtim": [0, 1, 3], "getreservationresourcesposit": [0, 1, 3], "getreservationservicesposit": [0, 1, 3], "getreservationstatu": [0, 1, 3], "getreservationslivestatu": [0, 1, 3], "getresourceavail": [0, 1, 3], "getresourceavailabilityintimerang": [0, 1, 3], "getresourcecommand": [0, 1, 3], "getresourceconnectedcommand": [0, 1, 3], "getresourcedetail": [0, 1, 3], "getresourcelist": [0, 1, 3], "getresourcelivestatu": [0, 1, 3], "getresourcemap": [0, 1, 3], "getrouteseg": [0, 1, 3], "getroutessolut": [0, 1, 3], "getsandboxdata": [0, 1, 3], "getsavedsandbox": [0, 1, 3], "getscheduledreserv": [0, 1, 3], "getserverdateandtim": [0, 1, 3], "getservicecommand": [0, 1, 3], "getservic": [0, 1, 3], "gettopologiesbycategori": [0, 1, 3], "gettopologycategori": [0, 1, 3], "gettopologycommand": [0, 1, 3], "gettopologydetail": [0, 1, 3], "gettopologyurl": [0, 1, 3], "getuserdetail": [0, 1, 3], "getvaluesforlookupattribut": [0, 1, 3], "includeresourc": [0, 1, 3], "lockresourc": [0, 1, 3], "logoff": [0, 1, 3], "logouttnsess": [0, 1, 3], "mapport": [0, 1, 3], "movefold": [0, 1, 3], "moveresourc": [0, 1, 3], "powercycleresourc": [0, 1, 3], "poweroffresourc": [0, 1, 3], "poweronresourc": [0, 1, 3], "preparesandboxconnect": [0, 1, 3], "promotedraft": [0, 1, 3], "recheckconflict": [0, 1, 3], "refreshappinblueprint": [0, 1, 3], "refreshvmdetail": [0, 1, 3], "rejectapprovalrequest": [0, 1, 3], "releasefrompool": [0, 1, 3], "releaseresourcesfromreserv": [0, 1, 3], "releasetopologyresourc": [0, 1, 3], "remapconnect": [0, 1, 3], "removeappfromreserv": [0, 1, 3], "removeattributerestrictedvalu": [0, 1, 3], "removeconnectorsfromreserv": [0, 1, 3], "removecustomshellattribut": [0, 1, 3], "removegroupsfromdomain": [0, 1, 3], "removepermittededitorsfromtopologi": [0, 1, 3], "removepermittedusersfromreserv": [0, 1, 3], "removeresourcesfromdomain": [0, 1, 3], "removeresourcesfromreserv": [0, 1, 3], "removeroutesfromreserv": [0, 1, 3], "removeservicesfromreserv": [0, 1, 3], "removetopologiesfromdomain": [0, 1, 3], "removetopologycategori": [0, 1, 3], "removeusersfromgroup": [0, 1, 3], "removevaluefromlookupattribut": [0, 1, 3], "renameblueprint": [0, 1, 3], "renameresourc": [0, 1, 3], "resetresourcedriv": [0, 1, 3], "resetsandboxprovisioningstatu": [0, 1, 3], "restoresavedsandbox": [0, 1, 3], "savereservationastopologi": [0, 1, 3], "savesandbox": [0, 1, 3], "securelogon": [0, 1, 3], "setappsecuritygroup": [0, 1, 3], "setattributevalu": [0, 1, 3], "setattributesvalu": [0, 1, 3], "setbaudr": [0, 1, 3], "setconnectorattribut": [0, 1, 3], "setconnectorattributesviaalia": [0, 1, 3], "setconnectorsinreserv": [0, 1, 3], "setconsoleforxmodem": [0, 1, 3], "setcustomshellattribut": [0, 1, 3], "setgroupdomainpermiss": [0, 1, 3], "setreservationlivestatu": [0, 1, 3], "setreservationresourceposit": [0, 1, 3], "setreservationserviceposit": [0, 1, 3], "setresourcelivestatu": [0, 1, 3], "setresourcesharelevel": [0, 1, 3], "setresourcesharedst": [0, 1, 3], "setresourcevis": [0, 1, 3], "setrouteattribut": [0, 1, 3], "setrouteattributesviaalia": [0, 1, 3], "setsandboxdata": [0, 1, 3], "setserviceattributesvalu": [0, 1, 3], "setservicedriv": [0, 1, 3], "setservicelivestatu": [0, 1, 3], "setservicenam": [0, 1, 3], "setsetupstag": [0, 1, 3], "settopologycategori": [0, 1, 3], "syncresourcefromdevic": [0, 1, 3], "syncresourcetodevic": [0, 1, 3], "terminatereserv": [0, 1, 3], "unmapport": [0, 1, 3], "unarchivedomain": [0, 1, 3], "unlockresourc": [0, 1, 3], "updateconnectionweight": [0, 1, 3], "updateconnectoraliasinreserv": [0, 1, 3], "updatedomaintopologiesfold": [0, 1, 3], "updatedriv": [0, 1, 3], "updategroup": [0, 1, 3], "updatephysicalconnect": [0, 1, 3], "updatereservationdescript": [0, 1, 3], "updatereservationendtim": [0, 1, 3], "updatereservationglobalinput": [0, 1, 3], "updatereservationnam": [0, 1, 3], "updateresourceaddress": [0, 1, 3], "updateresourcedescript": [0, 1, 3], "updateresourcedriv": [0, 1, 3], "updateroutealiasesinreserv": [0, 1, 3], "updatescript": [0, 1, 3], "updatetopologydriv": [0, 1, 3], "updatetopologyown": [0, 1, 3], "updateus": [0, 1, 3], "updateusergroup": [0, 1, 3], "updateuserpassword": [0, 1, 3], "updateuserslimit": [0, 1, 3], "writemessagetoreservationoutput": [0, 1, 3], "create_head": [0, 1, 3], "commandexecutioncancelledresultinfo": [0, 1, 3], "messag": [0, 1, 3], "commandexecutioncompletedresultinfo": [0, 1, 3], "output": [0, 1, 3], "commandexecutionfailedresultinfo": [0, 1, 3], "errordescript": [0, 1, 3], "errornam": [0, 1, 3], "errorparamet": [0, 1, 3], "commandexecutionidresponseinfo": [0, 1, 3], "id": [0, 1, 3], "commandexecutionresultinfo": [0, 1, 3], "commandexecutionresultlistinfo": [0, 1, 3], "result": [0, 1, 3], "commandnameslistinfo": [0, 1, 3], "commandnam": [0, 1, 3], "commandparamet": [0, 1, 3], "defaultvalu": [0, 1, 3], "enumvalu": [0, 1, 3], "mandatori": [0, 1, 3], "configparam": [0, 1, 3], "configurationmanagementdata": [0, 1, 3], "configureappinfo": [0, 1, 3], "configureappsinfo": [0, 1, 3], "fullpath": [0, 1, 3], "weight": [0, 1, 3], "direct": [0, 1, 3], "state": [0, 1, 3], "contentlistinfo": [0, 1, 3], "contentarrai": [0, 1, 3], "contentshortinfo": [0, 1, 3], "permiss": [0, 1, 3], "createapprovalrequestresponseinfo": [0, 1, 3], "createreservationresponseinfo": [0, 1, 3], "reserv": [0, 1, 3], "credenti": [0, 1, 3], "defaultdeploy": [0, 1, 3], "deployappinput": [0, 1, 3], "deploy": [0, 1, 3], "deploymentpathinfo": [0, 1, 3], "deploymentservic": [0, 1, 3], "isdefault": [0, 1, 3], "deploymentserviceinfo": [0, 1, 3], "cloudprovid": [0, 1, 3], "driver": [0, 1, 3], "model": [0, 1, 3], "domaininfo": [0, 1, 3], "archiv": [0, 1, 3], "group": [0, 1, 3], "topologiesfold": [0, 1, 3], "draftinfo": [0, 1, 3], "draftid": [0, 1, 3], "endpointconnectioninfo": [0, 1, 3], "entityusag": [0, 1, 3], "blueprinttempl": [0, 1, 3], "blueprint": [0, 1, 3], "sandbox": [0, 1, 3], "environmentcommandinfo": [0, 1, 3], "displaynam": [0, 1, 3], "paramet": [0, 1, 3], "environmentcommandlistinfo": [0, 1, 3], "command": [0, 1, 3], "environmentcommandparamet": [0, 1, 3], "exportconfigurationinfo": [0, 1, 3], "configur": [0, 1, 3], "findresourceinfo": [0, 1, 3], "connectedto": [0, 1, 3], "exclud": [0, 1, 3], "fullnam": [0, 1, 3], "reservedstatu": [0, 1, 3], "usagesummari": [0, 1, 3], "findresourcelistinfo": [0, 1, 3], "findresourcereservationinfo": [0, 1, 3], "endtim": [0, 1, 3], "reservationid": [0, 1, 3], "reservationnam": [0, 1, 3], "resourcefullnam": [0, 1, 3], "share": [0, 1, 3], "starttim": [0, 1, 3], "getactivereservationsresponseinfo": [0, 1, 3], "getallapprovalrequestsresponseinfo": [0, 1, 3], "approvalrequestresponseinfo": [0, 1, 3], "getapprovalrequestresponseinfo": [0, 1, 3], "approvenot": [0, 1, 3], "creationd": [0, 1, 3], "durat": [0, 1, 3], "entitynam": [0, 1, 3], "input": [0, 1, 3], "isapprov": [0, 1, 3], "modifiedd": [0, 1, 3], "requestnot": [0, 1, 3], "requestedentityid": [0, 1, 3], "requestedentitytyp": [0, 1, 3], "requesternam": [0, 1, 3], "userinfoid": [0, 1, 3], "getmodelusagereportresponseinfo": [0, 1, 3], "modelusag": [0, 1, 3], "getreservationappimageresponseinfo": [0, 1, 3], "apptemplateimag": [0, 1, 3], "getreservationdescriptionresponseinfo": [0, 1, 3], "reservationdescript": [0, 1, 3], "getreservationinputsresponseinfo": [0, 1, 3], "additionalinfoinput": [0, 1, 3], "globalinput": [0, 1, 3], "requiredinput": [0, 1, 3], "getreservationremainingtimeinfo": [0, 1, 3], "remainingtimeinminut": [0, 1, 3], "getreservationsinrangeresponseinfo": [0, 1, 3], "getsandboxdatainfo": [0, 1, 3], "sandboxdatakeyvalu": [0, 1, 3], "getsavedsandboxesresponseinfo": [0, 1, 3], "savedsandbox": [0, 1, 3], "getservertimezonesrespons": [0, 1, 3], "timezon": [0, 1, 3], "role": [0, 1, 3], "groupinfo": [0, 1, 3], "grouprol": [0, 1, 3], "testshelldomain": [0, 1, 3], "user": [0, 1, 3], "groupsinfo": [0, 1, 3], "inputnamevalu": [0, 1, 3], "logicalresourceinfo": [0, 1, 3], "famili": [0, 1, 3], "logondomaininfo": [0, 1, 3], "domainid": [0, 1, 3], "logonmanag": [0, 1, 3], "logonresponseinfo": [0, 1, 3], "token": [0, 1, 3], "logontokeninfo": [0, 1, 3], "lookupvaluesinfo": [0, 1, 3], "lookupvalu": [0, 1, 3], "map": [0, 1, 3], "routetyp": [0, 1, 3], "namevaluepair": [0, 1, 3], "numericrang": [0, 1, 3], "end": [0, 1, 3], "start": [0, 1, 3], "parameterdata": [0, 1, 3], "physicalconnectionupdaterequest": [0, 1, 3], "qualiapicli": [0, 1, 3], "enrich_logon": [0, 1, 3], "enrich_secure_logon": [0, 1, 3], "send_rest": [0, 1, 3], "remapconnectionresultinfo": [0, 1, 3], "remapconnectionresultitem": [0, 1, 3], "remapoperationsummari": [0, 1, 3], "remapedvia": [0, 1, 3], "resourcenam": [0, 1, 3], "removerestrictionrequest": [0, 1, 3], "replacewithresourceresponseinfo": [0, 1, 3], "rootresourc": [0, 1, 3], "reservationappresourc": [0, 1, 3], "apptemplatenam": [0, 1, 3], "deploymentpath": [0, 1, 3], "logicalresourc": [0, 1, 3], "reservationappsresponseinfo": [0, 1, 3], "app": [0, 1, 3], "reservationdescriptioninfo": [0, 1, 3], "activeroutesinfo": [0, 1, 3], "conflict": [0, 1, 3], "requestedroutesinfo": [0, 1, 3], "reservationlivestatu": [0, 1, 3], "savedsandboxid": [0, 1, 3], "servic": [0, 1, 3], "setupstag": [0, 1, 3], "topologiesinstructionsinfo": [0, 1, 3], "topologiesreservedresourc": [0, 1, 3], "topologiesresourcesattributeinfo": [0, 1, 3], "topologiesrouteinfo": [0, 1, 3], "reservationdiagramlayoutresponseinfo": [0, 1, 3], "resourcediagramlayout": [0, 1, 3], "reservationinfo": [0, 1, 3], "creat": [0, 1, 3], "lockedresourc": [0, 1, 3], "reservationlistinfo": [0, 1, 3], "reservationlivestatusdescript": [0, 1, 3], "reservationlivestatusnam": [0, 1, 3], "reservationlivestatusinfo": [0, 1, 3], "reservationlivestatus": [0, 1, 3], "reservationshortinfo": [0, 1, 3], "actualendtim": [0, 1, 3], "book": [0, 1, 3], "modificationd": [0, 1, 3], "permittedus": [0, 1, 3], "provisioningstatu": [0, 1, 3], "recurrencetyp": [0, 1, 3], "statu": [0, 1, 3], "teardowntim": [0, 1, 3], "topologiesinfo": [0, 1, 3], "reservationslimstatu": [0, 1, 3], "reservationslimstatusinfo": [0, 1, 3], "reserveresourcesresponseinfo": [0, 1, 3], "reservetopologyresponseinfo": [0, 1, 3], "reservedresourceinfo": [0, 1, 3], "avail": [0, 1, 3], "createdbyus": [0, 1, 3], "createdindomain": [0, 1, 3], "createdinreserv": [0, 1, 3], "releas": [0, 1, 3], "vmdetail": [0, 1, 3], "reservedtopologyadditionalinfoinputsinfo": [0, 1, 3], "linkedtoglob": [0, 1, 3], "possiblevalu": [0, 1, 3], "reservedtopologyglobalinputsinfo": [0, 1, 3], "reservedtopologyinputsinfo": [0, 1, 3], "paramnam": [0, 1, 3], "reservedtopologyrequiredinputsinfo": [0, 1, 3], "path": [0, 1, 3], "resourceattributesupdaterequest": [0, 1, 3], "resourcecommandinfo": [0, 1, 3], "tag": [0, 1, 3], "resourcecommandlistinfo": [0, 1, 3], "resourceconflictinfo": [0, 1, 3], "conflictplannedendtim": [0, 1, 3], "conflictstart": [0, 1, 3], "conflicttyp": [0, 1, 3], "conflictwith": [0, 1, 3], "conflictwithus": [0, 1, 3], "resourcediagramlayoutinfo": [0, 1, 3], "x": [0, 1, 3], "y": [0, 1, 3], "resourceinfo": [0, 1, 3], "childresourc": [0, 1, 3], "createdinreservationid": [0, 1, 3], "drivernam": [0, 1, 3], "resourcelivestatusdescript": [0, 1, 3], "resourcelivestatusnam": [0, 1, 3], "uniqeidentifi": [0, 1, 3], "resourceinfodto": [0, 1, 3], "resourceinfovmdetail": [0, 1, 3], "cloudproviderfullnam": [0, 1, 3], "instancedata": [0, 1, 3], "networkdata": [0, 1, 3], "uid": [0, 1, 3], "vmcustomparam": [0, 1, 3], "resourcelistinfo": [0, 1, 3], "resourcelivestatusinfo": [0, 1, 3], "livestatusdescript": [0, 1, 3], "livestatusnam": [0, 1, 3], "resourcelockinfo": [0, 1, 3], "resourcemappingsinfo": [0, 1, 3], "resourceshortinfo": [0, 1, 3], "resourcesusagesummaryinfo": [0, 1, 3], "numofnotinreserv": [0, 1, 3], "numofreserv": [0, 1, 3], "numofshar": [0, 1, 3], "routeattributeinfo": [0, 1, 3], "attributenam": [0, 1, 3], "attributevalu": [0, 1, 3], "routeconfigurationinfo": [0, 1, 3], "duplex": [0, 1, 3], "interfac": [0, 1, 3], "speed": [0, 1, 3], "speedset": [0, 1, 3], "routeinfo": [0, 1, 3], "istap": [0, 1, 3], "routeconfigur": [0, 1, 3], "segment": [0, 1, 3], "routesegmentinfo": [0, 1, 3], "sandboxdatakeyvalueinfo": [0, 1, 3], "kei": [0, 1, 3], "savesandboxresponseinfo": [0, 1, 3], "savedsandboxinfo": [0, 1, 3], "originatingblueprintnam": [0, 1, 3], "originatingsandboxid": [0, 1, 3], "originatingsandboxnam": [0, 1, 3], "securitygroup": [0, 1, 3], "securitygrouprul": [0, 1, 3], "securitygroupsconfigur": [0, 1, 3], "servertimeinfo": [0, 1, 3], "serverdatetim": [0, 1, 3], "serviceattribut": [0, 1, 3], "isrequir": [0, 1, 3], "restrictedvalu": [0, 1, 3], "serviceinfo": [0, 1, 3], "categoryfullpath": [0, 1, 3], "serviceinst": [0, 1, 3], "servicenam": [0, 1, 3], "serviceslistinfo": [0, 1, 3], "setconnectorrequest": [0, 1, 3], "setsecuritygroupinfo": [0, 1, 3], "setsecuritygroupsinfo": [0, 1, 3], "testshelldomaininfo": [0, 1, 3], "timezonedefinit": [0, 1, 3], "topologiesbycategoryinfo": [0, 1, 3], "topologiesresourcesattributesinfo": [0, 1, 3], "topologynam": [0, 1, 3], "usag": [0, 1, 3], "topologyabstractresourceinfo": [0, 1, 3], "quantiti": [0, 1, 3], "requiredattribut": [0, 1, 3], "willbelock": [0, 1, 3], "topologyadditionalinfoinputsinfo": [0, 1, 3], "topologyappresourceinfo": [0, 1, 3], "topologycategoryinfo": [0, 1, 3], "topologycommandinfo": [0, 1, 3], "topologycommandlistinfo": [0, 1, 3], "topologyglobalinputsinfo": [0, 1, 3], "topologyinfo": [0, 1, 3], "abstractresourc": [0, 1, 3], "defaultdurationsecond": [0, 1, 3], "estimatedsetupdur": [0, 1, 3], "estimatedteardowndur": [0, 1, 3], "instruct": [0, 1, 3], "ispersistentsandbox": [0, 1, 3], "ispubl": [0, 1, 3], "maxdur": [0, 1, 3], "parenttopologi": [0, 1, 3], "permittededitor": [0, 1, 3], "requirementsinput": [0, 1, 3], "topologyinputsinfo": [0, 1, 3], "attributeid": [0, 1, 3], "topologyinstructionsinfo": [0, 1, 3], "topologylistinfo": [0, 1, 3], "topologyrequirementsinputsinfo": [0, 1, 3], "inputtyp": [0, 1, 3], "topologyreservedresourceinfo": [0, 1, 3], "topologyresourceinfo": [0, 1, 3], "topologyroutesinfo": [0, 1, 3], "topologyshortinfo": [0, 1, 3], "topologyurl": [0, 1, 3], "encodedhtmluri": [0, 1, 3], "topologyurlsinfo": [0, 1, 3], "updateroutealiasrequest": [0, 1, 3], "updatetopologyadditionalinfoinputsrequest": [0, 1, 3], "updatetopologyglobalinputsrequest": [0, 1, 3], "updatetopologyrequirementsinputsrequest": [0, 1, 3], "usagedetail": [0, 1, 3], "userinfo": [0, 1, 3], "displaylanguag": [0, 1, 3], "email": [0, 1, 3], "isact": [0, 1, 3], "isadmin": [0, 1, 3], "isdomainadmin": [0, 1, 3], "maxconcurrentreserv": [0, 1, 3], "maxownedblueprint": [0, 1, 3], "maxreservationdur": [0, 1, 3], "maxsavedsandbox": [0, 1, 3], "maxscheduledsandbox": [0, 1, 3], "userupdaterequest": [0, 1, 3], "usersinfo": [0, 1, 3], "utilizationreport": [0, 1, 3], "utilizationreportrow": [0, 1, 3], "children": [0, 1, 3], "parentid": [0, 1, 3], "util": [0, 1, 3], "visualconnectorsinfo": [0, 1, 3], "vmdetailsnetworkinterfac": [0, 1, 3], "additionaldata": [0, 1, 3], "isprimari": [0, 1, 3], "networkid": [0, 1, 3], "vminstanceparam": [0, 1, 3], "common_cloudshell_api": [0, 3], "cloudshellapierror": [0, 1, 3], "commonapirequest": [0, 1, 3], "tocontain": [0, 1, 3], "commonapisess": [0, 1, 3], "generateapirequest": [0, 1, 3], "commonapiresult": [0, 1, 3], "importapiclass": [0, 1, 3], "commonresponseinfo": [0, 1, 3], "xmlwrapper": [0, 1, 3], "getallchildnod": [0, 1, 3], "getallchildnodebyattr": [0, 1, 3], "getchildnod": [0, 1, 3], "getchildnodebyattr": [0, 1, 3], "getnodeattr": [0, 1, 3], "getnodenam": [0, 1, 3], "getnodeprefix": [0, 1, 3], "getnodetext": [0, 1, 3], "getrootnod": [0, 1, 3], "getstringfromxml": [0, 1, 3], "parsexml": [0, 1, 3], "helper": 0, "class": 1, "xml_object": 1, "find_prefix": 1, "base": 1, "str": 1, "list": 1, "bool": 1, "familynam": 1, "modelnam": 1, "alphabet": 1, "newnam": 1, "logon_manag": 1, "object": 1, "properti": 1, "int": 1, "host": 1, "password": 1, "utc": 1, "datetimeformat": 1, "mm": 1, "dd": 1, "yyyi": 1, "hh": 1, "token_id": 1, "port": 1, "8029": 1, "uri": 1, "resourcemanagerapiservic": 1, "cloudshell_api_schem": 1, "http": 1, "quali_api_schem": 1, "quali_api_port": 1, "9000": 1, "quali_api_uri": 1, "use_webapi_endpoint": 1, "fals": 1, "topologyfullpath": 1, "resolv": 1, "all": 1, "request": 1, "mark": 1, "unshar": 1, "us": 1, "specifi": 1, "string": 1, "repres": 1, "": 1, "uniqu": 1, "identifi": 1, "full": 1, "For": 1, "from": 1, "root": 1, "separ": 1, "slash": 1, "exampl": 1, "foldernam": 1, "return": 1, "positionx": 1, "100": 1, "positioni": 1, "add": 1, "an": 1, "exist": 1, "templat": 1, "wai": 1, "deploi": 1, "given": 1, "option": 1, "float": 1, "coordin": 1, "top": 1, "left": 1, "corner": 1, "addattributerestrictionrequest": 1, "restrict": 1, "family_nam": 1, "model_nam": 1, "sort_values_alphabet": 1, "attribute_nam": 1, "possible_valu": 1, "groupnam": 1, "readonli": 1, "arrai": 1, "one": 1, "more": 1, "should": 1, "ad": 1, "view": 1, "onli": 1, "new": 1, "provid": 1, "short": 1, "possibl": 1, "extern": 1, "regular": 1, "domainadmin": 1, "login": 1, "detail": 1, "access": 1, "grant": 1, "deni": 1, "activ": 1, "applic": 1, "system": 1, "administr": 1, "editornam": 1, "permit": 1, "editor": 1, "includ": 1, "A": 1, "resourcesnam": 1, "includedecend": 1, "true": 1, "you": 1, "can": 1, "also": 1, "befor": 1, "whether": 1, "child": 1, "resourcesfullpath": 1, "among": 1, "other": 1, "enviro": 1, "sourceresourcesfullpath": 1, "targetresourcesfullpath": 1, "mappingtyp": 1, "maxhop": 1, "0": 1, "routealia": 1, "isshar": 1, "doe": 1, "between": 1, "pair": 1, "endpoint": 1, "addit": 1, "when": 1, "requir": 1, "bidirect": 1, "unidirect": 1, "maximum": 1, "number": 1, "allow": 1, "hop": 1, "ar": 1, "than": 1, "matrix": 1, "associ": 1, "validateresourceavail": 1, "resolut": 1, "default": 1, "note": 1, "i": 1, "suppli": 1, "process": 1, "newvalu": 1, "makedefault": 1, "lookup": 1, "set": 1, "approv": 1, "futur": 1, "delet": 1, "resourcefullpath": 1, "overrid": 1, "data": 1, "l1": 1, "switch": 1, "current": 1, "devic": 1, "routera": 1, "port1": 1, "ownernam": 1, "updat": 1, "selectioncriteriajson": 1, "checkout": 1, "pool": 1, "json": 1, "select": 1, "multipl": 1, "cleanup": 1, "consoleportsfullpath": 1, "baudrat": 1, "clear": 1, "reset": 1, "consol": 1, "accord": 1, "locat": 1, "explor": 1, "each": 1, "portnam": 1, "baud": 1, "rate": 1, "appli": 1, "sandboxdata": 1, "whole": 1, "printoutput": 1, "run": 1, "manag": 1, "script": 1, "miss": 1, "defin": 1, "print": 1, "window": 1, "appconfigurationsdata": 1, "It": 1, "The": 1, "must": 1, "alreadi": 1, "consum": 1, "entiti": 1, "time": 1, "leav": 1, "empti": 1, "immedi": 1, "unlimit": 1, "domainnamesourc": 1, "domainnamedestin": 1, "copi": 1, "entityid": 1, "global": 1, "attributetyp": 1, "follow": 1, "info": 1, "after": 1, "which": 1, "invalid": 1, "minut": 1, "consumpt": 1, "draftnam": 1, "privat": 1, "draft": 1, "automat": 1, "gener": 1, "origin": 1, "folder": 1, "specif": 1, "resourcefamilyfold": 1, "resourcemodelfold": 1, "notifyonstart": 1, "notifyonend": 1, "notifyonsetupcomplet": 1, "indic": 1, "notifi": 1, "setup": 1, "complet": 1, "durationinminut": 1, "notificationminutesbeforeend": 1, "isterminationprotectionen": 1, "approvalsid": 1, "length": 1, "send": 1, "out": 1, "On": 1, "alert": 1, "disabl": 1, "protect": 1, "being": 1, "termin": 1, "intern": 1, "purpos": 1, "regardless": 1, "param": 1, "field": 1, "differ": 1, "If": 1, "pass": 1, "treat": 1, "equal": 1, "5": 1, "seek": 1, "fulfil": 1, "asid": 1, "thi": 1, "convent": 1, "write": 1, "format": 1, "symbol": 1, "space": 1, "numer": 1, "4": 1, "textual": 1, "hi": 1, "startswith": 1, "endswith": 1, "contain": 1, "doesnotcontain": 1, "resourcefamili": 1, "resourcemodel": 1, "resourceaddress": 1, "parentresourcefullpath": 1, "resourcedescript": 1, "parent": 1, "traffic": 1, "help": 1, "sourceresourcefullpath": 1, "targetresourcefullpath": 1, "overrideactiverout": 1, "encryptedstr": 1, "decrypt": 1, "encrypt": 1, "unmap": 1, "import": 1, "perform": 1, "teardown": 1, "therefor": 1, "revert": 1, "clean": 1, "up": 1, "environ": 1, "keep": 1, "resourcetemplatenam": 1, "save": 1, "commandinput": 1, "execut": 1, "chang": 1, "reservation_id": 1, "azur": 1, "ubuntu": 1, "myvm01": 1, "inputnam": 1, "inputvalu": 1, "disconnect": 1, "unlock": 1, "remov": 1, "editappsrequest": 1, "edit": 1, "implement": 1, "pleas": 1, "modifi": 1, "targetnam": 1, "targettyp": 1, "enqueu": 1, "resouc": 1, "parametervalu": 1, "deprec": 1, "servicealia": 1, "its": 1, "context": 1, "retriev": 1, "via": 1, "displai": 1, "visual": 1, "diagram": 1, "commandtag": 1, "connectedportsfullpath": 1, "function": 1, "e": 1, "g": 1, "virtual": 1, "switch20": 1, "blade5": 1, "powerport1": 1, "blank": 1, "export": 1, "structur": 1, "minutestoadd": 1, "extend": 1, "showalldomain": 1, "exactnam": 1, "includesubresourc": 1, "resourceuniqueidentifi": 1, "maxresult": 1, "500": 1, "includeexcludedresourc": 1, "match": 1, "search": [1, 3], "show": 1, "log": 1, "part": 1, "exact": 1, "sub": 1, "onc": 1, "partial": 1, "192": 1, "168": 1, "fromtim": 1, "untiltim": 1, "rang": 1, "date": 1, "check": 1, "until": 1, "fromdat": 1, "todat": 1, "includechildresourc": 1, "groupbi": 1, "utilizationreporttyp": 1, "report": 1, "To": 1, "how": 1, "machin": 1, "abstract": 1, "get": 1, "inform": 1, "catalog": 1, "categorii": 1, "both": 1, "topologypath": 1, "reservationown": 1, "method": 1, "member": 1, "comput": 1, "none": 1, "photo": 1, "disablecach": 1, "cach": 1, "second": 1, "remain": 1, "overtim": 1, "1": 1, "reservationsid": 1, "live": 1, "power": 1, "calcul": 1, "without": 1, "ani": 1, "rootresourcenam": 1, "schedul": 1, "server": 1, "categorynam": 1, "want": 1, "receiv": 1, "categoryvalu": 1, "retriv": 1, "enter": 1, "everi": 1, "belong": 1, "tn": 1, "session": 1, "sourceport": 1, "destinationport": 1, "physic": 1, "destin": 1, "originalfold": 1, "targetfold": 1, "move": 1, "hierarchi": 1, "powerportsfullpath": 1, "delai": 1, "cycl": 1, "admin": 1, "mai": 1, "off": 1, "prepar": 1, "overrwrit": 1, "refresh": 1, "instanc": 1, "deployedappnam": 1, "vm": 1, "whose": 1, "reject": 1, "poolid": 1, "ownerid": 1, "where": 1, "assoic": 1, "occupi": 1, "test": 1, "would": 1, "otherwis": 1, "remap": 1, "removeattributerestrictionrequest": 1, "point": 1, "custom": 1, "shell": 1, "deletedeployedapp": 1, "block": 1, "them": 1, "argument": 1, "ignor": 1, "Will": 1, "alias": 1, "we": 1, "removevalu": 1, "renam": 1, "cancel": 1, "pend": 1, "initi": 1, "restor": 1, "includeinactiverout": 1, "directli": 1, "under": 1, "try": 1, "foldernamea": 1, "savedsandboxnam": 1, "savedsandboxdescript": 1, "secur": 1, "resourcesattributesupdaterequest": 1, "10000": 1, "row": 1, "attribute_valu": 1, "sourceresourcefullnam": 1, "targetresourcefullnam": 1, "attributerequest": 1, "connectoralia": 1, "ones": 1, "xmodem": 1, "viewonli": 1, "level": 1, "have": 1, "additionalinfo": 1, "newsharelevel": 1, "familydefault": 1, "resourcesfullnam": 1, "newvis": 1, "visibl": 1, "everyon": 1, "adminonli": 1, "applychangesto": 1, "refer": 1, "encompass": 1, "doesn": 1, "t": 1, "newservicenam": 1, "stage": 1, "synchron": 1, "porta": 1, "portb": 1, "folder1": 1, "chassis1": 1, "blade1": 1, "unarch": 1, "resourceafullpath": 1, "resourcebfullpath": 1, "score": 1, "two": 1, "optim": 1, "scenario": 1, "driverfilenam": 1, "driverfil": 1, "overrideexistingconnect": 1, "cabl": 1, "link": 1, "wish": 1, "thei": 1, "No": 1, "resource_a_fullnam": 1, "resource_b_fullnam": 1, "text": 1, "replac": 1, "ispersist": 1, "enabl": 1, "persist": 1, "unlink": 1, "input1": 1, "value1": 1, "routealias": 1, "source_fullnam": 1, "target_fullnam": 1, "scriptnam": 1, "scriptfilenam": 1, "groupsnam": 1, "membership": 1, "user1": 1, "max_reserv": 1, "max_dur": 1, "max_save_sandbox": 1, "max_scheduled_sandbox": 1, "max_owned_blueprint": 1, "secure_logon": 1, "resourceafullnam": 1, "resourcebfullnam": 1, "connectionweight": 1, "api_response_handl": 1, "xml_rpc_logon": 1, "post": 1, "is_xml": 1, "attributenamesvalu": 1, "parentfullnam": 1, "fromport": 1, "toport": 1, "protocol": 1, "subnetid": 1, "rule": 1, "sourceresourcenam": 1, "targetresourcenam": 1, "except": 1, "code": 1, "rawxml": 1, "kwarg": 1, "static": 1, "connection_pool_s": 1, "25": 1, "xml": 1, "return_typ": 1, "need": 1, "parent_nod": 1, "child_nam": 1, "attr_nam": 1, "attr_valu": 1, "node": 1, "prefix_nam": 1, "pretty_print": 1, "xml_str": 1, "content": 3, "packag": 3, "modul": 3, "index": 3, "page": 3}, "objects": {"": [[0, 0, 0, "-", "cloudshell"]], "cloudshell": [[1, 0, 0, "-", "api"], [2, 0, 0, "-", "helpers"]], "cloudshell.api": [[1, 0, 0, "-", "cloudshell_api"], [1, 0, 0, "-", "common_cloudshell_api"]], "cloudshell.api.cloudshell_api": [[1, 1, 1, "", "AbstractResourceAttribute"], [1, 1, 1, "", "AbstractResourceRequiredAttribute"], [1, 1, 1, "", "AbstractTemplateShortInfo"], [1, 1, 1, "", "AbstractTemplateShortInfoList"], [1, 1, 1, "", "ActiveTopologyInfo"], [1, 1, 1, "", "ActiveTopologyResourceInfo"], [1, 1, 1, "", "AddAppToReservationResponseInfo"], [1, 1, 1, "", "AddRestrictionRequest"], [1, 1, 1, "", "AdditionalDataParam"], [1, 1, 1, "", "ApiEditAppRequest"], [1, 1, 1, "", "AppConfiguration"], [1, 1, 1, "", "AppConfigurationConnection"], [1, 1, 1, "", "AppConfigurationData"], [1, 1, 1, "", "AppConfigurationManagement"], [1, 1, 1, "", "AppDeploymentyInfo"], [1, 1, 1, "", "AppDetails"], [1, 1, 1, "", "AppInfo"], [1, 1, 1, "", "AppVisualConnector"], [1, 1, 1, "", "Attribute"], [1, 1, 1, "", "AttributeNameValue"], [1, 1, 1, "", "AttributeValueInfo"], [1, 1, 1, "", "Authentication"], [1, 1, 1, "", "BulkAppDeploymentyInfo"], [1, 1, 1, "", "BulkAppDeploymentyResultItem"], [1, 1, 1, "", "CategoriesOfTopologyInfo"], [1, 1, 1, "", "CategoryInfo"], [1, 1, 1, "", "CategoryListBriefInfo"], [1, 1, 1, "", "CategoryListInfo"], [1, 1, 1, "", "CheckoutFromPoolInfo"], [1, 1, 1, "", "CloudShellAPISession"], [1, 1, 1, "", "CommandExecutionCancelledResultInfo"], [1, 1, 1, "", "CommandExecutionCompletedResultInfo"], [1, 1, 1, "", "CommandExecutionFailedResultInfo"], [1, 1, 1, "", "CommandExecutionIdResponseInfo"], [1, 1, 1, "", "CommandExecutionResultInfo"], [1, 1, 1, "", "CommandExecutionResultListInfo"], [1, 1, 1, "", "CommandNamesListInfo"], [1, 1, 1, "", "CommandParameter"], [1, 1, 1, "", "ConfigParam"], [1, 1, 1, "", "ConfigurationManagementData"], [1, 1, 1, "", "ConfigureAppInfo"], [1, 1, 1, "", "ConfigureAppsInfo"], [1, 1, 1, "", "Connection"], [1, 1, 1, "", "Connector"], [1, 1, 1, "", "ContentListInfo"], [1, 1, 1, "", "ContentShortInfo"], [1, 1, 1, "", "CreateApprovalRequestResponseInfo"], [1, 1, 1, "", "CreateReservationResponseInfo"], [1, 1, 1, "", "Credentials"], [1, 1, 1, "", "DefaultDeployment"], [1, 1, 1, "", "DeployAppInput"], [1, 1, 1, "", "Deployment"], [1, 1, 1, "", "DeploymentPathInfo"], [1, 1, 1, "", "DeploymentServiceInfo"], [1, 1, 1, "", "Domain"], [1, 1, 1, "", "DomainInfo"], [1, 1, 1, "", "DraftInfo"], [1, 1, 1, "", "EndPointConnectionInfo"], [1, 1, 1, "", "EntityUsage"], [1, 1, 1, "", "EnvironmentCommandInfo"], [1, 1, 1, "", "EnvironmentCommandListInfo"], [1, 1, 1, "", "EnvironmentCommandParameter"], [1, 1, 1, "", "ErrorParameter"], [1, 1, 1, "", "ExportConfigurationInfo"], [1, 1, 1, "", "FindResourceInfo"], [1, 1, 1, "", "FindResourceListInfo"], [1, 1, 1, "", "FindResourceReservationInfo"], [1, 1, 1, "", "GetActiveReservationsResponseInfo"], [1, 1, 1, "", "GetAllApprovalRequestsResponseInfo"], [1, 1, 1, "", "GetApprovalRequestResponseInfo"], [1, 1, 1, "", "GetModelUsageReportResponseInfo"], [1, 1, 1, "", "GetReservationAppImageResponseInfo"], [1, 1, 1, "", "GetReservationDescriptionResponseInfo"], [1, 1, 1, "", "GetReservationInputsResponseInfo"], [1, 1, 1, "", "GetReservationRemainingTimeInfo"], [1, 1, 1, "", "GetReservationsInRangeResponseInfo"], [1, 1, 1, "", "GetSandboxDataInfo"], [1, 1, 1, "", "GetSavedSandboxesResponseInfo"], [1, 1, 1, "", "GetServerTimeZonesResponse"], [1, 1, 1, "", "Group"], [1, 1, 1, "", "GroupInfo"], [1, 1, 1, "", "GroupsInfo"], [1, 1, 1, "", "InputNameValue"], [1, 1, 1, "", "LogicalResourceInfo"], [1, 1, 1, "", "LogonDomainInfo"], [1, 1, 1, "", "LogonManager"], [1, 1, 1, "", "LogonResponseInfo"], [1, 1, 1, "", "LogonTokenInfo"], [1, 1, 1, "", "LookupValuesInfo"], [1, 1, 1, "", "Mapping"], [1, 1, 1, "", "NameValuePair"], [1, 1, 1, "", "NumericRange"], [1, 1, 1, "", "ParameterData"], [1, 1, 1, "", "PhysicalConnectionUpdateRequest"], [1, 1, 1, "", "QualiApiClient"], [1, 1, 1, "", "RemapConnectionResultInfo"], [1, 1, 1, "", "RemapConnectionResultItem"], [1, 1, 1, "", "RemoveRestrictionRequest"], [1, 1, 1, "", "ReplaceWithResourceResponseInfo"], [1, 1, 1, "", "ReservationAppResource"], [1, 1, 1, "", "ReservationAppsResponseInfo"], [1, 1, 1, "", "ReservationDescriptionInfo"], [1, 1, 1, "", "ReservationDiagramLayoutResponseInfo"], [1, 1, 1, "", "ReservationInfo"], [1, 1, 1, "", "ReservationListInfo"], [1, 1, 1, "", "ReservationLiveStatus"], [1, 1, 1, "", "ReservationLiveStatusInfo"], [1, 1, 1, "", "ReservationShortInfo"], [1, 1, 1, "", "ReservationSlimStatus"], [1, 1, 1, "", "ReservationSlimStatusInfo"], [1, 1, 1, "", "ReserveResourcesResponseInfo"], [1, 1, 1, "", "ReserveTopologyResponseInfo"], [1, 1, 1, "", "ReservedResourceInfo"], [1, 1, 1, "", "ReservedTopologyAdditionalInfoInputsInfo"], [1, 1, 1, "", "ReservedTopologyGlobalInputsInfo"], [1, 1, 1, "", "ReservedTopologyInputsInfo"], [1, 1, 1, "", "ReservedTopologyRequiredInputsInfo"], [1, 1, 1, "", "Resource"], [1, 1, 1, "", "ResourceAttribute"], [1, 1, 1, "", "ResourceAttributesUpdateRequest"], [1, 1, 1, "", "ResourceCommandInfo"], [1, 1, 1, "", "ResourceCommandListInfo"], [1, 1, 1, "", "ResourceConflictInfo"], [1, 1, 1, "", "ResourceDiagramLayoutInfo"], [1, 1, 1, "", "ResourceInfo"], [1, 1, 1, "", "ResourceInfoDto"], [1, 1, 1, "", "ResourceInfoVmDetails"], [1, 1, 1, "", "ResourceListInfo"], [1, 1, 1, "", "ResourceLiveStatusInfo"], [1, 1, 1, "", "ResourceLockInfo"], [1, 1, 1, "", "ResourceMappingsInfo"], [1, 1, 1, "", "ResourceShortInfo"], [1, 1, 1, "", "ResourcesUsageSummaryInfo"], [1, 1, 1, "", "RouteAttributeInfo"], [1, 1, 1, "", "RouteConfigurationInfo"], [1, 1, 1, "", "RouteInfo"], [1, 1, 1, "", "RouteSegmentInfo"], [1, 1, 1, "", "SandboxDataKeyValue"], [1, 1, 1, "", "SandboxDataKeyValueInfo"], [1, 1, 1, "", "SaveSandboxResponseInfo"], [1, 1, 1, "", "SavedSandboxInfo"], [1, 1, 1, "", "SecurityGroup"], [1, 1, 1, "", "SecurityGroupRule"], [1, 1, 1, "", "SecurityGroupsConfiguration"], [1, 1, 1, "", "ServerTimeInfo"], [1, 1, 1, "", "ServiceAttribute"], [1, 1, 1, "", "ServiceInfo"], [1, 1, 1, "", "ServiceInstance"], [1, 1, 1, "", "ServicesListInfo"], [1, 1, 1, "", "SetConnectorRequest"], [1, 1, 1, "", "SetSecurityGroupInfo"], [1, 1, 1, "", "SetSecurityGroupsInfo"], [1, 1, 1, "", "TestShellDomainInfo"], [1, 1, 1, "", "TimeZoneDefinition"], [1, 1, 1, "", "TopologiesByCategoryInfo"], [1, 1, 1, "", "TopologiesResourcesAttributesInfo"], [1, 1, 1, "", "Topology"], [1, 1, 1, "", "TopologyAbstractResourceInfo"], [1, 1, 1, "", "TopologyAdditionalInfoInputsInfo"], [1, 1, 1, "", "TopologyAppResourceInfo"], [1, 1, 1, "", "TopologyCategoryInfo"], [1, 1, 1, "", "TopologyCommandInfo"], [1, 1, 1, "", "TopologyCommandListInfo"], [1, 1, 1, "", "TopologyGlobalInputsInfo"], [1, 1, 1, "", "TopologyInfo"], [1, 1, 1, "", "TopologyInputsInfo"], [1, 1, 1, "", "TopologyInstructionsInfo"], [1, 1, 1, "", "TopologyListInfo"], [1, 1, 1, "", "TopologyRequirementsInputsInfo"], [1, 1, 1, "", "TopologyReservedResourceInfo"], [1, 1, 1, "", "TopologyResourceInfo"], [1, 1, 1, "", "TopologyRoutesInfo"], [1, 1, 1, "", "TopologyShortInfo"], [1, 1, 1, "", "TopologyUrl"], [1, 1, 1, "", "TopologyUrlsInfo"], [1, 1, 1, "", "UpdateRouteAliasRequest"], [1, 1, 1, "", "UpdateTopologyAdditionalInfoInputsRequest"], [1, 1, 1, "", "UpdateTopologyGlobalInputsRequest"], [1, 1, 1, "", "UpdateTopologyRequirementsInputsRequest"], [1, 1, 1, "", "UsageDetails"], [1, 1, 1, "", "UserInfo"], [1, 1, 1, "", "UserUpdateRequest"], [1, 1, 1, "", "UsersInfo"], [1, 1, 1, "", "UtilizationReport"], [1, 1, 1, "", "UtilizationReportRow"], [1, 1, 1, "", "VisualConnectorsInfo"], [1, 1, 1, "", "VmCustomParam"], [1, 1, 1, "", "VmDetailsNetworkInterface"], [1, 1, 1, "", "VmInstanceParam"]], "cloudshell.api.cloudshell_api.AbstractResourceAttribute": [[1, 2, 1, "", "Name"], [1, 2, 1, "", "Type"], [1, 2, 1, "", "Value"]], "cloudshell.api.cloudshell_api.AbstractResourceRequiredAttribute": [[1, 2, 1, "", "Name"], [1, 2, 1, "", "Operator"], [1, 2, 1, "", "Type"], [1, 2, 1, "", "Value"]], "cloudshell.api.cloudshell_api.AbstractTemplateShortInfo": [[1, 2, 1, "", "CreateDate"], [1, 2, 1, "", "Description"], [1, 2, 1, "", "DomainName"], [1, 2, 1, "", "Domains"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Owner"], [1, 2, 1, "", "ResourceFamilyName"], [1, 2, 1, "", "ResourceModelName"], [1, 2, 1, "", "Valid"]], "cloudshell.api.cloudshell_api.AbstractTemplateShortInfoList": [[1, 2, 1, "", "AbstractTemplates"]], "cloudshell.api.cloudshell_api.ActiveTopologyInfo": [[1, 2, 1, "", "Connectors"], [1, 2, 1, "", "MachineName"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Resources"], [1, 2, 1, "", "Routes"], [1, 2, 1, "", "Topology"], [1, 2, 1, "", "Username"]], "cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo": [[1, 2, 1, "", "Address"], [1, 2, 1, "", "Alias"], [1, 2, 1, "", "Connections"], [1, 2, 1, "", "FolderFullPath"], [1, 2, 1, "", "FullAddress"], [1, 2, 1, "", "LockInfo"], [1, 2, 1, "", "Locked"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "ResourceAttributes"], [1, 2, 1, "", "ResourceFamilyName"], [1, 2, 1, "", "ResourceModelName"], [1, 2, 1, "", "RootAddress"]], "cloudshell.api.cloudshell_api.AddAppToReservationResponseInfo": [[1, 2, 1, "", "ReservedAppName"]], "cloudshell.api.cloudshell_api.AdditionalDataParam": [[1, 2, 1, "", "Name"], [1, 2, 1, "", "Value"]], "cloudshell.api.cloudshell_api.AppConfigurationConnection": [[1, 2, 1, "", "URL"]], "cloudshell.api.cloudshell_api.AppConfigurationManagement": [[1, 2, 1, "", "Alias"], [1, 2, 1, "", "AnsibleInventoryGroups"], [1, 2, 1, "", "AppConfigurationConnection"], [1, 2, 1, "", "ConnectionMethod"], [1, 2, 1, "", "ScriptParameters"], [1, 2, 1, "", "Tool"]], "cloudshell.api.cloudshell_api.AppDeploymentyInfo": [[1, 2, 1, "", "CloudProviderResourceName"], [1, 2, 1, "", "LogicalResourceName"], [1, 2, 1, "", "VisualConnectors"], [1, 2, 1, "", "VmUuid"]], "cloudshell.api.cloudshell_api.AppInfo": [[1, 2, 1, "", "AppName"]], "cloudshell.api.cloudshell_api.AppVisualConnector": [[1, 2, 1, "", "Alias"], [1, 2, 1, "", "Attributes"], [1, 2, 1, "", "Source"], [1, 2, 1, "", "Target"]], "cloudshell.api.cloudshell_api.AttributeValueInfo": [[1, 2, 1, "", "Name"], [1, 2, 1, "", "Value"]], "cloudshell.api.cloudshell_api.Authentication": [[1, 3, 1, "", "logon"], [1, 4, 1, "", "xmlrpc_token"]], "cloudshell.api.cloudshell_api.BulkAppDeploymentyInfo": [[1, 2, 1, "", "ResultItems"]], "cloudshell.api.cloudshell_api.BulkAppDeploymentyResultItem": [[1, 2, 1, "", "AppDeploymentyInfo"], [1, 2, 1, "", "AppName"], [1, 2, 1, "", "Error"], [1, 2, 1, "", "ErrorCode"], [1, 2, 1, "", "Success"]], "cloudshell.api.cloudshell_api.CategoriesOfTopologyInfo": [[1, 2, 1, "", "Categories"]], "cloudshell.api.cloudshell_api.CategoryInfo": [[1, 2, 1, "", "Description"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Type"]], "cloudshell.api.cloudshell_api.CategoryListBriefInfo": [[1, 2, 1, "", "Categories"]], "cloudshell.api.cloudshell_api.CategoryListInfo": [[1, 2, 1, "", "Categories"]], "cloudshell.api.cloudshell_api.CheckoutFromPoolInfo": [[1, 2, 1, "", "Items"]], "cloudshell.api.cloudshell_api.CloudShellAPISession": [[1, 3, 1, "", "ActivateTopology"], [1, 3, 1, "", "AddAppToReservation"], [1, 3, 1, "", "AddAttributeRestrictedValues"], [1, 3, 1, "", "AddGroupsToDomain"], [1, 3, 1, "", "AddNewDomain"], [1, 3, 1, "", "AddNewGroup"], [1, 3, 1, "", "AddNewUser"], [1, 3, 1, "", "AddPermittedEditorsToTopology"], [1, 3, 1, "", "AddPermittedUsersToReservation"], [1, 3, 1, "", "AddResourcesToDomain"], [1, 3, 1, "", "AddResourcesToReservation"], [1, 3, 1, "", "AddRoutesToReservation"], [1, 3, 1, "", "AddServiceToReservation"], [1, 3, 1, "", "AddTopologiesToDomain"], [1, 3, 1, "", "AddUsersToGroup"], [1, 3, 1, "", "AddValueToLookupAttribute"], [1, 3, 1, "", "ApproveApprovalRequest"], [1, 3, 1, "", "ArchiveDomain"], [1, 3, 1, "", "AutoLoad"], [1, 3, 1, "", "ChangeReservationOwner"], [1, 3, 1, "", "CheckoutFromPool"], [1, 3, 1, "", "CleanupSandboxConnectivity"], [1, 3, 1, "", "ClearAndResetConsole"], [1, 3, 1, "", "ClearSandboxData"], [1, 3, 1, "", "ConfigureApps"], [1, 3, 1, "", "ConfigureAppsV2"], [1, 3, 1, "", "ConnectRoutesInReservation"], [1, 3, 1, "", "ConsumeApprovalRequest"], [1, 3, 1, "", "CopyDomainsResources"], [1, 3, 1, "", "CreateBlueprintApprovalRequest"], [1, 3, 1, "", "CreateDraft"], [1, 3, 1, "", "CreateFolder"], [1, 3, 1, "", "CreateImmediatePersistentReservation"], [1, 3, 1, "", "CreateImmediateReservation"], [1, 3, 1, "", "CreateImmediateTopologyReservation"], [1, 3, 1, "", "CreatePersistentReservation"], [1, 3, 1, "", "CreateReservation"], [1, 3, 1, "", "CreateResource"], [1, 3, 1, "", "CreateResources"], [1, 3, 1, "", "CreateRouteInReservation"], [1, 3, 1, "", "CreateRoutesInReservation"], [1, 3, 1, "", "CreateTopologyReservation"], [1, 3, 1, "", "DecryptPassword"], [1, 3, 1, "", "DeleteApprovalRequest"], [1, 3, 1, "", "DeleteDomain"], [1, 3, 1, "", "DeleteDraft"], [1, 3, 1, "", "DeleteFolder"], [1, 3, 1, "", "DeleteGroup"], [1, 3, 1, "", "DeleteReservation"], [1, 3, 1, "", "DeleteResource"], [1, 3, 1, "", "DeleteResourceTemplate"], [1, 3, 1, "", "DeleteResources"], [1, 3, 1, "", "DeleteSavedSandbox"], [1, 3, 1, "", "DeleteTopology"], [1, 3, 1, "", "DeleteUser"], [1, 3, 1, "", "DeployAppToCloudProvider"], [1, 3, 1, "", "DeployAppToCloudProviderBulk"], [1, 3, 1, "", "DisconnectRoutesInReservation"], [1, 3, 1, "", "EditAppsInReservation"], [1, 3, 1, "", "EndReservation"], [1, 3, 1, "", "EnqueueCommand"], [1, 3, 1, "", "EnqueueEnvironmentCommand"], [1, 3, 1, "", "EnqueueResourceCommand"], [1, 3, 1, "", "EnqueueServiceCommand"], [1, 3, 1, "", "EnqueueTopologyCommand"], [1, 3, 1, "", "ExcludeResource"], [1, 3, 1, "", "ExcludeResources"], [1, 3, 1, "", "ExecuteCommand"], [1, 3, 1, "", "ExecuteEnvironmentCommand"], [1, 3, 1, "", "ExecuteResourceCommand"], [1, 3, 1, "", "ExecuteResourceConnectedCommand"], [1, 3, 1, "", "ExecuteServiceCommand"], [1, 3, 1, "", "ExecuteTopologyCommand"], [1, 3, 1, "", "ExportFamiliesAndModels"], [1, 3, 1, "", "ExtendReservation"], [1, 3, 1, "", "FindResources"], [1, 3, 1, "", "FindResourcesInTimeRange"], [1, 3, 1, "", "GenerateUtilizationReport"], [1, 3, 1, "", "GetAbstractTemplateList"], [1, 3, 1, "", "GetActiveTopologyNames"], [1, 3, 1, "", "GetAllApprovalRequests"], [1, 3, 1, "", "GetAllUsersDetails"], [1, 3, 1, "", "GetApprovalRequest"], [1, 3, 1, "", "GetAppsDetailsInReservation"], [1, 3, 1, "", "GetAttributeValue"], [1, 3, 1, "", "GetCategories"], [1, 3, 1, "", "GetCategoriesOfTopology"], [1, 3, 1, "", "GetCurrentReservations"], [1, 3, 1, "", "GetDomainDetails"], [1, 3, 1, "", "GetEnvironmentCommands"], [1, 3, 1, "", "GetFolderContent"], [1, 3, 1, "", "GetGroupDomains"], [1, 3, 1, "", "GetGroupsDetails"], [1, 3, 1, "", "GetLockedResources"], [1, 3, 1, "", "GetModelUsageReport"], [1, 3, 1, "", "GetReservationAppImage"], [1, 3, 1, "", "GetReservationDetails"], [1, 3, 1, "", "GetReservationInputs"], [1, 3, 1, "", "GetReservationRemainingTime"], [1, 3, 1, "", "GetReservationResourcesPositions"], [1, 3, 1, "", "GetReservationServicesPositions"], [1, 3, 1, "", "GetReservationStatus"], [1, 3, 1, "", "GetReservationsLiveStatus"], [1, 3, 1, "", "GetResourceAvailability"], [1, 3, 1, "", "GetResourceAvailabilityInTimeRange"], [1, 3, 1, "", "GetResourceCommands"], [1, 3, 1, "", "GetResourceConnectedCommands"], [1, 3, 1, "", "GetResourceDetails"], [1, 3, 1, "", "GetResourceList"], [1, 3, 1, "", "GetResourceLiveStatus"], [1, 3, 1, "", "GetResourceMappings"], [1, 3, 1, "", "GetRouteSegments"], [1, 3, 1, "", "GetRoutesSolution"], [1, 3, 1, "", "GetSandboxData"], [1, 3, 1, "", "GetSavedSandboxes"], [1, 3, 1, "", "GetScheduledReservations"], [1, 3, 1, "", "GetServerDateAndTime"], [1, 3, 1, "", "GetServiceCommands"], [1, 3, 1, "", "GetServices"], [1, 3, 1, "", "GetTopologiesByCategory"], [1, 3, 1, "", "GetTopologyCategories"], [1, 3, 1, "", "GetTopologyCommands"], [1, 3, 1, "", "GetTopologyDetails"], [1, 3, 1, "", "GetTopologyUrls"], [1, 3, 1, "", "GetUserDetails"], [1, 3, 1, "", "GetValuesForLookupAttribute"], [1, 3, 1, "", "IncludeResource"], [1, 3, 1, "", "IncludeResources"], [1, 3, 1, "", "LockResource"], [1, 3, 1, "", "LockResources"], [1, 3, 1, "", "Logoff"], [1, 3, 1, "", "Logon"], [1, 3, 1, "", "LogoutTNSession"], [1, 3, 1, "", "MapPorts"], [1, 3, 1, "", "MoveFolder"], [1, 3, 1, "", "MoveResources"], [1, 3, 1, "", "PowerCycleResource"], [1, 3, 1, "", "PowerOffResource"], [1, 3, 1, "", "PowerOnResource"], [1, 3, 1, "", "PrepareSandboxConnectivity"], [1, 3, 1, "", "PromoteDraft"], [1, 3, 1, "", "RecheckConflicts"], [1, 3, 1, "", "RefreshAppInBlueprints"], [1, 3, 1, "", "RefreshVMDetails"], [1, 3, 1, "", "RejectApprovalRequest"], [1, 3, 1, "", "ReleaseFromPool"], [1, 3, 1, "", "ReleaseResourcesFromReservation"], [1, 3, 1, "", "ReleaseTopologyResources"], [1, 3, 1, "", "RemapConnections"], [1, 3, 1, "", "RemoveAppFromReservation"], [1, 3, 1, "", "RemoveAttributeRestrictedValues"], [1, 3, 1, "", "RemoveConnectorsFromReservation"], [1, 3, 1, "", "RemoveCustomShellAttribute"], [1, 3, 1, "", "RemoveGroupsFromDomain"], [1, 3, 1, "", "RemovePermittedEditorsFromTopology"], [1, 3, 1, "", "RemovePermittedUsersFromReservation"], [1, 3, 1, "", "RemoveResourcesFromDomain"], [1, 3, 1, "", "RemoveResourcesFromReservation"], [1, 3, 1, "", "RemoveRoutesFromReservation"], [1, 3, 1, "", "RemoveServicesFromReservation"], [1, 3, 1, "", "RemoveTopologiesFromDomain"], [1, 3, 1, "", "RemoveTopologyCategory"], [1, 3, 1, "", "RemoveUsersFromGroup"], [1, 3, 1, "", "RemoveValueFromLookupAttribute"], [1, 3, 1, "", "RenameBlueprint"], [1, 3, 1, "", "RenameResource"], [1, 3, 1, "", "ResetResourceDriver"], [1, 3, 1, "", "ResetSandboxProvisioningStatus"], [1, 3, 1, "", "RestoreSavedSandbox"], [1, 3, 1, "", "SaveReservationAsTopology"], [1, 3, 1, "", "SaveSandbox"], [1, 3, 1, "", "SecureLogon"], [1, 3, 1, "", "SetAppSecurityGroups"], [1, 3, 1, "", "SetAttributeValue"], [1, 3, 1, "", "SetAttributesValues"], [1, 3, 1, "", "SetBaudRate"], [1, 3, 1, "", "SetConnectorAttributes"], [1, 3, 1, "", "SetConnectorAttributesViaAlias"], [1, 3, 1, "", "SetConnectorsInReservation"], [1, 3, 1, "", "SetConsoleForXModem"], [1, 3, 1, "", "SetCustomShellAttribute"], [1, 3, 1, "", "SetGroupDomainPermissions"], [1, 3, 1, "", "SetReservationLiveStatus"], [1, 3, 1, "", "SetReservationResourcePosition"], [1, 3, 1, "", "SetReservationServicePosition"], [1, 3, 1, "", "SetResourceLiveStatus"], [1, 3, 1, "", "SetResourceShareLevel"], [1, 3, 1, "", "SetResourceSharedState"], [1, 3, 1, "", "SetResourceVisibility"], [1, 3, 1, "", "SetRouteAttributes"], [1, 3, 1, "", "SetRouteAttributesViaAlias"], [1, 3, 1, "", "SetSandboxData"], [1, 3, 1, "", "SetServiceAttributesValues"], [1, 3, 1, "", "SetServiceDriver"], [1, 3, 1, "", "SetServiceLiveStatus"], [1, 3, 1, "", "SetServiceName"], [1, 3, 1, "", "SetSetupStage"], [1, 3, 1, "", "SetTopologyCategory"], [1, 3, 1, "", "SyncResourceFromDevice"], [1, 3, 1, "", "SyncResourceToDevice"], [1, 3, 1, "", "TerminateReservation"], [1, 3, 1, "", "UnMapPorts"], [1, 3, 1, "", "UnarchiveDomain"], [1, 3, 1, "", "UnlockResource"], [1, 3, 1, "", "UnlockResources"], [1, 3, 1, "", "UpdateConnectionWeight"], [1, 3, 1, "", "UpdateConnectorAliasInReservation"], [1, 3, 1, "", "UpdateDomainTopologiesFolder"], [1, 3, 1, "", "UpdateDriver"], [1, 3, 1, "", "UpdateGroup"], [1, 3, 1, "", "UpdatePhysicalConnection"], [1, 3, 1, "", "UpdatePhysicalConnections"], [1, 3, 1, "", "UpdateReservationDescription"], [1, 3, 1, "", "UpdateReservationEndTime"], [1, 3, 1, "", "UpdateReservationGlobalInputs"], [1, 3, 1, "", "UpdateReservationName"], [1, 3, 1, "", "UpdateResourceAddress"], [1, 3, 1, "", "UpdateResourceDescription"], [1, 3, 1, "", "UpdateResourceDriver"], [1, 3, 1, "", "UpdateRouteAliasesInReservation"], [1, 3, 1, "", "UpdateScript"], [1, 3, 1, "", "UpdateTopologyDriver"], [1, 3, 1, "", "UpdateTopologyOwner"], [1, 3, 1, "", "UpdateUser"], [1, 3, 1, "", "UpdateUserGroups"], [1, 3, 1, "", "UpdateUserPassword"], [1, 3, 1, "", "UpdateUsersLimitations"], [1, 3, 1, "", "WriteMessageToReservationOutput"], [1, 3, 1, "", "create_headers"]], "cloudshell.api.cloudshell_api.CommandExecutionCancelledResultInfo": [[1, 2, 1, "", "Message"]], "cloudshell.api.cloudshell_api.CommandExecutionCompletedResultInfo": [[1, 2, 1, "", "Output"]], "cloudshell.api.cloudshell_api.CommandExecutionFailedResultInfo": [[1, 2, 1, "", "ErrorDescription"], [1, 2, 1, "", "ErrorName"], [1, 2, 1, "", "ErrorParameters"]], "cloudshell.api.cloudshell_api.CommandExecutionIdResponseInfo": [[1, 2, 1, "", "Id"]], "cloudshell.api.cloudshell_api.CommandExecutionResultListInfo": [[1, 2, 1, "", "Results"]], "cloudshell.api.cloudshell_api.CommandNamesListInfo": [[1, 2, 1, "", "CommandNames"]], "cloudshell.api.cloudshell_api.CommandParameter": [[1, 2, 1, "", "DefaultValue"], [1, 2, 1, "", "Description"], [1, 2, 1, "", "EnumValues"], [1, 2, 1, "", "Mandatory"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Type"]], "cloudshell.api.cloudshell_api.ConfigureAppInfo": [[1, 2, 1, "", "AppName"], [1, 2, 1, "", "Error"], [1, 2, 1, "", "ErrorCode"], [1, 2, 1, "", "Success"]], "cloudshell.api.cloudshell_api.ConfigureAppsInfo": [[1, 2, 1, "", "ResultItems"]], "cloudshell.api.cloudshell_api.Connection": [[1, 2, 1, "", "FullPath"], [1, 2, 1, "", "Weight"]], "cloudshell.api.cloudshell_api.Connector": [[1, 2, 1, "", "Alias"], [1, 2, 1, "", "Attributes"], [1, 2, 1, "", "Direction"], [1, 2, 1, "", "Source"], [1, 2, 1, "", "State"], [1, 2, 1, "", "Target"], [1, 2, 1, "", "Type"]], "cloudshell.api.cloudshell_api.ContentListInfo": [[1, 2, 1, "", "ContentArray"]], "cloudshell.api.cloudshell_api.ContentShortInfo": [[1, 2, 1, "", "Name"], [1, 2, 1, "", "Permission"], [1, 2, 1, "", "Type"]], "cloudshell.api.cloudshell_api.CreateApprovalRequestResponseInfo": [[1, 2, 1, "", "Id"]], "cloudshell.api.cloudshell_api.CreateReservationResponseInfo": [[1, 2, 1, "", "Reservation"]], "cloudshell.api.cloudshell_api.DeploymentPathInfo": [[1, 2, 1, "", "DeploymentService"], [1, 2, 1, "", "IsDefault"], [1, 2, 1, "", "Name"]], "cloudshell.api.cloudshell_api.DeploymentServiceInfo": [[1, 2, 1, "", "Attributes"], [1, 2, 1, "", "CloudProvider"], [1, 2, 1, "", "Driver"], [1, 2, 1, "", "Model"], [1, 2, 1, "", "Name"]], "cloudshell.api.cloudshell_api.Domain": [[1, 2, 1, "", "Description"], [1, 2, 1, "", "Name"]], "cloudshell.api.cloudshell_api.DomainInfo": [[1, 2, 1, "", "Archived"], [1, 2, 1, "", "Description"], [1, 2, 1, "", "Groups"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Resources"], [1, 2, 1, "", "Topologies"], [1, 2, 1, "", "TopologiesFolder"]], "cloudshell.api.cloudshell_api.DraftInfo": [[1, 2, 1, "", "DraftId"]], "cloudshell.api.cloudshell_api.EndPointConnectionInfo": [[1, 2, 1, "", "Routes"]], "cloudshell.api.cloudshell_api.EntityUsage": [[1, 2, 1, "", "BlueprintTemplates"], [1, 2, 1, "", "Blueprints"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Sandboxes"], [1, 2, 1, "", "Type"]], "cloudshell.api.cloudshell_api.EnvironmentCommandInfo": [[1, 2, 1, "", "Description"], [1, 2, 1, "", "DisplayName"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Parameters"]], "cloudshell.api.cloudshell_api.EnvironmentCommandListInfo": [[1, 2, 1, "", "Commands"]], "cloudshell.api.cloudshell_api.EnvironmentCommandParameter": [[1, 2, 1, "", "DefaultValue"], [1, 2, 1, "", "Description"], [1, 2, 1, "", "DisplayName"], [1, 2, 1, "", "EnumValues"], [1, 2, 1, "", "Mandatory"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Type"]], "cloudshell.api.cloudshell_api.ErrorParameter": [[1, 2, 1, "", "Name"], [1, 2, 1, "", "Value"]], "cloudshell.api.cloudshell_api.ExportConfigurationInfo": [[1, 2, 1, "", "Configuration"]], "cloudshell.api.cloudshell_api.FindResourceInfo": [[1, 2, 1, "", "Address"], [1, 2, 1, "", "ConnectedTo"], [1, 2, 1, "", "Description"], [1, 2, 1, "", "Excluded"], [1, 2, 1, "", "FullAddress"], [1, 2, 1, "", "FullName"], [1, 2, 1, "", "FullPath"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Permission"], [1, 2, 1, "", "Reservations"], [1, 2, 1, "", "ReservedStatus"], [1, 2, 1, "", "ResourceFamilyName"], [1, 2, 1, "", "ResourceModelName"], [1, 2, 1, "", "UsageSummary"]], "cloudshell.api.cloudshell_api.FindResourceListInfo": [[1, 2, 1, "", "Resources"]], "cloudshell.api.cloudshell_api.FindResourceReservationInfo": [[1, 2, 1, "", "EndTime"], [1, 2, 1, "", "Owner"], [1, 2, 1, "", "ReservationId"], [1, 2, 1, "", "ReservationName"], [1, 2, 1, "", "ResourceFullName"], [1, 2, 1, "", "Shared"], [1, 2, 1, "", "StartTime"]], "cloudshell.api.cloudshell_api.GetActiveReservationsResponseInfo": [[1, 2, 1, "", "Reservations"]], "cloudshell.api.cloudshell_api.GetAllApprovalRequestsResponseInfo": [[1, 2, 1, "", "ApprovalRequestResponseInfos"]], "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo": [[1, 2, 1, "", "ApproveNotes"], [1, 2, 1, "", "CreationDate"], [1, 2, 1, "", "Duration"], [1, 2, 1, "", "EndTime"], [1, 2, 1, "", "EntityName"], [1, 2, 1, "", "Id"], [1, 2, 1, "", "Inputs"], [1, 2, 1, "", "IsApprover"], [1, 2, 1, "", "ModifiedDate"], [1, 2, 1, "", "RequestNotes"], [1, 2, 1, "", "RequestedEntityId"], [1, 2, 1, "", "RequestedEntityType"], [1, 2, 1, "", "RequesterName"], [1, 2, 1, "", "StartTime"], [1, 2, 1, "", "State"], [1, 2, 1, "", "UserInfoId"]], "cloudshell.api.cloudshell_api.GetModelUsageReportResponseInfo": [[1, 2, 1, "", "ModelUsages"]], "cloudshell.api.cloudshell_api.GetReservationAppImageResponseInfo": [[1, 2, 1, "", "AppTemplateImage"]], "cloudshell.api.cloudshell_api.GetReservationDescriptionResponseInfo": [[1, 2, 1, "", "ReservationDescription"]], "cloudshell.api.cloudshell_api.GetReservationInputsResponseInfo": [[1, 2, 1, "", "AdditionalInfoInputs"], [1, 2, 1, "", "GlobalInputs"], [1, 2, 1, "", "RequiredInputs"]], "cloudshell.api.cloudshell_api.GetReservationRemainingTimeInfo": [[1, 2, 1, "", "RemainingTimeInMinutes"]], "cloudshell.api.cloudshell_api.GetReservationsInRangeResponseInfo": [[1, 2, 1, "", "Reservations"]], "cloudshell.api.cloudshell_api.GetSandboxDataInfo": [[1, 2, 1, "", "SandboxDataKeyValues"]], "cloudshell.api.cloudshell_api.GetSavedSandboxesResponseInfo": [[1, 2, 1, "", "SavedSandboxes"]], "cloudshell.api.cloudshell_api.GetServerTimeZonesResponse": [[1, 2, 1, "", "TimeZones"]], "cloudshell.api.cloudshell_api.Group": [[1, 2, 1, "", "Description"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Role"]], "cloudshell.api.cloudshell_api.GroupInfo": [[1, 2, 1, "", "Description"], [1, 2, 1, "", "GroupRole"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "TestShellDomains"], [1, 2, 1, "", "Users"]], "cloudshell.api.cloudshell_api.GroupsInfo": [[1, 2, 1, "", "Groups"]], "cloudshell.api.cloudshell_api.LogicalResourceInfo": [[1, 2, 1, "", "Attributes"], [1, 2, 1, "", "Description"], [1, 2, 1, "", "Driver"], [1, 2, 1, "", "Family"], [1, 2, 1, "", "Model"]], "cloudshell.api.cloudshell_api.LogonDomainInfo": [[1, 2, 1, "", "Description"], [1, 2, 1, "", "DomainId"], [1, 2, 1, "", "Name"]], "cloudshell.api.cloudshell_api.LogonManager": [[1, 3, 1, "", "logon"]], "cloudshell.api.cloudshell_api.LogonResponseInfo": [[1, 2, 1, "", "Domain"], [1, 2, 1, "", "Token"], [1, 2, 1, "", "User"]], "cloudshell.api.cloudshell_api.LogonTokenInfo": [[1, 2, 1, "", "Token"]], "cloudshell.api.cloudshell_api.LookupValuesInfo": [[1, 2, 1, "", "LookupValues"]], "cloudshell.api.cloudshell_api.Mapping": [[1, 2, 1, "", "RouteType"], [1, 2, 1, "", "Source"], [1, 2, 1, "", "Target"]], "cloudshell.api.cloudshell_api.NumericRange": [[1, 2, 1, "", "End"], [1, 2, 1, "", "Start"]], "cloudshell.api.cloudshell_api.ParameterData": [[1, 2, 1, "", "Name"], [1, 2, 1, "", "Value"]], "cloudshell.api.cloudshell_api.QualiApiClient": [[1, 3, 1, "", "enrich_logon"], [1, 3, 1, "", "enrich_secure_logon"], [1, 3, 1, "", "send_rest"]], "cloudshell.api.cloudshell_api.RemapConnectionResultInfo": [[1, 2, 1, "", "ResultItems"]], "cloudshell.api.cloudshell_api.RemapConnectionResultItem": [[1, 2, 1, "", "Error"], [1, 2, 1, "", "ErrorCode"], [1, 2, 1, "", "Output"], [1, 2, 1, "", "RemapOperationSummary"], [1, 2, 1, "", "RemapedVia"], [1, 2, 1, "", "ResourceName"], [1, 2, 1, "", "Success"]], "cloudshell.api.cloudshell_api.ReplaceWithResourceResponseInfo": [[1, 2, 1, "", "RootResources"]], "cloudshell.api.cloudshell_api.ReservationAppResource": [[1, 2, 1, "", "AppConfigurationManagements"], [1, 2, 1, "", "AppTemplateName"], [1, 2, 1, "", "DeploymentPaths"], [1, 2, 1, "", "Description"], [1, 2, 1, "", "LogicalResource"], [1, 2, 1, "", "Name"]], "cloudshell.api.cloudshell_api.ReservationAppsResponseInfo": [[1, 2, 1, "", "Apps"]], "cloudshell.api.cloudshell_api.ReservationDescriptionInfo": [[1, 2, 1, "", "ActiveRoutesInfo"], [1, 2, 1, "", "Apps"], [1, 2, 1, "", "Conflicts"], [1, 2, 1, "", "Connectors"], [1, 2, 1, "", "RequestedRoutesInfo"], [1, 2, 1, "", "ReservationLiveStatus"], [1, 2, 1, "", "Resources"], [1, 2, 1, "", "SavedSandboxId"], [1, 2, 1, "", "Services"], [1, 2, 1, "", "SetupStage"], [1, 2, 1, "", "TopologiesInstructionsInfo"], [1, 2, 1, "", "TopologiesReservedResources"], [1, 2, 1, "", "TopologiesResourcesAttributeInfo"], [1, 2, 1, "", "TopologiesRouteInfo"]], "cloudshell.api.cloudshell_api.ReservationDiagramLayoutResponseInfo": [[1, 2, 1, "", "ResourceDiagramLayouts"]], "cloudshell.api.cloudshell_api.ReservationInfo": [[1, 2, 1, "", "Created"], [1, 2, 1, "", "Id"], [1, 2, 1, "", "LockedResources"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Owner"]], "cloudshell.api.cloudshell_api.ReservationListInfo": [[1, 2, 1, "", "Reservations"]], "cloudshell.api.cloudshell_api.ReservationLiveStatus": [[1, 2, 1, "", "ReservationId"], [1, 2, 1, "", "ReservationLiveStatusDescription"], [1, 2, 1, "", "ReservationLiveStatusName"]], "cloudshell.api.cloudshell_api.ReservationLiveStatusInfo": [[1, 2, 1, "", "ReservationLiveStatuses"]], "cloudshell.api.cloudshell_api.ReservationShortInfo": [[1, 2, 1, "", "ActualEndTime"], [1, 2, 1, "", "Booked"], [1, 2, 1, "", "CreateDate"], [1, 2, 1, "", "Description"], [1, 2, 1, "", "DomainName"], [1, 2, 1, "", "EndTime"], [1, 2, 1, "", "Id"], [1, 2, 1, "", "ModificationDate"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Owner"], [1, 2, 1, "", "PermittedUsers"], [1, 2, 1, "", "ProvisioningStatus"], [1, 2, 1, "", "RecurrenceType"], [1, 2, 1, "", "ReservationLiveStatusDescription"], [1, 2, 1, "", "ReservationLiveStatusName"], [1, 2, 1, "", "StartTime"], [1, 2, 1, "", "Status"], [1, 2, 1, "", "TeardownTime"], [1, 2, 1, "", "Topologies"], [1, 2, 1, "", "TopologiesInfo"]], "cloudshell.api.cloudshell_api.ReservationSlimStatus": [[1, 2, 1, "", "Booked"], [1, 2, 1, "", "EndTime"], [1, 2, 1, "", "ProvisioningStatus"], [1, 2, 1, "", "ReservationId"], [1, 2, 1, "", "SetupStage"], [1, 2, 1, "", "StartTime"], [1, 2, 1, "", "Status"]], "cloudshell.api.cloudshell_api.ReservationSlimStatusInfo": [[1, 2, 1, "", "ReservationSlimStatus"]], "cloudshell.api.cloudshell_api.ReserveResourcesResponseInfo": [[1, 2, 1, "", "Conflicts"]], "cloudshell.api.cloudshell_api.ReserveTopologyResponseInfo": [[1, 2, 1, "", "Conflicts"]], "cloudshell.api.cloudshell_api.ReservedResourceInfo": [[1, 2, 1, "", "AppDetails"], [1, 2, 1, "", "AppTemplateName"], [1, 2, 1, "", "Availability"], [1, 2, 1, "", "CreatedByUser"], [1, 2, 1, "", "CreatedInDomain"], [1, 2, 1, "", "CreatedInReservation"], [1, 2, 1, "", "FolderFullPath"], [1, 2, 1, "", "FullAddress"], [1, 2, 1, "", "Locked"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Released"], [1, 2, 1, "", "ResourceFamilyName"], [1, 2, 1, "", "ResourceModelName"], [1, 2, 1, "", "Shared"], [1, 2, 1, "", "VmDetails"]], "cloudshell.api.cloudshell_api.ReservedTopologyAdditionalInfoInputsInfo": [[1, 2, 1, "", "LinkedToGlobal"], [1, 2, 1, "", "PossibleValues"], [1, 2, 1, "", "ResourceName"]], "cloudshell.api.cloudshell_api.ReservedTopologyGlobalInputsInfo": [[1, 2, 1, "", "PossibleValues"]], "cloudshell.api.cloudshell_api.ReservedTopologyInputsInfo": [[1, 2, 1, "", "ParamName"], [1, 2, 1, "", "Value"]], "cloudshell.api.cloudshell_api.ReservedTopologyRequiredInputsInfo": [[1, 2, 1, "", "LinkedToGlobal"], [1, 2, 1, "", "ResourceName"], [1, 2, 1, "", "Type"]], "cloudshell.api.cloudshell_api.Resource": [[1, 2, 1, "", "Name"], [1, 2, 1, "", "Path"]], "cloudshell.api.cloudshell_api.ResourceAttribute": [[1, 2, 1, "", "Name"], [1, 2, 1, "", "Type"], [1, 2, 1, "", "Value"]], "cloudshell.api.cloudshell_api.ResourceCommandInfo": [[1, 2, 1, "", "Description"], [1, 2, 1, "", "DisplayName"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Parameters"], [1, 2, 1, "", "Tag"]], "cloudshell.api.cloudshell_api.ResourceCommandListInfo": [[1, 2, 1, "", "Commands"]], "cloudshell.api.cloudshell_api.ResourceConflictInfo": [[1, 2, 1, "", "ConflictPlannedEndTime"], [1, 2, 1, "", "ConflictStarted"], [1, 2, 1, "", "ConflictType"], [1, 2, 1, "", "ConflictWith"], [1, 2, 1, "", "ConflictWithUser"], [1, 2, 1, "", "ResourceName"], [1, 2, 1, "", "Topology"]], "cloudshell.api.cloudshell_api.ResourceDiagramLayoutInfo": [[1, 2, 1, "", "ResourceName"], [1, 2, 1, "", "X"], [1, 2, 1, "", "Y"]], "cloudshell.api.cloudshell_api.ResourceInfo": [[1, 2, 1, "", "Address"], [1, 2, 1, "", "ChildResources"], [1, 2, 1, "", "Connections"], [1, 2, 1, "", "CreatedByUser"], [1, 2, 1, "", "CreatedInDomain"], [1, 2, 1, "", "CreatedInReservation"], [1, 2, 1, "", "CreatedInReservationId"], [1, 2, 1, "", "Description"], [1, 2, 1, "", "Domains"], [1, 2, 1, "", "DriverName"], [1, 2, 1, "", "Excluded"], [1, 2, 1, "", "FolderFullPath"], [1, 2, 1, "", "FullAddress"], [1, 2, 1, "", "LockInfo"], [1, 2, 1, "", "Locked"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Permission"], [1, 2, 1, "", "ResourceAttributes"], [1, 2, 1, "", "ResourceFamilyName"], [1, 2, 1, "", "ResourceLiveStatusDescription"], [1, 2, 1, "", "ResourceLiveStatusName"], [1, 2, 1, "", "ResourceModelName"], [1, 2, 1, "", "RootAddress"], [1, 2, 1, "", "UniqeIdentifier"], [1, 2, 1, "", "VmDetails"]], "cloudshell.api.cloudshell_api.ResourceInfoVmDetails": [[1, 2, 1, "", "CloudProviderFullName"], [1, 2, 1, "", "InstanceData"], [1, 2, 1, "", "NetworkData"], [1, 2, 1, "", "UID"], [1, 2, 1, "", "VmCustomParams"]], "cloudshell.api.cloudshell_api.ResourceListInfo": [[1, 2, 1, "", "Resources"]], "cloudshell.api.cloudshell_api.ResourceLiveStatusInfo": [[1, 2, 1, "", "liveStatusDescription"], [1, 2, 1, "", "liveStatusName"]], "cloudshell.api.cloudshell_api.ResourceLockInfo": [[1, 2, 1, "", "Created"], [1, 2, 1, "", "MachineName"], [1, 2, 1, "", "ReservationName"], [1, 2, 1, "", "Username"]], "cloudshell.api.cloudshell_api.ResourceMappingsInfo": [[1, 2, 1, "", "Mapping"]], "cloudshell.api.cloudshell_api.ResourceShortInfo": [[1, 2, 1, "", "Address"], [1, 2, 1, "", "Excluded"], [1, 2, 1, "", "FolderFullPath"], [1, 2, 1, "", "FullAddress"], [1, 2, 1, "", "LockInfo"], [1, 2, 1, "", "Locked"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Permission"], [1, 2, 1, "", "ResourceFamilyName"], [1, 2, 1, "", "ResourceModelName"], [1, 2, 1, "", "RootAddress"]], "cloudshell.api.cloudshell_api.ResourcesUsageSummaryInfo": [[1, 2, 1, "", "NumOfNotInReservation"], [1, 2, 1, "", "NumOfReserved"], [1, 2, 1, "", "NumOfShared"], [1, 2, 1, "", "ResourceFullName"]], "cloudshell.api.cloudshell_api.RouteAttributeInfo": [[1, 2, 1, "", "AttributeName"], [1, 2, 1, "", "AttributeValue"]], "cloudshell.api.cloudshell_api.RouteConfigurationInfo": [[1, 2, 1, "", "Duplex"], [1, 2, 1, "", "Interface"], [1, 2, 1, "", "Speed"], [1, 2, 1, "", "SpeedSetting"]], "cloudshell.api.cloudshell_api.RouteInfo": [[1, 2, 1, "", "Alias"], [1, 2, 1, "", "Attributes"], [1, 2, 1, "", "IsTap"], [1, 2, 1, "", "RouteConfiguration"], [1, 2, 1, "", "RouteType"], [1, 2, 1, "", "Segments"], [1, 2, 1, "", "Shared"], [1, 2, 1, "", "Source"], [1, 2, 1, "", "Target"]], "cloudshell.api.cloudshell_api.RouteSegmentInfo": [[1, 2, 1, "", "Source"], [1, 2, 1, "", "Target"]], "cloudshell.api.cloudshell_api.SandboxDataKeyValueInfo": [[1, 2, 1, "", "Key"], [1, 2, 1, "", "Value"]], "cloudshell.api.cloudshell_api.SaveSandboxResponseInfo": [[1, 2, 1, "", "SavedSandboxId"]], "cloudshell.api.cloudshell_api.SavedSandboxInfo": [[1, 2, 1, "", "CreateDate"], [1, 2, 1, "", "Description"], [1, 2, 1, "", "DomainName"], [1, 2, 1, "", "Id"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "OriginatingBlueprintName"], [1, 2, 1, "", "OriginatingSandboxId"], [1, 2, 1, "", "OriginatingSandboxName"], [1, 2, 1, "", "Owner"], [1, 2, 1, "", "State"]], "cloudshell.api.cloudshell_api.ServerTimeInfo": [[1, 2, 1, "", "ServerDateTime"]], "cloudshell.api.cloudshell_api.ServiceAttribute": [[1, 2, 1, "", "DefaultValue"], [1, 2, 1, "", "IsRequired"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "PossibleValues"], [1, 2, 1, "", "RestrictedValues"], [1, 2, 1, "", "Type"]], "cloudshell.api.cloudshell_api.ServiceInfo": [[1, 2, 1, "", "Attributes"], [1, 2, 1, "", "CategoryFullPath"], [1, 2, 1, "", "Description"], [1, 2, 1, "", "Name"]], "cloudshell.api.cloudshell_api.ServiceInstance": [[1, 2, 1, "", "Address"], [1, 2, 1, "", "Alias"], [1, 2, 1, "", "Attributes"], [1, 2, 1, "", "ServiceName"]], "cloudshell.api.cloudshell_api.ServicesListInfo": [[1, 2, 1, "", "Services"]], "cloudshell.api.cloudshell_api.SetSecurityGroupInfo": [[1, 2, 1, "", "AppName"], [1, 2, 1, "", "Error"], [1, 2, 1, "", "Success"]], "cloudshell.api.cloudshell_api.SetSecurityGroupsInfo": [[1, 2, 1, "", "ResultItems"]], "cloudshell.api.cloudshell_api.TestShellDomainInfo": [[1, 2, 1, "", "Description"], [1, 2, 1, "", "Id"], [1, 2, 1, "", "Name"]], "cloudshell.api.cloudshell_api.TimeZoneDefinition": [[1, 2, 1, "", "DisplayName"], [1, 2, 1, "", "Id"]], "cloudshell.api.cloudshell_api.TopologiesByCategoryInfo": [[1, 2, 1, "", "Topologies"]], "cloudshell.api.cloudshell_api.TopologiesResourcesAttributesInfo": [[1, 2, 1, "", "Alias"], [1, 2, 1, "", "AttributeName"], [1, 2, 1, "", "AttributeValue"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "TopologyName"], [1, 2, 1, "", "Usage"]], "cloudshell.api.cloudshell_api.Topology": [[1, 2, 1, "", "Description"], [1, 2, 1, "", "Name"]], "cloudshell.api.cloudshell_api.TopologyAbstractResourceInfo": [[1, 2, 1, "", "Alias"], [1, 2, 1, "", "Attributes"], [1, 2, 1, "", "Quantity"], [1, 2, 1, "", "RequiredAttributes"], [1, 2, 1, "", "ResourceFamilyName"], [1, 2, 1, "", "ResourceModelName"], [1, 2, 1, "", "Valid"], [1, 2, 1, "", "WillBeLocked"]], "cloudshell.api.cloudshell_api.TopologyAdditionalInfoInputsInfo": [[1, 2, 1, "", "LinkedToGlobal"], [1, 2, 1, "", "ResourceName"]], "cloudshell.api.cloudshell_api.TopologyAppResourceInfo": [[1, 2, 1, "", "DeploymentPaths"], [1, 2, 1, "", "Description"], [1, 2, 1, "", "LogicalResource"], [1, 2, 1, "", "Name"]], "cloudshell.api.cloudshell_api.TopologyCategoryInfo": [[1, 2, 1, "", "Name"], [1, 2, 1, "", "Value"]], "cloudshell.api.cloudshell_api.TopologyCommandInfo": [[1, 2, 1, "", "Description"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Parameters"]], "cloudshell.api.cloudshell_api.TopologyCommandListInfo": [[1, 2, 1, "", "Commands"]], "cloudshell.api.cloudshell_api.TopologyInfo": [[1, 2, 1, "", "AbstractResources"], [1, 2, 1, "", "AdditionalInfoInputs"], [1, 2, 1, "", "Alias"], [1, 2, 1, "", "Apps"], [1, 2, 1, "", "Connectors"], [1, 2, 1, "", "CreateDate"], [1, 2, 1, "", "DefaultDurationSeconds"], [1, 2, 1, "", "Description"], [1, 2, 1, "", "Driver"], [1, 2, 1, "", "EstimatedSetupDuration"], [1, 2, 1, "", "EstimatedTearDownDuration"], [1, 2, 1, "", "GlobalInputs"], [1, 2, 1, "", "Instructions"], [1, 2, 1, "", "IsPersistentSandbox"], [1, 2, 1, "", "IsPublic"], [1, 2, 1, "", "MaxDuration"], [1, 2, 1, "", "ModificationDate"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Owner"], [1, 2, 1, "", "ParentTopology"], [1, 2, 1, "", "PermittedEditors"], [1, 2, 1, "", "RequirementsInputs"], [1, 2, 1, "", "Resources"], [1, 2, 1, "", "Routes"], [1, 2, 1, "", "Services"], [1, 2, 1, "", "State"], [1, 2, 1, "", "Type"]], "cloudshell.api.cloudshell_api.TopologyInputsInfo": [[1, 2, 1, "", "AttributeId"], [1, 2, 1, "", "AttributeName"], [1, 2, 1, "", "DefaultValue"], [1, 2, 1, "", "Description"], [1, 2, 1, "", "ParamName"], [1, 2, 1, "", "PossibleValues"]], "cloudshell.api.cloudshell_api.TopologyInstructionsInfo": [[1, 2, 1, "", "Instructions"], [1, 2, 1, "", "TopologyName"]], "cloudshell.api.cloudshell_api.TopologyListInfo": [[1, 2, 1, "", "Topologies"]], "cloudshell.api.cloudshell_api.TopologyRequirementsInputsInfo": [[1, 2, 1, "", "InputType"], [1, 2, 1, "", "LinkedToGlobal"], [1, 2, 1, "", "ResourceName"]], "cloudshell.api.cloudshell_api.TopologyReservedResourceInfo": [[1, 2, 1, "", "Alias"], [1, 2, 1, "", "TopologyName"]], "cloudshell.api.cloudshell_api.TopologyResourceInfo": [[1, 2, 1, "", "Address"], [1, 2, 1, "", "Alias"], [1, 2, 1, "", "Connections"], [1, 2, 1, "", "Excluded"], [1, 2, 1, "", "FolderFullPath"], [1, 2, 1, "", "FullAddress"], [1, 2, 1, "", "LockInfo"], [1, 2, 1, "", "Locked"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "ResourceAttributes"], [1, 2, 1, "", "ResourceFamilyName"], [1, 2, 1, "", "ResourceModelName"], [1, 2, 1, "", "RootAddress"], [1, 2, 1, "", "WillBeLocked"]], "cloudshell.api.cloudshell_api.TopologyRoutesInfo": [[1, 2, 1, "", "Routes"], [1, 2, 1, "", "TopologyName"]], "cloudshell.api.cloudshell_api.TopologyShortInfo": [[1, 2, 1, "", "Alias"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "State"], [1, 2, 1, "", "Type"]], "cloudshell.api.cloudshell_api.TopologyUrl": [[1, 2, 1, "", "DomainName"], [1, 2, 1, "", "EncodedHtmlUri"]], "cloudshell.api.cloudshell_api.TopologyUrlsInfo": [[1, 2, 1, "", "Alias"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "TopologyUrls"]], "cloudshell.api.cloudshell_api.UsageDetails": [[1, 2, 1, "", "Id"], [1, 2, 1, "", "Name"]], "cloudshell.api.cloudshell_api.UserInfo": [[1, 2, 1, "", "DisplayLanguage"], [1, 2, 1, "", "DomainName"], [1, 2, 1, "", "Email"], [1, 2, 1, "", "Groups"], [1, 2, 1, "", "IsActive"], [1, 2, 1, "", "IsAdmin"], [1, 2, 1, "", "IsDomainAdmin"], [1, 2, 1, "", "MaxConcurrentReservations"], [1, 2, 1, "", "MaxOwnedBlueprints"], [1, 2, 1, "", "MaxReservationDuration"], [1, 2, 1, "", "MaxSavedSandboxes"], [1, 2, 1, "", "MaxScheduledSandboxes"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "Timezone"]], "cloudshell.api.cloudshell_api.UsersInfo": [[1, 2, 1, "", "Users"]], "cloudshell.api.cloudshell_api.UtilizationReport": [[1, 2, 1, "", "UtilizationReportRows"]], "cloudshell.api.cloudshell_api.UtilizationReportRow": [[1, 2, 1, "", "Children"], [1, 2, 1, "", "Family"], [1, 2, 1, "", "Model"], [1, 2, 1, "", "Name"], [1, 2, 1, "", "ParentId"], [1, 2, 1, "", "Utilization"]], "cloudshell.api.cloudshell_api.VisualConnectorsInfo": [[1, 2, 1, "", "Connectors"]], "cloudshell.api.cloudshell_api.VmCustomParam": [[1, 2, 1, "", "Name"], [1, 2, 1, "", "Value"]], "cloudshell.api.cloudshell_api.VmDetailsNetworkInterface": [[1, 2, 1, "", "AdditionalData"], [1, 2, 1, "", "IsPrimary"], [1, 2, 1, "", "NetworkId"]], "cloudshell.api.cloudshell_api.VmInstanceParam": [[1, 2, 1, "", "Name"], [1, 2, 1, "", "Value"]], "cloudshell.api.common_cloudshell_api": [[1, 5, 1, "", "CloudShellAPIError"], [1, 1, 1, "", "CommonAPIRequest"], [1, 1, 1, "", "CommonAPISession"], [1, 1, 1, "", "CommonApiResult"], [1, 1, 1, "", "CommonResponseInfo"], [1, 1, 1, "", "XMLWrapper"]], "cloudshell.api.common_cloudshell_api.CommonAPIRequest": [[1, 3, 1, "", "toContainer"]], "cloudshell.api.common_cloudshell_api.CommonAPISession": [[1, 3, 1, "", "generateAPIRequest"]], "cloudshell.api.common_cloudshell_api.CommonApiResult": [[1, 3, 1, "", "importAPIClass"]], "cloudshell.api.common_cloudshell_api.XMLWrapper": [[1, 3, 1, "", "getAllChildNode"], [1, 3, 1, "", "getAllChildNodeByAttr"], [1, 3, 1, "", "getChildNode"], [1, 3, 1, "", "getChildNodeByAttr"], [1, 3, 1, "", "getNodeAttr"], [1, 3, 1, "", "getNodeName"], [1, 3, 1, "", "getNodePrefix"], [1, 3, 1, "", "getNodeText"], [1, 3, 1, "", "getRootNode"], [1, 3, 1, "", "getStringFromXML"], [1, 3, 1, "", "parseXML"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:property", "5": "py:exception"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "property", "Python property"], "5": ["py", "exception", "Python exception"]}, "titleterms": {"cloudshell": [0, 1, 2, 3], "packag": [0, 1, 2], "subpackag": [0, 2], "modul": [0, 1, 2], "content": [0, 1, 2], "api": [1, 3], "submodul": 1, "cloudshell_api": 1, "common_cloudshell_api": 1, "helper": 2, "welcom": 3, "python": 3, "refer": 3, "guid": 3, "indic": 3, "tabl": 3}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1, "sphinx": 57}, "alltitles": {"cloudshell package": [[0, "cloudshell-package"]], "Subpackages": [[0, "subpackages"], [2, "subpackages"]], "Module contents": [[0, "module-cloudshell"], [1, "module-cloudshell.api"], [2, "module-cloudshell.helpers"]], "cloudshell.api package": [[1, "cloudshell-api-package"]], "Submodules": [[1, "submodules"]], "cloudshell.api.cloudshell_api module": [[1, "module-cloudshell.api.cloudshell_api"]], "cloudshell.api.common_cloudshell_api module": [[1, "module-cloudshell.api.common_cloudshell_api"]], "cloudshell.helpers package": [[2, "cloudshell-helpers-package"]], "Welcome to CloudShell Python API Reference Guide!": [[3, "welcome-to-cloudshell-python-api-reference-guide"]], "Indices and tables": [[3, "indices-and-tables"]]}, "indexentries": {"cloudshell": [[0, "module-cloudshell"]], "module": [[0, "module-cloudshell"], [1, "module-cloudshell.api"], [1, "module-cloudshell.api.cloudshell_api"], [1, "module-cloudshell.api.common_cloudshell_api"], [2, "module-cloudshell.helpers"]], "abstractresourceattribute (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AbstractResourceAttribute"]], "abstractresourcerequiredattribute (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AbstractResourceRequiredAttribute"]], "abstractresources (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.AbstractResources"]], "abstracttemplateshortinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AbstractTemplateShortInfo"]], "abstracttemplateshortinfolist (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AbstractTemplateShortInfoList"]], "abstracttemplates (cloudshell.api.cloudshell_api.abstracttemplateshortinfolist attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractTemplateShortInfoList.AbstractTemplates"]], "activatetopology() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ActivateTopology"]], "activeroutesinfo (cloudshell.api.cloudshell_api.reservationdescriptioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo.ActiveRoutesInfo"]], "activetopologyinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyInfo"]], "activetopologyresourceinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo"]], "actualendtime (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.ActualEndTime"]], "addapptoreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddAppToReservation"]], "addapptoreservationresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AddAppToReservationResponseInfo"]], "addattributerestrictedvalues() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddAttributeRestrictedValues"]], "addgroupstodomain() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddGroupsToDomain"]], "addnewdomain() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddNewDomain"]], "addnewgroup() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddNewGroup"]], "addnewuser() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddNewUser"]], "addpermittededitorstotopology() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddPermittedEditorsToTopology"]], "addpermitteduserstoreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddPermittedUsersToReservation"]], "addresourcestodomain() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddResourcesToDomain"]], "addresourcestoreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddResourcesToReservation"]], "addrestrictionrequest (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AddRestrictionRequest"]], "addroutestoreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddRoutesToReservation"]], "addservicetoreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddServiceToReservation"]], "addtopologiestodomain() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddTopologiesToDomain"]], "adduserstogroup() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddUsersToGroup"]], "addvaluetolookupattribute() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AddValueToLookupAttribute"]], "additionaldata (cloudshell.api.cloudshell_api.vmdetailsnetworkinterface attribute)": [[1, "cloudshell.api.cloudshell_api.VmDetailsNetworkInterface.AdditionalData"]], "additionaldataparam (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AdditionalDataParam"]], "additionalinfoinputs (cloudshell.api.cloudshell_api.getreservationinputsresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetReservationInputsResponseInfo.AdditionalInfoInputs"]], "additionalinfoinputs (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.AdditionalInfoInputs"]], "address (cloudshell.api.cloudshell_api.activetopologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo.Address"]], "address (cloudshell.api.cloudshell_api.findresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo.Address"]], "address (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.Address"]], "address (cloudshell.api.cloudshell_api.resourceshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceShortInfo.Address"]], "address (cloudshell.api.cloudshell_api.serviceinstance attribute)": [[1, "cloudshell.api.cloudshell_api.ServiceInstance.Address"]], "address (cloudshell.api.cloudshell_api.topologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo.Address"]], "alias (cloudshell.api.cloudshell_api.activetopologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo.Alias"]], "alias (cloudshell.api.cloudshell_api.appconfigurationmanagement attribute)": [[1, "cloudshell.api.cloudshell_api.AppConfigurationManagement.Alias"]], "alias (cloudshell.api.cloudshell_api.appvisualconnector attribute)": [[1, "cloudshell.api.cloudshell_api.AppVisualConnector.Alias"]], "alias (cloudshell.api.cloudshell_api.connector attribute)": [[1, "cloudshell.api.cloudshell_api.Connector.Alias"]], "alias (cloudshell.api.cloudshell_api.routeinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteInfo.Alias"]], "alias (cloudshell.api.cloudshell_api.serviceinstance attribute)": [[1, "cloudshell.api.cloudshell_api.ServiceInstance.Alias"]], "alias (cloudshell.api.cloudshell_api.topologiesresourcesattributesinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologiesResourcesAttributesInfo.Alias"]], "alias (cloudshell.api.cloudshell_api.topologyabstractresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyAbstractResourceInfo.Alias"]], "alias (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.Alias"]], "alias (cloudshell.api.cloudshell_api.topologyreservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyReservedResourceInfo.Alias"]], "alias (cloudshell.api.cloudshell_api.topologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo.Alias"]], "alias (cloudshell.api.cloudshell_api.topologyshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyShortInfo.Alias"]], "alias (cloudshell.api.cloudshell_api.topologyurlsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyUrlsInfo.Alias"]], "ansibleinventorygroups (cloudshell.api.cloudshell_api.appconfigurationmanagement attribute)": [[1, "cloudshell.api.cloudshell_api.AppConfigurationManagement.AnsibleInventoryGroups"]], "apieditapprequest (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ApiEditAppRequest"]], "appconfiguration (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AppConfiguration"]], "appconfigurationconnection (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AppConfigurationConnection"]], "appconfigurationconnection (cloudshell.api.cloudshell_api.appconfigurationmanagement attribute)": [[1, "cloudshell.api.cloudshell_api.AppConfigurationManagement.AppConfigurationConnection"]], "appconfigurationdata (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AppConfigurationData"]], "appconfigurationmanagement (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AppConfigurationManagement"]], "appconfigurationmanagements (cloudshell.api.cloudshell_api.reservationappresource attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationAppResource.AppConfigurationManagements"]], "appdeploymentyinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AppDeploymentyInfo"]], "appdeploymentyinfo (cloudshell.api.cloudshell_api.bulkappdeploymentyresultitem attribute)": [[1, "cloudshell.api.cloudshell_api.BulkAppDeploymentyResultItem.AppDeploymentyInfo"]], "appdetails (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AppDetails"]], "appdetails (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.AppDetails"]], "appinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AppInfo"]], "appname (cloudshell.api.cloudshell_api.appinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AppInfo.AppName"]], "appname (cloudshell.api.cloudshell_api.bulkappdeploymentyresultitem attribute)": [[1, "cloudshell.api.cloudshell_api.BulkAppDeploymentyResultItem.AppName"]], "appname (cloudshell.api.cloudshell_api.configureappinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ConfigureAppInfo.AppName"]], "appname (cloudshell.api.cloudshell_api.setsecuritygroupinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SetSecurityGroupInfo.AppName"]], "apptemplateimage (cloudshell.api.cloudshell_api.getreservationappimageresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetReservationAppImageResponseInfo.AppTemplateImage"]], "apptemplatename (cloudshell.api.cloudshell_api.reservationappresource attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationAppResource.AppTemplateName"]], "apptemplatename (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.AppTemplateName"]], "appvisualconnector (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AppVisualConnector"]], "approvalrequestresponseinfos (cloudshell.api.cloudshell_api.getallapprovalrequestsresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetAllApprovalRequestsResponseInfo.ApprovalRequestResponseInfos"]], "approveapprovalrequest() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ApproveApprovalRequest"]], "approvenotes (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.ApproveNotes"]], "apps (cloudshell.api.cloudshell_api.reservationappsresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationAppsResponseInfo.Apps"]], "apps (cloudshell.api.cloudshell_api.reservationdescriptioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo.Apps"]], "apps (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.Apps"]], "archivedomain() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ArchiveDomain"]], "archived (cloudshell.api.cloudshell_api.domaininfo attribute)": [[1, "cloudshell.api.cloudshell_api.DomainInfo.Archived"]], "attribute (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.Attribute"]], "attributeid (cloudshell.api.cloudshell_api.topologyinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInputsInfo.AttributeId"]], "attributename (cloudshell.api.cloudshell_api.routeattributeinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteAttributeInfo.AttributeName"]], "attributename (cloudshell.api.cloudshell_api.topologiesresourcesattributesinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologiesResourcesAttributesInfo.AttributeName"]], "attributename (cloudshell.api.cloudshell_api.topologyinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInputsInfo.AttributeName"]], "attributenamevalue (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AttributeNameValue"]], "attributevalue (cloudshell.api.cloudshell_api.routeattributeinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteAttributeInfo.AttributeValue"]], "attributevalue (cloudshell.api.cloudshell_api.topologiesresourcesattributesinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologiesResourcesAttributesInfo.AttributeValue"]], "attributevalueinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.AttributeValueInfo"]], "attributes (cloudshell.api.cloudshell_api.appvisualconnector attribute)": [[1, "cloudshell.api.cloudshell_api.AppVisualConnector.Attributes"]], "attributes (cloudshell.api.cloudshell_api.connector attribute)": [[1, "cloudshell.api.cloudshell_api.Connector.Attributes"]], "attributes (cloudshell.api.cloudshell_api.deploymentserviceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.DeploymentServiceInfo.Attributes"]], "attributes (cloudshell.api.cloudshell_api.logicalresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.LogicalResourceInfo.Attributes"]], "attributes (cloudshell.api.cloudshell_api.routeinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteInfo.Attributes"]], "attributes (cloudshell.api.cloudshell_api.serviceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ServiceInfo.Attributes"]], "attributes (cloudshell.api.cloudshell_api.serviceinstance attribute)": [[1, "cloudshell.api.cloudshell_api.ServiceInstance.Attributes"]], "attributes (cloudshell.api.cloudshell_api.topologyabstractresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyAbstractResourceInfo.Attributes"]], "authentication (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.Authentication"]], "autoload() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.AutoLoad"]], "availability (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.Availability"]], "blueprinttemplates (cloudshell.api.cloudshell_api.entityusage attribute)": [[1, "cloudshell.api.cloudshell_api.EntityUsage.BlueprintTemplates"]], "blueprints (cloudshell.api.cloudshell_api.entityusage attribute)": [[1, "cloudshell.api.cloudshell_api.EntityUsage.Blueprints"]], "booked (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.Booked"]], "booked (cloudshell.api.cloudshell_api.reservationslimstatus attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationSlimStatus.Booked"]], "bulkappdeploymentyinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.BulkAppDeploymentyInfo"]], "bulkappdeploymentyresultitem (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.BulkAppDeploymentyResultItem"]], "categories (cloudshell.api.cloudshell_api.categoriesoftopologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CategoriesOfTopologyInfo.Categories"]], "categories (cloudshell.api.cloudshell_api.categorylistbriefinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CategoryListBriefInfo.Categories"]], "categories (cloudshell.api.cloudshell_api.categorylistinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CategoryListInfo.Categories"]], "categoriesoftopologyinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CategoriesOfTopologyInfo"]], "categoryfullpath (cloudshell.api.cloudshell_api.serviceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ServiceInfo.CategoryFullPath"]], "categoryinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CategoryInfo"]], "categorylistbriefinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CategoryListBriefInfo"]], "categorylistinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CategoryListInfo"]], "changereservationowner() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ChangeReservationOwner"]], "checkoutfrompool() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CheckoutFromPool"]], "checkoutfrompoolinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CheckoutFromPoolInfo"]], "childresources (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.ChildResources"]], "children (cloudshell.api.cloudshell_api.utilizationreportrow attribute)": [[1, "cloudshell.api.cloudshell_api.UtilizationReportRow.Children"]], "cleanupsandboxconnectivity() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CleanupSandboxConnectivity"]], "clearandresetconsole() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ClearAndResetConsole"]], "clearsandboxdata() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ClearSandboxData"]], "cloudprovider (cloudshell.api.cloudshell_api.deploymentserviceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.DeploymentServiceInfo.CloudProvider"]], "cloudproviderfullname (cloudshell.api.cloudshell_api.resourceinfovmdetails attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfoVmDetails.CloudProviderFullName"]], "cloudproviderresourcename (cloudshell.api.cloudshell_api.appdeploymentyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AppDeploymentyInfo.CloudProviderResourceName"]], "cloudshellapierror": [[1, "cloudshell.api.common_cloudshell_api.CloudShellAPIError"]], "cloudshellapisession (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession"]], "commandexecutioncancelledresultinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CommandExecutionCancelledResultInfo"]], "commandexecutioncompletedresultinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CommandExecutionCompletedResultInfo"]], "commandexecutionfailedresultinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CommandExecutionFailedResultInfo"]], "commandexecutionidresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CommandExecutionIdResponseInfo"]], "commandexecutionresultinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CommandExecutionResultInfo"]], "commandexecutionresultlistinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CommandExecutionResultListInfo"]], "commandnames (cloudshell.api.cloudshell_api.commandnameslistinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CommandNamesListInfo.CommandNames"]], "commandnameslistinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CommandNamesListInfo"]], "commandparameter (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CommandParameter"]], "commands (cloudshell.api.cloudshell_api.environmentcommandlistinfo attribute)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandListInfo.Commands"]], "commands (cloudshell.api.cloudshell_api.resourcecommandlistinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceCommandListInfo.Commands"]], "commands (cloudshell.api.cloudshell_api.topologycommandlistinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyCommandListInfo.Commands"]], "commonapirequest (class in cloudshell.api.common_cloudshell_api)": [[1, "cloudshell.api.common_cloudshell_api.CommonAPIRequest"]], "commonapisession (class in cloudshell.api.common_cloudshell_api)": [[1, "cloudshell.api.common_cloudshell_api.CommonAPISession"]], "commonapiresult (class in cloudshell.api.common_cloudshell_api)": [[1, "cloudshell.api.common_cloudshell_api.CommonApiResult"]], "commonresponseinfo (class in cloudshell.api.common_cloudshell_api)": [[1, "cloudshell.api.common_cloudshell_api.CommonResponseInfo"]], "configparam (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ConfigParam"]], "configuration (cloudshell.api.cloudshell_api.exportconfigurationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ExportConfigurationInfo.Configuration"]], "configurationmanagementdata (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ConfigurationManagementData"]], "configureappinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ConfigureAppInfo"]], "configureapps() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ConfigureApps"]], "configureappsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ConfigureAppsInfo"]], "configureappsv2() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ConfigureAppsV2"]], "conflictplannedendtime (cloudshell.api.cloudshell_api.resourceconflictinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceConflictInfo.ConflictPlannedEndTime"]], "conflictstarted (cloudshell.api.cloudshell_api.resourceconflictinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceConflictInfo.ConflictStarted"]], "conflicttype (cloudshell.api.cloudshell_api.resourceconflictinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceConflictInfo.ConflictType"]], "conflictwith (cloudshell.api.cloudshell_api.resourceconflictinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceConflictInfo.ConflictWith"]], "conflictwithuser (cloudshell.api.cloudshell_api.resourceconflictinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceConflictInfo.ConflictWithUser"]], "conflicts (cloudshell.api.cloudshell_api.reservationdescriptioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo.Conflicts"]], "conflicts (cloudshell.api.cloudshell_api.reserveresourcesresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReserveResourcesResponseInfo.Conflicts"]], "conflicts (cloudshell.api.cloudshell_api.reservetopologyresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReserveTopologyResponseInfo.Conflicts"]], "connectroutesinreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ConnectRoutesInReservation"]], "connectedto (cloudshell.api.cloudshell_api.findresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo.ConnectedTo"]], "connection (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.Connection"]], "connectionmethod (cloudshell.api.cloudshell_api.appconfigurationmanagement attribute)": [[1, "cloudshell.api.cloudshell_api.AppConfigurationManagement.ConnectionMethod"]], "connections (cloudshell.api.cloudshell_api.activetopologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo.Connections"]], "connections (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.Connections"]], "connections (cloudshell.api.cloudshell_api.topologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo.Connections"]], "connector (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.Connector"]], "connectors (cloudshell.api.cloudshell_api.activetopologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyInfo.Connectors"]], "connectors (cloudshell.api.cloudshell_api.reservationdescriptioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo.Connectors"]], "connectors (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.Connectors"]], "connectors (cloudshell.api.cloudshell_api.visualconnectorsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.VisualConnectorsInfo.Connectors"]], "consumeapprovalrequest() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ConsumeApprovalRequest"]], "contentarray (cloudshell.api.cloudshell_api.contentlistinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ContentListInfo.ContentArray"]], "contentlistinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ContentListInfo"]], "contentshortinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ContentShortInfo"]], "copydomainsresources() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CopyDomainsResources"]], "createapprovalrequestresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CreateApprovalRequestResponseInfo"]], "createblueprintapprovalrequest() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CreateBlueprintApprovalRequest"]], "createdate (cloudshell.api.cloudshell_api.abstracttemplateshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractTemplateShortInfo.CreateDate"]], "createdate (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.CreateDate"]], "createdate (cloudshell.api.cloudshell_api.savedsandboxinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SavedSandboxInfo.CreateDate"]], "createdate (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.CreateDate"]], "createdraft() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CreateDraft"]], "createfolder() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CreateFolder"]], "createimmediatepersistentreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CreateImmediatePersistentReservation"]], "createimmediatereservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CreateImmediateReservation"]], "createimmediatetopologyreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CreateImmediateTopologyReservation"]], "createpersistentreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CreatePersistentReservation"]], "createreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CreateReservation"]], "createreservationresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.CreateReservationResponseInfo"]], "createresource() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CreateResource"]], "createresources() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CreateResources"]], "createrouteinreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CreateRouteInReservation"]], "createroutesinreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CreateRoutesInReservation"]], "createtopologyreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.CreateTopologyReservation"]], "created (cloudshell.api.cloudshell_api.reservationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationInfo.Created"]], "created (cloudshell.api.cloudshell_api.resourcelockinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceLockInfo.Created"]], "createdbyuser (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.CreatedByUser"]], "createdbyuser (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.CreatedByUser"]], "createdindomain (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.CreatedInDomain"]], "createdindomain (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.CreatedInDomain"]], "createdinreservation (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.CreatedInReservation"]], "createdinreservation (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.CreatedInReservation"]], "createdinreservationid (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.CreatedInReservationId"]], "creationdate (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.CreationDate"]], "credentials (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.Credentials"]], "decryptpassword() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DecryptPassword"]], "defaultdeployment (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.DefaultDeployment"]], "defaultdurationseconds (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.DefaultDurationSeconds"]], "defaultvalue (cloudshell.api.cloudshell_api.commandparameter attribute)": [[1, "cloudshell.api.cloudshell_api.CommandParameter.DefaultValue"]], "defaultvalue (cloudshell.api.cloudshell_api.environmentcommandparameter attribute)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandParameter.DefaultValue"]], "defaultvalue (cloudshell.api.cloudshell_api.serviceattribute attribute)": [[1, "cloudshell.api.cloudshell_api.ServiceAttribute.DefaultValue"]], "defaultvalue (cloudshell.api.cloudshell_api.topologyinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInputsInfo.DefaultValue"]], "deleteapprovalrequest() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DeleteApprovalRequest"]], "deletedomain() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DeleteDomain"]], "deletedraft() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DeleteDraft"]], "deletefolder() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DeleteFolder"]], "deletegroup() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DeleteGroup"]], "deletereservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DeleteReservation"]], "deleteresource() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DeleteResource"]], "deleteresourcetemplate() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DeleteResourceTemplate"]], "deleteresources() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DeleteResources"]], "deletesavedsandbox() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DeleteSavedSandbox"]], "deletetopology() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DeleteTopology"]], "deleteuser() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DeleteUser"]], "deployappinput (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.DeployAppInput"]], "deployapptocloudprovider() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DeployAppToCloudProvider"]], "deployapptocloudproviderbulk() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DeployAppToCloudProviderBulk"]], "deployment (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.Deployment"]], "deploymentpathinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.DeploymentPathInfo"]], "deploymentpaths (cloudshell.api.cloudshell_api.reservationappresource attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationAppResource.DeploymentPaths"]], "deploymentpaths (cloudshell.api.cloudshell_api.topologyappresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyAppResourceInfo.DeploymentPaths"]], "deploymentservice (cloudshell.api.cloudshell_api.deploymentpathinfo attribute)": [[1, "cloudshell.api.cloudshell_api.DeploymentPathInfo.DeploymentService"]], "deploymentserviceinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.DeploymentServiceInfo"]], "description (cloudshell.api.cloudshell_api.abstracttemplateshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractTemplateShortInfo.Description"]], "description (cloudshell.api.cloudshell_api.categoryinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CategoryInfo.Description"]], "description (cloudshell.api.cloudshell_api.commandparameter attribute)": [[1, "cloudshell.api.cloudshell_api.CommandParameter.Description"]], "description (cloudshell.api.cloudshell_api.domain attribute)": [[1, "cloudshell.api.cloudshell_api.Domain.Description"]], "description (cloudshell.api.cloudshell_api.domaininfo attribute)": [[1, "cloudshell.api.cloudshell_api.DomainInfo.Description"]], "description (cloudshell.api.cloudshell_api.environmentcommandinfo attribute)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandInfo.Description"]], "description (cloudshell.api.cloudshell_api.environmentcommandparameter attribute)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandParameter.Description"]], "description (cloudshell.api.cloudshell_api.findresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo.Description"]], "description (cloudshell.api.cloudshell_api.group attribute)": [[1, "cloudshell.api.cloudshell_api.Group.Description"]], "description (cloudshell.api.cloudshell_api.groupinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GroupInfo.Description"]], "description (cloudshell.api.cloudshell_api.logicalresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.LogicalResourceInfo.Description"]], "description (cloudshell.api.cloudshell_api.logondomaininfo attribute)": [[1, "cloudshell.api.cloudshell_api.LogonDomainInfo.Description"]], "description (cloudshell.api.cloudshell_api.reservationappresource attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationAppResource.Description"]], "description (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.Description"]], "description (cloudshell.api.cloudshell_api.resourcecommandinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceCommandInfo.Description"]], "description (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.Description"]], "description (cloudshell.api.cloudshell_api.savedsandboxinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SavedSandboxInfo.Description"]], "description (cloudshell.api.cloudshell_api.serviceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ServiceInfo.Description"]], "description (cloudshell.api.cloudshell_api.testshelldomaininfo attribute)": [[1, "cloudshell.api.cloudshell_api.TestShellDomainInfo.Description"]], "description (cloudshell.api.cloudshell_api.topology attribute)": [[1, "cloudshell.api.cloudshell_api.Topology.Description"]], "description (cloudshell.api.cloudshell_api.topologyappresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyAppResourceInfo.Description"]], "description (cloudshell.api.cloudshell_api.topologycommandinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyCommandInfo.Description"]], "description (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.Description"]], "description (cloudshell.api.cloudshell_api.topologyinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInputsInfo.Description"]], "direction (cloudshell.api.cloudshell_api.connector attribute)": [[1, "cloudshell.api.cloudshell_api.Connector.Direction"]], "disconnectroutesinreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.DisconnectRoutesInReservation"]], "displaylanguage (cloudshell.api.cloudshell_api.userinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UserInfo.DisplayLanguage"]], "displayname (cloudshell.api.cloudshell_api.environmentcommandinfo attribute)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandInfo.DisplayName"]], "displayname (cloudshell.api.cloudshell_api.environmentcommandparameter attribute)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandParameter.DisplayName"]], "displayname (cloudshell.api.cloudshell_api.resourcecommandinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceCommandInfo.DisplayName"]], "displayname (cloudshell.api.cloudshell_api.timezonedefinition attribute)": [[1, "cloudshell.api.cloudshell_api.TimeZoneDefinition.DisplayName"]], "domain (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.Domain"]], "domain (cloudshell.api.cloudshell_api.logonresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.LogonResponseInfo.Domain"]], "domainid (cloudshell.api.cloudshell_api.logondomaininfo attribute)": [[1, "cloudshell.api.cloudshell_api.LogonDomainInfo.DomainId"]], "domaininfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.DomainInfo"]], "domainname (cloudshell.api.cloudshell_api.abstracttemplateshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractTemplateShortInfo.DomainName"]], "domainname (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.DomainName"]], "domainname (cloudshell.api.cloudshell_api.savedsandboxinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SavedSandboxInfo.DomainName"]], "domainname (cloudshell.api.cloudshell_api.topologyurl attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyUrl.DomainName"]], "domainname (cloudshell.api.cloudshell_api.userinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UserInfo.DomainName"]], "domains (cloudshell.api.cloudshell_api.abstracttemplateshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractTemplateShortInfo.Domains"]], "domains (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.Domains"]], "draftid (cloudshell.api.cloudshell_api.draftinfo attribute)": [[1, "cloudshell.api.cloudshell_api.DraftInfo.DraftId"]], "draftinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.DraftInfo"]], "driver (cloudshell.api.cloudshell_api.deploymentserviceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.DeploymentServiceInfo.Driver"]], "driver (cloudshell.api.cloudshell_api.logicalresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.LogicalResourceInfo.Driver"]], "driver (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.Driver"]], "drivername (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.DriverName"]], "duplex (cloudshell.api.cloudshell_api.routeconfigurationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteConfigurationInfo.Duplex"]], "duration (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.Duration"]], "editappsinreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.EditAppsInReservation"]], "email (cloudshell.api.cloudshell_api.userinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UserInfo.Email"]], "encodedhtmluri (cloudshell.api.cloudshell_api.topologyurl attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyUrl.EncodedHtmlUri"]], "end (cloudshell.api.cloudshell_api.numericrange attribute)": [[1, "cloudshell.api.cloudshell_api.NumericRange.End"]], "endpointconnectioninfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.EndPointConnectionInfo"]], "endreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.EndReservation"]], "endtime (cloudshell.api.cloudshell_api.findresourcereservationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceReservationInfo.EndTime"]], "endtime (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.EndTime"]], "endtime (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.EndTime"]], "endtime (cloudshell.api.cloudshell_api.reservationslimstatus attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationSlimStatus.EndTime"]], "enqueuecommand() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.EnqueueCommand"]], "enqueueenvironmentcommand() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.EnqueueEnvironmentCommand"]], "enqueueresourcecommand() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.EnqueueResourceCommand"]], "enqueueservicecommand() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.EnqueueServiceCommand"]], "enqueuetopologycommand() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.EnqueueTopologyCommand"]], "entityname (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.EntityName"]], "entityusage (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.EntityUsage"]], "enumvalues (cloudshell.api.cloudshell_api.commandparameter attribute)": [[1, "cloudshell.api.cloudshell_api.CommandParameter.EnumValues"]], "enumvalues (cloudshell.api.cloudshell_api.environmentcommandparameter attribute)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandParameter.EnumValues"]], "environmentcommandinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandInfo"]], "environmentcommandlistinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandListInfo"]], "environmentcommandparameter (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandParameter"]], "error (cloudshell.api.cloudshell_api.bulkappdeploymentyresultitem attribute)": [[1, "cloudshell.api.cloudshell_api.BulkAppDeploymentyResultItem.Error"]], "error (cloudshell.api.cloudshell_api.configureappinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ConfigureAppInfo.Error"]], "error (cloudshell.api.cloudshell_api.remapconnectionresultitem attribute)": [[1, "cloudshell.api.cloudshell_api.RemapConnectionResultItem.Error"]], "error (cloudshell.api.cloudshell_api.setsecuritygroupinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SetSecurityGroupInfo.Error"]], "errorcode (cloudshell.api.cloudshell_api.bulkappdeploymentyresultitem attribute)": [[1, "cloudshell.api.cloudshell_api.BulkAppDeploymentyResultItem.ErrorCode"]], "errorcode (cloudshell.api.cloudshell_api.configureappinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ConfigureAppInfo.ErrorCode"]], "errorcode (cloudshell.api.cloudshell_api.remapconnectionresultitem attribute)": [[1, "cloudshell.api.cloudshell_api.RemapConnectionResultItem.ErrorCode"]], "errordescription (cloudshell.api.cloudshell_api.commandexecutionfailedresultinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CommandExecutionFailedResultInfo.ErrorDescription"]], "errorname (cloudshell.api.cloudshell_api.commandexecutionfailedresultinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CommandExecutionFailedResultInfo.ErrorName"]], "errorparameter (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ErrorParameter"]], "errorparameters (cloudshell.api.cloudshell_api.commandexecutionfailedresultinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CommandExecutionFailedResultInfo.ErrorParameters"]], "estimatedsetupduration (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.EstimatedSetupDuration"]], "estimatedteardownduration (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.EstimatedTearDownDuration"]], "excluderesource() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ExcludeResource"]], "excluderesources() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ExcludeResources"]], "excluded (cloudshell.api.cloudshell_api.findresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo.Excluded"]], "excluded (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.Excluded"]], "excluded (cloudshell.api.cloudshell_api.resourceshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceShortInfo.Excluded"]], "excluded (cloudshell.api.cloudshell_api.topologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo.Excluded"]], "executecommand() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ExecuteCommand"]], "executeenvironmentcommand() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ExecuteEnvironmentCommand"]], "executeresourcecommand() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ExecuteResourceCommand"]], "executeresourceconnectedcommand() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ExecuteResourceConnectedCommand"]], "executeservicecommand() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ExecuteServiceCommand"]], "executetopologycommand() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ExecuteTopologyCommand"]], "exportconfigurationinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ExportConfigurationInfo"]], "exportfamiliesandmodels() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ExportFamiliesAndModels"]], "extendreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ExtendReservation"]], "family (cloudshell.api.cloudshell_api.logicalresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.LogicalResourceInfo.Family"]], "family (cloudshell.api.cloudshell_api.utilizationreportrow attribute)": [[1, "cloudshell.api.cloudshell_api.UtilizationReportRow.Family"]], "findresourceinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo"]], "findresourcelistinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.FindResourceListInfo"]], "findresourcereservationinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.FindResourceReservationInfo"]], "findresources() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.FindResources"]], "findresourcesintimerange() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.FindResourcesInTimeRange"]], "folderfullpath (cloudshell.api.cloudshell_api.activetopologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo.FolderFullPath"]], "folderfullpath (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.FolderFullPath"]], "folderfullpath (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.FolderFullPath"]], "folderfullpath (cloudshell.api.cloudshell_api.resourceshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceShortInfo.FolderFullPath"]], "folderfullpath (cloudshell.api.cloudshell_api.topologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo.FolderFullPath"]], "fulladdress (cloudshell.api.cloudshell_api.activetopologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo.FullAddress"]], "fulladdress (cloudshell.api.cloudshell_api.findresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo.FullAddress"]], "fulladdress (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.FullAddress"]], "fulladdress (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.FullAddress"]], "fulladdress (cloudshell.api.cloudshell_api.resourceshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceShortInfo.FullAddress"]], "fulladdress (cloudshell.api.cloudshell_api.topologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo.FullAddress"]], "fullname (cloudshell.api.cloudshell_api.findresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo.FullName"]], "fullpath (cloudshell.api.cloudshell_api.connection attribute)": [[1, "cloudshell.api.cloudshell_api.Connection.FullPath"]], "fullpath (cloudshell.api.cloudshell_api.findresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo.FullPath"]], "generateutilizationreport() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GenerateUtilizationReport"]], "getabstracttemplatelist() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetAbstractTemplateList"]], "getactivereservationsresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.GetActiveReservationsResponseInfo"]], "getactivetopologynames() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetActiveTopologyNames"]], "getallapprovalrequests() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetAllApprovalRequests"]], "getallapprovalrequestsresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.GetAllApprovalRequestsResponseInfo"]], "getallusersdetails() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetAllUsersDetails"]], "getapprovalrequest() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetApprovalRequest"]], "getapprovalrequestresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo"]], "getappsdetailsinreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetAppsDetailsInReservation"]], "getattributevalue() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetAttributeValue"]], "getcategories() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetCategories"]], "getcategoriesoftopology() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetCategoriesOfTopology"]], "getcurrentreservations() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetCurrentReservations"]], "getdomaindetails() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetDomainDetails"]], "getenvironmentcommands() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetEnvironmentCommands"]], "getfoldercontent() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetFolderContent"]], "getgroupdomains() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetGroupDomains"]], "getgroupsdetails() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetGroupsDetails"]], "getlockedresources() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetLockedResources"]], "getmodelusagereport() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetModelUsageReport"]], "getmodelusagereportresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.GetModelUsageReportResponseInfo"]], "getreservationappimage() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetReservationAppImage"]], "getreservationappimageresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.GetReservationAppImageResponseInfo"]], "getreservationdescriptionresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.GetReservationDescriptionResponseInfo"]], "getreservationdetails() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetReservationDetails"]], "getreservationinputs() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetReservationInputs"]], "getreservationinputsresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.GetReservationInputsResponseInfo"]], "getreservationremainingtime() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetReservationRemainingTime"]], "getreservationremainingtimeinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.GetReservationRemainingTimeInfo"]], "getreservationresourcespositions() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetReservationResourcesPositions"]], "getreservationservicespositions() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetReservationServicesPositions"]], "getreservationstatus() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetReservationStatus"]], "getreservationsinrangeresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.GetReservationsInRangeResponseInfo"]], "getreservationslivestatus() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetReservationsLiveStatus"]], "getresourceavailability() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetResourceAvailability"]], "getresourceavailabilityintimerange() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetResourceAvailabilityInTimeRange"]], "getresourcecommands() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetResourceCommands"]], "getresourceconnectedcommands() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetResourceConnectedCommands"]], "getresourcedetails() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetResourceDetails"]], "getresourcelist() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetResourceList"]], "getresourcelivestatus() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetResourceLiveStatus"]], "getresourcemappings() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetResourceMappings"]], "getroutesegments() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetRouteSegments"]], "getroutessolution() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetRoutesSolution"]], "getsandboxdata() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetSandboxData"]], "getsandboxdatainfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.GetSandboxDataInfo"]], "getsavedsandboxes() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetSavedSandboxes"]], "getsavedsandboxesresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.GetSavedSandboxesResponseInfo"]], "getscheduledreservations() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetScheduledReservations"]], "getserverdateandtime() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetServerDateAndTime"]], "getservertimezonesresponse (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.GetServerTimeZonesResponse"]], "getservicecommands() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetServiceCommands"]], "getservices() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetServices"]], "gettopologiesbycategory() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetTopologiesByCategory"]], "gettopologycategories() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetTopologyCategories"]], "gettopologycommands() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetTopologyCommands"]], "gettopologydetails() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetTopologyDetails"]], "gettopologyurls() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetTopologyUrls"]], "getuserdetails() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetUserDetails"]], "getvaluesforlookupattribute() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.GetValuesForLookupAttribute"]], "globalinputs (cloudshell.api.cloudshell_api.getreservationinputsresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetReservationInputsResponseInfo.GlobalInputs"]], "globalinputs (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.GlobalInputs"]], "group (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.Group"]], "groupinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.GroupInfo"]], "grouprole (cloudshell.api.cloudshell_api.groupinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GroupInfo.GroupRole"]], "groups (cloudshell.api.cloudshell_api.domaininfo attribute)": [[1, "cloudshell.api.cloudshell_api.DomainInfo.Groups"]], "groups (cloudshell.api.cloudshell_api.groupsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GroupsInfo.Groups"]], "groups (cloudshell.api.cloudshell_api.userinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UserInfo.Groups"]], "groupsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.GroupsInfo"]], "id (cloudshell.api.cloudshell_api.commandexecutionidresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CommandExecutionIdResponseInfo.Id"]], "id (cloudshell.api.cloudshell_api.createapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CreateApprovalRequestResponseInfo.Id"]], "id (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.Id"]], "id (cloudshell.api.cloudshell_api.reservationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationInfo.Id"]], "id (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.Id"]], "id (cloudshell.api.cloudshell_api.savedsandboxinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SavedSandboxInfo.Id"]], "id (cloudshell.api.cloudshell_api.testshelldomaininfo attribute)": [[1, "cloudshell.api.cloudshell_api.TestShellDomainInfo.Id"]], "id (cloudshell.api.cloudshell_api.timezonedefinition attribute)": [[1, "cloudshell.api.cloudshell_api.TimeZoneDefinition.Id"]], "id (cloudshell.api.cloudshell_api.usagedetails attribute)": [[1, "cloudshell.api.cloudshell_api.UsageDetails.Id"]], "includeresource() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.IncludeResource"]], "includeresources() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.IncludeResources"]], "inputnamevalue (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.InputNameValue"]], "inputtype (cloudshell.api.cloudshell_api.topologyrequirementsinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyRequirementsInputsInfo.InputType"]], "inputs (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.Inputs"]], "instancedata (cloudshell.api.cloudshell_api.resourceinfovmdetails attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfoVmDetails.InstanceData"]], "instructions (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.Instructions"]], "instructions (cloudshell.api.cloudshell_api.topologyinstructionsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInstructionsInfo.Instructions"]], "interface (cloudshell.api.cloudshell_api.routeconfigurationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteConfigurationInfo.Interface"]], "isactive (cloudshell.api.cloudshell_api.userinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UserInfo.IsActive"]], "isadmin (cloudshell.api.cloudshell_api.userinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UserInfo.IsAdmin"]], "isapprover (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.IsApprover"]], "isdefault (cloudshell.api.cloudshell_api.deploymentpathinfo attribute)": [[1, "cloudshell.api.cloudshell_api.DeploymentPathInfo.IsDefault"]], "isdomainadmin (cloudshell.api.cloudshell_api.userinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UserInfo.IsDomainAdmin"]], "ispersistentsandbox (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.IsPersistentSandbox"]], "isprimary (cloudshell.api.cloudshell_api.vmdetailsnetworkinterface attribute)": [[1, "cloudshell.api.cloudshell_api.VmDetailsNetworkInterface.IsPrimary"]], "ispublic (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.IsPublic"]], "isrequired (cloudshell.api.cloudshell_api.serviceattribute attribute)": [[1, "cloudshell.api.cloudshell_api.ServiceAttribute.IsRequired"]], "istap (cloudshell.api.cloudshell_api.routeinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteInfo.IsTap"]], "items (cloudshell.api.cloudshell_api.checkoutfrompoolinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CheckoutFromPoolInfo.Items"]], "key (cloudshell.api.cloudshell_api.sandboxdatakeyvalueinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SandboxDataKeyValueInfo.Key"]], "linkedtoglobal (cloudshell.api.cloudshell_api.reservedtopologyadditionalinfoinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedTopologyAdditionalInfoInputsInfo.LinkedToGlobal"]], "linkedtoglobal (cloudshell.api.cloudshell_api.reservedtopologyrequiredinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedTopologyRequiredInputsInfo.LinkedToGlobal"]], "linkedtoglobal (cloudshell.api.cloudshell_api.topologyadditionalinfoinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyAdditionalInfoInputsInfo.LinkedToGlobal"]], "linkedtoglobal (cloudshell.api.cloudshell_api.topologyrequirementsinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyRequirementsInputsInfo.LinkedToGlobal"]], "lockinfo (cloudshell.api.cloudshell_api.activetopologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo.LockInfo"]], "lockinfo (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.LockInfo"]], "lockinfo (cloudshell.api.cloudshell_api.resourceshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceShortInfo.LockInfo"]], "lockinfo (cloudshell.api.cloudshell_api.topologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo.LockInfo"]], "lockresource() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.LockResource"]], "lockresources() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.LockResources"]], "locked (cloudshell.api.cloudshell_api.activetopologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo.Locked"]], "locked (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.Locked"]], "locked (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.Locked"]], "locked (cloudshell.api.cloudshell_api.resourceshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceShortInfo.Locked"]], "locked (cloudshell.api.cloudshell_api.topologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo.Locked"]], "lockedresources (cloudshell.api.cloudshell_api.reservationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationInfo.LockedResources"]], "logicalresource (cloudshell.api.cloudshell_api.reservationappresource attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationAppResource.LogicalResource"]], "logicalresource (cloudshell.api.cloudshell_api.topologyappresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyAppResourceInfo.LogicalResource"]], "logicalresourceinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.LogicalResourceInfo"]], "logicalresourcename (cloudshell.api.cloudshell_api.appdeploymentyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AppDeploymentyInfo.LogicalResourceName"]], "logoff() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.Logoff"]], "logon() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.Logon"]], "logondomaininfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.LogonDomainInfo"]], "logonmanager (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.LogonManager"]], "logonresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.LogonResponseInfo"]], "logontokeninfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.LogonTokenInfo"]], "logouttnsession() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.LogoutTNSession"]], "lookupvalues (cloudshell.api.cloudshell_api.lookupvaluesinfo attribute)": [[1, "cloudshell.api.cloudshell_api.LookupValuesInfo.LookupValues"]], "lookupvaluesinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.LookupValuesInfo"]], "machinename (cloudshell.api.cloudshell_api.activetopologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyInfo.MachineName"]], "machinename (cloudshell.api.cloudshell_api.resourcelockinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceLockInfo.MachineName"]], "mandatory (cloudshell.api.cloudshell_api.commandparameter attribute)": [[1, "cloudshell.api.cloudshell_api.CommandParameter.Mandatory"]], "mandatory (cloudshell.api.cloudshell_api.environmentcommandparameter attribute)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandParameter.Mandatory"]], "mapports() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.MapPorts"]], "mapping (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.Mapping"]], "mapping (cloudshell.api.cloudshell_api.resourcemappingsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceMappingsInfo.Mapping"]], "maxconcurrentreservations (cloudshell.api.cloudshell_api.userinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UserInfo.MaxConcurrentReservations"]], "maxduration (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.MaxDuration"]], "maxownedblueprints (cloudshell.api.cloudshell_api.userinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UserInfo.MaxOwnedBlueprints"]], "maxreservationduration (cloudshell.api.cloudshell_api.userinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UserInfo.MaxReservationDuration"]], "maxsavedsandboxes (cloudshell.api.cloudshell_api.userinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UserInfo.MaxSavedSandboxes"]], "maxscheduledsandboxes (cloudshell.api.cloudshell_api.userinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UserInfo.MaxScheduledSandboxes"]], "message (cloudshell.api.cloudshell_api.commandexecutioncancelledresultinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CommandExecutionCancelledResultInfo.Message"]], "model (cloudshell.api.cloudshell_api.deploymentserviceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.DeploymentServiceInfo.Model"]], "model (cloudshell.api.cloudshell_api.logicalresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.LogicalResourceInfo.Model"]], "model (cloudshell.api.cloudshell_api.utilizationreportrow attribute)": [[1, "cloudshell.api.cloudshell_api.UtilizationReportRow.Model"]], "modelusages (cloudshell.api.cloudshell_api.getmodelusagereportresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetModelUsageReportResponseInfo.ModelUsages"]], "modificationdate (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.ModificationDate"]], "modificationdate (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.ModificationDate"]], "modifieddate (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.ModifiedDate"]], "movefolder() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.MoveFolder"]], "moveresources() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.MoveResources"]], "name (cloudshell.api.cloudshell_api.abstractresourceattribute attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractResourceAttribute.Name"]], "name (cloudshell.api.cloudshell_api.abstractresourcerequiredattribute attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractResourceRequiredAttribute.Name"]], "name (cloudshell.api.cloudshell_api.abstracttemplateshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractTemplateShortInfo.Name"]], "name (cloudshell.api.cloudshell_api.activetopologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyInfo.Name"]], "name (cloudshell.api.cloudshell_api.activetopologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo.Name"]], "name (cloudshell.api.cloudshell_api.additionaldataparam attribute)": [[1, "cloudshell.api.cloudshell_api.AdditionalDataParam.Name"]], "name (cloudshell.api.cloudshell_api.attributevalueinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AttributeValueInfo.Name"]], "name (cloudshell.api.cloudshell_api.categoryinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CategoryInfo.Name"]], "name (cloudshell.api.cloudshell_api.commandparameter attribute)": [[1, "cloudshell.api.cloudshell_api.CommandParameter.Name"]], "name (cloudshell.api.cloudshell_api.contentshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ContentShortInfo.Name"]], "name (cloudshell.api.cloudshell_api.deploymentpathinfo attribute)": [[1, "cloudshell.api.cloudshell_api.DeploymentPathInfo.Name"]], "name (cloudshell.api.cloudshell_api.deploymentserviceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.DeploymentServiceInfo.Name"]], "name (cloudshell.api.cloudshell_api.domain attribute)": [[1, "cloudshell.api.cloudshell_api.Domain.Name"]], "name (cloudshell.api.cloudshell_api.domaininfo attribute)": [[1, "cloudshell.api.cloudshell_api.DomainInfo.Name"]], "name (cloudshell.api.cloudshell_api.entityusage attribute)": [[1, "cloudshell.api.cloudshell_api.EntityUsage.Name"]], "name (cloudshell.api.cloudshell_api.environmentcommandinfo attribute)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandInfo.Name"]], "name (cloudshell.api.cloudshell_api.environmentcommandparameter attribute)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandParameter.Name"]], "name (cloudshell.api.cloudshell_api.errorparameter attribute)": [[1, "cloudshell.api.cloudshell_api.ErrorParameter.Name"]], "name (cloudshell.api.cloudshell_api.findresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo.Name"]], "name (cloudshell.api.cloudshell_api.group attribute)": [[1, "cloudshell.api.cloudshell_api.Group.Name"]], "name (cloudshell.api.cloudshell_api.groupinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GroupInfo.Name"]], "name (cloudshell.api.cloudshell_api.logondomaininfo attribute)": [[1, "cloudshell.api.cloudshell_api.LogonDomainInfo.Name"]], "name (cloudshell.api.cloudshell_api.parameterdata attribute)": [[1, "cloudshell.api.cloudshell_api.ParameterData.Name"]], "name (cloudshell.api.cloudshell_api.reservationappresource attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationAppResource.Name"]], "name (cloudshell.api.cloudshell_api.reservationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationInfo.Name"]], "name (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.Name"]], "name (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.Name"]], "name (cloudshell.api.cloudshell_api.resource attribute)": [[1, "cloudshell.api.cloudshell_api.Resource.Name"]], "name (cloudshell.api.cloudshell_api.resourceattribute attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceAttribute.Name"]], "name (cloudshell.api.cloudshell_api.resourcecommandinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceCommandInfo.Name"]], "name (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.Name"]], "name (cloudshell.api.cloudshell_api.resourceshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceShortInfo.Name"]], "name (cloudshell.api.cloudshell_api.savedsandboxinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SavedSandboxInfo.Name"]], "name (cloudshell.api.cloudshell_api.serviceattribute attribute)": [[1, "cloudshell.api.cloudshell_api.ServiceAttribute.Name"]], "name (cloudshell.api.cloudshell_api.serviceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ServiceInfo.Name"]], "name (cloudshell.api.cloudshell_api.testshelldomaininfo attribute)": [[1, "cloudshell.api.cloudshell_api.TestShellDomainInfo.Name"]], "name (cloudshell.api.cloudshell_api.topologiesresourcesattributesinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologiesResourcesAttributesInfo.Name"]], "name (cloudshell.api.cloudshell_api.topology attribute)": [[1, "cloudshell.api.cloudshell_api.Topology.Name"]], "name (cloudshell.api.cloudshell_api.topologyappresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyAppResourceInfo.Name"]], "name (cloudshell.api.cloudshell_api.topologycategoryinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyCategoryInfo.Name"]], "name (cloudshell.api.cloudshell_api.topologycommandinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyCommandInfo.Name"]], "name (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.Name"]], "name (cloudshell.api.cloudshell_api.topologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo.Name"]], "name (cloudshell.api.cloudshell_api.topologyshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyShortInfo.Name"]], "name (cloudshell.api.cloudshell_api.topologyurlsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyUrlsInfo.Name"]], "name (cloudshell.api.cloudshell_api.usagedetails attribute)": [[1, "cloudshell.api.cloudshell_api.UsageDetails.Name"]], "name (cloudshell.api.cloudshell_api.userinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UserInfo.Name"]], "name (cloudshell.api.cloudshell_api.utilizationreportrow attribute)": [[1, "cloudshell.api.cloudshell_api.UtilizationReportRow.Name"]], "name (cloudshell.api.cloudshell_api.vmcustomparam attribute)": [[1, "cloudshell.api.cloudshell_api.VmCustomParam.Name"]], "name (cloudshell.api.cloudshell_api.vminstanceparam attribute)": [[1, "cloudshell.api.cloudshell_api.VmInstanceParam.Name"]], "namevaluepair (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.NameValuePair"]], "networkdata (cloudshell.api.cloudshell_api.resourceinfovmdetails attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfoVmDetails.NetworkData"]], "networkid (cloudshell.api.cloudshell_api.vmdetailsnetworkinterface attribute)": [[1, "cloudshell.api.cloudshell_api.VmDetailsNetworkInterface.NetworkId"]], "numofnotinreservation (cloudshell.api.cloudshell_api.resourcesusagesummaryinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourcesUsageSummaryInfo.NumOfNotInReservation"]], "numofreserved (cloudshell.api.cloudshell_api.resourcesusagesummaryinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourcesUsageSummaryInfo.NumOfReserved"]], "numofshared (cloudshell.api.cloudshell_api.resourcesusagesummaryinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourcesUsageSummaryInfo.NumOfShared"]], "numericrange (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.NumericRange"]], "operator (cloudshell.api.cloudshell_api.abstractresourcerequiredattribute attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractResourceRequiredAttribute.Operator"]], "originatingblueprintname (cloudshell.api.cloudshell_api.savedsandboxinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SavedSandboxInfo.OriginatingBlueprintName"]], "originatingsandboxid (cloudshell.api.cloudshell_api.savedsandboxinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SavedSandboxInfo.OriginatingSandboxId"]], "originatingsandboxname (cloudshell.api.cloudshell_api.savedsandboxinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SavedSandboxInfo.OriginatingSandboxName"]], "output (cloudshell.api.cloudshell_api.commandexecutioncompletedresultinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CommandExecutionCompletedResultInfo.Output"]], "output (cloudshell.api.cloudshell_api.remapconnectionresultitem attribute)": [[1, "cloudshell.api.cloudshell_api.RemapConnectionResultItem.Output"]], "owner (cloudshell.api.cloudshell_api.abstracttemplateshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractTemplateShortInfo.Owner"]], "owner (cloudshell.api.cloudshell_api.findresourcereservationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceReservationInfo.Owner"]], "owner (cloudshell.api.cloudshell_api.reservationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationInfo.Owner"]], "owner (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.Owner"]], "owner (cloudshell.api.cloudshell_api.savedsandboxinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SavedSandboxInfo.Owner"]], "owner (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.Owner"]], "paramname (cloudshell.api.cloudshell_api.reservedtopologyinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedTopologyInputsInfo.ParamName"]], "paramname (cloudshell.api.cloudshell_api.topologyinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInputsInfo.ParamName"]], "parameterdata (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ParameterData"]], "parameters (cloudshell.api.cloudshell_api.environmentcommandinfo attribute)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandInfo.Parameters"]], "parameters (cloudshell.api.cloudshell_api.resourcecommandinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceCommandInfo.Parameters"]], "parameters (cloudshell.api.cloudshell_api.topologycommandinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyCommandInfo.Parameters"]], "parentid (cloudshell.api.cloudshell_api.utilizationreportrow attribute)": [[1, "cloudshell.api.cloudshell_api.UtilizationReportRow.ParentId"]], "parenttopology (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.ParentTopology"]], "path (cloudshell.api.cloudshell_api.resource attribute)": [[1, "cloudshell.api.cloudshell_api.Resource.Path"]], "permission (cloudshell.api.cloudshell_api.contentshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ContentShortInfo.Permission"]], "permission (cloudshell.api.cloudshell_api.findresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo.Permission"]], "permission (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.Permission"]], "permission (cloudshell.api.cloudshell_api.resourceshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceShortInfo.Permission"]], "permittededitors (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.PermittedEditors"]], "permittedusers (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.PermittedUsers"]], "physicalconnectionupdaterequest (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.PhysicalConnectionUpdateRequest"]], "possiblevalues (cloudshell.api.cloudshell_api.reservedtopologyadditionalinfoinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedTopologyAdditionalInfoInputsInfo.PossibleValues"]], "possiblevalues (cloudshell.api.cloudshell_api.reservedtopologyglobalinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedTopologyGlobalInputsInfo.PossibleValues"]], "possiblevalues (cloudshell.api.cloudshell_api.serviceattribute attribute)": [[1, "cloudshell.api.cloudshell_api.ServiceAttribute.PossibleValues"]], "possiblevalues (cloudshell.api.cloudshell_api.topologyinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInputsInfo.PossibleValues"]], "powercycleresource() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.PowerCycleResource"]], "poweroffresource() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.PowerOffResource"]], "poweronresource() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.PowerOnResource"]], "preparesandboxconnectivity() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.PrepareSandboxConnectivity"]], "promotedraft() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.PromoteDraft"]], "provisioningstatus (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.ProvisioningStatus"]], "provisioningstatus (cloudshell.api.cloudshell_api.reservationslimstatus attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationSlimStatus.ProvisioningStatus"]], "qualiapiclient (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.QualiApiClient"]], "quantity (cloudshell.api.cloudshell_api.topologyabstractresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyAbstractResourceInfo.Quantity"]], "recheckconflicts() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RecheckConflicts"]], "recurrencetype (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.RecurrenceType"]], "refreshappinblueprints() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RefreshAppInBlueprints"]], "refreshvmdetails() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RefreshVMDetails"]], "rejectapprovalrequest() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RejectApprovalRequest"]], "releasefrompool() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ReleaseFromPool"]], "releaseresourcesfromreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ReleaseResourcesFromReservation"]], "releasetopologyresources() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ReleaseTopologyResources"]], "released (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.Released"]], "remainingtimeinminutes (cloudshell.api.cloudshell_api.getreservationremainingtimeinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetReservationRemainingTimeInfo.RemainingTimeInMinutes"]], "remapconnectionresultinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.RemapConnectionResultInfo"]], "remapconnectionresultitem (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.RemapConnectionResultItem"]], "remapconnections() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemapConnections"]], "remapoperationsummary (cloudshell.api.cloudshell_api.remapconnectionresultitem attribute)": [[1, "cloudshell.api.cloudshell_api.RemapConnectionResultItem.RemapOperationSummary"]], "remapedvia (cloudshell.api.cloudshell_api.remapconnectionresultitem attribute)": [[1, "cloudshell.api.cloudshell_api.RemapConnectionResultItem.RemapedVia"]], "removeappfromreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemoveAppFromReservation"]], "removeattributerestrictedvalues() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemoveAttributeRestrictedValues"]], "removeconnectorsfromreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemoveConnectorsFromReservation"]], "removecustomshellattribute() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemoveCustomShellAttribute"]], "removegroupsfromdomain() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemoveGroupsFromDomain"]], "removepermittededitorsfromtopology() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemovePermittedEditorsFromTopology"]], "removepermittedusersfromreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemovePermittedUsersFromReservation"]], "removeresourcesfromdomain() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemoveResourcesFromDomain"]], "removeresourcesfromreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemoveResourcesFromReservation"]], "removerestrictionrequest (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.RemoveRestrictionRequest"]], "removeroutesfromreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemoveRoutesFromReservation"]], "removeservicesfromreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemoveServicesFromReservation"]], "removetopologiesfromdomain() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemoveTopologiesFromDomain"]], "removetopologycategory() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemoveTopologyCategory"]], "removeusersfromgroup() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemoveUsersFromGroup"]], "removevaluefromlookupattribute() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RemoveValueFromLookupAttribute"]], "renameblueprint() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RenameBlueprint"]], "renameresource() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RenameResource"]], "replacewithresourceresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReplaceWithResourceResponseInfo"]], "requestnotes (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.RequestNotes"]], "requestedentityid (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.RequestedEntityId"]], "requestedentitytype (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.RequestedEntityType"]], "requestedroutesinfo (cloudshell.api.cloudshell_api.reservationdescriptioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo.RequestedRoutesInfo"]], "requestername (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.RequesterName"]], "requiredattributes (cloudshell.api.cloudshell_api.topologyabstractresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyAbstractResourceInfo.RequiredAttributes"]], "requiredinputs (cloudshell.api.cloudshell_api.getreservationinputsresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetReservationInputsResponseInfo.RequiredInputs"]], "requirementsinputs (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.RequirementsInputs"]], "reservation (cloudshell.api.cloudshell_api.createreservationresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CreateReservationResponseInfo.Reservation"]], "reservationappresource (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservationAppResource"]], "reservationappsresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservationAppsResponseInfo"]], "reservationdescription (cloudshell.api.cloudshell_api.getreservationdescriptionresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetReservationDescriptionResponseInfo.ReservationDescription"]], "reservationdescriptioninfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo"]], "reservationdiagramlayoutresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservationDiagramLayoutResponseInfo"]], "reservationid (cloudshell.api.cloudshell_api.findresourcereservationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceReservationInfo.ReservationId"]], "reservationid (cloudshell.api.cloudshell_api.reservationlivestatus attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationLiveStatus.ReservationId"]], "reservationid (cloudshell.api.cloudshell_api.reservationslimstatus attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationSlimStatus.ReservationId"]], "reservationinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservationInfo"]], "reservationlistinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservationListInfo"]], "reservationlivestatus (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservationLiveStatus"]], "reservationlivestatus (cloudshell.api.cloudshell_api.reservationdescriptioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo.ReservationLiveStatus"]], "reservationlivestatusdescription (cloudshell.api.cloudshell_api.reservationlivestatus attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationLiveStatus.ReservationLiveStatusDescription"]], "reservationlivestatusdescription (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.ReservationLiveStatusDescription"]], "reservationlivestatusinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservationLiveStatusInfo"]], "reservationlivestatusname (cloudshell.api.cloudshell_api.reservationlivestatus attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationLiveStatus.ReservationLiveStatusName"]], "reservationlivestatusname (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.ReservationLiveStatusName"]], "reservationlivestatuses (cloudshell.api.cloudshell_api.reservationlivestatusinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationLiveStatusInfo.ReservationLiveStatuses"]], "reservationname (cloudshell.api.cloudshell_api.findresourcereservationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceReservationInfo.ReservationName"]], "reservationname (cloudshell.api.cloudshell_api.resourcelockinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceLockInfo.ReservationName"]], "reservationshortinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo"]], "reservationslimstatus (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservationSlimStatus"]], "reservationslimstatus (cloudshell.api.cloudshell_api.reservationslimstatusinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationSlimStatusInfo.ReservationSlimStatus"]], "reservationslimstatusinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservationSlimStatusInfo"]], "reservations (cloudshell.api.cloudshell_api.findresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo.Reservations"]], "reservations (cloudshell.api.cloudshell_api.getactivereservationsresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetActiveReservationsResponseInfo.Reservations"]], "reservations (cloudshell.api.cloudshell_api.getreservationsinrangeresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetReservationsInRangeResponseInfo.Reservations"]], "reservations (cloudshell.api.cloudshell_api.reservationlistinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationListInfo.Reservations"]], "reserveresourcesresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReserveResourcesResponseInfo"]], "reservetopologyresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReserveTopologyResponseInfo"]], "reservedappname (cloudshell.api.cloudshell_api.addapptoreservationresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AddAppToReservationResponseInfo.ReservedAppName"]], "reservedresourceinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo"]], "reservedstatus (cloudshell.api.cloudshell_api.findresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo.ReservedStatus"]], "reservedtopologyadditionalinfoinputsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservedTopologyAdditionalInfoInputsInfo"]], "reservedtopologyglobalinputsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservedTopologyGlobalInputsInfo"]], "reservedtopologyinputsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservedTopologyInputsInfo"]], "reservedtopologyrequiredinputsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ReservedTopologyRequiredInputsInfo"]], "resetresourcedriver() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ResetResourceDriver"]], "resetsandboxprovisioningstatus() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.ResetSandboxProvisioningStatus"]], "resource (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.Resource"]], "resourceattribute (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourceAttribute"]], "resourceattributes (cloudshell.api.cloudshell_api.activetopologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo.ResourceAttributes"]], "resourceattributes (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.ResourceAttributes"]], "resourceattributes (cloudshell.api.cloudshell_api.topologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo.ResourceAttributes"]], "resourceattributesupdaterequest (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourceAttributesUpdateRequest"]], "resourcecommandinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourceCommandInfo"]], "resourcecommandlistinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourceCommandListInfo"]], "resourceconflictinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourceConflictInfo"]], "resourcediagramlayoutinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourceDiagramLayoutInfo"]], "resourcediagramlayouts (cloudshell.api.cloudshell_api.reservationdiagramlayoutresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDiagramLayoutResponseInfo.ResourceDiagramLayouts"]], "resourcefamilyname (cloudshell.api.cloudshell_api.abstracttemplateshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractTemplateShortInfo.ResourceFamilyName"]], "resourcefamilyname (cloudshell.api.cloudshell_api.activetopologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo.ResourceFamilyName"]], "resourcefamilyname (cloudshell.api.cloudshell_api.findresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo.ResourceFamilyName"]], "resourcefamilyname (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.ResourceFamilyName"]], "resourcefamilyname (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.ResourceFamilyName"]], "resourcefamilyname (cloudshell.api.cloudshell_api.resourceshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceShortInfo.ResourceFamilyName"]], "resourcefamilyname (cloudshell.api.cloudshell_api.topologyabstractresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyAbstractResourceInfo.ResourceFamilyName"]], "resourcefamilyname (cloudshell.api.cloudshell_api.topologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo.ResourceFamilyName"]], "resourcefullname (cloudshell.api.cloudshell_api.findresourcereservationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceReservationInfo.ResourceFullName"]], "resourcefullname (cloudshell.api.cloudshell_api.resourcesusagesummaryinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourcesUsageSummaryInfo.ResourceFullName"]], "resourceinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo"]], "resourceinfodto (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourceInfoDto"]], "resourceinfovmdetails (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourceInfoVmDetails"]], "resourcelistinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourceListInfo"]], "resourcelivestatusdescription (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.ResourceLiveStatusDescription"]], "resourcelivestatusinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourceLiveStatusInfo"]], "resourcelivestatusname (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.ResourceLiveStatusName"]], "resourcelockinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourceLockInfo"]], "resourcemappingsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourceMappingsInfo"]], "resourcemodelname (cloudshell.api.cloudshell_api.abstracttemplateshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractTemplateShortInfo.ResourceModelName"]], "resourcemodelname (cloudshell.api.cloudshell_api.activetopologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo.ResourceModelName"]], "resourcemodelname (cloudshell.api.cloudshell_api.findresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo.ResourceModelName"]], "resourcemodelname (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.ResourceModelName"]], "resourcemodelname (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.ResourceModelName"]], "resourcemodelname (cloudshell.api.cloudshell_api.resourceshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceShortInfo.ResourceModelName"]], "resourcemodelname (cloudshell.api.cloudshell_api.topologyabstractresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyAbstractResourceInfo.ResourceModelName"]], "resourcemodelname (cloudshell.api.cloudshell_api.topologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo.ResourceModelName"]], "resourcename (cloudshell.api.cloudshell_api.remapconnectionresultitem attribute)": [[1, "cloudshell.api.cloudshell_api.RemapConnectionResultItem.ResourceName"]], "resourcename (cloudshell.api.cloudshell_api.reservedtopologyadditionalinfoinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedTopologyAdditionalInfoInputsInfo.ResourceName"]], "resourcename (cloudshell.api.cloudshell_api.reservedtopologyrequiredinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedTopologyRequiredInputsInfo.ResourceName"]], "resourcename (cloudshell.api.cloudshell_api.resourceconflictinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceConflictInfo.ResourceName"]], "resourcename (cloudshell.api.cloudshell_api.resourcediagramlayoutinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceDiagramLayoutInfo.ResourceName"]], "resourcename (cloudshell.api.cloudshell_api.topologyadditionalinfoinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyAdditionalInfoInputsInfo.ResourceName"]], "resourcename (cloudshell.api.cloudshell_api.topologyrequirementsinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyRequirementsInputsInfo.ResourceName"]], "resourceshortinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourceShortInfo"]], "resources (cloudshell.api.cloudshell_api.activetopologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyInfo.Resources"]], "resources (cloudshell.api.cloudshell_api.domaininfo attribute)": [[1, "cloudshell.api.cloudshell_api.DomainInfo.Resources"]], "resources (cloudshell.api.cloudshell_api.findresourcelistinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceListInfo.Resources"]], "resources (cloudshell.api.cloudshell_api.reservationdescriptioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo.Resources"]], "resources (cloudshell.api.cloudshell_api.resourcelistinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceListInfo.Resources"]], "resources (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.Resources"]], "resourcesusagesummaryinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ResourcesUsageSummaryInfo"]], "restoresavedsandbox() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.RestoreSavedSandbox"]], "restrictedvalues (cloudshell.api.cloudshell_api.serviceattribute attribute)": [[1, "cloudshell.api.cloudshell_api.ServiceAttribute.RestrictedValues"]], "resultitems (cloudshell.api.cloudshell_api.bulkappdeploymentyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.BulkAppDeploymentyInfo.ResultItems"]], "resultitems (cloudshell.api.cloudshell_api.configureappsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ConfigureAppsInfo.ResultItems"]], "resultitems (cloudshell.api.cloudshell_api.remapconnectionresultinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RemapConnectionResultInfo.ResultItems"]], "resultitems (cloudshell.api.cloudshell_api.setsecuritygroupsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SetSecurityGroupsInfo.ResultItems"]], "results (cloudshell.api.cloudshell_api.commandexecutionresultlistinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CommandExecutionResultListInfo.Results"]], "role (cloudshell.api.cloudshell_api.group attribute)": [[1, "cloudshell.api.cloudshell_api.Group.Role"]], "rootaddress (cloudshell.api.cloudshell_api.activetopologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyResourceInfo.RootAddress"]], "rootaddress (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.RootAddress"]], "rootaddress (cloudshell.api.cloudshell_api.resourceshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceShortInfo.RootAddress"]], "rootaddress (cloudshell.api.cloudshell_api.topologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo.RootAddress"]], "rootresources (cloudshell.api.cloudshell_api.replacewithresourceresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReplaceWithResourceResponseInfo.RootResources"]], "routeattributeinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.RouteAttributeInfo"]], "routeconfiguration (cloudshell.api.cloudshell_api.routeinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteInfo.RouteConfiguration"]], "routeconfigurationinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.RouteConfigurationInfo"]], "routeinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.RouteInfo"]], "routesegmentinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.RouteSegmentInfo"]], "routetype (cloudshell.api.cloudshell_api.mapping attribute)": [[1, "cloudshell.api.cloudshell_api.Mapping.RouteType"]], "routetype (cloudshell.api.cloudshell_api.routeinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteInfo.RouteType"]], "routes (cloudshell.api.cloudshell_api.activetopologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyInfo.Routes"]], "routes (cloudshell.api.cloudshell_api.endpointconnectioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.EndPointConnectionInfo.Routes"]], "routes (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.Routes"]], "routes (cloudshell.api.cloudshell_api.topologyroutesinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyRoutesInfo.Routes"]], "sandboxdatakeyvalue (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.SandboxDataKeyValue"]], "sandboxdatakeyvalueinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.SandboxDataKeyValueInfo"]], "sandboxdatakeyvalues (cloudshell.api.cloudshell_api.getsandboxdatainfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetSandboxDataInfo.SandboxDataKeyValues"]], "sandboxes (cloudshell.api.cloudshell_api.entityusage attribute)": [[1, "cloudshell.api.cloudshell_api.EntityUsage.Sandboxes"]], "savereservationastopology() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SaveReservationAsTopology"]], "savesandbox() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SaveSandbox"]], "savesandboxresponseinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.SaveSandboxResponseInfo"]], "savedsandboxid (cloudshell.api.cloudshell_api.reservationdescriptioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo.SavedSandboxId"]], "savedsandboxid (cloudshell.api.cloudshell_api.savesandboxresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SaveSandboxResponseInfo.SavedSandboxId"]], "savedsandboxinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.SavedSandboxInfo"]], "savedsandboxes (cloudshell.api.cloudshell_api.getsavedsandboxesresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetSavedSandboxesResponseInfo.SavedSandboxes"]], "scriptparameters (cloudshell.api.cloudshell_api.appconfigurationmanagement attribute)": [[1, "cloudshell.api.cloudshell_api.AppConfigurationManagement.ScriptParameters"]], "securelogon() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SecureLogon"]], "securitygroup (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.SecurityGroup"]], "securitygrouprule (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.SecurityGroupRule"]], "securitygroupsconfiguration (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.SecurityGroupsConfiguration"]], "segments (cloudshell.api.cloudshell_api.routeinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteInfo.Segments"]], "serverdatetime (cloudshell.api.cloudshell_api.servertimeinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ServerTimeInfo.ServerDateTime"]], "servertimeinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ServerTimeInfo"]], "serviceattribute (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ServiceAttribute"]], "serviceinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ServiceInfo"]], "serviceinstance (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ServiceInstance"]], "servicename (cloudshell.api.cloudshell_api.serviceinstance attribute)": [[1, "cloudshell.api.cloudshell_api.ServiceInstance.ServiceName"]], "services (cloudshell.api.cloudshell_api.reservationdescriptioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo.Services"]], "services (cloudshell.api.cloudshell_api.serviceslistinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ServicesListInfo.Services"]], "services (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.Services"]], "serviceslistinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.ServicesListInfo"]], "setappsecuritygroups() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetAppSecurityGroups"]], "setattributevalue() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetAttributeValue"]], "setattributesvalues() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetAttributesValues"]], "setbaudrate() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetBaudRate"]], "setconnectorattributes() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetConnectorAttributes"]], "setconnectorattributesviaalias() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetConnectorAttributesViaAlias"]], "setconnectorrequest (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.SetConnectorRequest"]], "setconnectorsinreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetConnectorsInReservation"]], "setconsoleforxmodem() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetConsoleForXModem"]], "setcustomshellattribute() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetCustomShellAttribute"]], "setgroupdomainpermissions() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetGroupDomainPermissions"]], "setreservationlivestatus() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetReservationLiveStatus"]], "setreservationresourceposition() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetReservationResourcePosition"]], "setreservationserviceposition() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetReservationServicePosition"]], "setresourcelivestatus() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetResourceLiveStatus"]], "setresourcesharelevel() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetResourceShareLevel"]], "setresourcesharedstate() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetResourceSharedState"]], "setresourcevisibility() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetResourceVisibility"]], "setrouteattributes() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetRouteAttributes"]], "setrouteattributesviaalias() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetRouteAttributesViaAlias"]], "setsandboxdata() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetSandboxData"]], "setsecuritygroupinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.SetSecurityGroupInfo"]], "setsecuritygroupsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.SetSecurityGroupsInfo"]], "setserviceattributesvalues() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetServiceAttributesValues"]], "setservicedriver() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetServiceDriver"]], "setservicelivestatus() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetServiceLiveStatus"]], "setservicename() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetServiceName"]], "setsetupstage() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetSetupStage"]], "settopologycategory() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SetTopologyCategory"]], "setupstage (cloudshell.api.cloudshell_api.reservationdescriptioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo.SetupStage"]], "setupstage (cloudshell.api.cloudshell_api.reservationslimstatus attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationSlimStatus.SetupStage"]], "shared (cloudshell.api.cloudshell_api.findresourcereservationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceReservationInfo.Shared"]], "shared (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.Shared"]], "shared (cloudshell.api.cloudshell_api.routeinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteInfo.Shared"]], "source (cloudshell.api.cloudshell_api.appvisualconnector attribute)": [[1, "cloudshell.api.cloudshell_api.AppVisualConnector.Source"]], "source (cloudshell.api.cloudshell_api.connector attribute)": [[1, "cloudshell.api.cloudshell_api.Connector.Source"]], "source (cloudshell.api.cloudshell_api.mapping attribute)": [[1, "cloudshell.api.cloudshell_api.Mapping.Source"]], "source (cloudshell.api.cloudshell_api.routeinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteInfo.Source"]], "source (cloudshell.api.cloudshell_api.routesegmentinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteSegmentInfo.Source"]], "speed (cloudshell.api.cloudshell_api.routeconfigurationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteConfigurationInfo.Speed"]], "speedsetting (cloudshell.api.cloudshell_api.routeconfigurationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteConfigurationInfo.SpeedSetting"]], "start (cloudshell.api.cloudshell_api.numericrange attribute)": [[1, "cloudshell.api.cloudshell_api.NumericRange.Start"]], "starttime (cloudshell.api.cloudshell_api.findresourcereservationinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceReservationInfo.StartTime"]], "starttime (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.StartTime"]], "starttime (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.StartTime"]], "starttime (cloudshell.api.cloudshell_api.reservationslimstatus attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationSlimStatus.StartTime"]], "state (cloudshell.api.cloudshell_api.connector attribute)": [[1, "cloudshell.api.cloudshell_api.Connector.State"]], "state (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.State"]], "state (cloudshell.api.cloudshell_api.savedsandboxinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SavedSandboxInfo.State"]], "state (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.State"]], "state (cloudshell.api.cloudshell_api.topologyshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyShortInfo.State"]], "status (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.Status"]], "status (cloudshell.api.cloudshell_api.reservationslimstatus attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationSlimStatus.Status"]], "success (cloudshell.api.cloudshell_api.bulkappdeploymentyresultitem attribute)": [[1, "cloudshell.api.cloudshell_api.BulkAppDeploymentyResultItem.Success"]], "success (cloudshell.api.cloudshell_api.configureappinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ConfigureAppInfo.Success"]], "success (cloudshell.api.cloudshell_api.remapconnectionresultitem attribute)": [[1, "cloudshell.api.cloudshell_api.RemapConnectionResultItem.Success"]], "success (cloudshell.api.cloudshell_api.setsecuritygroupinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SetSecurityGroupInfo.Success"]], "syncresourcefromdevice() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SyncResourceFromDevice"]], "syncresourcetodevice() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.SyncResourceToDevice"]], "tag (cloudshell.api.cloudshell_api.resourcecommandinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceCommandInfo.Tag"]], "target (cloudshell.api.cloudshell_api.appvisualconnector attribute)": [[1, "cloudshell.api.cloudshell_api.AppVisualConnector.Target"]], "target (cloudshell.api.cloudshell_api.connector attribute)": [[1, "cloudshell.api.cloudshell_api.Connector.Target"]], "target (cloudshell.api.cloudshell_api.mapping attribute)": [[1, "cloudshell.api.cloudshell_api.Mapping.Target"]], "target (cloudshell.api.cloudshell_api.routeinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteInfo.Target"]], "target (cloudshell.api.cloudshell_api.routesegmentinfo attribute)": [[1, "cloudshell.api.cloudshell_api.RouteSegmentInfo.Target"]], "teardowntime (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.TeardownTime"]], "terminatereservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.TerminateReservation"]], "testshelldomaininfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TestShellDomainInfo"]], "testshelldomains (cloudshell.api.cloudshell_api.groupinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GroupInfo.TestShellDomains"]], "timezonedefinition (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TimeZoneDefinition"]], "timezones (cloudshell.api.cloudshell_api.getservertimezonesresponse attribute)": [[1, "cloudshell.api.cloudshell_api.GetServerTimeZonesResponse.TimeZones"]], "timezone (cloudshell.api.cloudshell_api.userinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UserInfo.Timezone"]], "token (cloudshell.api.cloudshell_api.logonresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.LogonResponseInfo.Token"]], "token (cloudshell.api.cloudshell_api.logontokeninfo attribute)": [[1, "cloudshell.api.cloudshell_api.LogonTokenInfo.Token"]], "tool (cloudshell.api.cloudshell_api.appconfigurationmanagement attribute)": [[1, "cloudshell.api.cloudshell_api.AppConfigurationManagement.Tool"]], "topologies (cloudshell.api.cloudshell_api.domaininfo attribute)": [[1, "cloudshell.api.cloudshell_api.DomainInfo.Topologies"]], "topologies (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.Topologies"]], "topologies (cloudshell.api.cloudshell_api.topologiesbycategoryinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologiesByCategoryInfo.Topologies"]], "topologies (cloudshell.api.cloudshell_api.topologylistinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyListInfo.Topologies"]], "topologiesbycategoryinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologiesByCategoryInfo"]], "topologiesfolder (cloudshell.api.cloudshell_api.domaininfo attribute)": [[1, "cloudshell.api.cloudshell_api.DomainInfo.TopologiesFolder"]], "topologiesinfo (cloudshell.api.cloudshell_api.reservationshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationShortInfo.TopologiesInfo"]], "topologiesinstructionsinfo (cloudshell.api.cloudshell_api.reservationdescriptioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo.TopologiesInstructionsInfo"]], "topologiesreservedresources (cloudshell.api.cloudshell_api.reservationdescriptioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo.TopologiesReservedResources"]], "topologiesresourcesattributeinfo (cloudshell.api.cloudshell_api.reservationdescriptioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo.TopologiesResourcesAttributeInfo"]], "topologiesresourcesattributesinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologiesResourcesAttributesInfo"]], "topologiesrouteinfo (cloudshell.api.cloudshell_api.reservationdescriptioninfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservationDescriptionInfo.TopologiesRouteInfo"]], "topology (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.Topology"]], "topology (cloudshell.api.cloudshell_api.activetopologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyInfo.Topology"]], "topology (cloudshell.api.cloudshell_api.resourceconflictinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceConflictInfo.Topology"]], "topologyabstractresourceinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyAbstractResourceInfo"]], "topologyadditionalinfoinputsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyAdditionalInfoInputsInfo"]], "topologyappresourceinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyAppResourceInfo"]], "topologycategoryinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyCategoryInfo"]], "topologycommandinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyCommandInfo"]], "topologycommandlistinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyCommandListInfo"]], "topologyglobalinputsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyGlobalInputsInfo"]], "topologyinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo"]], "topologyinputsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyInputsInfo"]], "topologyinstructionsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyInstructionsInfo"]], "topologylistinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyListInfo"]], "topologyname (cloudshell.api.cloudshell_api.topologiesresourcesattributesinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologiesResourcesAttributesInfo.TopologyName"]], "topologyname (cloudshell.api.cloudshell_api.topologyinstructionsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInstructionsInfo.TopologyName"]], "topologyname (cloudshell.api.cloudshell_api.topologyreservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyReservedResourceInfo.TopologyName"]], "topologyname (cloudshell.api.cloudshell_api.topologyroutesinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyRoutesInfo.TopologyName"]], "topologyrequirementsinputsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyRequirementsInputsInfo"]], "topologyreservedresourceinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyReservedResourceInfo"]], "topologyresourceinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo"]], "topologyroutesinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyRoutesInfo"]], "topologyshortinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyShortInfo"]], "topologyurl (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyUrl"]], "topologyurls (cloudshell.api.cloudshell_api.topologyurlsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyUrlsInfo.TopologyUrls"]], "topologyurlsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.TopologyUrlsInfo"]], "type (cloudshell.api.cloudshell_api.abstractresourceattribute attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractResourceAttribute.Type"]], "type (cloudshell.api.cloudshell_api.abstractresourcerequiredattribute attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractResourceRequiredAttribute.Type"]], "type (cloudshell.api.cloudshell_api.categoryinfo attribute)": [[1, "cloudshell.api.cloudshell_api.CategoryInfo.Type"]], "type (cloudshell.api.cloudshell_api.commandparameter attribute)": [[1, "cloudshell.api.cloudshell_api.CommandParameter.Type"]], "type (cloudshell.api.cloudshell_api.connector attribute)": [[1, "cloudshell.api.cloudshell_api.Connector.Type"]], "type (cloudshell.api.cloudshell_api.contentshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ContentShortInfo.Type"]], "type (cloudshell.api.cloudshell_api.entityusage attribute)": [[1, "cloudshell.api.cloudshell_api.EntityUsage.Type"]], "type (cloudshell.api.cloudshell_api.environmentcommandparameter attribute)": [[1, "cloudshell.api.cloudshell_api.EnvironmentCommandParameter.Type"]], "type (cloudshell.api.cloudshell_api.reservedtopologyrequiredinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedTopologyRequiredInputsInfo.Type"]], "type (cloudshell.api.cloudshell_api.resourceattribute attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceAttribute.Type"]], "type (cloudshell.api.cloudshell_api.serviceattribute attribute)": [[1, "cloudshell.api.cloudshell_api.ServiceAttribute.Type"]], "type (cloudshell.api.cloudshell_api.topologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyInfo.Type"]], "type (cloudshell.api.cloudshell_api.topologyshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyShortInfo.Type"]], "uid (cloudshell.api.cloudshell_api.resourceinfovmdetails attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfoVmDetails.UID"]], "url (cloudshell.api.cloudshell_api.appconfigurationconnection attribute)": [[1, "cloudshell.api.cloudshell_api.AppConfigurationConnection.URL"]], "unmapports() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UnMapPorts"]], "unarchivedomain() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UnarchiveDomain"]], "uniqeidentifier (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.UniqeIdentifier"]], "unlockresource() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UnlockResource"]], "unlockresources() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UnlockResources"]], "updateconnectionweight() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateConnectionWeight"]], "updateconnectoraliasinreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateConnectorAliasInReservation"]], "updatedomaintopologiesfolder() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateDomainTopologiesFolder"]], "updatedriver() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateDriver"]], "updategroup() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateGroup"]], "updatephysicalconnection() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdatePhysicalConnection"]], "updatephysicalconnections() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdatePhysicalConnections"]], "updatereservationdescription() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateReservationDescription"]], "updatereservationendtime() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateReservationEndTime"]], "updatereservationglobalinputs() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateReservationGlobalInputs"]], "updatereservationname() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateReservationName"]], "updateresourceaddress() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateResourceAddress"]], "updateresourcedescription() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateResourceDescription"]], "updateresourcedriver() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateResourceDriver"]], "updateroutealiasrequest (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.UpdateRouteAliasRequest"]], "updateroutealiasesinreservation() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateRouteAliasesInReservation"]], "updatescript() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateScript"]], "updatetopologyadditionalinfoinputsrequest (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.UpdateTopologyAdditionalInfoInputsRequest"]], "updatetopologydriver() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateTopologyDriver"]], "updatetopologyglobalinputsrequest (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.UpdateTopologyGlobalInputsRequest"]], "updatetopologyowner() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateTopologyOwner"]], "updatetopologyrequirementsinputsrequest (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.UpdateTopologyRequirementsInputsRequest"]], "updateuser() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateUser"]], "updateusergroups() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateUserGroups"]], "updateuserpassword() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateUserPassword"]], "updateuserslimitations() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.UpdateUsersLimitations"]], "usage (cloudshell.api.cloudshell_api.topologiesresourcesattributesinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologiesResourcesAttributesInfo.Usage"]], "usagedetails (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.UsageDetails"]], "usagesummary (cloudshell.api.cloudshell_api.findresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.FindResourceInfo.UsageSummary"]], "user (cloudshell.api.cloudshell_api.logonresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.LogonResponseInfo.User"]], "userinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.UserInfo"]], "userinfoid (cloudshell.api.cloudshell_api.getapprovalrequestresponseinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GetApprovalRequestResponseInfo.UserInfoId"]], "userupdaterequest (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.UserUpdateRequest"]], "username (cloudshell.api.cloudshell_api.activetopologyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ActiveTopologyInfo.Username"]], "username (cloudshell.api.cloudshell_api.resourcelockinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceLockInfo.Username"]], "users (cloudshell.api.cloudshell_api.groupinfo attribute)": [[1, "cloudshell.api.cloudshell_api.GroupInfo.Users"]], "users (cloudshell.api.cloudshell_api.usersinfo attribute)": [[1, "cloudshell.api.cloudshell_api.UsersInfo.Users"]], "usersinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.UsersInfo"]], "utilization (cloudshell.api.cloudshell_api.utilizationreportrow attribute)": [[1, "cloudshell.api.cloudshell_api.UtilizationReportRow.Utilization"]], "utilizationreport (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.UtilizationReport"]], "utilizationreportrow (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.UtilizationReportRow"]], "utilizationreportrows (cloudshell.api.cloudshell_api.utilizationreport attribute)": [[1, "cloudshell.api.cloudshell_api.UtilizationReport.UtilizationReportRows"]], "valid (cloudshell.api.cloudshell_api.abstracttemplateshortinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractTemplateShortInfo.Valid"]], "valid (cloudshell.api.cloudshell_api.topologyabstractresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyAbstractResourceInfo.Valid"]], "value (cloudshell.api.cloudshell_api.abstractresourceattribute attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractResourceAttribute.Value"]], "value (cloudshell.api.cloudshell_api.abstractresourcerequiredattribute attribute)": [[1, "cloudshell.api.cloudshell_api.AbstractResourceRequiredAttribute.Value"]], "value (cloudshell.api.cloudshell_api.additionaldataparam attribute)": [[1, "cloudshell.api.cloudshell_api.AdditionalDataParam.Value"]], "value (cloudshell.api.cloudshell_api.attributevalueinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AttributeValueInfo.Value"]], "value (cloudshell.api.cloudshell_api.errorparameter attribute)": [[1, "cloudshell.api.cloudshell_api.ErrorParameter.Value"]], "value (cloudshell.api.cloudshell_api.parameterdata attribute)": [[1, "cloudshell.api.cloudshell_api.ParameterData.Value"]], "value (cloudshell.api.cloudshell_api.reservedtopologyinputsinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedTopologyInputsInfo.Value"]], "value (cloudshell.api.cloudshell_api.resourceattribute attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceAttribute.Value"]], "value (cloudshell.api.cloudshell_api.sandboxdatakeyvalueinfo attribute)": [[1, "cloudshell.api.cloudshell_api.SandboxDataKeyValueInfo.Value"]], "value (cloudshell.api.cloudshell_api.topologycategoryinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyCategoryInfo.Value"]], "value (cloudshell.api.cloudshell_api.vmcustomparam attribute)": [[1, "cloudshell.api.cloudshell_api.VmCustomParam.Value"]], "value (cloudshell.api.cloudshell_api.vminstanceparam attribute)": [[1, "cloudshell.api.cloudshell_api.VmInstanceParam.Value"]], "visualconnectors (cloudshell.api.cloudshell_api.appdeploymentyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AppDeploymentyInfo.VisualConnectors"]], "visualconnectorsinfo (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.VisualConnectorsInfo"]], "vmcustomparam (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.VmCustomParam"]], "vmcustomparams (cloudshell.api.cloudshell_api.resourceinfovmdetails attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfoVmDetails.VmCustomParams"]], "vmdetails (cloudshell.api.cloudshell_api.reservedresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ReservedResourceInfo.VmDetails"]], "vmdetails (cloudshell.api.cloudshell_api.resourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceInfo.VmDetails"]], "vmdetailsnetworkinterface (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.VmDetailsNetworkInterface"]], "vminstanceparam (class in cloudshell.api.cloudshell_api)": [[1, "cloudshell.api.cloudshell_api.VmInstanceParam"]], "vmuuid (cloudshell.api.cloudshell_api.appdeploymentyinfo attribute)": [[1, "cloudshell.api.cloudshell_api.AppDeploymentyInfo.VmUuid"]], "weight (cloudshell.api.cloudshell_api.connection attribute)": [[1, "cloudshell.api.cloudshell_api.Connection.Weight"]], "willbelocked (cloudshell.api.cloudshell_api.topologyabstractresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyAbstractResourceInfo.WillBeLocked"]], "willbelocked (cloudshell.api.cloudshell_api.topologyresourceinfo attribute)": [[1, "cloudshell.api.cloudshell_api.TopologyResourceInfo.WillBeLocked"]], "writemessagetoreservationoutput() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.WriteMessageToReservationOutput"]], "x (cloudshell.api.cloudshell_api.resourcediagramlayoutinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceDiagramLayoutInfo.X"]], "xmlwrapper (class in cloudshell.api.common_cloudshell_api)": [[1, "cloudshell.api.common_cloudshell_api.XMLWrapper"]], "y (cloudshell.api.cloudshell_api.resourcediagramlayoutinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceDiagramLayoutInfo.Y"]], "cloudshell.api": [[1, "module-cloudshell.api"]], "cloudshell.api.cloudshell_api": [[1, "module-cloudshell.api.cloudshell_api"]], "cloudshell.api.common_cloudshell_api": [[1, "module-cloudshell.api.common_cloudshell_api"]], "create_headers() (cloudshell.api.cloudshell_api.cloudshellapisession method)": [[1, "cloudshell.api.cloudshell_api.CloudShellAPISession.create_headers"]], "enrich_logon() (cloudshell.api.cloudshell_api.qualiapiclient method)": [[1, "cloudshell.api.cloudshell_api.QualiApiClient.enrich_logon"]], "enrich_secure_logon() (cloudshell.api.cloudshell_api.qualiapiclient method)": [[1, "cloudshell.api.cloudshell_api.QualiApiClient.enrich_secure_logon"]], "generateapirequest() (cloudshell.api.common_cloudshell_api.commonapisession method)": [[1, "cloudshell.api.common_cloudshell_api.CommonAPISession.generateAPIRequest"]], "getallchildnode() (cloudshell.api.common_cloudshell_api.xmlwrapper static method)": [[1, "cloudshell.api.common_cloudshell_api.XMLWrapper.getAllChildNode"]], "getallchildnodebyattr() (cloudshell.api.common_cloudshell_api.xmlwrapper static method)": [[1, "cloudshell.api.common_cloudshell_api.XMLWrapper.getAllChildNodeByAttr"]], "getchildnode() (cloudshell.api.common_cloudshell_api.xmlwrapper static method)": [[1, "cloudshell.api.common_cloudshell_api.XMLWrapper.getChildNode"]], "getchildnodebyattr() (cloudshell.api.common_cloudshell_api.xmlwrapper static method)": [[1, "cloudshell.api.common_cloudshell_api.XMLWrapper.getChildNodeByAttr"]], "getnodeattr() (cloudshell.api.common_cloudshell_api.xmlwrapper static method)": [[1, "cloudshell.api.common_cloudshell_api.XMLWrapper.getNodeAttr"]], "getnodename() (cloudshell.api.common_cloudshell_api.xmlwrapper static method)": [[1, "cloudshell.api.common_cloudshell_api.XMLWrapper.getNodeName"]], "getnodeprefix() (cloudshell.api.common_cloudshell_api.xmlwrapper static method)": [[1, "cloudshell.api.common_cloudshell_api.XMLWrapper.getNodePrefix"]], "getnodetext() (cloudshell.api.common_cloudshell_api.xmlwrapper static method)": [[1, "cloudshell.api.common_cloudshell_api.XMLWrapper.getNodeText"]], "getrootnode() (cloudshell.api.common_cloudshell_api.xmlwrapper static method)": [[1, "cloudshell.api.common_cloudshell_api.XMLWrapper.getRootNode"]], "getstringfromxml() (cloudshell.api.common_cloudshell_api.xmlwrapper static method)": [[1, "cloudshell.api.common_cloudshell_api.XMLWrapper.getStringFromXML"]], "importapiclass() (cloudshell.api.common_cloudshell_api.commonapiresult static method)": [[1, "cloudshell.api.common_cloudshell_api.CommonApiResult.importAPIClass"]], "livestatusdescription (cloudshell.api.cloudshell_api.resourcelivestatusinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceLiveStatusInfo.liveStatusDescription"]], "livestatusname (cloudshell.api.cloudshell_api.resourcelivestatusinfo attribute)": [[1, "cloudshell.api.cloudshell_api.ResourceLiveStatusInfo.liveStatusName"]], "logon() (cloudshell.api.cloudshell_api.authentication method)": [[1, "cloudshell.api.cloudshell_api.Authentication.logon"]], "logon() (cloudshell.api.cloudshell_api.logonmanager method)": [[1, "cloudshell.api.cloudshell_api.LogonManager.logon"]], "parsexml() (cloudshell.api.common_cloudshell_api.xmlwrapper static method)": [[1, "cloudshell.api.common_cloudshell_api.XMLWrapper.parseXML"]], "send_rest() (cloudshell.api.cloudshell_api.qualiapiclient method)": [[1, "cloudshell.api.cloudshell_api.QualiApiClient.send_rest"]], "tocontainer() (cloudshell.api.common_cloudshell_api.commonapirequest static method)": [[1, "cloudshell.api.common_cloudshell_api.CommonAPIRequest.toContainer"]], "xmlrpc_token (cloudshell.api.cloudshell_api.authentication property)": [[1, "cloudshell.api.cloudshell_api.Authentication.xmlrpc_token"]], "cloudshell.helpers": [[2, "module-cloudshell.helpers"]]}}) \ No newline at end of file diff --git a/static/api-docs/2023.3/Quali-API/Quali API Library.html b/static/api-docs/2023.3/Quali-API/Quali API Library.html deleted file mode 100644 index 5400d37c70..0000000000 --- a/static/api-docs/2023.3/Quali-API/Quali API Library.html +++ /dev/null @@ -1,777 +0,0 @@ -Quali API Guide
- 2023.3.0 Quali API Library Reference Guide -


back to TOC
back to TOC
back to TOC

Get Suite Template Details

Retrieves properties of the specified automation suite template.

- Syntax -

GetSuiteTemplateDetails(suiteTemplateName)

- Parameters -

TypeNameDescription
- String - Suite Template Name
the name of the suite template that is used as a container for the suite
out - String - Description
Displays the automation suite description.
out - String - Type
Indicates the automation suite type.
out - String - Owner
Indicates the name of the user who created the automation suite.
out - String - Create Date
Indicates the create date and time of the automation suite.
out - String - Modification Date
Indicates the last update date and time of the automation suite.
out - String - Email Notifications
Indicates notification trigger settings: None, Errors, Suite and Errors, or All.
out - Numeric - Remove Jobs From Queue After
- Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. - -1 Indicates that queue timeout is disabled. -
out - String - End Reservation On End
Indicates if the suite's reservation was set to end automatically upon execution completion.
out - String matrix - Jobs Details
Output is a 9 column matrix with Job Index, Name, Description, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Topology Name, and Duration Time Buffer as the column headings. - The Index column will display a run of unique numbers. - The suite Name column indicates the name of the parent automation suite. - The Name column indicates the name of each job. - The Description column indicates the description of each job. - The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) - The Estimated Duration column Indicates the number of minutes entered as the job's estimated duration. - -1 indicates that the duration will be calculated automatically according to the test durations. - The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. - The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. - The Topology Name column indicates the name of attached topology. - Duration Time Buffer indicates the number of minutes to be added to the duration estimation. -
out - String matrix - Job Execution Servers
Indicates the execution servers for each job - Output is a two column matrix with Job Index and Execution Server as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If a job has multiple execution servers, there will be a row with the same index value for each required execution server. -
out - String matrix - Topology Global Inputs
Indicates the topology’s input parameters and parameter values. - Output is a four column matrix with Job Index, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
out - String matrix - Topology Requirements Inputs
Indicates requirements for specific topology resources. - Output is a six column matrix with Job Index, Resource Path, Name, Value, Type, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. The Resource Path column indicates the full path to the added topology resources. - The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
out - String matrix - Topology Additional Inputs
Indicates additional resource input parameters and values for the attached topology. - Output is a five column matrix with Job Index, Resource Path, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Resource Path column indicates the full path to the added topology resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
out - String matrix - Jobs Test Paths
Provide the full path to each of the job's tests. - Output is a four column matrix with Job Index, Test Index, Test Path and Test Estimated Duration as the column headers. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. - The test path column should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. -
out - String matrix - Jobs Test Parameters
Parameter information for each of the job's tests. - Output is a four column matrix with Job Index, Test Index, Parameter Name and Parameter Value as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column corresponds to the value in the Test Paths matrix. - Tests with multiple parameters will have a row for each parameter, with the same Test Index value over multiple rows. -
out - String - Existing Reservation ID
Specify existing reservation ID to use for the created suite. - This will only be possible for suites with one job and no topologies. - Note that the system doesn’t validate the number of jobs attached to the same reservation id. Validation if needed should be applied by the clients of the API. -
back to TOC

Enqueue Custom Suite

Create a new custom automation suite and add it to queue

- Syntax -

void EnqueueCustomSuite(suiteTemplateName, suiteName, description, type, emailNotification, removeJobsFromQueueAfter, endReservationOnEnd, jobsDetails, jobExecutionServers, topologyGlobalInputs, topologyRequirementsInputs, topologyAdditionalInputs, jobsTestPaths, jobsTestParameters, existingReservationId)

- Parameters -

TypeNameDescription
- String - Suite Template Name
Specify the name of the suite template to use as a container for the suite. Empty value indicates an adHoc suite.
- String - Suite Name
Specify the name of the suite template to use as a container for the suite. Empty value indicates an adHoc suite.
- String - Description
Specify the automation suite description.
- String - Type
Specify the automation suite type. Default value: TestShell
- String - Email Notifications
Specify notification trigger settings: None, Errors Only, Suite and Errors, or All.
- Numeric - Remove Jobs From Queue After
Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. -1 Indicates that queue timeout is disabled.
- String - End Reservation On End
Specify if the suite's reservation should end automatically upon execution completion.
- String matrix - Jobs Details
Input is an 9 column matrix with Job Index, name, Description, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Topology Name, and Duration Time Buffer as the column headings. - The Index column will display a run of unique numbers. - The Suite Name column indicates the name of the parent automation suite. - The Name column indicates the name of each job. - The Description column indicates the description of each job. - The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) - The Estimated Duration column Indicates the number of minutes entered as the job's estimated duration. - -1 indicates that the duration will be calculated automatically according to the test durations. - The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. - The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. - The Topology Name column indicates the name of attached topology. - Duration Time Buffer indicates the number of minutes to be added to the duration estimation. -
- String matrix - Job Execution Servers
Input should be a two column matrix with Job Index and Execution Server as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - In the Job Execution Server column, specify the selected execution server that ran the job. - If a job has multiple execution servers, there will be a row with the same index value for each required execution server. -
- String matrix - Topology Global Inputs
Provide an optional list of input parameters and parameter values for the attached topology. - Input should be a four column matrix with Job Index, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
- String matrix - Topology Requirements Inputs
Specify requirements for specific resources that must be included in the topology (Optional). - Input should be a six column matrix with Job Index, Resource Path, Name, Value, Type, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Resource Path column indicates the full path to the added topology resources. - The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
- String matrix - Topology Additional Inputs
Specify an optional list of additional input parameters and values for the attached topology. - Input is a five column matrix with Job Index, Resource Path, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Resource Path column indicates the full path to the added topology resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
- String matrix - Jobs Test Paths
Specify the full path to each of the job's tests. - Input is a four column matrix with Job Index, Test Index, Test Path and Test Estimated Duration. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. - The test path column should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. -
- String matrix - Jobs Test Parameters
Specify parameter information for each of the job's tests. - Input is a four column matrix with Job Index, Test Index, Parameter Name and Parameter Value as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column corresponds to the value in the Test Paths matrix. - Tests with multiple parameters will have a row for each parameter, with the same Test Index value over multiple rows. -
- String - Existing Reservation ID
Specify existing reservation ID to use for the created suite. - This will only be possible for suites with one job and no topologies. - Note that the system doesn’t validate the number of jobs attached to the same reservation id. Validation if needed should be applied by the clients of the API. -
out - String - Suite Id
The ID of the automation suite that was created.
back to TOC

Get Suite Details

Retrieves the full details of a specific automation suite instance

- Syntax -

GetSuiteDetails(suiteId)

- Parameters -

TypeNameDescription
- String - Suite Id
Specify the ID of the automation suite.
out - String - Suite Template Name
the name of the suite template that is used as a container for the suite
out - String - Suite Name
Indicates the name of the automation suite.
out - String - Description
Displays the automation suite description.
out - String - Type
Indicates the automation suite type.
out - String - Owner
Indicates the name of the user who created the automation suite.
out - String - Email Notifications
Indicates notification trigger settings: None, Errors, Suite and Errors, or All.
out - Numeric - Remove Jobs From Queue After
Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. - -1 Indicates that queue timeout is disabled. -
out - String - End Reservation On End
Indicates if the suite's reservation was set to end automatically upon execution completion.
out - String matrix - Jobs Details
Output is an 11 column matrix with Job Index, Name, Description, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Topology Name, Duration Time Buffer, Job State and Job Result as the column headings. - The Index column will display a run of unique numbers. - The Suite Name column indicates the name of the parent automation suite. - The Name column indicates the name of each job. - The Description column indicates the description of each job. - The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) - The Estimated Duration column indicates the number of minutes entered as the job's estimated duration. -1 indicates that the duration will be calculated automatically according to the test durations. - The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. - The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. - The Topology Name column indicates the name of attached topology. - Duration Time Buffer indicates the number of minutes to be added to the duration estimation. - The job state indicates the current state of the job. - The job result indicates the result of the job execution. -
out - String matrix - Job Execution Servers
Indicates the execution servers for each job - Output is a two column matrix with Job Index and Execution Server as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If a job has multiple execution servers, there will be a row with the same index value for each required execution server. -
out - String matrix - Topology Global Inputs
Indicates the topology’s input parameters and parameter values. - Output is a four column matrix with Job Index, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
out - String matrix - Topology Requirements Inputs
Indicates requirements for specific topology resources. - Output is a 6 column matrix with Job Index, Resource Path, Name, Value, Type, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. The Resource Path column indicates the full path to the added topology resources. - The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
out - String matrix - Topology Additional Inputs
Indicates additional resource input parameters and values for the attached topology. - Output is a five column matrix with Job Index, Resource Path, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Resource Path column indicates the full path to the added topology resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
out - String matrix - Jobs Test Details
Information about the tests that were selected for this job. - Output is a nine column matrix with Job Index, Test Index, Test Path, Test Estimated Duration, State, Start Time, End Time, Result, and Report ID as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. - The Test Path column indicates the location of each test. - The State column indicates the current status for each test. - The Start Time and End Time columns indicate the execution start and end times for each test. - The Result column indicates the test status. - Concatenate the Report ID column value to the relevant IP address to create a URL to the test report. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. -
out - String matrix - Jobs Test Parameters
Parameter information for each of the job's tests. - Output is a four column matrix with Job Index, Test Index, Parameter Name and Parameter Value as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column corresponds to the value in the Test Paths matrix. - Tests with multiple parameters will have a row for each parameter, with the same Test Index value over multiple rows. -
out - String - Suite Status
Indicates the current status of the automation suite: Pending, Started, Ended or Failed to Start
out - String - Suite Result
Indicate the result of the suite: Error, Failed, Succeeded
out - String - Remaining Jobs
Indicates the number of uncompleted jobs
out - String - Start Time
Indicates the date and time when the suite began execution.
out - String - End Time
Indicates the date and time when the suite completed its execution. The value will be null if the execution hasn't yet ended.
back to TOC
back to TOC
back to TOC
back to TOC

Enqueue Custom Job

Creates a new custom job, attaches it to a new AdHoc suite, and adds it to the job queue.

- Syntax -

EnqueueCustomJob(name, description, executionServers, loggingProfile, estimatedDuration, stopOnFail, stopOnError, testPaths, testParameters, topologyName, topologyGlobalInputs, topologyRequirementsInputs, topologyAdditionalInputs, durationTimeBuffer, emailNotifications, type)

- Parameters -

TypeNameDescription
- String - Job Name
Specify the name of the job. (Limited to 50 characters)
- String - Description
Provide a short description of the job. (Limited to 500 characters)
- String matrix - Execution Servers
Specify a list of one or more execution servers for running the job. - Leave empty to run the job on any available execution server. -
- String - Logging Profile
Indicate which logging profile to use when executing the job's tests. - None, All, Results, Measurements and Results -
- Numeric - Estimated Duration
Specify the time (in minutes) it will take to complete the job - -1 indicates that the duration will be calculated automatically according to the test durations. -
- String - Stop On Fail
Indicate whether to stop the job execution if one of the tests fails.
- String - Stop On Error
Indicate whether to abort the job if any test ends with an error.
- String matrix - Test Paths
Provide the full path to each of the job's tests. - The input should be a three column matrix with Index, Test Path, and Test Estimated Duration as the column headings. - If you omit the column headings, use empty values for the top row. - The index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. - The test path column should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. -
- String matrix - Test Parameters
Specify the input parameters for each of the job's tests. - Input should be a three column matrix with Index, Parameter Name, and Parameter Value as the column headings. - If you omit the column headings, leave an empty row. - The Index column corresponds to the test index from the Test Path matrix. - If a test has multiple inputs, there will be a row with the same index value for each required parameter. -
- String - Topology Name
Specify which topology to attach to the job (Optional)
- String matrix - Topology Global Inputs
Provide a List of input parameters and parameter values for the attached topology (Optional). - Input should be a three column matrix with Name, Value, and Possible Values as the column headings. - If you omit the column headings, use empty values for the top row. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. This column is only relevant when retrieving information. -
- String matrix - Topology Requirements Inputs
Provide requirements for specific resources that must be included in the topology (Optional). - Input should be a five column matrix with Resource Path, Name, Value, Type, and Possible Values as the column headings. - If you omit the column headings, use empty values for the top row. - In the Resource Path column, specify the full path to the required resources. - In the Type column, indicate whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. This column is only relevant when retrieving information. -
- String matrix - Topology Additional Inputs
Provide a list of additional input parameters and values for the attached topology (Optional). - Input should be a four column matrix with Resource Path, Name, Value, and Possible Values as the column headings. - If you omit the column headings, use empty values for the top row. - In the Resource Path column, specify the full path to the required resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. This column is only relevant when retrieving information. -
- Numeric - Duration Time Buffer
Indicates the number of minutes to be added to the duration estimation. - Note that this parameter is used only when "Estimated Duration" is calculated automatically. -
- String - Email Notification
Specify notification trigger settings: None, Errors Only, Suite and Errors, or All.
- String - Type
Indicates the automation suite type. Default value: TestShell
back to TOC

Get Job Details

Retrieves all details and parameters for a specified job.

- Syntax -

GetJobDetails(jobId)

- Parameters -

TypeNameDescription
- String - Job Id
Specify the ID of the job to retrieve
out - String - Job Name
The name of the job associated with the specified job ID. (Limited to 50 characters)
out - String - Description
The description of the job associated with the specified job ID. (Limited to 500 characters)
out - String - Owner Name
The name of the user who created this job.
out - String - Job State
The current state of the job. Pending, Scheduled, Running, Done, Stopped, Cancelled or Failed to Start.
out - String - Job Result
The result of the job execution: Completed, Passed, Failed, Ended With Error, Ended With An Exception, Manually Stopped, Terminated, or Not Started
out - String - Job Failure Description
A short description of the reason for a failed execution. This value will be empty for a running job or for completed jobs that ran without problems.
out - String - Enqueue Time
The date and time when the job was enqueued.
out - String - Start Time
The date and time when the job started running. The value will be null if the job is still Pending or Failed to Start.
out - String - End Time
The date and time when the job stopped running. The value will be null if the job has not yet ended.
out - Numeric - Elapsed Time
The number of minutes that have elapsed since the job started. - Returns -1 if the job hasn't started yet. - Returns the job duration (in minutes) if the job has already finished. -
out - String - Use Any Execution Server
Indicates that the job owner allowed the job to run on any available server.
out - String matrix - Execution Servers
A list of Execution server names that were selected by the user for this job. This parameter will have values only if the job is still pending.
out - String - Selected Execution Server
The execution server that was selected to run the job.
out - String - Logging Profile
The selected logging profile for this job’s tests. None, All, Results, Measurements and Results
out - String - Stop On Fail
Indicate whether to stop the job execution if one of the tests fails.
out - String - Stop On Error
Indicate whether to abort the job if any test ends with an error.
out - String matrix - Test Paths
Information about the tests that were selected for this job. - Output is an eight column matrix with Index, Test Path, Test Estimated Duration, State, Start Time, End Time, Result, and Report ID as the column headings. - The Index column will display a run of unique numbers. - The Test Path column indicates the location of each test. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. - The State column indicates the current status for each test. - The Start Time and End Time columns indicate the execution start and end times for each test. - The Result column indicates the test status. - Concatenate the Report ID column value to the relevant IP address to create a URL to the test report. -
out - String matrix - Test Parameters
Parameter information for each of the job's tests. - Output will be a three column matrix with Index, Parameter Name and Parameter Value as the column headings. - The Index column corresponds to the index value in the Test Details matrix. - Tests with multiple parameters will have a row for each parameter, with the same index value over multiple rows. -
out - String - Topology Name
Indicates the name of the attached topology.
out - String matrix - Topology Global Inputs
Indicates the topology’s input parameters and parameter values. - Output is a three column matrix with Name, Value, and Possible Values as the column headings. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
out - String matrix - Topology Requirements Inputs
Indicates requirements for specific topology resources. - Output is a five column matrix with Resource Path, Name, Value, Type, and Possible Values as the column headings. - The Resource Path column indicates the full path to the added topology resources. - The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
out - String matrix - Topology Additional Inputs
Indicates additional resource input parameters and values for the attached topology. - Output is a four column matrix with Resource Path, Name, Value, and Possible Values as the column headings. - The Resource Path column indicates the full path to the added topology resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
out - Numeric - Duration Time Buffer
Indicates the number of minutes to be added to the duration estimation.
out - String - Expected Start Time
The expected execution start date and time for a job that is currently pending.
out - String - Suite Id
The ID of the suite that was used to create this job.
back to TOC
back to TOC
back to TOC
back to TOC
back to TOC
back to TOC
back to TOC
back to TOC
\ No newline at end of file diff --git a/static/api-docs/2023.3/Quali-API/Quali REST API.html b/static/api-docs/2023.3/Quali-API/Quali REST API.html deleted file mode 100644 index 1a3d55fd12..0000000000 --- a/static/api-docs/2023.3/Quali-API/Quali REST API.html +++ /dev/null @@ -1,1393 +0,0 @@ -Quali REST API Guide
- 2023.3.0 Quali API REST Reference Guide -


back to TOC
back to TOC

Get Suite Template Details

Retrieves properties of the specified automation suite template.

- Syntax -

GET http://serverAddress:tcpPort/API/Scheduling/SuiteTemplates/suiteTemplateName

- Parameters -

TypeNameDescription
- string - Suite Template Name
the name of the suite template that is used as a container for the suite
out - string - Description
Displays the automation suite description.
out - string - Type
Indicates the automation suite type.
out - string - Owner
Indicates the name of the user who created the automation suite.
out DateTimeCreate Date
Indicates the create date and time of the automation suite.
out DateTimeModification Date
Indicates the last update date and time of the automation suite.
out - string - Email Notifications
Indicates notification trigger settings: None, Errors, Suite and Errors, or All.
out - number - Remove Jobs From Queue After
- Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. - -1 Indicates that queue timeout is disabled. -
out boolEnd Reservation On End
Indicates if the suite's reservation was set to end automatically upon execution completion.
out - list - Jobs Details
Output is an object with the following properties: Name, Description, Execution Servers, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Duration Time Buffer and Type. - The suite Name column indicates the name of the parent automation suite. - The Name column indicates the name of each job. - The Description column indicates the description of each job. - The Execution Servers indicates a list of one or more execution servers for running the job. Leave empty to run the job on any available execution server. - The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) - The Estimated Duration column Indicates the number of minutes entered as the job's estimated duration. -1 indicates that the duration will be calculated automatically according to the test durations. - The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. - The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. - Duration Time Buffer indicates the number of minutes to be added to the duration estimation. - Type Indicates the automation suite type. (Default value: TestShell) - - In addition the object contains internal objects: - - Tests - Information about the tests that were selected for this job, with the following parameters: - Test path should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. - Test Duration indicates the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. - Parameters indicate Information about the input parameters for each of the tests. - - Topology - indicates the information of the attached topology, with the following parameters: - Topology Name indicates the topology name to attach to the job. - Global Inputs - Information about the input parameters and parameter values for the attached topology (Optional): Name and value. - Requirement Input - Information about the requirements for specific resources that must be included in the topology (Optional): resourcePath, name, value and path. - Additional Input - Information about additional input parameters and values for the attached topology (Optional): resourcePath, name and value. -
out - string - Existing Reservation ID
Specify existing reservation ID to use for the created suite. - This will only be possible for suites with one job and no topologies. - Note that the system doesn’t validate the number of jobs attached to the same reservation id. Validation if needed should be applied by the clients of the API. -

Example


-        Request: 	GET http://localhost:9000/API/Scheduling/SuiteTemplates/testcase 10
-        Header: 	Authorization: Basic dG9rZW4gdG9rZW4gdG9rZW4=
-      

Output

  • Suite Template
  • 
    -        Output:		HTTP STATUS: 200 OK
    -        {
    -          "SuiteTemplateName": "testcase 10",
    -          "SuiteName": null,
    -          "Description": "testcase 10",
    -          "Type": "TestShell",
    -          "Owner": "admin",
    -          "CreateDate": "2014-06-12T11:01:08",
    -          "ModificationDate": "2014-06-12T11:01:08",
    -          "EmailNotifications": "ErrorsOnly",
    -          "RemoveJobsFromQueueAfter": -1,
    -          "EndReservationOnEnd": true,
    -          "JobsDetails": [
    -          {
    -            "Name": "test case 10 job 1",
    -            "Description": "gdfgdfg",
    -            "ExecutionServers": [],
    -            "LoggingProfile": "None",
    -            "EstimatedDuration": 2,
    -            "StopOnFail": false,
    -            "StopOnError": false,
    -            "Tests": [
    -              {
    -                "TestPath": "TestShell\\Tests\\Shared\\Delay5m",
    -                "State": null,
    -                "StartTime": null,
    -                "EndTime": null,
    -                "Result": null,
    -                "ReportId": null,
    -                "Parameters": [],
    -                "EstimatedDuration": null
    -              }
    -             ],
    -            "Topology": null,
    -            "DurationTimeBuffer": 0,
    -            "EmailNotifications": null,
    -            "Type": "TestShell"
    -            }
    -          ],
    -          "ExistingReservationId": null
    -        }
    -      

    back to TOC

    Enqueue Custom SuiteEnqueue Custom Suite

    Create a new custom automation suite and add it to queue

    - Syntax -

    POST http://serverAddress:tcpPort/API/Scheduling/Suites 

    - Parameters -

    TypeNameDescription
    - string - Suite Template Name
    Specify the name of the suite template to use as a container for the suite. Empty value indicates an adHoc suite.
    - string - Suite Name
    Specify the name of the suite template to use as a container for the suite. Empty value indicates an adHoc suite.
    - string - Description
    Specify the automation suite description.
    - string - Type
    Specify the automation suite type. Default value: TestShell
    - string - Email Notifications
    Specify notification trigger settings: None, Errors Only, Suite and Errors, or All.
    - number - Remove Jobs From Queue After
    Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. -1 Indicates that queue timeout is disabled.
    boolEnd Reservation On End
    Specify if the suite's reservation should end automatically upon execution completion.
    - list - Jobs Details
    - Input is an object with the following properties: Name, Description, Execution Servers, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Duration Time Buffer and Type. - The suite Name column indicates the name of the parent automation suite. - The Name column indicates the name of each job. - The Description column indicates the description of each job. - The Execution Servers indicates a list of one or more execution servers for running the job. Leave empty to run the job on any available execution server. - The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) - The Estimated Duration column Indicates the number of minutes entered as the job's estimated duration. -1 indicates that the duration will be calculated automatically according to the test durations. - The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. - The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. - Duration Time Buffer indicates the number of minutes to be added to the duration estimation. - Type Indicates the automation suite type. (Default value: TestShell) - - In addition the object contains internal objects: - - Tests - Information about the tests that were selected for this job, with the following parameters: - Test path should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. - Test Duration indicates the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. - Parameters indicate Information about the input parameters for each of the tests. - - Topology - indicates the information of the attached topology, with the following parameters: - Name - indicates the topology name to attach to the job. - Global Inputs - Information about the input parameters and parameter values for the attached topology (Can be empty, but must exist): Name and value. - Requirement Input - Information about the requirements for specific resources that must be included in the topology (Can be empty, but must exist): resourcePath, name, value and path. - Additional Input - Information about additional input parameters and values for the attached topology (Can be empty, but must exist): resourcePath, name and value. -
    - string - Existing Reservation ID
    Specify existing reservation ID to use for the created suite. - This will only be possible for suites with one job and no topologies. - Note that the system doesn’t validate the number of jobs attached to the same reservation id. Validation if needed should be applied by the clients of the API. -
    out - string - Suite Id
    The ID of the automation suite that was created.

    Example

    
    -        Request: 	POST http://localhost:9000/API/Scheduling/Suites
    -        Header: 	Authorization: Basic dG9rZW4gdG9rZW4gdG9rZW4=
    -        Input:
    -        {
    -          "SuiteTemplateName": "testcase 10",
    -          "SuiteName": "testcase 10 ",
    -          "Description": "testcase 10",
    -          "Type": "TestShell",
    -          "Owner": "admin",
    -          "EmailNotifications": "ErrorsOnly",
    -          "RemoveJobsFromQueueAfter": -1,
    -          "EndReservationOnEnd": true,
    -          "JobsDetails": [
    -          {
    -            "Name": "test case 10 job 1",
    -            "Description": "gdfgdfg",
    -            "ExecutionServers": [],
    -            "LoggingProfile": "None",
    -            "EstimatedDuration": 2,
    -            "StopOnFail": false,
    -            "StopOnError": false,
    -            "Tests": [
    -            {
    -              "TestPath": "TestShell\\Tests\\Shared\\TestWithInputs",
    -              "State": null,
    -              "StartTime": null,
    -              "EndTime": null,
    -              "Result": null,
    -              "ReportId": null,
    -              "Parameters": [{"ParameterName":"InStr",     "ParameterValue":"a"},
    -                            {"ParameterName":"InNum",     "ParameterValue":"1"},
    -                            {"ParameterName":"InStrVect", "ParameterValue":"['b', 'c', 'd']"},
    -                            {"ParameterName":"InNumVect", "ParameterValue":"[2, 3, 4]"},
    -                            {"ParameterName":"InStrMat",  "ParameterValue":"['e', 'f', 'g';'h', 'i', 'j';]"},
    -                            {"ParameterName":"InNumMat",  "ParameterValue":"[5, 6, 7;8, 9, 10;]"}],
    -              "EstimatedDuration": null
    -            }
    -          ],
    -          "Topology": {
    -            "Name":"my topology",
    -            "GlobalInputs":[],
    -            "RequirementsInput":[],
    -            "AdditionalInput":[]
    -          },
    -          "DurationTimeBuffer": 0,
    -          "EmailNotifications": null,
    -          "Type": "TestShell"
    -          }
    -        ],
    -        "ExistingReservationId": null
    -        }
    -      

    Output

  • Suite Id
  • 
    -        Output: 	HTTP STATUS: 200 OK	"d071cd61-f958-4002-8149-a433c6fc458a"
    -      

    back to TOC

    Get Suite Details

    Retrieves the full details of a specific automation suite instance

    - Syntax -

    GET http://localhost:9000/API/Scheduling/Suites/suiteId 

    - Parameters -

    TypeNameDescription
    - string - Suite Id
    Specify the ID of the automation suite.
    out - string - Suite Template Name
    the name of the suite template that is used as a container for the suite
    out - string - Suite Name
    Indicates the name of the automation suite.
    out - string - Description
    Displays the automation suite description.
    out - string - Type
    Indicates the automation suite type.
    out - string - Owner
    Indicates the name of the user who created the automation suite.
    out - string - Email Notifications
    Indicates notification trigger settings: None, Errors, Suite and Errors, or All.
    out - number - Remove Jobs From Queue After
    Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. - -1 Indicates that queue timeout is disabled. -
    out boolEnd Reservation On End
    Indicates if the suite's reservation was set to end automatically upon execution completion.
    out - list - Jobs Details
    - Output is an object with the following properties: Name, Description, Execution Servers, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Duration Time Buffer, Type, Job State, Job Result, Start Time, End Time, Elapsed Time, Selected Execution Server and Expected Start Time. - The Name column indicates the name of each job. - The Description column indicates the description of each job. - The Execution Servers indicates a list of one or more execution servers for running the job. Leave empty to run the job on any available execution server. - The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) - The Estimated Duration column Indicates the number of minutes entered as the job's estimated duration. -1 indicates that the duration will be calculated automatically according to the test durations. - The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. - The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. - Duration Time Buffer indicates the number of minutes to be added to the duration estimation. - Type Indicates the automation suite type. (Default value: TestShell) - - In addition the object contains internal objects: - - Tests - Information about the tests that were selected for this job, with the following parameters: - Test path should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. - Test Duration indicates the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. - Parameters indicate Information about the input parameters for each of the tests. - State indicates the current status for each test, - Start Time and End Time columns indicate the execution start and end times for each test. - Result column indicates the return of the test. - Report ID, Concatenate the Report ID column value to the relevant IP address to create a URL to the test report. - Report Link is a generated link to the report. - Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. - - - Topology - indicates the information of the attached topology, with the following parameters: - Topology Name indicates the topology name to attach to the job. - Global Inputs - Information about the input parameters and parameter values for the attached topology (Optional): Name and value. - Requirement Input - Information about the requirements for specific resources that must be included in the topology (Optional): resourcePath, name, value and path. - Additional Input - Information about additional input parameters and values for the attached topology (Optional): resourcePath, name and value. -
    out - string - Suite Status
    Indicates the current status of the automation suite: Pending, Started, Ended or Failed to Start
    out - string - Suite Result
    Indicate the result of the suite: Error, Failed, Succeeded
    out - string - Remaining Jobs
    Indicates the number of uncompleted jobs
    out DateTimeStart Time
    Indicates the date and time when the suite began execution.
    out DateTimeEnd Time
    Indicates the date and time when the suite completed its execution. The value will be null if the execution hasn't yet ended.

    Example

    
    -        Request:
    -        GET http://localhost:9000/API/Scheduling/Suites/d071cd61-f958-4002-8149-a433c6fc458a
    -        Header: 	Authorization: Basic dG9rZW4gdG9rZW4gdG9rZW4=
    -      

    Output

  • Suite Details
  • 
    -       Output:		HTTP STATUS: 200 OK
    -      {
    -          "SuiteId": "d071cd61-f958-4002-8149-a433c6fc458a",
    -          "SuiteName": "#9 aaa",
    -          "SuiteTemplateName": "testcase 10",
    -          "Description": "testcase 10",
    -          "Owner": "admin",
    -          "SuiteStatus": "Pending",
    -          "SuiteResult": "",
    -          "RemainingJobs": 1,
    -          "StartTime": null,
    -          "EndTime": null,
    -          "Type": "TestShell",
    -          "RemoveJobsFromQueueAfter": -1,
    -          "EndReservationOnEnd": true,
    -          "JobsDetails": [
    -              {
    -                  "Id": "fc5eab1f-3170-4194-a878-0e2b375be8c2",
    -                  "OwnerName": "admin",
    -                  "JobState": "Pending",
    -                  "JobResult": null,
    -                  "JobFailureDescription": null,
    -                  "EnqueueTime": "2014-07-09T12:05:53",
    -                  "StartTime": "0001-01-01T00:00:00",
    -                  "EndTime": "0001-01-01T00:00:00",
    -                  "ElapsedTime": -1,
    -                  "UseAnyExecutionServer": true,
    -                  "SelectedExecutionServer": null,
    -                  "SuiteId": "d071cd61-f958-4002-8149-a433c6fc458a",
    -                  "ExpectedStartTime": null,
    -                  "Name": "test case 10 job 1",
    -                  "Description": "gdfgdfg",
    -                  "ExecutionServers": [],
    -                  "LoggingProfile": "None",
    -                  "EstimatedDuration": 2,
    -                  "StopOnFail": false,
    -                  "StopOnError": false,
    -                  "Tests": [
    -                      {
    -                          "TestPath": "TestShell\\Tests\\Shared\\Delay50sec",
    -                          "State": "Pending",
    -                          "StartTime": null,
    -                          "EndTime": null,
    -                          "Result": "Pending Execution",
    -                          "ReportId": null,
    -                          "ReportLink": "",
    -                          "Parameters": [],
    -                          "EstimatedDuration": null
    -                      }
    -                  ],
    -                  "Topology": null,
    -                  "DurationTimeBuffer": 0,
    -                  "EmailNotifications": null,
    -                  "Type": "TestShell"
    -              }
    -          ],
    -          "EmailNotifications": "ErrorsOnly"
    -      }
    -      

    back to TOC
    back to TOC
    back to TOC
    back to TOC

    Get Test Information

    Retrieves information about a test in the tests tree

    - Syntax -

    GET http://serverAddress:tcpPort/API/Scheduling/TestInfo/Local/fullFolderPath 

    - Parameters -

    TypeNameDescription
    - string - Full Test Path
    Specify the full path of the test.
    out - list - Test Info
    - Output is an object with the following properties: Name, Description, Duration, Parameters. - The Name indicates the name of test. - The Description indicates the description of the test. - The Duration indicates the estimated duration of the test (can be empty). - The Parameters indicates the list of the test's input parameters each object in the list have the following properties: Name, Description, Type, Dimension, Direction, PossibleValues - The Name indicates the name of the parameter. - The Description indicates the description of the parameter. - The Type indicates the type of the parameter: String, Numeric. - The Dimension indicates the dimension of the parameter: Scalar, Vector, Matrix. - The Direction indicates the direction of the parameter: In, InOut. - The PossibleValues indicates a list of string possible values for the parameter. -

    Example

    
    -        Request:
    -        GET http://localhost:9000/API/Scheduling/TestInfo/Local/Folder/Test1
    -        Header: 	Authorization: Basic dG9rZW4gdG9rZW4gdG9rZW4=
    -      

    Output

  • API Explorer Result
  • 
    -        Output:		HTTP STATUS: 200 OK
    -        {
    -          "Name":"Many parameters test",
    -          "Description":"Some description",
    -          "Duration":"00:10:00",
    -          "Parameters":
    -          [
    -            {"Name": "InOutStringWithPossibleValues", "Description": "", "Type": "String", "Dimension": "Scalar", "Direction": "InOut", "PossibleValues": ["Galore", "HarbeGalore"]},
    -            {"Name": "InStringVector", "Description": "", "Type": "String", "Dimension": "Vector", "Direction": "In", "PossibleValues": []},
    -            {"Name": "InNumericMatrix", "Description": "", "Type": "Numeric", "Dimension": "Matrix", "Direction": "In", "PossibleValues": []}
    -          ]
    -        }
    -      

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    Get Execution Server Details

    Get the detailes of an Execution Server

    - Syntax -

    GET http://serverAddress:tcpPort/API/Manage/ExecutionServers/executionServer1 

    - Parameters -

    TypeNameDescription
    - string - Execution Server Name
    Specify the name or id of the Execution Server.
    out - list - Execution Server Details
    - Output is an object with the following properties: Execution Server Name, Execution Server Id, State, Connection, Host Name, Operating System, Type, Running, Exclusion Reason, Available Job Slots, Available Command Slot, Job Slots Capacity, Command Slots Capacity and Attributes. - Execution Server Name indicates the name of the Execution Server. - Execution Server Id indicates the id of the Execution Server. - Status indicates if the Execution Server is excluded or included. - Connection indicates if the Execution Server is online or offline. - Host Name indicates the name of the host of the Execution Server. - Operating System indicates the type of the operating system of the Execution Server. - Type indicates the Execution Server type. - Running indicates the total number of running jobs and commands. - Exclusion Reason indicates the exclusion reason in case the Execution Server if excluded. - Available Job Slots indicates the number of free job slots. - Available Command Slot indicates the number of free command slots. - Job Slots Capacity indicates the total number of job slots configured on the Execution Server. - Command Slots Capacity indicates the total number of command slots configured on the Execution Server. - Attributes indicates the attributes configured on the Execution Server. -

    Example

    
    -        Request: 	GET http://localhost:9000/API/Manage/ExecutionServers/QS-ILTEST321
    -        Header: 	Authorization: Basic dG9rZW4gdG9rZW4gdG9rZW4=
    -      

    Output

  • Execution Servers
  • 
    -        Output: 	HTTP STATUS: 200 OK
    -        {
    -        "Name": "QS-ILTEST321",
    -        "Id": "9128b2d5-18cd-4e9e-9aed-a75f9b75e33e",
    -        "Status": "Excluded",
    -        "Connection": "Offline",
    -        "HostName": "QS-ILTEST321",
    -        "OperatingSystem": "Windows",
    -        "Type": "TestShell",
    -        "Running": 0,
    -        "ExclusionReason": "Excluded by admin",
    -        "AvailableJobSlots": 1,
    -        "AvailableCommandSlots": 20,
    -        "JobSlotsCapacity": 1,
    -        "CommandSlotsCapacity": 20,
    -        "Attributes": [
    -        {
    -        "Name": "Execution Server Selector",
    -        "Value": ""
    -        },
    -        {
    -        "Name": "Supports Ansible",
    -        "Value": "True"
    -        }
    -        ]
    -        }
    -      

    back to TOC
    back to TOC

    Enqueue Custom Job

    Creates a new custom job, attaches it to a new AdHoc suite, and adds it to the job queue.

    - Syntax -

    POST http://serverAddress:tcpPort/API/Scheduling/Queue 

    - Parameters -

    TypeNameDescription
    - string - Job Name
    Specify the name of the job. (Limited to 50 characters)
    - string - Description
    Provide a short description of the job. (Limited to 500 characters)
    - list - Execution Servers
    Specify a list of one or more execution servers for running the job. - Leave empty to run the job on any available execution server. -
    - string - Logging Profile
    Indicate which logging profile to use when executing the job's tests. - None, All, Results, Measurements and Results -
    - number - Estimated Duration
    Specify the time (in minutes) it will take to complete the job - -1 indicates that the duration will be calculated automatically according to the test durations. -
    boolStop On Fail
    Indicate whether to stop the job execution if one of the tests fails.
    boolStop On Error
    Indicate whether to abort the job if any test ends with an error.
    - list - Tests
    Tests - Information about the tests that were selected for this job, with the following parameters: - Test path should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. - Test Duration indicates the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. - Parameters indicate Information about the input parameters for each of the tests. -
    - list - Topology
    Indicates the information of the attached topology, with the following parameters: - Topology Name indicates the topology name to attach to the job. - Global Inputs - Information about the input parameters and parameter values for the attached topology (Optional): Name and value. - Requirement Input - Information about the requirements for specific resources that must be included in the topology (Optional): resourcePath, name, value and path. - Additional Input - Information about additional input parameters and values for the attached topology (Optional): resourcePath, name and value. -
    - number - Duration Time Buffer
    Indicates the number of minutes to be added to the duration estimation. - Note that this parameter is used only when "Estimated Duration" is calculated automatically. -
    - string - Email Notification
    Specify notification trigger settings: None, Errors Only, Suite and Errors, or All.
    - string - Type
    Indicates the automation suite type. Default value: TestShell

    Example

    
    -        Request: 	POST http://localhost:9000/API/Scheduling/Queue
    -        Header: 	Authorization: Basic dG9rZW4gdG9rZW4gdG9rZW4=
    -        Input:
    -        {
    -        "name": "job1",
    -        "description": null,
    -        "executionServers": [],
    -        "loggingProfile": "None",
    -        "estimatedDuration": 123,
    -        "stopOnFail": false,
    -        "stopOnError": false,
    -        "tests": [
    -        {
    -        "TestPath": "TestShell\\Tests\\Shared\\TestWithInputs",
    -        "TestDuration": "123",
    -        "Parameters": [{"ParameterName":"InStr",     "ParameterValue":"a"},
    -                       {"ParameterName":"InNum",     "ParameterValue":"1"},
    -                       {"ParameterName":"InStrVect", "ParameterValue":"['b', 'c', 'd']"},
    -                       {"ParameterName":"InNumVect", "ParameterValue":"[2, 3, 4]"},
    -                       {"ParameterName":"InStrMat",  "ParameterValue":"['e', 'f', 'g';'h', 'i', 'j';]"},
    -                       {"ParameterName":"InNumMat",  "ParameterValue":"[5, 6, 7;8, 9, 10;]"}]
    -        }
    -        ],
    -        "topology": {
    -            "Name":"my topology",
    -            "GlobalInputs":[],
    -            "RequirementsInput":[],
    -            "AdditionalInput":[]
    -        },
    -        "durationTimeBuffer": 10,
    -        "emailNotifications": "All",
    -        "type" : "TestShell"
    -        }
    -      

    Output

  • JobId
  • 
    -        Output: 	HTTP STATUS: 200 OK	"f839063d-34c6-4847-a960-00734ac79aae"
    -      

    back to TOC

    Get Job Details

    Retrieves all details and parameters for a specified job.

    - Syntax -

    GET http://serverAddress:tcpPort/API/Scheduling/Jobs/f839063d-34c6-4847-a960-00734ac79aae 

    - Parameters -

    TypeNameDescription
    - string - Job Id
    Specify the ID of the job to retrieve
    out - string - Job Name
    The name of the job associated with the specified job ID. (Limited to 50 characters)
    out - string - Description
    The description of the job associated with the specified job ID. (Limited to 500 characters)
    out - string - Owner Name
    The name of the user who created this job.
    out - string - Job State
    The current state of the job. Pending, Scheduled, Running, Done, Stopped, Cancelled or Failed to Start.
    out - string - Job Result
    The result of the job execution: Completed, Passed, Failed, Ended With Error, Ended With An Exception, Manually Stopped, Terminated, or Not Started
    out - string - Job Failure Description
    A short description of the reason for a failed execution. This value will be empty for a running job or for completed jobs that ran without problems.
    out DateTimeEnqueue Time
    The date and time when the job was enqueued.
    out DateTimeStart Time
    The date and time when the job started running. The value will be null if the job is still Pending or Failed to Start.
    out DateTimeEnd Time
    The date and time when the job stopped running. The value will be null if the job has not yet ended.
    out - number - Elapsed Time
    The number of minutes that have elapsed since the job started. - Returns -1 if the job hasn't started yet. - Returns the job duration (in minutes) if the job has already finished. -
    out boolUse Any Execution Server
    Indicates that the job owner allowed the job to run on any available server.
    out - list - Execution Servers
    A list of Execution server names that were selected by the user for this job. This parameter will have values only if the job is still pending.
    out - string - Selected Execution Server
    The execution server that was selected to run the job.
    out - string - Logging Profile
    The selected logging profile for this job’s tests. None, All, Results, Measurements and Results
    out boolStop On Fail
    Indicate whether to stop the job execution if one of the tests fails.
    out boolStop On Error
    Indicate whether to abort the job if any test ends with an error.
    out - list - Tests
    - Tests - Information about the tests that were selected for this job, with the following parameters: - Test path should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. - Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. - State column indicates the current status for each test. - Start Time and End Time columns indicate the execution start and end times for each test. - Result column indicates the test result. - Report ID, Concatenate the Report ID column value to the relevant IP address to create a URL to the test report. - Report Link is a generated link to the report. - Parameters indicate Information about the input parameters for each of the tests. -
    out - list - Topology
    Indicates the information of the attached topology, with the following parameters: - Topology Name indicates the topology name to attach to the job. - Global Inputs - Information about the input parameters and parameter values for the attached topology (Optional): Name and value. - Requirement Input - Information about the requirements for specific resources that must be included in the topology (Optional): resourcePath, name, value and path. - Additional Input - Information about additional input parameters and values for the attached topology (Optional): resourcePath, name and value. -
    out - number - Duration Time Buffer
    Indicates the number of minutes to be added to the duration estimation.
    out DateTimeExpected Start Time
    The expected execution start date and time for a job that is currently pending.
    out - string - Suite Id
    The ID of the suite that was used to create this job.

    Example

    
    -        Request:
    -        GET http://localhost:9000/API/Scheduling/Jobs/f839063d-34c6-4847-a960-00734ac79aae
    -        Header: 	Authorization: Basic dG9rZW4gdG9rZW4gdG9rZW4=
    -      

    Output

  • Job Details
  • 
    -        Output: 	HTTP STATUS: 200 OK
    -        {
    -          "Id": "f839063d-34c6-4847-a960-00734ac79aae",
    -          "OwnerName": "admin",
    -          "JobState": "Scheduled",
    -          "JobResult": null,
    -          "JobFailureDescription": null,
    -          "EnqueueTime": "2014-07-08T11:56:11",
    -          "StartTime": "0001-01-01T00:00:00",
    -          "EndTime": "0001-01-01T00:00:00",
    -          "ElapsedTime": -1,
    -          "UseAnyExecutionServer": true,
    -          "SelectedExecutionServer": "QS-IL-LT-MENIB",
    -          "SuiteId": "2a1b1bfc-eb57-4a52-90aa-5c5186e1c67f",
    -          "ExpectedStartTime": "2014-07-08T23:24:00",
    -          "Name": "job1",
    -          "Description": "",
    -          "ExecutionServers": [],
    -          "LoggingProfile": "None",
    -          "EstimatedDuration": 123,
    -          "StopOnFail": false,
    -          "StopOnError": false,
    -          "Tests": [
    -            {
    -              "TestPath": "TestShell\\Tests\\Shared\\Delay3m1r_4",
    -              "State": "Pending",
    -              "StartTime": null,
    -              "EndTime": null,
    -              "Result": "Pending Execution",
    -              "ReportId": null,
    -              "ReportLink": "",
    -              "Parameters": [],
    -              "EstimatedDuration": 123
    -            }
    -          ],
    -          "Topology": null,
    -          "DurationTimeBuffer": 10,
    -          "EmailNotifications": “All”,
    -          "Type": "TestShell"
    -        }
    -      

    back to TOC

    Get Queued Jobs

    Retrieves the list of all jobs that are currently in the job queue.

    - Syntax -

    GET http://serverAddress:tcpPort/API/Scheduling/Queue 

    - Parameters -

    TypeNameDescription
    out - list - Queued Jobs
    Output is an seven column matrix with Job ID, Job Name, Owner, Enqueue Time, Job Details Url, Expected Start Time, and Suite Id as the column headings. - Job ID indicates the ID of each job. - Job Name indicates the name of the job. - Suite Id indicates the ID of the automation suite that was used to create each job. - Owner indicates name of the user who initiated each job. - Enqueue Time indicates the date and time that each job was added to the queue. - Expected Start Time indicates each job's expected execution start date and time. - Job Details Url indicates the link address to the REST function that retrieves the full details of the job. -

    Example

    
    -        Request: 	GET http://localhost:9000/API/Scheduling/Queue
    -        Header: 	Authorization: Basic dG9rZW4gdG9rZW4gdG9rZW4=       
    -      

    Output

  • Queued Jobs
  • 
    -        Output: 	HTTP STATUS: 200 OK
    -        [
    -          {
    -            "JobId": "12f9911c-56bc-41fa-b0c1-eb6101ebc883",
    -            "SuiteId": "d39e53fc-7922-4c80-80ce-aa1d2f3c5957",
    -            "JobName": "job1",
    -            "OwnerName": "admin",
    -            "EnqueueTime": "2014-07-08T11:50:16",
    -            "JobDetailsUrl": "http://localhost:9000/api/Scheduling/Jobs/12f9911c-56bc-41fa-b0c1-eb6101ebc883",
    -            "ExpectedStartTime": "2014-07-08T16:36:00"
    -          },
    -          {
    -            "JobId": "4efe96ab-5117-4a0e-ac92-3b054620bdfd",
    -            "SuiteId": "c66f9fec-692e-4d50-8ec7-5eff3fa686c5",
    -            "JobName": "job1",
    -            "OwnerName": "admin",
    -            "EnqueueTime": "2014-07-08T11:49:27",
    -            "JobDetailsUrl": "http://localhost:9000/api/Scheduling/Jobs/4efe96ab-5117-4a0e-ac92-3b054620bdfd",
    -            "ExpectedStartTime": "2014-07-08T14:20:00"
    -          }
    -        ]
    -      

    back to TOC

    Get Running Jobs

    Retrieves the list of all jobs that are currently running

    - Syntax -

    GET http://localhost:9000/API/Scheduling/Executions 

    - Parameters -

    TypeNameDescription
    out - list - Running Jobs
    Output is a nine column matrix with Job ID, JobName, Owner, Start Time, Execution Server, Current Test, Current Test ID, Total Tests, and suiteId as the column headings. - Job ID indicates the ID of each running job. - JobName indicates the name of the job. - suiteId indicates the ID of the automation suite that was used to create each job. - Owner indicates name of the user who initiated each job. - Start Time indicates when each job was started. - Execution Server indicates the name of the execution server running each job. - Current Test indicates the test that is currently being executed for each running job. - Current Test ID indicates the ID of the currently running test. - Total Tests indicates the number of tests for each running job. -

    Example

    
    -        Request: 	GET http://serverAddress:tcpPort/API/Scheduling/Executions
    -        Header: 	Authorization: Basic dG9rZW4gdG9rZW4gdG9rZW4=
    -      

    Output

  • Running Jobs
  • 
    -        Output: 	HTTP STATUS: 200 OK
    -        [
    -          {
    -            "JobId": "42c97f6d-6388-41c5-b5f1-b7a7ae04aa7b",
    -            "SuiteId": "9f9a090c-570a-40e6-b560-b34fb8ce4e0f",
    -            "JobName": "test case 10 job 1",
    -            "OwnerName": "admin",
    -            "StartTime": "2014-07-08T12:34:00",
    -            "ExecutionServer": "QS-IL-LT-MENIB",
    -            "CurrentTestPath": "TestShell\\Tests\\Shared\\Delay5m",
    -            "CurrentTestId": 1,
    -            "TotatlTests": 1,
    -            "JobDetailsUrl": "http://localhost:9000/api/Scheduling/Jobs/42c97f6d-6388-41c5-b5f1-b7a7ae04aa7b"
    -          }
    -        ]
    -
    -      

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    \ No newline at end of file diff --git a/static/api-docs/2023.3/TestShell-API/TestShell API Library.html b/static/api-docs/2023.3/TestShell-API/TestShell API Library.html deleted file mode 100644 index 8955f9fe00..0000000000 --- a/static/api-docs/2023.3/TestShell-API/TestShell API Library.html +++ /dev/null @@ -1,2451 +0,0 @@ -TestShell API Guide
    - 2023.3.0 TestShell API Library Reference Guide -


    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    CreateImmediateReservation

    Defines a reservation to be started immediately.

    - Syntax -

    CreateImmediateReservation(reservationName,owner,durationInMinutes,notifyOnStart,notifyOnSetupComplete,notifyOnEnd,notificationMinutesBeforeEnd,topology,globalInputs,requirementsInputs,additionalInfoInputs, out reservationId, out resultXml);

    - Parameters -

    TypeNameDescription
    - String - Reservation Name
    Specify the name of the reservation.
    - String - Reservation Owner
    Specify the user name of the reservation owner.
    - Numeric - Duration
    Specify the length of the reservation. (in minutes)
    - String - Notify On Start
    Indicate whether to notify the reservation owner when the reservation starts.
    - String - Notify On End
    Indicate whether to notify the reservation owner when the reservation ends.
    - Numeric - Notification Minutes Before End
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    - String - Topology Full Path
    Specify the full topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    - String matrix - Global Inputs
    Global inputs associated with the specified topology. For example: {['Input Name', 'Value';]}.
    - String matrix - Requirements Inputs
    Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity.
    - String matrix - Additional Info Inputs
    Additional info inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value';]}.
    - String - Notify On Setup Complete
    Indicate whether to notify the reservation owner when the reservation setup completes.
    - String - Protects the sandbox from being terminated
    Indicate whether to protect the reservation from being terminated.
    - String - Approval Sid
    Leave empty. Used for internal purposes.
    out - String - Reservation ID
    Reservation’s unique identifier (string).
    out - String - Result XML
    Specify the variable for the XML output.
    back to TOC

    CreateReservation

    Defines a new reservation.

    - Syntax -

    CreateReservation(reservationName,owner,startTime,endTime,notifyOnStart,notifyOnSetupComplete,notifyOnEnd,notificationMinutesBeforeEnd, topology, globalInputs, requirementsInputs, additionalInfoInputs, out reservationId, out resultXml);

    - Parameters -

    TypeNameDescription
    - String - Reservation Name
    Specify the name of the reservation.
    - String - Reservation Owner
    Specify the user name of the reservation owner.
    - String - Start Time
    The start time of the reservation.
    - String - End Time
    The end time of the reservation.
    - String - Notify On Start
    Indicate whether to notify the reservation owner when the reservation starts.
    - String - Notify On End
    Indicate whether to notify the reservation owner when the reservation ends.
    - Numeric - Notification Minutes Before End
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    - String - Topology Full Path
    Specify the full topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    - String matrix - Global Inputs
    Global inputs associated with the specified topology. For example: {['Input Name', 'Value';]}.
    - String matrix - Requirements Inputs
    Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity.
    - String matrix - Additional Info Inputs
    Additional info inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value';]}.
    - String - Notify On Setup Complete
    Indicate whether to notify the reservation owner when the reservation setup completes.
    - String - Protects the sandbox from being terminated
    Indicate whether to protect the reservation from being terminated.
    - String - Approval Sid
    Leave empty. Used for internal purposes.
    out - String - Reservation ID
    Reservation’s unique identifier (string).
    out - String - Result XML
    Specify the variable for the XML output.
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    FindResources

    Retrieves resources that match all the specified search parameters, and all reservations associated with the search results.

    - Syntax -

    FindResources(resourceFamily,resourceModel,attributeValues,showAllDomains,resourceFullName,exactName,includeSubResources,resourceAddress,resourceUniqueIdentifier,maxResults,includeExcludedResources,out resources,out reservations,out usageSummary,out resultXml);

    - Parameters -

    TypeNameDescription
    - String - Resource Family
    Specify the name of the resource family.
    - String - Resource Model
    Specify the resource model.
    - String matrix - Attribute Values
    Specify an array of one or more attributes and attribute values.
    out - String matrix - Resources
    All resources that match the specified query conditions.
    - String - Show All Domains
    Show all domains associated with the logged in user.
    - String - Resource Full Name
    Specify part of or the full name of the resource.
    - String - Exact Name
    Specify whether to search the exact given name or not.
    - String - Include Sub Resources
    Specify whether to retrieve the sub resources once the parent matches the name.
    - String - Resource Address
    Specify the resource address. Can be partial (e.g. '192.168.').
    - String - Resource Unique Identifier
    Specify the resource unique identifier.
    - Numeric - Max Results
    Specify the maximum number of resources to return.
    - String - Include Excluded Resources
    Specify whether to retrieve resources that are excluded
    out - String matrix - Reservations
    All reservations for the resources that match the specified query conditions.
    out - String matrix - Usage Summary
    Specify the number used connected resources, this data will be available only on top level resource.
    out - String - Result XML
    Specify the variable for the XML output.
    back to TOC

    FindResourcesInTimeRange

    Retrieves resources that match all the specified search parameters, and all reservations in the specified time range associated with the search results.

    - Syntax -

    FindResourcesInTimeRange(resourceFamily,resourceModel,fromTime,untilTime,attributeValues,showAllDomains,resourceFullName,exactName,includeSubResources,resourceAddress,resourceUniqueIdentifier,maxResults,out resources,out reservations,out usageSummary,out resultXml);

    - Parameters -

    TypeNameDescription
    - String - Resource Family
    Specify the name of the resource family.
    - String - Resource Model
    Specify the resource model.
    - String - From Date Time
    Specify from which future time and date to check the resource's availability.
    - String - Until Date Time
    Specify until which time and date to check the resource's availability.
    - String matrix - Attribute Values
    Specify an array of one or more attributes and attribute values.
    - String - Show All Domains
    Show all domains associated with the logged in user.
    - String - Resource Full Name
    Specify part of or the full name of the resource.
    - String - Exact Name
    Specify whether to search the exact given name or not.
    - String - Include Sub Resources
    Specify whether to retrieve the sub resources once the parent matches the name.
    - String - Resource Address
    Specify the resource address. Can be partial (e.g. '192.168.').
    - String - Resource Unique Identifier
    Specify the resource unique identifier.
    - Numeric - Max Results
    Specify the maximum number of resources to return.
    out - String matrix - Resources
    All resources that match the specified query conditions.
    out - String matrix - Reservations
    All reservations for the resources that match the specified query conditions.
    out - String matrix - Usage Summary
    Specify the number used connected resources, this data will be available only on top level resource.
    out - String - Result XML
    Specify the variable for the XML output.
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    GetReservationDetails

    Retrieves all details and parameters for a specified reservation, including its resources, routes and route segments, topologies, and reservation conflicts.The data cached for 5 seconds.

    - Syntax -

    GetReservationDetails(reservationId, disableCache, out name, out description, out creationTime, out startTime, out endTime,out reservationStatus, out provisioningStatus, out resources, out conflicts, out topologies,out topologyResources, out topologyRoutes, out topologyRouteSegments, out topologyInstructions, out connectedRoutes,out connectedRoutesSegments,out reservationRoutes, out reservationRouteSegments, out permittedUsers, out domainName, out topologyResourcesAttributes, out connectors, out connectorAttributes, out liveStatus,out services, out serviceAttributes, out apps,out setupStage, out resultXml);

    - Parameters -

    TypeNameDescription
    - String - Reservation ID
    Specify the string that represents the reservation’s unique identifier.
    - String - Disable Cache
    Specify if the reservation detail is new or cached
    out - String - Reservation Name
    The name of the reservation associated with the specified reservation ID.
    out - String - Description
    The description of the reservation associated with the specified reservation ID.
    out - String - Creation Date Time
    The creation time and date for the specified reservation.
    out - String - Start Date Time
    The start time and date for the specified reservation.
    out - String - End Date Time
    The end time and date for the specified reservation.
    out - String - Reservation Status
    Indicates the current reservation status.
    out - String - Provisioning Status
    Indicates the current provisioning status.
    out - String matrix - Resources
    Resources and their associated values for the specified reservation.
    out - String matrix - Resource Conflicts
    Resource conflicts and their associated values for the specified reservation.
    out - String matrix - Topologies
    Topologies and their associated values for the specified reservation.
    out - String matrix - Topology Resources
    Topology resources and their associated values for the specified reservation.
    out - String matrix - Route
    Topology routes in the specified reservation.
    out - String matrix - Segments
    Segment details for topology routes in the specified reservation. Each route is comprised of one or more segments.
    out - String matrix - Topology Instructions
    Topology instructions.
    out - String matrix - Connected Routes
    Routes currently connected in the specified reservation.
    out - String matrix - Connected Routes Segments
    Segment details for connected routes in the specified reservation. Each route is comprised of one or more segments.
    out - String matrix - Reservation Routes
    Routes in the specified reservation.
    out - String matrix - Reservation Route Segments
    Segment details for routes in the specified reservation. Each route is comprised of one or more segments.
    out - String matrix - Permitted Users
    Lists users with [active | full] access to the specified reservation.
    out - String - Domain Name
    The domain name of the specified reservation.
    out - String matrix - Topology Resources Attributes
    Topology resources and their associated attribute changes for the specified reservation.
    out - String matrix - Connectors
    Visual connectors associated with the specified reservation.
    out - String matrix - ConnectorAttributes
    Visual connectors attributes associated with a specified connector.
    out - String matrix - liveStatus
    Gets the live status of the reservations.
    out - String matrix - Services
    Matrix of service instances.
    out - String matrix - ServiceAttributes
    Matrix of attributes of the services.
    out - String matrix - Apps
    Apps associated with the specified reservation..
    out - String - Apps
    Reservation's setup stage
    out - String - Result XML
    Specify the variable for the XML output.
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    GetTopologyDetails

    Retrieves all resources and attributes associated with the specified topology.

    - Syntax -

    GetTopologyDetails(topologyFullPath,out owner,out instructions,out resources,out attributes,out abstractResources,out abstractResourcesAttributes,out abstractResourcesRequiredAttributes,out routes,out driver,out globalInputs,out requirementsInputs,out additionalInfoInputs,out connectors,out connectorAttributes,out alias,out type,out state,out parentTopology,out services,out serviceAttributes,out apps, out maxDuration, out resultXml);

    - Parameters -

    TypeNameDescription
    - String - Topology Full Path
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    out - String - Owner
    Owner of the topology.
    out - String - Instructions
    Topology instructions.
    out - String matrix - Resources
    Resources and resource values associated with the specified topology.
    out - String matrix - Attributes
    Attributes and attribute values for resources associated with the specified topology.
    out - String matrix - Abstract Resources
    Abstract resources and their associated values for the specified topology.
    out - String matrix - Abstract Resources Attributes
    Attributes and attribute values for all abstract resources associated with the specified topology.
    out - String matrix - Abstract Resources Required Attributes
    Required attributes and attribute values for all abstract resources associated with the specified topology (multiple possible values for a single attribute are displayed in different rows).
    out - String matrix - Route
    Routes and route endpoints associated with the specified topology.
    out - String - Driver Name
    The name of the driver associated with this topology.
    out - String matrix - Global Inputs
    Global inputs associated with the specified topology.
    out - String matrix - Requirements Inputs
    Requirements inputs associated with the specified topology.
    out - String matrix - Additional Info Inputs
    Additional info inputs associated with the specified topology.
    out - String matrix - Connector
    Connectors associated with the specified topology.
    out - String matrix - ConnectorAttributes
    Visual connectors attributes associated with a specified connector.
    out - String - Topology Type
    The Type of the topology.
    out - String - Topology State
    The State of the topology.
    out - String matrix - Parent Topology
    The Topology from which this topology was created.
    out - String matrix - PermittedEditors
    List of permitted editors names.
    out - String matrix - Services
    Matrix of service instances.
    out - String matrix - ServiceAttributes
    Matrix of attributes of the services.
    out - String matrix - Apps
    Matrix of apps.
    out - String - Maximum Duration
    The maximun amount of time this topology can be reserved.
    out - String - Result XML
    Specify the variable for the XML output.
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    \ No newline at end of file diff --git a/static/api-docs/2023.3/TestShell-API/TestShell Python API.html b/static/api-docs/2023.3/TestShell-API/TestShell Python API.html deleted file mode 100644 index 0ce57ab2d4..0000000000 --- a/static/api-docs/2023.3/TestShell-API/TestShell Python API.html +++ /dev/null @@ -1,2677 +0,0 @@ -TestShell Python API
    - 2023.3.0 TestShell API Python Reference Guide -


    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    CreateImmediateTopologyReservationCreate an imminent reservation.

    Defines a reservation to be started immediately. The reservation will start regardless of conflicting resources.

    - Syntax -

    CreateImmediateTopologyReservation(reservationName, owner, durationInMinutes=0, notifyOnStart=False, notifyOnSetupComplete=False, notifyOnEnd=False, notificationMinutesBeforeEnd=0, topologyFullPath, globalInputs=[], requirementsInputs=[], additionalInfoInputs=[])

    - Parameters -

    TypeNameDescription
    - string - reservationName
    Specify the name of the reservation.
    - string - owner
    Specify the user name of the reservation owner.
    - number - durationInMinutes
    Specify the length of the reservation. (in minutes)
    - boolean - notifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    - boolean - notifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    - number - notificationMinutesBeforeEnd
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    - string - topologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    - list - globalInputs
    Global inputs associated with the specified topology.
    For example: [UpdateTopologyGlobalInputsRequest('param-name','value')]
    - list - requirementsInputs
    - Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. - - The Value field can be used to input to requirement fields with different operator types. - - If pass value as is, it will be treated as "equals", for example if pass "5" it will indicate to system that seek requirement that fulfills =5 - Other operators (aside from equals) can be fulfilled using this convention: - in the value field, write use the format symbol[space]value - for example - - for numeric values - > 4 - < 4 - >= 4 - <= 4 - = 4 - != 4 - - for textual values - = "hi there" - != "hi there" - startswith hi there - endswith hi there - contains hi there - doesnotcontain hi there -
    - list - additionalInfoInputs
    Additional info inputs associated with the specified topology.
    - boolean - notifyOnSetupComplete
    Indicate whether to notify the reservation owner when the reservation setup completes.

    Example

    
    -				# Create Inputs
    -				globalInput = cloudshell_api.UpdateTopologyGlobalInputsRequest("input1", "value1")
    -				requirementsInput = cloudshell_api.UpdateTopologyRequirementsInputsRequest("Resource1", "input2", "value2", "Attributes")
    -				additionalInfoInput = cloudshell_api.UpdateTopologyAdditionalInfoInputsRequest("Resource2", "input3", "value3")
    -
    -				# Create Reservation
    -				cloudshell_api_session.CreateImmediateTopologyReservation("Res1", "admin", 30, True, False, 0, "Temp Automation Resources/TP1", globalInput, requirementsInput, additionalInfoInput)
    -			

    back to TOC
    back to TOC

    CreatePersistentReservationCreate a reservation.

    Defines a new reservation.

    - Syntax -

    CreatePersistentReservation(reservationName, owner, startTime, notifyOnStart=False, notifyOnEnd=False)

    - Parameters -

    TypeNameDescription
    - string - reservationName
    Specify the name of the reservation.
    - string - owner
    Specify the user name of the reservation owner.
    - string - startTime
    The start time of the reservation.
    - boolean - notifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    - boolean - notifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    - string - topologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    - list - globalInputs
    Global inputs associated with the specified topology. For example: {['Input Name', 'Value';]}.
    - list - requirementsInputs
    Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity.
    - list - additionalInfoInputs
    Additional info inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value';]}.
    - boolean - notifyOnSetupComplete
    Indicate whether to notify the reservation owner when the reservation setup completes.

    Example

    cloudshell_api_session.CreateReservation("Res1", "admin", "2015-01-01T10:00:00", True, False)

    back to TOC

    CreateTopologyReservationCreate a reservation.

    Defines a new reservation.

    - Syntax -

    CreateTopologyReservation(reservationName, owner, startTime, endTime, notifyOnStart=False, notifyOnSetupComplete=False, notifyOnEnd=False, notificationMinutesBeforeEnd=0, topologyFullPath, globalInputs=[], requirementsInputs=[], additionalInfoInputs=[])

    - Parameters -

    TypeNameDescription
    - string - reservationName
    Specify the name of the reservation.
    - string - owner
    Specify the user name of the reservation owner.
    - string - startTime
    The start time of the reservation.
    - string - endTime
    The end time of the reservation.
    - boolean - notifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    - boolean - notifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    - number - notificationMinutesBeforeEnd
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    - string - topologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    - list - globalInputs
    Global inputs associated with the specified topology.
    - list - requirementsInputs
    - Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. - - The Value field can be used to input to requirement fields with different operator types. - - If pass value as is, it will be treated as "equals", for example if pass "5" it will indicate to system that seek requirement that fulfills =5 - Other operators (aside from equals) can be fulfilled using this convention: - in the value field, write use the format symbol[space]value - for example - - for numeric values - > 4 - < 4 - >= 4 - <= 4 - = 4 - != 4 - - for textual values - = "hi there" - != "hi there" - startswith hi there - endswith hi there - contains hi there - doesnotcontain hi there -
    - list - additionalInfoInputs
    Additional info inputs associated with the specified topology.
    - boolean - notifyOnSetupComplete
    Indicate whether to notify the reservation owner when the reservation setup completes.

    Example

    
    -				# Create Inputs
    -				globalInput = cloudshell_api.UpdateTopologyGlobalInputsRequest("input1", "value1")
    -				requirementsInput = cloudshell_api.UpdateTopologyRequirementsInputsRequest("Resource1", "input2", "value2", "Attributes")
    -				additionalInfoInput = cloudshell_api.UpdateTopologyAdditionalInfoInputsRequest("Resource2", "input3", "value3")
    -
    -				# Create Reservation
    -				cloudshell_api_session.CreateTopologyReservation("Res1", "admin", "2015-01-01T10:00:00", "2015-01-01T11:00:00", True, False, 0, "Temp Automation Resources/TP1", globalInput, requirementsInput, additionalInfoInput)
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC

    CreateRoutesInReservationCreate routes between the listed source and target resources.

    Create routes between the listed source and target resources. Routes will be created for each pair of source and target resources.

    - Syntax -

    CreateRouteInReservation(reservationId, sourceResourcesFullPath=[], targetResourcesFullPath=[], overrideActiveRoutes=False, mappingType, maxHops=0, routeAlias, isShared=False)

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - list - sourceResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    - list - targetResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    - boolean - overrideActiveRoutes
    Specify whether the new route can override existing routes.
    - string - mappingType
    Specify bidirectional or unidirectional as the mapping type.
    - number - maxHops
    Specify the maximum number or allowed hops.
    - string - routeAlias
    Specify the route’s alias.
    - boolean - isShared
    Specify whether these routes are shared. Shared routes can be used in more than one reservation.

    Example

    cloudshell_api_session.CreateRoutesInReservation("28cb2a71-c8fc-4f41-a22b-e65685ebed14", ["Router 1234/Port 1"], ["GenericResource 1234/Port 1"], False, "bi", 2, "a route", False)

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    FindResources

    Retrieves resources that match all the specified search parameters, and all reservations associated with the search results.

    - Syntax -

    FindResources(resourceFamily, resourceModel, attributeValues=[], showAllDomains=False, resourceFullName, exactName=True, includeSubResources=True, resourceAddress, resourceUniqueIdentifier, maxResults=500, includeExcludedResources=False)

    - Parameters -

    TypeNameDescription
    - string - resourceFamily
    Specify the name of the resource family.
    - string - resourceModel
    Specify the resource model.
    - list - attributeValues
    Specify an array of one or more attributes and attribute values.
    - boolean - showAllDomains
    Show all domains associated with the logged in user.
    - string - resourceFullName
    Specify part of or the full name of the resource.
    - boolean - exactName
    Specify whether to search the exact given name or not.
    - boolean - includeSubResources
    Specify whether to retrieve the sub resources once the parent matches the name.
    - string - resourceAddress
    Specify the resource address. Can be partial (e.g. '192.168.').
    - string - resourceUniqueIdentifier
    Specify the resource unique identifier.
    - number - maxResults
    Specify the maximum number of resources to return.
    - boolean - includeExcludedResources
    Specify whether to retrieve resources that are excluded

    Example

    
    -				attrValue = cloudshell_api.AttributeNameValue("attrName", "attrValue")
    -
    -				cloudshell_api_session.FindResources("familyName", "modelName", [attrValue], True, "Router 1234", True, True, "192.168.41.67", "resourceId", 100, False)
    -			

    back to TOC

    FindResourcesInTimeRange

    Retrieves resources that match all the specified search parameters, and all reservations in the specified time range associated with the search results.

    - Syntax -

    FindResourcesInTimeRange(resourceFamily, resourceModel, fromTime, untilTime, attributeValues=[], showAllDomains=False, resourceFullName, exactName=True, includeSubResources=True, resourceAddress, resourceUniqueIdentifier, maxResults=500)

    - Parameters -

    TypeNameDescription
    - string - resourceFamily
    Specify the name of the resource family.
    - string - resourceModel
    Specify the resource model.
    - string - fromTime
    Specify from which future time and date to check the resource's availability.
    - string - untilTime
    Specify until which time and date to check the resource's availability.
    - list - attributeValues
    Specify an array of one or more attributes and attribute values.
    - boolean - showAllDomains
    Show all domains associated with the logged in user.
    - string - resourceFullName
    Specify part of or the full name of the resource.
    - boolean - exactName
    Specify whether to search the exact given name or not.
    - boolean - includeSubResources
    Specify whether to retrieve the sub resources once the parent matches the name.
    - string - resourceAddress
    Specify the resource address. Can be partial (e.g. '192.168.').
    - string - resourceUniqueIdentifier
    Specify the resource unique identifier.
    - number - maxResults
    Specify the maximum number of resources to return.

    Example

    
    -				attrValue = cloudshell_api.AttributeNameValue("attrName", "attrValue")
    -
    -				cloudshell_api_session.FindResourcesInTimeRange("familyName", "modelName", "03/01/2012 00:00", "05/31/2012 23:59", [attrValue], True, "Router 1234", True, True, "192.168.41.67", "resourceId", 100, False)
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    GetTopologyUrlsRetrieve Topology Urls.

    Retrieves topology urls to the blueprint for every domain that the blueprint belongs to.

    - Parameters -

    TypeNameDescription
    - string - topologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    UpdateReservationNameChange a reservation name.

    Modifies the name for a specified reservation.

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the reservation ID.
    - string - name
    Provide an updated name of the reservation. This text will replace the current name.
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    CreateBlueprintApprovalRequestCreate a new blueprint approval request.

    Create a new approval request.

    - Syntax -

    CreateBlueprintApprovalRequest(entityId, requestNotes="", globalInputs=[], requirementsInputs=[], additionalInfoInputs=[], startTime="", endTime="", duration="")

    - Parameters -

    TypeNameDescription
    - string - entityId
    Unique identifier of the entity (Blueprint id).
    - string - requestNotes
    Request description (optional).
    - list - globalInputs
    Global inputs associated with the specified topology. For example: {['Input Name', 'Value';]}.
    - list - requirementsInputs
    Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity.
    - list - additionalInfoInputs
    Additional info inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value';]}.
    - string - startTime
    Start time of the request (leave empty to immediately request approval).
    - string - endTime
    End time of the request, after which the request will be invalid (leave empty for unlimited request time).
    - string - duration
    Time in minutes to consume the entity. For example, sandbox duration (leave empty for unlimited consumption time).

    Example

    
    -				# Create Inputs
    -				globalInput = cloudshell_api.UpdateTopologyGlobalInputsRequest("input1", "value1")
    -				requirementsInput = cloudshell_api.UpdateTopologyRequirementsInputsRequest("Resource1", "input2", "value2", "Attributes")
    -				additionalInfoInput = cloudshell_api.UpdateTopologyAdditionalInfoInputsRequest("Resource2", "input3", "value3")
    -				
    -				# Create Request
    -				cloudshell_api_session.CreateBlueprintApprovalRequest("de6f5e37-e3e3-46d0-b915-07a1f30c07d4", "Request notes", globalInputs, requirementsInputs, additionalInfoInputs, "2023-01-01T12:00:00", "2023-02-0212:00:00", "60")
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    \ No newline at end of file diff --git a/static/api-docs/2023.3/TestShell-API/TestShell TCL API.html b/static/api-docs/2023.3/TestShell-API/TestShell TCL API.html deleted file mode 100644 index 2d9d12f11a..0000000000 --- a/static/api-docs/2023.3/TestShell-API/TestShell TCL API.html +++ /dev/null @@ -1,3465 +0,0 @@ -TestShell TCL API
    - 2023.3.0 TestShell API TCL Reference Guide -


    ActivateTopologyActivate a topology.

    Resolves all connectivity requests in the sandbox, and marks unshared resources as "in use".

    - Syntax -

    ::TestShellAPI::ActivateTopology reservationId topologyFullPath ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - topologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::ActivateTopology $reservationId "Temp Automation Resources/TP1" resultXml

    Output

  • resultXml
  • -				<ResponseInfo Name="TP1" MachineName="PRODUCT-W7 - Tcl" Username="admin" Topology="TP1">
    -				<Resources>
    -				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.43.240/1/1" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="Shutdown" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    -				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    -				<ResourceAttribute Name="Speed" Value="10 Mbps" Type="Lookup"/>
    -				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    -				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    -				</ResourceAttributes>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/GenericResource 1234/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.43.240/1/2" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="Shutdown" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    -				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    -				<ResourceAttribute Name="Speed" Value="1 Gbps" Type="Lookup"/>
    -				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    -				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    -				</ResourceAttributes>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/GenericResource 1234/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 3" FolderFullPath="Temp Automation Resources" Address="3" FullAddress="192.168.43.240/1/3" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="Shutdown" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    -				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    -				<ResourceAttribute Name="Speed" Value="1 Gbps" Type="Lookup"/>
    -				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    -				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    -				</ResourceAttributes>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Lab Routers/Router 1234/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				</ResourceInfo>
    -				</Resources>
    -				<Routes>
    -				<Route Source="Temp Automation Resources/GenericResource 1234/Port 1" Target="Lab Routers/Router 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Temp Automation Resources/GenericResource 1234/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3" Target="Lab Routers/Router 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Lab Routers/Router 1234/Port 1" Target="Temp Automation Resources/GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Lab Routers/Router 1234/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2" Target="Temp Automation Resources/GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				<Connectors>
    -				</Connectors>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    AddRoutesToReservationReserve specified routes.

    Adds (but does not connect) routes between all pairs of source and target endpoints, adding additional connectivity ports when required. Use ConnectRoutesInReservation to connect the routes.

    - Syntax -

    ::TestShellAPI::AddRoutesToReservation reservationId sourceResourcesFullPath targetResourcesFullPath mappingType maxHops routeAlias isShared ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - list - sourceResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    - list - targetResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    - string - mappingType
    Specify bidirectional or unidirectional as the mapping type.
    Use 'bi' for bidirectional mapping or 'uni' for unidirectional mapping.
    - number - maxHops
    Specify the maximum number or allowed hops.
    - string - routeAlias
    Specify the route’s alias.
    - boolean - isShared
    Specify whether these routes are shared. Shared routes can be used in more than one reservation.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::AddRoutesToReservation $reservationId {"Router 1234/Port 1"} {"GenericResource 1234/Port 1"} bi 2 "a route" 0 resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    CreateImmediateReservationCreate an imminent reservation.

    Defines a reservation to be started immediately.

    - Syntax -

    ::TestShellAPI::CreateImmediateReservation reservationName owner durationInMinutes notifyOnStart notifyOnSetupComplete notifyOnEnd notificationMinutesBeforeEnd isTerminationProtectionEnabled ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - reservationName
    Specify the name of the reservation.
    - string - owner
    Specify the user name of the reservation owner.
    - number - durationInMinutes
    Specify the length of the reservation. (in minutes)
    - boolean - notifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    - boolean - notifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    - number - notificationMinutesBeforeEnd
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    - boolean - isTerminationProtectionEnabled
    Indicate whether to protect the reservation from being terminated.
    - string - approvalSid
    Leave empty. Used for internal purposes.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateImmediateReservation "immediate reservation" "admin" 30 0 0 0 0 resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Reservation Id="28cb2a71-c8fc-4f41-a22b-e65685ebed14" Name="Immediate reservation" StartTime="2012-06-20T15:05:00" EndTime="2012-06-20T15:35:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Active" ActualEndTime="" CreateDate="2012-06-20T15:05:06" ModificationDate="2012-06-20T15:05:06">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    -			

    back to TOC

    CreateImmediateTopologyReservationCreate an imminent reservation.

    Defines a reservation to be started immediately. The reservation will start regardless of conflicting resources.

    - Syntax -

    ::TestShellAPI::CreateImmediateTopologyReservation reservationName owner durationInMinutes notifyOnStart notifyOnSetupComplete notifyOnEnd notificationMinutesBeforeEnd topologyFullPath globalInputs requirementsInputs additionalInfoInputs ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - reservationName
    Specify the name of the reservation.
    - string - owner
    Specify the user name of the reservation owner.
    - number - durationInMinutes
    Specify the length of the reservation. (in minutes)
    - boolean - notifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    - boolean - notifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    - number - notificationMinutesBeforeEnd
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    - string - topologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    - list - globalInputs
    Global inputs associated with the specified topology.
    - list - requirementsInputs
    - Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. - - The Value field can be used to input to requirement fields with different operator types. - - If pass value as is, it will be treated as "equals", for example if pass "5" it will indicate to system that seek requirement that fulfills =5 - Other operators (aside from equals) can be fulfilled using this convention: - in the value field, write use the format symbol[space]value - for example - - for numeric values - > 4 - < 4 - >= 4 - <= 4 - = 4 - != 4 - - for textual values - = "hi there" - != "hi there" - startswith hi there - endswith hi there - contains hi there - doesnotcontain hi there -
    - list - additionalInfoInputs
    Additional info inputs associated with the specified topology.
    - boolean - notifyOnSetupComplete
    Indicate whether to notify the reservation owner when the reservation setup completes.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateImmediateTopologyReservation "immediate reservation" "admin" 30 0 0 0 0 "Temp Automation Resources/TP1" {{"GlobalInputName_0" "GlobalInputValue_0"} {"GlobalInputName_1" "GlobalInputValue_1"}} {{"ResourceName_0" "RequiredInputName_0" "RequiredInputValue_0" "RequiredInputType_0"}} {{"ResourceName_0" "AdditionalInfoName_0" "AdditionalInfoValue_0"}} resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Reservation Id="28cb2a71-c8fc-4f41-a22b-e65685ebed14" Name="Immediate reservation" StartTime="2012-06-20T15:05:00" EndTime="2012-06-20T15:35:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Active" ActualEndTime="" CreateDate="2012-06-20T15:05:06" ModificationDate="2012-06-20T15:05:06">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    -			

    back to TOC

    CreateReservationCreate a reservation.

    Defines a new reservation.

    - Syntax -

    ::TestShellAPI::CreateReservation reservationName owner startTime endTime notifyOnStart notifyOnSetupComplete notifyOnEnd notificationMinutesBeforeEnd ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - reservationName
    Specify the name of the reservation.
    - string - owner
    Specify the user name of the reservation owner.
    - string - startTime
    The start time of the reservation.
    - string - endTime
    The end time of the reservation.
    - boolean - notifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    - boolean - notifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    - number - notificationMinutesBeforeEnd
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    - boolean - isTerminationProtectionEnabled
    Indicate whether to protect the reservation from being terminated.
    - string - approvalSid
    Leave empty. Used for internal purposes.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateReservation "test reservation" "admin" "01/01/2026 00:00" "12/21/2026 00:00" 1 1 0 0 0 "" resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Reservation Id="af626b88-458b-4e7a-9054-c03d8cffa260" Name="test reservation" StartTime="2015-01-01T10:00:00" EndTime="2015-01-01T11:00:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Pending" ActualEndTime="" CreateDate="2012-06-20T10:40:47" ModificationDate="2012-06-20T10:40:47">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    -			

    back to TOC

    CreateTopologyReservationCreate a reservation.

    Defines a new reservation.

    - Syntax -

    ::TestShellAPI::CreateTopologyReservation reservationName owner startTime endTime notifyOnStart notifyOnSetupComplete notifyOnEnd notificationMinutesBeforeEnd topologyFullPath globalInputs requirementsInputs additionalInfoInputs ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - reservationName
    Specify the name of the reservation.
    - string - owner
    Specify the user name of the reservation owner.
    - string - startTime
    The start time of the reservation.
    - string - endTime
    The end time of the reservation.
    - boolean - notifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    - boolean - notifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    - number - notificationMinutesBeforeEnd
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    - string - topologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    - list - globalInputs
    Global inputs associated with the specified topology.
    - list - requirementsInputs
    - Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. - - The Value field can be used to input to requirement fields with different operator types. - - If pass value as is, it will be treated as "equals", for example if pass "5" it will indicate to system that seek requirement that fulfills =5 - Other operators (aside from equals) can be fulfilled using this convention: - in the value field, write use the format symbol[space]value - for example - - for numeric values - > 4 - < 4 - >= 4 - <= 4 - = 4 - != 4 - - for textual values - = "hi there" - != "hi there" - startswith hi there - endswith hi there - contains hi there - doesnotcontain hi there -
    - list - additionalInfoInputs
    Additional info inputs associated with the specified topology.
    - boolean - notifyOnSetupComplete
    Indicate whether to notify the reservation owner when the reservation setup completes.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateTopologyReservation "test reservation" "admin" "01/01/1970 00:00" "12/21/2012 00:00" 1 1 10 "Temp Automation Resources/TP1" {{"GlobalInputName_0" "GlobalInputValue_0"} {"GlobalInputName_1" "GlobalInputValue_1"}} {{"ResourceName_0" "RequiredInputName_0" "RequiredInputValue_0" "RequiredInputType_0"}} {{"ResourceName_0" "AdditionalInfoName_0" "AdditionalInfoValue_0"}} resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Reservation Id="af626b88-458b-4e7a-9054-c03d8cffa260" Name="test reservation" StartTime="2015-01-01T10:00:00" EndTime="2015-01-01T11:00:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Pending" ActualEndTime="" CreateDate="2012-06-20T10:40:47" ModificationDate="2012-06-20T10:40:47">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    -			

    back to TOC

    CreateResourceAdd a new resource.

    Adds a new resource.

    - Syntax -

    ::TestShellAPI::CreateResource resourceFamily resourceModel resourceName resourceAddress folderFullPath parentResourceFullPath resourceDescription ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - resourceFamily
    Specify the name of the resource family (optional).
    - string - resourceModel
    Specify the resource model.
    - string - resourceName
    Specify the resource name.
    - string - resourceAddress
    Specify the resource address.
    - string - folderFullPath
    Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.
    - string - parentResourceFullPath
    Specify the full path from the root to a parent resource, separated by slashes. For example: Traffic Generators/Generic.
    - string - resourceDescription
    Provide a short description to help identify the resource.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    -
    #create chassis -
    ::TestShellAPI::CreateResource "Generic Chassis" "Generic Chassis Model" "Router 1234" "192.168.1.200" "Lab Routers" "" "a generic router" resultXml -
    #create a child port for the chassis -
    ::TestShellAPI::CreateResource "Generic Port" "Generic Port Model" "Port 1" "1" "Lab Routers" "Router 1234" "a generic router port" resultXml -

    Output

  • resultXml
  • -				<ResponseInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.200" FullAddress="192.168.1.200" RootAddress="192.168.1.200" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Locked="false" Excluded="false" Description="a generic router">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<Domains/>
    -				<ChildResources/>
    -				<LockInfo/>
    -				</ResponseInfo>
    -				<ResponseInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.200/1" RootAddress="192.168.1.200" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="false" Excluded="false" Description="a generic router port">
    -				<ResourceAttributes/>
    -				<Domains/>
    -				<ChildResources/>
    -				<LockInfo/>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC

    CreateRouteInReservationCreate a route between two resources.

    Creates a route between the specified source and target resources.

    - Syntax -

    ::TestShellAPI::CreateRouteInReservation reservationId sourceResourceFullPath targetResourceFullPath overrideActiveRoutes mappingType maxHops routeAlias isShared ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - sourceResourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - string - targetResourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - boolean - overrideActiveRoutes
    Specify whether the new route can override existing routes.
    - string - mappingType
    Specify bidirectional or unidirectional as the mapping type.
    - number - maxHops
    Specify the maximum number or allowed hops.
    - string - routeAlias
    Specify the route’s alias.
    - boolean - isShared
    Specify whether this route is shared. Shared routes can be used in more than one reservation.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateRouteInReservation $reservationId "Router 1234/Port 1" "GenericResource 1234/Port 1" 1 bi 2 "a route" 0 resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC

    CreateRoutesInReservationCreate routes between the listed source and target resources.

    Create routes between the listed source and target resources. Routes will be created for each pair of source and target resources.

    - Syntax -

    ::TestShellAPI::CreateRoutesInReservation reservationId sourceResourcesFullPath targetResourcesFullPath overrideActiveRoutes mappingType maxHops routeAlias isShared ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - list - sourceResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    - list - targetResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    - boolean - overrideActiveRoutes
    Specify whether the new route can override existing routes.
    - string - mappingType
    Specify bidirectional or unidirectional as the mapping type.
    Use 'bi' for bidirectional mapping or 'uni' for unidirectional mapping.
    - number - maxHops
    Specify the maximum number or allowed hops.
    - string - routeAlias
    Specify the route’s alias.
    - boolean - isShared
    Specify whether these routes are shared. Shared routes can be used in more than one reservation.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateRoutesInReservation $reservationId {"Router 1234/Port 1"} {"GenericResource 1234/Port 2"} 1 uni 2 "uni route" 0 resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 2" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    ExecuteResourceConnectedCommand

    Executes a command for the specified driver.

    - Syntax -

    ::TestShellAPI::ExecuteResourceConnectedCommand reservationId resourceFullPath commandName commandTag parameterValues connectedPortsFullPath printOutput ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - resourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RouterA/Port1.
    - string - commandName
    Specify the name of the command.
    - string - commandTag
    Specify the command tag. Connected command tags are used to define categories of functionality (e.g 'virtualization').
    - list - parameterValues
    Specify the list of parameters values required for executing the command.
    - list - connectedPortsFullPath
    Specify the list of connected ports to use in this operation. Include the full path from the root resource to each port, separated by slashes. For example: Switch20/Blade5/PowerPort1. Leave blank to perform the connected operation on all of the specified resource’s connected ports.
    - boolean - printOutput
    Defines whether to print the command output in the reservation command output window.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::ExecuteResourceConnectedCommand $reservationId "Router 1234" "SpinUp" "virtualization" {"abcd" "2"} {"Router 1234/Port1"} 1 resultXml

    Output

  • resultXml
  • <ResponseInfo Output="success"/>

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    CheckoutFromPoolCheckout from pool

    Request to checkout an item from a pool.

    - Syntax -

    ::TestShellAPI::CheckoutFromPool selectionCriteriaJson ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - selectionCriteriaJson
    Json string that represents a selection request for an item or multiple items from a pool.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.
    back to TOC

    ReleaseFromPoolRelease from pool

    Request to release an item from a pool.

    - Syntax -

    ::TestShellAPI::ReleaseFromPool values poolId reservationId ownerId ?resultXml?

    - Parameters -

    TypeNameDescription
    - list - values
    Values to release from the pool.
    - string - poolId
    The specific pool where to search for the values that you want to release.
    - string - reservationId
    Reservation id that is assoicated with the pool values. It can also be an empty string if the values are not associated with a reservation.
    - string - ownerId
    The owner of the pool values.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    FindResources

    Retrieves resources that match all the specified search parameters, and all reservations associated with the search results.

    - Syntax -

    ::TestShellAPI::FindResources resourceFamily resourceModel attributeValues showAllDomains resourceFullName exactName includeSubResources resourceAddress resourceUniqueIdentifier maxResults includeExcludedResources ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - resourceFamily
    Specify the name of the resource family.
    - string - resourceModel
    Specify the resource model.
    - list - attributeValues
    Specify an array of one or more attributes and attribute values.
    - boolean - showAllDomains
    Show all domains associated with the logged in user.
    - string - resourceFullName
    Specify part of or the full name of the resource.
    - boolean - exactName
    Specify whether to search the exact given name or not.
    - boolean - includeSubResources
    Specify whether to retrieve the sub resources once the parent matches the name.
    - string - resourceAddress
    Specify the resource address. Can be partial (e.g. '192.168.').
    - string - resourceUniqueIdentifier
    Specify the resource unique identifier.
    - number - maxResults
    Specify the maximum number of resources to return.
    - boolean - includeExcludedResources
    Specify whether to retrieve resources that are excluded
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::FindResources "Generic Chassis" resourceModel {{"SW_Version1.3"}} "true" resourceFullName exactName includeSubResources resourceAddress resourceUniqueIdentifier maxResults includeExcludedResources resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Resources>
    -				<Resource Name="Router 1234" Description="a new description for the resource" Address="192.168.1.201" FullName="Lab Routers/Router 1234" FullPath="Lab Routers/Router 1234" FullAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Status="Available" Permission="ReadOnly">
    -				<Reservations/>
    -				<UsageSummary NumOfNotInReservation="130" NumOfReserved="14" NumOfShared="0"/>
    -				</Resource>
    -				</Resources>
    -				</ResponseInfo>
    -			

    back to TOC

    FindResourcesInTimeRange

    Retrieves resources that match all the specified search parameters, and all reservations in the specified time range associated with the search results.

    - Syntax -

    ::TestShellAPI::FindResourcesInTimeRange resourceFamily resourceModel fromTime untilTime attributeValues showAllDomains resourceFullName exactName includeSubResources resourceAddress resourceUniqueIdentifier maxResults ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - resourceFamily
    Specify the name of the resource family.
    - string - resourceModel
    Specify the resource model.
    - string - fromTime
    Specify from which future time and date to check the resource's availability.
    - string - untilTime
    Specify until which time and date to check the resource's availability.
    - list - attributeValues
    Specify an array of one or more attributes and attribute values.
    - boolean - showAllDomains
    Show all domains associated with the logged in user.
    - string - resourceFullName
    Specify part of or the full name of the resource.
    - boolean - exactName
    Specify whether to search the exact given name or not.
    - boolean - includeSubResources
    Specify whether to retrieve the sub resources once the parent matches the name.
    - string - resourceAddress
    Specify the resource address. Can be partial (e.g. '192.168.').
    - string - resourceUniqueIdentifier
    Specify the resource unique identifier.
    - number - maxResults
    Specify the maximum number of resources to return.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::FindResourcesInTimeRange "Generic Chassis" resourceModel "03/01/2012 00:00" "05/31/2012 23:59" {{"SW_Version1.3"}} "false" resourceFullName exactName includeSubResources resourceAddress resourceUniqueIdentifier maxResults resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Resources>
    -				<Resource Name="Router 1234" Description="a new description for the resource" Address="192.168.1.201" FullName="Lab Routers/Router 1234" FullPath="Lab Routers/Router 1234" FullAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Status="Available" Permission="ReadOnly">
    -				<Reservations/>
    -				<UsageSummary NumOfNotInReservation="130" NumOfReserved="14" NumOfShared="0"/>
    -				</Resource>
    -				</Resources>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC

    GetRoutesSolutionGet solution for specified routes.

    Calculates possible routes between the supplied endpoints and returns their details, without saving, connecting or modifying the reservation in any way.

    - Syntax -

    ::TestShellAPI::GetRoutesSolution reservationId sourceResourcesFullPath targetResourcesFullPath mappingType maxHops isShared ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - list - sourceResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RootResourceName/ResourceName
    - list - targetResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RootResourceName/ResourceName
    - string - mappingType
    Specify bidirectional or unidirectional as the mapping type.
    Use 'bi' for bidirectional mapping or 'uni' for unidirectional mapping.
    - number - maxHops
    Specify the maximum number or allowed hops.
    - boolean - isShared
    Specify whether these routes are shared. Shared routes can be used in more than one reservation.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetRoutesSolution $reservationId {"Router 1234/Port 1"} {"GenericResource 1234/Port 1"} bi 2 0 resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    GetGroupsDetailsRetrieve all system groups.

    Retrieves all groups, including members, roles and associated domains for each group.

    - Syntax -

    ::TestShellAPI::GetGroupsDetails ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetGroupsDetails resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Groups>
    -				<Group Name="System Administrators" Description="Built in group, all members have administrative rights." GroupRole="SystemAdmin">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users>
    -				<User Name="admin" IsAdmin="true" IsActive="true" IsDomainAdmin="false">
    -				<Groups>
    -				<Group Name="System Administrators" Description="Built in group, all members have administrative rights.">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				<Group Name="Lab1">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Lab1" Description="" Id="71aa4f7e-174d-4df1-b50a-59e98f09005c"/>
    -				</TestShellDomains>
    -				</Group>
    -				</Groups>
    -				</User>
    -				</Users>
    -				</Group>
    -				<Group Name="Domain Administrators" Description="Built in group, all members have administrative Domain rights." GroupRole="DomainAdmin">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users>
    -				<User Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="true" Email="">
    -				<Groups>
    -				<Group Name="Domain Administrators" Description="Built in group, all members have administrative Domain rights.">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				</Groups>
    -				</User>
    -				</Users>
    -				</Group>
    -				<Group Name="QA_Users" Description="QA users" GroupRole="Regular">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users>
    -				<User Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="user1234@work.com">
    -				<Groups>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				<Group Name="QA_Users" Description="QA users">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				</Groups>
    -				</User>
    -				<User Name="User2345" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="">
    -				<Groups>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				<Group Name="QA_Users" Description="QA users">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				</Groups>
    -				</User>
    -				</Users>
    -				</Group>
    -				<Group Name="RND_Users" GroupRole="Regular">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users/>
    -				</Group>
    -				</Groups>
    -				</ResponseInfo>
    -			

    back to TOC

    GetLockedResourcesRetrieve a list of locked resources.

    Retrieves locked resources for a specific user, a specific computer, or a specific folder. If none of these are specified, this method retrieves the list of locked resources for all users, on all machines, in all folders.

    - Syntax -

    ::TestShellAPI::GetLockedResources user machine folderFullPath ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - user
    Specify a user name to retrieve locked resources for that user.
    - string - machine
    Specify a machine name to retrieve locked resources for that computer.
    - string - folderFullPath
    Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetLockedResources admin "" "" resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Reservations>
    -				<Reservation Name="Immediate reservation" Owner="admin" Created="2012-06-20T15:05:06">
    -				<LockedResources>
    -				<Resource Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="true" Excluded="false"/>
    -				<Resource Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="true" Excluded="false"/>
    -				</LockedResources>
    -				</Reservation>
    -				</Reservations>
    -				</ResponseInfo>
    -			

    back to TOC

    GetReservationDetailsRetrieve reservation details and parameters.

    Retrieves all details and parameters for a specified reservation, including its resources, routes and route segments, topologies, and reservation conflicts.The data cached for 5 seconds.

    - Syntax -

    ::TestShellAPI::GetReservationDetails reservationId disableCache ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - boolean - disableCache
    Specify if the reservation detail is new or cached
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetReservationDetails $reservationId true resultXml

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="GetReservationDescriptionResponseInfo">
    -				<ReservationDescription Id="a97ce9c2-48eb-420e-85b7-2318106c35a3" Name="Sandbox-5-16-2017 15-59" StartTime="16/05/2017 15:59:00" EndTime="16/05/2017 17:59:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Started" ProvisioningStatus="Not Run" ActualEndTime="" CreateDate="16/05/2017 15:59:21" ModificationDate="16/05/2017 16:01:38" DomainName="Global">
    -				<Topologies>
    -				<TopologyName>Environment-03-02-2015 18-21</TopologyName>
    -				</Topologies>
    -				<TopologiesInfo>
    -				<Topology Name="Environment-03-02-2015 18-21" Alias="Environment-03-02-2015 18-21">
    -				<Type>Regular</Type>
    -				<State>Pending</State>
    -				</Topology>
    -				</TopologiesInfo>
    -				<PermittedUsers>
    -				<PermittedUser>admin</PermittedUser>
    -				</PermittedUsers>
    -				<Resources>
    -				<ReservedResource Name="Database_ec513a05" FolderFullPath="" FullAddress="NA" Shared="false" Availability="Available" Locked="false" Released="false" ResourceFamilyName="Generic App Family" ResourceModelName="Generic App Model" CreatedByUser="admin" CreatedInDomain="Global" CreatedInReservation="a97ce9c2-48eb-420e-85b7-2318106c35a3">
    -				<VmDetails UID="4232175a-6a64-bb3c-1cca-e8699845549b" CloudProviderFullName="testing">
    -				<VmCustomParams>
    -				<VmCustomParam Name="ip_regex" Value="" />
    -				<VmCustomParam Name="auto_power_on" Value="True" />
    -				<VmCustomParam Name="auto_power_off" Value="True" />
    -				<VmCustomParam Name="wait_for_ip" Value="True" />
    -				<VmCustomParam Name="auto_delete" Value="True" />
    -				<VmCustomParam Name="refresh_ip_timeout" Value="600" />
    -				<VmCustomParam Name="autoload" Value="True" />
    -				</VmCustomParams>
    -				</VmDetails>
    -				<AppDetails AppName="Database" />
    -				</ReservedResource>
    -				</Resources>
    -				<TopologiesReservedResources />
    -				<Conflicts />
    -				<TopologiesRouteInfo />
    -				<TopologiesResourcesAttributeInfo />
    -				<TopologiesInstructionsInfo />
    -				<ActiveRoutesInfo />
    -				<RequestedRoutesInfo />
    -				<Connectors />
    -				<Apps>
    -				<ReservedApp Name="MonitoringApp">
    -				<LogicalResource Family="Monitoring" Model="DefaultMonitoring"/>
    -				</ReservedApp>
    -				</Apps>
    -				<ReservationLiveStatus ReservationId="a97ce9c2-48eb-420e-85b7-2318106c35a3" />
    -				<SetupStage>None</SetupStage>
    -				<Services />
    -				</ReservationDescription>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    GetResourceDetailsRetrieve the resource parameters and attributes.

    Retrieves resource descriptions for the specified resource, and a matrix of all its associated attributes and attribute values.

    - Syntax -

    ::TestShellAPI::GetResourceDetails resourceFullPath showAllDomains ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - resourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - boolean - showAllDomains
    Show all domains associated with the logged in user.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourceDetails "Lab Routers/Router 1234" 0 resultXml

    Output

  • resultXml
  • -				<ResponseInfo Name="Router 1234" DriverName="Router Driver" FolderFullPath="Lab Routers" Address="192.168.1.200" FullAddress="192.168.1.200" RootAddress="192.168.1.200" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Locked="false" Excluded="false" Description="a generic router" Permissions="ReadOnly" ResourceLiveStatusName="name1" ResourceLiveStatusDescription="description1" >
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"></ResourceAttribute>
    -				</ResourceAttributes>
    -				<Domains></Domains>
    -				<ChildResources>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.200/1" RootAddress="192.168.1.200" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="false" Excluded="false" Description="a generic router port" Permissions="ReadOnly">
    -				<ResourceAttributes></ResourceAttributes>
    -				<Domains></Domains>
    -				<LockInfo></LockInfo>
    -				</ResourceInfo>
    -				</ChildResources>
    -				<LockInfo></LockInfo>
    -				<CreatedInReservation></CreatedInReservation>
    -				<CreatedByUser></CreatedByUser>
    -				<CreatedInDomain></CreatedInDomain>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    GetTopologyDetailsRetrieve the topology parameters and attributes.

    Retrieves all resources and attributes associated with the specified topology.

    - Syntax -

    ::TestShellAPI::GetTopologyDetails topologyFullPath ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - topologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetTopologyDetails "Temp Automation Resources/TP1" resultXml

    Output

  • resultXml
  • -				<ResponseInfo Name="TP1" Owner="admin" Type="Build" State="Ready">
    -				<Resources>
    -				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false" Excluded="false" WillBeLocked="false">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				</ResourceInfo>
    -				</Resources>
    -				<AbstractResources/>
    -				<Routes>
    -				<Route Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				<Instructions>
    -				Topology instructions.
    -				</Instructions>
    -				<Driver>
    -				ExampleTopologyDriver
    -				</Driver>
    -				<GlobalInputs ParamName="Some global input"></GlobalInputs>
    -				<RequirementsInputs ParamName="Model" ResourceName="test*" InputType="Models">
    -				<PossibleValues>Test Model</PossibleValues>
    -				</RequirementsInputs>
    -				<RequirementsInputs ParamName="Speed" ResourceName="test*" InputType="Attributes">
    -				<PossibleValues>10 Mbps</PossibleValues>
    -				<PossibleValues>100 Mbps</PossibleValues>
    -				<PossibleValues>1 Gbps</PossibleValues>
    -				<PossibleValues>10 Gbps</PossibleValues>
    -				</<RequirementsInputs>
    -				<AdditionalInfoInputs ParamName="Test" ResourceName="test*"></AdditionalInfoInputs>
    -				<ParentTopology Name="Template01">
    -				<Type>Build</Type>
    -				<State>Pending</State>
    -				</ParentTopology>
    -				<MaxDuration>02:00:00</MaxDuration>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    RemoveAttributeRestrictedValuesremove attribute restrictions

    remove attribute restrictions from family/model

    - Syntax -

    ::TestShellAPI::RemoveAttributeRestrictedValues removeAttributeRestrictionRequests ?resultXml?

    - Parameters -

    TypeNameDescription
    - list - removeAttributeRestrictionRequests
    Attribute restrictions to remove".
    - string - ?resultXml?
    Specify the variable for the XML output.
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    RemoveRoutesFromReservationRemove routes from a reservation.

    Disconnects a list of endpoints and removes the mapped route between them. Will only disconnect endpoints using resources reserved to the logged-in user .

    - Syntax -

    ::TestShellAPI::RemoveRoutesFromReservation reservationId endpoints mappingType ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - list - endpoints
    The list of removed endpoints.
    - string - mappingType
    Specify bidirectional or unidirectional as the mapping type.
    Use 'bi' for bidirectional mapping or 'uni' for unidirectional mapping.
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::RemoveRoutesFromReservation $reservationId {"Router 1234/Port 1" "GenericResource 1234/Port 1" "Router 1234/Port 1" "GenericResource 1234/Port 2"} bi resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" Alias="a route" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" Alias="uni route" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 2" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    SaveReservationAsTopologyCreate a topology from an existing active reservation.

    Creates a topology from an existing reservation. Leave the folder path blank to save the topology directly under the root.

    - Syntax -

    ::TestShellAPI::SaveReservationAsTopology reservationId folderFullPath topologyName includeInactiveRoutes ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - folderFullPath
    Full container folder path where the new topology will be saved. leaving the folder path empty will try saving the topology under the root. For example: FolderName/FolderNameA.
    - string - topologyName
    Specify the new name for the new topology.
    - boolean - includeInactiveRoutes
    Include disconnected routes in the created topology
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SaveReservationAsTopology $reservationId "Temp Automation Resources" TP1 1 resultXml

    Output

  • resultXml
  • -				<ResponseInfo Name="TP1">
    -				<Resources>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Studio" Username="admin" Created="2012-06-20T17:20:37"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Studio" Username="admin" Created="2012-06-20T17:20:37"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="true" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T17:20:37"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false" Excluded="false" WillBeLocked="false">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				</Resources>
    -				<AbstractResources/>
    -				<Routes>
    -				<Route Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    SetRouteAttributesSet a route's attributes.

    Sets attributes and associated values for a specified route.

    - Syntax -

    ::TestShellAPI::SetRouteAttributes reservationId sourceResourceFullPath targetResourceFullPath applyChangesTo attributeRequests ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - sourceResourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - string - targetResourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - string - applyChangesTo
    Specify on which resources to apply the attribute changes: Source/Target/All.Source refers to the resource connected to the source endpoint of the route. Target refers to the resource connected to the target endpoint of the route. All encompasses all route resources.
    Use 0 for Source, 1 for Target and 2 for All.
    - list - attributeRequests
    Specify an array of attributes and associated attribute values.
    - string - ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SetRouteAttributes $reservationId "Router 1234/Port 1" "GenericResource 1234/Port 1" 2 {"SW_Version" "1.3"} resultXml

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    CreateBlueprintApprovalRequestCreate a new blueprint approval request.

    Create a new approval request.

    - Syntax -

    ::TestShellAPI::CreateBlueprintApprovalRequest entityId requestNotes globalInputs requirementsInputs additionalInfoInputs startTime endTime duration ?resultXml?

    - Parameters -

    TypeNameDescription
    - string - entityId
    Unique identifier of the entity (Blueprint id).
    - string - requestNotes
    Request description (optional).
    - list - globalInputs
    Global inputs associated with the specified topology. For example: {['Input Name', 'Value';]}.
    - list - requirementsInputs
    Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity.
    - list - additionalInfoInputs
    Additional info inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value';]}.
    - string - startTime
    Start time of the request (leave empty to immediately request approval).
    - string - endTime
    End time of the request, after which the request will be invalid (leave empty for unlimited request time).
    - string - duration
    Time in minutes to consume the entity. For example, sandbox duration (leave empty for unlimited consumption time).
    - string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateBlueprintApprovalRequest de6f5e37-e3e3-46d0-b915-07a1f30c07d4 "request notes" {{"GlobalInputName_0" "GlobalInputValue_0"} {"GlobalInputName_1" "GlobalInputValue_1"}} {{"ResourceName_0" "RequiredInputName_0" "RequiredInputValue_0" "RequiredInputType_0"}} {{"ResourceName_0" "AdditionalInfoName_0" "AdditionalInfoValue_0"}} 2023-01-01T12:00:00 2023-02-0212:00:00 60 resultXml

    Output

  • resultXml
  • <ResponseInfo xsi:type="CreateApprovalRequestResponseInfo" Id="3"/>

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    \ No newline at end of file diff --git a/static/api-docs/2023.3/TestShell-API/TestShell XML RPC API.html b/static/api-docs/2023.3/TestShell-API/TestShell XML RPC API.html deleted file mode 100644 index 0ce96aeed8..0000000000 --- a/static/api-docs/2023.3/TestShell-API/TestShell XML RPC API.html +++ /dev/null @@ -1,7199 +0,0 @@ -TestShell XML RPC API
    - 2023.3.0 TestShell API XML RPC Reference Guide -


    Introduction

    - Using the XML RPC API requires setting several http request headers. - NOTE: ASCII decimal characters 0-31 are invalid inputs, not including 9, 10, and 13 -

    - Parameters -

    TypeNameDescription
    - string - Content-Type
    text/xml
    - string - Content-Length
    The length in bytes of the request content
    - string - DateTimeFormat
    The time format to use for sending and receiving date/time values (e.g. "MM/dd/yyyy HH:mm")
    - string - ClientTimeZoneId
    The time zone Id (e.g 'Central America Standard Time'). You can obtain the full list of time zones supported by the server using the GetServerTimeZones API request
    - string - Authorization
    - A string of the format: Token=xoV3libZzEG/ii7ZQqAuqw==;MachineName=y - The Authorization header must be set after successfully login after using the “Logon” or "SecureLogon" API, by using the Token returned in the Logon response. Prior to making the response the value of this header should have the value ‘Unset’ -
    back to TOC

    ActivateTopologyActivate a topology.

    Resolves all connectivity requests in the sandbox, and marks unshared resources as "in use".

    - Syntax -

    -			<ActivateTopology>
    -			<reservationId>{reservationId}</reservationId>
    -			<topologyFullPath>{topologyFullPath}</topologyFullPath>
    -			</ActivateTopology>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - topologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

    Example

    
    -				<ActivateTopology>
    -				<reservationId>af626b88-458b-4e7a-9054-c03d8cffa260</reservationId>
    -				<topologyFullPath>Temp Automation Resources/TP1</topologyFullPath>
    -				</ActivateTopology>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo Name="TP1" MachineName="PRODUCT-W7 - Tcl" Username="admin" Topology="TP1">
    -				<Resources>
    -				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.43.240/1/1" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="Shutdown" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    -				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    -				<ResourceAttribute Name="Speed" Value="10 Mbps" Type="Lookup"/>
    -				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    -				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    -				</ResourceAttributes>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/GenericResource 1234/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.43.240/1/2" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="Shutdown" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    -				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    -				<ResourceAttribute Name="Speed" Value="1 Gbps" Type="Lookup"/>
    -				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    -				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    -				</ResourceAttributes>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/GenericResource 1234/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 3" FolderFullPath="Temp Automation Resources" Address="3" FullAddress="192.168.43.240/1/3" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="Shutdown" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    -				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    -				<ResourceAttribute Name="Speed" Value="1 Gbps" Type="Lookup"/>
    -				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    -				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    -				</ResourceAttributes>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Lab Routers/Router 1234/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				</ResourceInfo>
    -				</Resources>
    -				<Routes>
    -				<Route Source="Temp Automation Resources/GenericResource 1234/Port 1" Target="Lab Routers/Router 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Temp Automation Resources/GenericResource 1234/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3" Target="Lab Routers/Router 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Lab Routers/Router 1234/Port 1" Target="Temp Automation Resources/GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Lab Routers/Router 1234/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2" Target="Temp Automation Resources/GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				<Connectors>
    -				</Connectors>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    AddRoutesToReservationReserve specified routes.

    Adds (but does not connect) routes between all pairs of source and target endpoints, adding additional connectivity ports when required. Use ConnectRoutesInReservation to connect the routes.

    - Syntax -

    -			<AddRoutesToReservation>
    -			<reservationId>{reservationId}</reservationId>
    -			<sourceResourcesFullPath>
    -			<string>{string}</string>
    -			</sourceResourcesFullPath>
    -			<targetResourcesFullPath>
    -			<string>{string}</string>
    -			</targetResourcesFullPath>
    -			<mappingType>{mappingType}</mappingType>
    -			<maxHops>{maxHops}</maxHops>
    -			<routeAlias>{routeAlias}</routeAlias>
    -			<isShared>{isShared}</isShared>
    -			</AddRoutesToReservation>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - list - sourceResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    - list - targetResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    - string - mappingType
    Specify bidirectional or unidirectional as the mapping type.
    - number - maxHops
    Specify the maximum number or allowed hops.
    - string - routeAlias
    Specify the route’s alias.
    - boolean - isShared
    Specify whether these routes are shared. Shared routes can be used in more than one reservation.

    Example

    
    -				<AddRoutesToReservation>
    -				<reservationId>28cb2a71-c8fc-4f41-a22b-e65685ebed14</reservationId>
    -				<sourceResourcesFullPath>
    -				<string>Router 1234/Port 1</string>
    -				</sourceResourcesFullPath>
    -				<targetResourcesFullPath>
    -				<string>GenericResource 1234/Port 1</string>
    -				</targetResourcesFullPath>
    -				<mappingType>bi</mappingType>
    -				<maxHops>2</maxHops>
    -				<routeAlias>a route</routeAlias>
    -				<isShared>0</isShared>
    -				</AddRoutesToReservation>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    CreateImmediateReservationCreate an imminent reservation.

    Defines a reservation to be started immediately.

    - Syntax -

    -			<CreateImmediateReservation>
    -			<reservationName>{reservationName}</reservationName>
    -			<owner>{owner}</owner>
    -			<durationInMinutes>{durationInMinutes}</durationInMinutes>
    -			<notifyOnStart>{notifyOnStart}</notifyOnStart>
    -			<notifyOnSetupComplete>{notifyOnSetupComplete}</notifyOnSetupComplete>
    -			<isTerminationProtectionEnabled>{isTerminationProtectionEnabled}</isTerminationProtectionEnabled>
    -			<notifyOnEnd>{notifyOnEnd}</notifyOnEnd>
    -			<notificationMinutesBeforeEnd>{notificationMinutesBeforeEnd}</notificationMinutesBeforeEnd>			
    -			<topologyFullPath>{topologyFullPath}</topologyFullPath>
    -			<approvalSid>{approvalSid}</approvalSid>
    -			<globalInputs>
    -			<UpdateTopologyGlobalInputsRequest>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			</UpdateTopologyGlobalInputsRequest>
    -			</globalInputs>
    -			<requirementsInputs>
    -			<UpdateTopologyRequirementsInputsRequest>
    -			<ResourceName>{ResourceName}</ResourceName>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			<Type>{Type}</Type>
    -			</UpdateTopologyRequirementsInputsRequest>
    -			</requirementsInputs>
    -			<additionalInfoInputs>
    -			<UpdateTopologyAdditionalInfoInputsRequest>
    -			<ResourceName>{ResourceName}</ResourceName>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			</UpdateTopologyAdditionalInfoInputsRequest>
    -			</additionalInfoInputs>
    -			</CreateImmediateReservation>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationName
    Specify the name of the reservation.
    - string - owner
    Specify the user name of the reservation owner.
    - number - durationInMinutes
    Specify the length of the reservation. (in minutes)
    - boolean - notifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    - boolean - notifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    - number - notificationMinutesBeforeEnd
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    - boolean - isTerminationProtectionEnabled
    Indicate whether to protect the reservation from being terminated.
    - string - approvalSid
    Leave empty. Used for internal purposes.

    Example

    
    -				<CreateImmediateReservation>
    -				<reservationName>immediate reservation</reservationName>
    -				<owner>admin</owner>
    -				<durationInMinutes>30</durationInMinutes>
    -				<notifyOnStart>0</notifyOnStart>
    -				<notifyOnSetupComplete>0</notifyOnSetupComplete>
    -				<isTerminationProtectionEnabled>True</isTerminationProtectionEnabled>
    -				<notifyOnEnd>0</notifyOnEnd>
    -				<notificationMinutesBeforeEnd>0</notificationMinutesBeforeEnd>
    -				<topologyFullPath>myTopology</topologyFullPath>
    -				<approvalSid></approvalSid>
    -				<globalInputs>
    -				<UpdateTopologyGlobalInputsRequest>
    -				<ParamName>Some global</ParamName>
    -				<Value>some value</Value>
    -				</UpdateTopologyGlobalInputsRequest>
    -				</globalInputs>
    -				<requirementsInputs>
    -				<UpdateTopologyRequirementsInputsRequest>
    -				<ResourceName>Some resource</ResourceName>
    -				<ParamName>Model</ParamName>
    -				<Value>Some resource model</Value>
    -				<Type>Models</Type>
    -				</UpdateTopologyRequirementsInputsRequest>
    -				</requirementsInputs>
    -				<additionalInfoInputs>
    -				<UpdateTopologyAdditionalInfoInputsRequest>
    -				<ResourceName>Some resource</ResourceName>
    -				<ParamName>Speed</ParamName>
    -				<Value>10 Mbps</Value>
    -				</UpdateTopologyAdditionalInfoInputsRequest>
    -				</additionalInfoInputs>
    -				</CreateImmediateReservation>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Reservation Id="28cb2a71-c8fc-4f41-a22b-e65685ebed14" Name="Immediate reservation" StartTime="2012-06-20T15:05:00" EndTime="2012-06-20T15:35:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Active" ActualEndTime="" CreateDate="2012-06-20T15:05:06" ModificationDate="2012-06-20T15:05:06">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    -			

    back to TOC

    CreateImmediatePersistentReservationCreate an immediate persistent reservation.

    Defines a reservation to be started immediately.

    - Syntax -

    -			<CreateImmediatePersistentReservation>
    -			<reservationName>{reservationName}</reservationName>
    -			<owner>{owner}</owner>
    -			<notifyOnStart>{notifyOnStart}</notifyOnStart>
    -			<notifyOnSetupComplete>{notifyOnSetupComplete}</notifyOnSetupComplete>
    -			<notifyOnEnd>{notifyOnEnd}</notifyOnEnd>
    -			<topologyFullPath>{topologyFullPath}</topologyFullPath>
    -			<globalInputs>
    -			<UpdateTopologyGlobalInputsRequest>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			</UpdateTopologyGlobalInputsRequest>
    -			</globalInputs>
    -			<requirementsInputs>
    -			<UpdateTopologyRequirementsInputsRequest>
    -			<ResourceName>{ResourceName}</ResourceName>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			<Type>{Type}</Type>
    -			</UpdateTopologyRequirementsInputsRequest>
    -			</requirementsInputs>
    -			<additionalInfoInputs>
    -			<UpdateTopologyAdditionalInfoInputsRequest>
    -			<ResourceName>{ResourceName}</ResourceName>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			</UpdateTopologyAdditionalInfoInputsRequest>
    -			</additionalInfoInputs>
    -			</CreateImmediatePersistentReservation>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationName
    Specify the name of the reservation.
    - string - owner
    Specify the user name of the reservation owner.
    - boolean - notifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    - boolean - notifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    - string - topologyFullPath
    Specify the full topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    - list - globalInputs
    Global inputs associated with the specified topology. For example: {['Input Name', 'Value';]}.
    - list - requirementsInputs
    Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity.
    - list - additionalInfoInputs
    Additional info inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value';]}.
    - boolean - notifyOnSetupComplete
    Indicate whether to notify the reservation owner when the reservation setup completes.

    Example

    
    -				<CreateImmediatePersistentReservation>
    -				<reservationName>immediate reservation</reservationName>
    -				<owner>admin</owner>
    -				<notifyOnStart>0</notifyOnStart>
    -				<notifyOnSetupComplete>0</notifyOnSetupComplete>
    -				<notifyOnEnd>0</notifyOnEnd>
    -				<topologyFullPath>myTopology</topologyFullPath>
    -				<globalInputs>
    -				<UpdateTopologyGlobalInputsRequest>
    -				<ParamName>Some global</ParamName>
    -				<Value>some value</Value>
    -				</UpdateTopologyGlobalInputsRequest>
    -				</globalInputs>
    -				<requirementsInputs>
    -				<UpdateTopologyRequirementsInputsRequest>
    -				<ResourceName>Some resource</ResourceName>
    -				<ParamName>Model</ParamName>
    -				<Value>Some resource model</Value>
    -				<Type>Models</Type>
    -				</UpdateTopologyRequirementsInputsRequest>
    -				</requirementsInputs>
    -				<additionalInfoInputs>
    -				<UpdateTopologyAdditionalInfoInputsRequest>
    -				<ResourceName>Some resource</ResourceName>
    -				<ParamName>Speed</ParamName>
    -				<Value>10 Mbps</Value>
    -				</UpdateTopologyAdditionalInfoInputsRequest>
    -				</additionalInfoInputs>
    -				</CreateImmediatePersistentReservation>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Reservation Id="28cb2a71-c8fc-4f41-a22b-e65685ebed14" Name="Immediate reservation" StartTime="2012-06-20T15:05:00" EndTime="2012-06-20T15:35:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Active" ActualEndTime="" CreateDate="2012-06-20T15:05:06" ModificationDate="2012-06-20T15:05:06">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    -			

    back to TOC

    CreateImmediateTopologyReservationCreate an imminent reservation.

    Defines a reservation to be started immediately. The reservation will start regardless of conflicting resources.

    - Syntax -

    -			<CreateImmediateReservation>
    -			<reservationName>{reservationName}</reservationName>
    -			<owner>{owner}</owner>
    -			<durationInMinutes>{durationInMinutes}</durationInMinutes>
    -			<notifyOnStart>{notifyOnStart}</notifyOnStart>
    -			<notifyOnSetupComplete>{notifyOnSetupComplete}</notifyOnSetupComplete>
    -			<notifyOnEnd>{notifyOnEnd}</notifyOnEnd>
    -			<notificationMinutesBeforeEnd>{notificationMinutesBeforeEnd}</notificationMinutesBeforeEnd>
    -			<topologyFullPath>{topologyFullPath}</topologyFullPath>
    -			<globalInputs>
    -			<UpdateTopologyGlobalInputsRequest>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			</UpdateTopologyGlobalInputsRequest>
    -			</globalInputs>
    -			<requirementsInputs>
    -			<UpdateTopologyRequirementsInputsRequest>
    -			<ResourceName>{ResourceName}</ResourceName>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			<Type>{Type}</Type>
    -			</UpdateTopologyRequirementsInputsRequest>
    -			</requirementsInputs>
    -			<additionalInfoInputs>
    -			<UpdateTopologyAdditionalInfoInputsRequest>
    -			<ResourceName>{ResourceName}</ResourceName>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			</UpdateTopologyAdditionalInfoInputsRequest>
    -			</additionalInfoInputs>
    -			</CreateImmediateReservation>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationName
    Specify the name of the reservation.
    - string - owner
    Specify the user name of the reservation owner.
    - number - durationInMinutes
    Specify the length of the reservation. (in minutes)
    - boolean - notifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    - boolean - notifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    - number - notificationMinutesBeforeEnd
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    - string - topologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    - list - globalInputs
    Global inputs associated with the specified topology.
    - list - requirementsInputs
    - Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. - - The Value field can be used to input to requirement fields with different operator types. - - If pass value as is, it will be treated as "equals", for example if pass "5" it will indicate to system that seek requirement that fulfills =5 - Other operators (aside from equals) can be fulfilled using this convention: - in the value field, write use the format symbol[space]value - for example - - for numeric values - > 4 - < 4 - >= 4 - <= 4 - = 4 - != 4 - - for textual values - = "hi there" - != "hi there" - startswith hi there - endswith hi there - contains hi there - doesnotcontain hi there -
    - list - additionalInfoInputs
    Additional info inputs associated with the specified topology.
    - boolean - notifyOnSetupComplete
    Indicate whether to notify the reservation owner when the reservation setup completes.

    Example

    
    -				<CreateImmediateReservation>
    -				<reservationName>immediate reservation</reservationName>
    -				<owner>admin</owner>
    -				<durationInMinutes>30</durationInMinutes>
    -				<notifyOnStart>0</notifyOnStart>
    -				<notifyOnSetupComplete>0</notifyOnSetupComplete>
    -				<notifyOnEnd>0</notifyOnEnd>
    -				<notificationMinutesBeforeEnd>0</notificationMinutesBeforeEnd>
    -				<topologyFullPath>myTopology</topologyFullPath>
    -				<globalInputs>
    -				<UpdateTopologyGlobalInputsRequest>
    -				<ParamName>Some global</ParamName>
    -				<Value>some value</Value>
    -				</UpdateTopologyGlobalInputsRequest>
    -				</globalInputs>
    -				<requirementsInputs>
    -				<UpdateTopologyRequirementsInputsRequest>
    -				<ResourceName>Some resource</ResourceName>
    -				<ParamName>Model</ParamName>
    -				<Value>Some resource model</Value>
    -				<Type>Models</Type>
    -				</UpdateTopologyRequirementsInputsRequest>
    -				</requirementsInputs>
    -				<additionalInfoInputs>
    -				<UpdateTopologyAdditionalInfoInputsRequest>
    -				<ResourceName>Some resource</ResourceName>
    -				<ParamName>Speed</ParamName>
    -				<Value>10 Mbps</Value>
    -				</UpdateTopologyAdditionalInfoInputsRequest>
    -				</additionalInfoInputs>
    -				</CreateImmediateReservation>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Reservation Id="28cb2a71-c8fc-4f41-a22b-e65685ebed14" Name="Immediate reservation" StartTime="2012-06-20T15:05:00" EndTime="2012-06-20T15:35:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Active" ActualEndTime="" CreateDate="2012-06-20T15:05:06" ModificationDate="2012-06-20T15:05:06">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    -			

    back to TOC

    CreateReservationCreate a reservation.

    Defines a new reservation.

    - Syntax -

    -			<CreateReservation>
    -			<reservationName>{reservationName}</reservationName>
    -			<owner>{owner}</owner>
    -			<startTime>{startTime}</startTime>
    -			<endTime>{endTime}</endTime>
    -			<notifyOnStart>{notifyOnStart}</notifyOnStart>
    -			<notifyOnSetupComplete>{notifyOnSetupComplete}</notifyOnSetupComplete>
    -			<isTerminationProtectionEnabled>{isTerminationProtectionEnabled}</isTerminationProtectionEnabled>
    -			<notifyOnEnd>{notifyOnEnd}</notifyOnEnd>
    -			<notificationMinutesBeforeEnd>{notificationMinutesBeforeEnd}</notificationMinutesBeforeEnd>
    -			<topologyFullPath>{topologyFullPath}</topologyFullPath>
    -			<approvalSid>{approvalSid}</approvalSid>			
    -			<globalInputs>
    -			<UpdateTopologyGlobalInputsRequest>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			</UpdateTopologyGlobalInputsRequest>
    -			</globalInputs>
    -			<requirementsInputs>
    -			<UpdateTopologyRequirementsInputsRequest>
    -			<ResourceName>{ResourceName}</ResourceName>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			<Type>{Type}</Type>
    -			</UpdateTopologyRequirementsInputsRequest>
    -			</requirementsInputs>
    -			<additionalInfoInputs>
    -			<UpdateTopologyAdditionalInfoInputsRequest>
    -			<ResourceName>{ResourceName}</ResourceName>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			</UpdateTopologyAdditionalInfoInputsRequest>
    -			</additionalInfoInputs>
    -			</CreateReservation>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationName
    Specify the name of the reservation.
    - string - owner
    Specify the user name of the reservation owner.
    - string - startTime
    The start time of the reservation.
    - string - endTime
    The end time of the reservation.
    - boolean - notifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    - boolean - notifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    - number - notificationMinutesBeforeEnd
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    - boolean - isTerminationProtectionEnabled
    Indicate whether to protect the reservation from being terminated.
    - string - approvalSid
    Leave empty. Used for internal purposes.

    Example

    
    -				<CreateReservation>
    -				<reservationName>test reservation</reservationName>
    -				<owner>admin</owner>
    -				<startTime>01/01/2015 10:00</startTime>
    -				<endTime>01/01/2015 11:00</endTime>
    -				<notifyOnStart>1</notifyOnStart>
    -				<notifyOnSetupComplete>0</notifyOnSetupComplete>
    -				<isTerminationProtectionEnabled>True</isTerminationProtectionEnabled>
    -				<notifyOnEnd>1</notifyOnEnd>
    -				<notificationMinutesBeforeEnd>10</notificationMinutesBeforeEnd>
    -				<topologyFullPath>myTopology</topologyFullPath>
    -				<approvalSid></approvalSid>				
    -				<globalInputs>
    -				<UpdateTopologyGlobalInputsRequest>
    -				<ParamName>Some global</ParamName>
    -				<Value>some value</Value>
    -				</UpdateTopologyGlobalInputsRequest>
    -				</globalInputs>
    -				<requirementsInputs>
    -				<UpdateTopologyRequirementsInputsRequest>
    -				<ResourceName>Some resource</ResourceName>
    -				<ParamName>Model</ParamName>
    -				<Value>Some resource model</Value>
    -				<Type>Models</Type>
    -				</UpdateTopologyRequirementsInputsRequest>
    -				</requirementsInputs>
    -				<additionalInfoInputs>
    -				<UpdateTopologyAdditionalInfoInputsRequest>
    -				<ResourceName>Some resource</ResourceName>
    -				<ParamName>Speed</ParamName>
    -				<Value>10 Mbps</Value>
    -				</UpdateTopologyAdditionalInfoInputsRequest>
    -				</additionalInfoInputs>
    -				</CreateReservation>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Reservation Id="af626b88-458b-4e7a-9054-c03d8cffa260" Name="test reservation" StartTime="2015-01-01T10:00:00" EndTime="2015-01-01T11:00:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Pending" ActualEndTime="" CreateDate="2012-06-20T10:40:47" ModificationDate="2012-06-20T10:40:47">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    -			

    back to TOC

    CreatePersistentReservationCreate a reservation.

    Defines a new reservation.

    - Syntax -

    -			<CreatePersistentReservation>
    -			<reservationName>{reservationName}</reservationName>
    -			<owner>{owner}</owner>
    -			<startTime>{startTime}</startTime>
    -			<notifyOnStart>{notifyOnStart}</notifyOnStart>
    -			<notifyOnSetupComplete>{notifyOnSetupComplete}</notifyOnSetupComplete>
    -			<notifyOnEnd>{notifyOnEnd}</notifyOnEnd>
    -			<topologyFullPath>{topologyFullPath}</topologyFullPath>
    -			<globalInputs>
    -			<UpdateTopologyGlobalInputsRequest>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			</UpdateTopologyGlobalInputsRequest>
    -			</globalInputs>
    -			<requirementsInputs>
    -			<UpdateTopologyRequirementsInputsRequest>
    -			<ResourceName>{ResourceName}</ResourceName>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			<Type>{Type}</Type>
    -			</UpdateTopologyRequirementsInputsRequest>
    -			</requirementsInputs>
    -			<additionalInfoInputs>
    -			<UpdateTopologyAdditionalInfoInputsRequest>
    -			<ResourceName>{ResourceName}</ResourceName>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			</UpdateTopologyAdditionalInfoInputsRequest>
    -			</additionalInfoInputs>
    -			</CreatePersistentReservation>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationName
    Specify the name of the reservation.
    - string - owner
    Specify the user name of the reservation owner.
    - string - startTime
    The start time of the reservation.
    - boolean - notifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    - boolean - notifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    - string - topologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    - list - globalInputs
    Global inputs associated with the specified topology. For example: {['Input Name', 'Value';]}.
    - list - requirementsInputs
    Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity.
    - list - additionalInfoInputs
    Additional info inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value';]}.
    - boolean - notifyOnSetupComplete
    Indicate whether to notify the reservation owner when the reservation setup completes.

    Example

    
    -				<CreatePersistentReservation>
    -				<reservationName>test reservation</reservationName>
    -				<owner>admin</owner>
    -				<startTime>01/01/2015 10:00</startTime>
    -				<notifyOnStart>1</notifyOnStart>
    -				<notifyOnSetupComplete>0</notifyOnSetupComplete>
    -				<notifyOnEnd>1</notifyOnEnd>
    -				<topologyFullPath>myTopology</topologyFullPath>
    -				<globalInputs>
    -				<UpdateTopologyGlobalInputsRequest>
    -				<ParamName>Some global</ParamName>
    -				<Value>some value</Value>
    -				</UpdateTopologyGlobalInputsRequest>
    -				</globalInputs>
    -				<requirementsInputs>
    -				<UpdateTopologyRequirementsInputsRequest>
    -				<ResourceName>Some resource</ResourceName>
    -				<ParamName>Model</ParamName>
    -				<Value>Some resource model</Value>
    -				<Type>Models</Type>
    -				</UpdateTopologyRequirementsInputsRequest>
    -				</requirementsInputs>
    -				<additionalInfoInputs>
    -				<UpdateTopologyAdditionalInfoInputsRequest>
    -				<ResourceName>Some resource</ResourceName>
    -				<ParamName>Speed</ParamName>
    -				<Value>10 Mbps</Value>
    -				</UpdateTopologyAdditionalInfoInputsRequest>
    -				</additionalInfoInputs>
    -				</CreatePersistentReservation>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Reservation Id="af626b88-458b-4e7a-9054-c03d8cffa260" Name="test reservation" StartTime="2015-01-01T10:00:00" EndTime="2015-01-01T11:00:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Pending" ActualEndTime="" CreateDate="2012-06-20T10:40:47" ModificationDate="2012-06-20T10:40:47">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    -			

    back to TOC

    CreateTopologyReservationCreate a reservation.

    Defines a new reservation.

    - Syntax -

    -			<CreateReservation>
    -			<reservationName>{reservationName}</reservationName>
    -			<owner>{owner}</owner>
    -			<startTime>{startTime}</startTime>
    -			<endTime>{endTime}</endTime>
    -			<notifyOnStart>{notifyOnStart}</notifyOnStart>
    -			<notifyOnSetupComplete>{notifyOnSetupComplete}</notifyOnSetupComplete>
    -			<notifyOnEnd>{notifyOnEnd}</notifyOnEnd>
    -			<notificationMinutesBeforeEnd>{notificationMinutesBeforeEnd}</notificationMinutesBeforeEnd>
    -			<topologyFullPath>{topologyFullPath}</topologyFullPath>
    -			<globalInputs>
    -			<UpdateTopologyGlobalInputsRequest>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			</UpdateTopologyGlobalInputsRequest>
    -			</globalInputs>
    -			<requirementsInputs>
    -			<UpdateTopologyRequirementsInputsRequest>
    -			<ResourceName>{ResourceName}</ResourceName>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			<Type>{Type}</Type>
    -			</UpdateTopologyRequirementsInputsRequest>
    -			</requirementsInputs>
    -			<additionalInfoInputs>
    -			<UpdateTopologyAdditionalInfoInputsRequest>
    -			<ResourceName>{ResourceName}</ResourceName>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			</UpdateTopologyAdditionalInfoInputsRequest>
    -			</additionalInfoInputs>
    -			</CreateReservation>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationName
    Specify the name of the reservation.
    - string - owner
    Specify the user name of the reservation owner.
    - string - startTime
    The start time of the reservation.
    - string - endTime
    The end time of the reservation.
    - boolean - notifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    - boolean - notifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    - number - notificationMinutesBeforeEnd
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    - string - topologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    - list - globalInputs
    Global inputs associated with the specified topology.
    - list - requirementsInputs
    - Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. - - The Value field can be used to input to requirement fields with different operator types. - - If pass value as is, it will be treated as "equals", for example if pass "5" it will indicate to system that seek requirement that fulfills =5 - Other operators (aside from equals) can be fulfilled using this convention: - in the value field, write use the format symbol[space]value - for example - - for numeric values - > 4 - < 4 - >= 4 - <= 4 - = 4 - != 4 - - for textual values - = "hi there" - != "hi there" - startswith hi there - endswith hi there - contains hi there - doesnotcontain hi there -
    - list - additionalInfoInputs
    Additional info inputs associated with the specified topology.
    - boolean - notifyOnSetupComplete
    Indicate whether to notify the reservation owner when the reservation setup completes.

    Example

    
    -				<CreateReservation>
    -				<reservationName>test reservation</reservationName>
    -				<owner>admin</owner>
    -				<startTime>01/01/2015 10:00</startTime>
    -				<endTime>01/01/2015 11:00</endTime>
    -				<notifyOnStart>1</notifyOnStart>
    -				<notifyOnSetupComplete>0</notifyOnSetupComplete>
    -				<notifyOnEnd>1</notifyOnEnd>
    -				<notificationMinutesBeforeEnd>10</notificationMinutesBeforeEnd>
    -				<topologyFullPath>myTopology</topologyFullPath>
    -				<globalInputs>
    -				<UpdateTopologyGlobalInputsRequest>
    -				<ParamName>Some global</ParamName>
    -				<Value>some value</Value>
    -				</UpdateTopologyGlobalInputsRequest>
    -				</globalInputs>
    -				<requirementsInputs>
    -				<UpdateTopologyRequirementsInputsRequest>
    -				<ResourceName>Some resource</ResourceName>
    -				<ParamName>Model</ParamName>
    -				<Value>Some resource model</Value>
    -				<Type>Models</Type>
    -				</UpdateTopologyRequirementsInputsRequest>
    -				</requirementsInputs>
    -				<additionalInfoInputs>
    -				<UpdateTopologyAdditionalInfoInputsRequest>
    -				<ResourceName>Some resource</ResourceName>
    -				<ParamName>Speed</ParamName>
    -				<Value>10 Mbps</Value>
    -				</UpdateTopologyAdditionalInfoInputsRequest>
    -				</additionalInfoInputs>
    -				</CreateReservation>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Reservation Id="af626b88-458b-4e7a-9054-c03d8cffa260" Name="test reservation" StartTime="2015-01-01T10:00:00" EndTime="2015-01-01T11:00:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Pending" ActualEndTime="" CreateDate="2012-06-20T10:40:47" ModificationDate="2012-06-20T10:40:47">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    -			

    back to TOC

    CreateResourceAdd a new resource.

    Adds a new resource.

    - Syntax -

    -			<CreateResource>
    -			<resourceFamily>{resourceFamily}</resourceFamily>
    -			<resourceModel>{resourceModel}</resourceModel>
    -			<resourceName>{resourceName}</resourceName>
    -			<resourceAddress>{resourceAddress}</resourceAddress>
    -			<folderFullPath>{folderFullPath}</folderFullPath>
    -			<parentResourceFullPath>{parentResourceFullPath}</parentResourceFullPath>
    -			<resourceDescription>{resourceDescription}</resourceDescription>
    -			</CreateResource>
    -		

    - Parameters -

    TypeNameDescription
    - string - resourceFamily
    Specify the name of the resource family (optional).
    - string - resourceModel
    Specify the resource model.
    - string - resourceName
    Specify the resource name.
    - string - resourceAddress
    Specify the resource address.
    - string - folderFullPath
    Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.
    - string - parentResourceFullPath
    Specify the full path from the root to a parent resource, separated by slashes. For example: Traffic Generators/Generic.
    - string - resourceDescription
    Provide a short description to help identify the resource.

    Example

    
    -				<CreateResource>
    -				<resourceFamily>Generic Port</resourceFamily>
    -				<resourceModel>Generic Port Model</resourceModel>
    -				<resourceName>Port 1</resourceName>
    -				<resourceAddress>1</resourceAddress>
    -				<folderFullPath>Lab Routers</folderFullPath>
    -				<parentResourceFullPath>Router 1234</parentResourceFullPath>
    -				<resourceDescription>a generic router port</resourceDescription>
    -				</CreateResource>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.200" FullAddress="192.168.1.200" RootAddress="192.168.1.200" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Locked="false" Excluded="false" Description="a generic router">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<Domains/>
    -				<ChildResources/>
    -				<LockInfo/>
    -				</ResponseInfo>
    -				<ResponseInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.200/1" RootAddress="192.168.1.200" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="false" Excluded="false" Description="a generic router port">
    -				<ResourceAttributes/>
    -				<Domains/>
    -				<ChildResources/>
    -				<LockInfo/>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC

    CreateRouteInReservationCreate a route between two resources.

    Creates a route between the specified source and target resources.

    - Syntax -

    -			<CreateRouteInReservation>
    -			<reservationId>{reservationId}</reservationId>
    -			<sourceResourceFullPath>{sourceResourceFullPath}</sourceResourceFullPath>
    -			<targetResourceFullPath>{targetResourceFullPath}</targetResourceFullPath>
    -			<overrideActiveRoutes>{overrideActiveRoutes}</overrideActiveRoutes>
    -			<mappingType>{mappingType}</mappingType>
    -			<maxHops>{maxHops}</maxHops>
    -			<routeAlias>{routeAlias}</routeAlias>
    -			<isShared>{isShared}</isShared>
    -			</CreateRouteInReservation>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - sourceResourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - string - targetResourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - boolean - overrideActiveRoutes
    Specify whether the new route can override existing routes.
    - string - mappingType
    Specify bidirectional or unidirectional as the mapping type.
    - number - maxHops
    Specify the maximum number or allowed hops.
    - string - routeAlias
    Specify the route’s alias.
    - boolean - isShared
    Specify whether this route is shared. Shared routes can be used in more than one reservation.

    Example

    
    -				<CreateRouteInReservation>
    -				<reservationId>28cb2a71-c8fc-4f41-a22b-e65685ebed14</reservationId>
    -				<sourceResourceFullPath>Router 1234/Port 1</sourceResourceFullPath>
    -				<targetResourceFullPath>GenericResource 1234/Port 1</targetResourceFullPath>
    -				<overrideActiveRoutes>1</overrideActiveRoutes>
    -				<mappingType>bi</mappingType>
    -				<maxHops>2</maxHops>
    -				<routeAlias>a route</routeAlias>
    -				<isShared>0</isShared>
    -				</CreateRouteInReservation>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC

    CreateRoutesInReservationCreate routes between the listed source and target resources.

    Create routes between the listed source and target resources. Routes will be created for each pair of source and target resources.

    - Syntax -

    -			<CreateRoutesInReservation>
    -			<reservationId>{reservationId}</reservationId>
    -			<sourceResourcesFullPath>
    -			<string>{string}</string>
    -			</sourceResourcesFullPath>
    -			<targetResourcesFullPath>
    -			<string>{string}</string>
    -			</targetResourcesFullPath>
    -			<overrideActiveRoutes>{overrideActiveRoutes}</overrideActiveRoutes>
    -			<mappingType>{mappingType}</mappingType>
    -			<maxHops>{maxHops}</maxHops>
    -			<routeAlias>{routeAlias}</routeAlias>
    -			<isShared>{isShared}</isShared>
    -			</CreateRoutesInReservation>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - list - sourceResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    - list - targetResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    - boolean - overrideActiveRoutes
    Specify whether the new route can override existing routes.
    - string - mappingType
    Specify bidirectional or unidirectional as the mapping type.
    - number - maxHops
    Specify the maximum number or allowed hops.
    - string - routeAlias
    Specify the route’s alias.
    - boolean - isShared
    Specify whether these routes are shared. Shared routes can be used in more than one reservation.

    Example

    
    -				<CreateRoutesInReservation>
    -				<reservationId>28cb2a71-c8fc-4f41-a22b-e65685ebed14</reservationId>
    -				<sourceResourcesFullPath>
    -				<string>Router 1234/Port 1</string>
    -				</sourceResourcesFullPath>
    -				<targetResourcesFullPath>
    -				<string>GenericResource 1234/Port 2</string>
    -				</targetResourcesFullPath>
    -				<overrideActiveRoutes>1</overrideActiveRoutes>
    -				<mappingType>uni</mappingType>
    -				<maxHops>2</maxHops>
    -				<routeAlias>uni route</routeAlias>
    -				<isShared>0</isShared>
    -				</CreateRoutesInReservation>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 2" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    ExecuteResourceConnectedCommand

    Executes a command for the specified driver.

    - Syntax -

    -			<ExecuteResourceConnectedCommand>
    -			<reservationId>{reservationId}</reservationId>
    -			<resourceFullPath>{resourceFullPath}</resourceFullPath>
    -			<commandName>{commandName}</commandName>
    -			<commandTag>{commandTag}</commandTag>
    -			<parameterValues>
    -			<string>{string}</string>
    -			</parameterValues>
    -			<connectedPortsFullPath>
    -			<string>{string}</string>
    -			</connectedPortsFullPath>
    -			<printOutput>{printOutput}</printOutput>
    -			</ExecuteResourceConnectedCommand>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - resourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RouterA/Port1.
    - string - commandName
    Specify the name of the command.
    - string - commandTag
    Specify the command tag. Connected command tags are used to define categories of functionality (e.g 'virtualization').
    - list - parameterValues
    Specify the list of parameters values required for executing the command.
    - list - connectedPortsFullPath
    Specify the list of connected ports to use in this operation. Include the full path from the root resource to each port, separated by slashes. For example: Switch20/Blade5/PowerPort1. Leave blank to perform the connected operation on all of the specified resource’s connected ports.
    - boolean - printOutput
    Defines whether to print the command output in the reservation command output window.

    Example

    
    -				<ExecuteResourceConnectedCommand>
    -				<reservationId>af626b88-458b-4e7a-9054-c03d8cffa260</reservationId>
    -				<resourceFullPath>Router 1234</resourceFullPath>
    -				<commandName>SpinUp</commandName>
    -				<commandTag>virtualization</commandTag>
    -				<parameterValues>
    -				<string>abcd</string>
    -				<string>2</string>
    -				</parameterValues>
    -				<connectedPortsFullPath>
    -				<string>Router 1234/Port1</string>
    -				</connectedPortsFullPath>
    -				<printOutput>true</printOutput>
    -				</ExecuteResourceConnectedCommand>
    -			

    Output

  • resultXml
  • <ResponseInfo Output="success"/>

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    DeployAppToCloudProviderBulk

    Executes deploy command for the specified apps.

    - Syntax -

    -			<DeployAppToCloudProviderBulk>
    -			<reservationId>{reservationId}</reservationId>
    -			<appNames>
    -			<string>{string}</string>
    -			</appNames>
    -			<commandInputs>
    -			<DeployAppInput>
    -			<AppName>{AppName}</AppName>
    -			<Name>{Name}</Name>
    -			<Value>{Value}</Value>
    -			</DeployAppInput>
    -			</commandInputs>
    -			<printOutput>{printOutput}</printOutput>
    -			</DeployAppToCloudProviderBulk>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - list - appNames
    Specify the names of the apps to deploy.
    - list - commandInputs
    Specify a list of input names and values required for executing the command [appName, InputName, InputValue]. Note that to change a deployed App's name, specify the new name as an input value - for example: api.DeployAppToCloudProvider(reservation_id, "Azure Ubuntu", [DeployAppInput("Azure Ubuntu", "Name", "myvm01")]).
    - boolean - printOutput
    Defines whether to print the command output in the reservation command output window.

    Example

    
    -				<DeployAppToCloudProviderBulk>
    -				<reservationId>af626b88-458b-4e7a-9054-c03d8cffa260</reservationId>
    -				<appNames>
    -				<string>app1</string>
    -				<string>app2</string>
    -				</appNames>
    -				<commandInputs>
    -				<DeployAppInput>
    -				<AppName>app1</AppName>
    -				<Name>input1</Name>
    -				<Value>abc</Value>
    -				</DeployAppInput>
    -				<DeployAppInput>
    -				<AppName>app2</AppName>
    -				<Name>input2</Name>
    -				<Value>abc</Value>
    -				</DeployAppInput>
    -				</commandInputs>
    -				<printOutput>true</printOutput>
    -				</DeployAppToCloudProviderBulk>
    -			

    Output

  • resultXml
  • <ResponseInfo Output="success"/>

    back to TOC
    back to TOC
    back to TOC

    EditAppsInReservation

    Edit Apps in a reservation

    - Syntax -

    -			<EditAppsInReservation>
    -			<reservationId>{reservationId}</reservationId>
    -			<editAppsRequests>
    -			<ApiEditAppRequest>
    -			<Name></Name>
    -			<NewName></NewName>
    -			<Description></Description>
    -			<AppDetails>
    -			<ModelName></ModelName>
    -			<Attributes>
    -			<NameValuePair>
    -			<Name></Name>
    -			<Value></Value>
    -			</NameValuePair>
    -			</Attributes>
    -			<Driver></Driver>
    -			</AppDetails>
    -			<DefaultDeployment>
    -			<Name></Name>
    -			<Deployment>
    -			<Attributes>
    -			<NameValuePair>
    -			<Name></Name>
    -			<Value></Value>
    -			</NameValuePair>
    -			</Attributes>
    -			</Deployment>
    -			</DefaultDeployment>
    -			</ApiEditAppRequest>
    -			</editAppsRequests>
    -			</EditAppsInReservation>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - list - editAppsRequests
    Changes to implement in the App. Please note that when modifying attributes, *all* the attributes in deployed app must be updated.

    Example

    
    -				<EditAppsInReservation>
    -				<reservationId>af626b88-458b-4e7a-9054-c03d8cffa260</reservationId>
    -				<editAppsRequests>
    -				<ApiEditAppRequest>
    -				<Name>testApp</Name>
    -				<NewName>my new name</NewName>
    -				<Description>my desc</Description>
    -				<AppDetails>
    -				<ModelName>
    -				</ModelName>
    -				<Attributes>
    -				<NameValuePair>
    -				<Name></Name>
    -				<Value></Value>
    -				</NameValuePair>
    -				</Attributes>
    -				<Driver></Driver>
    -				</AppDetails>
    -				<DefaultDeployment>
    -				<Name>vCenter Clone VM From VM</Name>
    -				<Deployment>
    -				<Attributes>
    -				<NameValuePair>
    -				<Name></Name>
    -				<Value></Value>
    -				</NameValuePair>
    -				</Attributes>
    -				</Deployment>
    -				</DefaultDeployment>
    -				</ApiEditAppRequest>
    -				</editAppsRequests>
    -				</EditAppsInReservation>
    -			

    Output

  • resultXml
  • <ResponseInfo Output="success"/>

    back to TOC
    back to TOC
    back to TOC
    back to TOC

    ConfigureAppsV2

    Run Configuration Management scripts for the apps in the blueprint.

    - Syntax -

    -			<ConfigureAppsV2>
    -			<reservationId>{reservationId}</reservationId>
    -			<appConfigurationsData>
    -			<AppConfigurationData>
    -			<AppName>{AppName}</AppName>
    -			<ConfigurationManagementDatas>
    -			<ConfigurationManagementData>
    -			<Alias>{Alias}</Alias>
    -			<ConfigParams>
    -			<ConfigParam>
    -			<Name>{Name}</Name>
    -			<Value>{Value}</Value>
    -			</ConfigParam>
    -			</ConfigParams>
    -			</ConfigurationManagementData>
    -			</ConfigurationManagementDatas>
    -			</AppConfigurationData>
    -			</appConfigurationsData>
    -			<printOutput>{printOutput}</printOutput>
    -			</ConfigureAppsV2>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - list - appConfigurationsData
    Configuration details. Note: Running ConfigureAppsV2 with parameters that are missing from the App returns a success message.
    - boolean - printOutput
    Defines whether to print the command output in the sandbox command output window.

    Example

    
    -				<ConfigureAppsV2>
    -				<reservationId>af626b88-458b-4e7a-9054-c03d8cffa260</reservationId>
    -				<appConfigurationsData>
    -				<AppConfigurationData>
    -				<AppName>App1</AppName>
    -				<ConfigurationManagementDatas>
    -				<ConfigurationManagementData>
    -				<Alias>alias</Alias>
    -				<ConfigParams>
    -				<ConfigParam>
    -				<Name>configName</Name>
    -				<Value>configValue</Value>
    -				</ConfigParam>
    -				</ConfigParams>
    -				</ConfigurationManagementData>
    -				</ConfigurationManagementDatas>
    -				</AppConfigurationData>
    -				</appConfigurationsData>
    -				<printOutput>True</printOutput>
    -				</ConfigureAppsV2>
    -			

    Output

  • resultXml
  • <ResponseInfo Output="success"/>

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    EnqueueCommandEnqueue a command.

    Enqueues a command to be executed for the specified target.

    - Syntax -

    -			<EnqueueCommand>
    -			<reservationId>{reservationId}</reservationId>
    -			<targetName>{targetName}</targetName>
    -			<targetType>{targetType}</targetType>
    -			<commandName>{commandName}</commandName>
    -			<commandInputs>
    -			<InputNameValue>
    -			<Name>{Name}</Name>
    -			<Value>{Value}</Value>
    -			</InputNameValue>
    -			</commandInputs>
    -			<printOutput>{printOutput}</printOutput>
    -			</EnqueueCommand>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - targetName
    Specify the name of the target according to the target type: for resources - specify the resouce's name, for services - the service's alias.
    - string - targetType
    Specify the target type for command execution, possible values are: Resource, Service, App.
    Use 0 for Resource, 1 for Service, 2 for App.
    - string - commandName
    Specify the name of the command.
    - list - commandInputs
    Specify a matrix of input names and values required for executing the command.
    - boolean - printOutput
    Defines whether to print the command output in the reservation command output window.

    Example

    
    -				<EnqueueCommand>
    -				<reservationId>af626b88-458b-4e7a-9054-c03d8cffa260</reservationId>
    -				<targetName>Router 1234</targetName>
    -				<targetType>0</targetType>
    -				<commandName>ExampleCommand</commandName>
    -				<commandInputs>
    -				<InputNameValue>
    -				<Name>input1</Name>
    -				<Value>abc</Value>
    -				</InputNameValue>
    -				</commandInputs>
    -				<printOutput>true</printOutput>
    -				</EnqueueCommand>
    -			

    back to TOC

    ExecuteCommandExecute a command.

    Executes a command for the specified target.

    - Syntax -

    -			<ExecuteCommand>
    -			<reservationId>{reservationId}</reservationId>
    -			<targetName>{targetName}</targetName>
    -			<targetType>{targetType}</targetType>
    -			<commandName>{commandName}</commandName>
    -			<commandInputs>
    -			<InputNameValue>
    -			<Name>{Name}</Name>
    -			<Value>{Value}</Value>
    -			</InputNameValue>
    -			</commandInputs>
    -			<printOutput>{printOutput}</printOutput>
    -			</ExecuteCommand>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - targetName
    Specify the name of the target according to the target type: for resources - specify the resouce's name, for services - the service's alias.
    - string - targetType
    Specify the target type for command execution, possible values are: Resource, Service, App.
    Use 0 for Resource, 1 for Service, 2 for App.
    - string - commandName
    Specify the name of the command.
    - list - commandInputs
    Specify a matrix of input names and values required for executing the command.
    - boolean - printOutput
    Defines whether to print the command output in the reservation command output window.

    Example

    
    -				<ExecuteCommand>
    -				<reservationId>af626b88-458b-4e7a-9054-c03d8cffa260</reservationId>
    -				<targetName>Router 1234</targetName>
    -				<targetType>0</targetType>
    -				<commandName>ExampleCommand</commandName>
    -				<commandInputs>
    -				<InputNameValue>
    -				<Name>input1</Name>
    -				<Value>abc</Value>
    -				</InputNameValue>
    -				</commandInputs>
    -				<printOutput>true</printOutput>
    -				</ExecuteCommand>
    -			

    Output

  • resultXml
  • <ResponseInfo Output="success"/>

    back to TOC

    FindResources

    Retrieves resources that match all the specified search parameters, and all reservations associated with the search results.

    - Syntax -

    -			<FindResources>
    -			<resourceFamily>{resourceFamily}</resourceFamily>
    -			<resourceModel>{resourceModel}</resourceModel>
    -			<attributeValues>
    -			<AttributeNameValue>
    -			<Name>{Name}</Name>
    -			<Value>{Value}</Value>
    -			</AttributeNameValue>
    -			</attributeValues>
    -			<showAllDomains>{showAllDomains}</showAllDomains>
    -			<resourceFullName>{resourceFullName}</resourceFullName>
    -			<exactName>{exactName}</exactName>
    -			<includeSubResources>{includeSubResources}</includeSubResources>
    -			<resourceAddress>{resourceAddress}</resourceAddress>
    -			<resourceUniqueIdentifier>{resourceUniqueIdentifier}</resourceUniqueIdentifier>
    -			<maxResults>{maxResults}</maxResults>
    -			<includeExcludedResources>{includeExcludedResources}</includeExcludedResources>
    -			</FindResources>
    -		

    - Parameters -

    TypeNameDescription
    - string - resourceFamily
    Specify the name of the resource family.
    - string - resourceModel
    Specify the resource model.
    - list - attributeValues
    Specify an array of one or more attributes and attribute values.
    - boolean - showAllDomains
    Show all domains associated with the logged in user.
    - string - resourceFullName
    Specify part of or the full name of the resource.
    - boolean - exactName
    Specify whether to search the exact given name or not.
    - boolean - includeSubResources
    Specify whether to retrieve the sub resources once the parent matches the name.
    - string - resourceAddress
    Specify the resource address. Can be partial (e.g. '192.168.').
    - string - resourceUniqueIdentifier
    Specify the resource unique identifier.
    - number - maxResults
    Specify the maximum number of resources to return.
    - boolean - includeExcludedResources
    Specify whether to retrieve resources that are excluded

    Example

    
    -				<FindResources>
    -				<resourceFamily>Generic Chassis</resourceFamily>
    -				<resourceModel></resourceModel>
    -				<attributeValues>
    -				<AttributeNameValue>
    -				<Name>SW_Version</Name>
    -				<Value>1.3</Value>
    -				</AttributeNameValue>
    -				</attributeValues>
    -				<showAllDomains>true</showAllDomains>
    -				<resourceFullName></resourceFullName>
    -				<exactName>true</exactName>
    -				<includeSubResources>true</includeSubResources>
    -				<resourceAddress></resourceAddress>
    -				<resourceUniqueIdentifier></resourceUniqueIdentifier>
    -				<maxResults>500</maxResults>
    -				<includeExcludedResources>false</includeExcludedResources>
    -				</FindResources>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Resources>
    -				<Resource Name="Router 1234" Description="a new description for the resource" Address="192.168.1.201" FullName="Lab Routers/Router 1234" FullPath="Lab Routers/Router 1234" FullAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Status="Available" Permission="ReadOnly">
    -				<Reservations/>
    -				<UsageSummary NumOfNotInReservation="130" NumOfReserved="14" NumOfShared="0"/>
    -				</Resource>
    -				</Resources>
    -				</ResponseInfo>
    -			

    back to TOC

    FindResourcesInTimeRange

    Retrieves resources that match all the specified search parameters, and all reservations in the specified time range associated with the search results.

    - Syntax -

    -			<FindResourcesInTimeRange>
    -			<resourceFamily>{resourceFamily}</resourceFamily>
    -			<resourceModel>{resourceModel}</resourceModel>
    -			<fromTime>{fromTime}</fromTime>
    -			<untilTime>{untilTime}</untilTime>
    -			<attributeValues>
    -			<AttributeNameValue>
    -			<Name>{Name}</Name>
    -			<Value>{Value}</Value>
    -			</AttributeNameValue>
    -			</attributeValues>
    -			<showAllDomains>{showAllDomains}</showAllDomains>
    -			<resourceFullName>{resourceFullName}</resourceFullName>
    -			<exactName>{exactName}</exactName>
    -			<includeSubResources>{includeSubResources}</includeSubResources>
    -			<resourceAddress>{resourceAddress}</resourceAddress>
    -			<resourceUniqueIdentifier>{resourceUniqueIdentifier}</resourceUniqueIdentifier>
    -			<maxResults>{maxResults}</maxResults>
    -			</FindResourcesInTimeRange>
    -		

    - Parameters -

    TypeNameDescription
    - string - resourceFamily
    Specify the name of the resource family.
    - string - resourceModel
    Specify the resource model.
    - string - fromTime
    Specify from which future time and date to check the resource's availability.
    - string - untilTime
    Specify until which time and date to check the resource's availability.
    - list - attributeValues
    Specify an array of one or more attributes and attribute values.
    - boolean - showAllDomains
    Show all domains associated with the logged in user.
    - string - resourceFullName
    Specify part of or the full name of the resource.
    - boolean - exactName
    Specify whether to search the exact given name or not.
    - boolean - includeSubResources
    Specify whether to retrieve the sub resources once the parent matches the name.
    - string - resourceAddress
    Specify the resource address. Can be partial (e.g. '192.168.').
    - string - resourceUniqueIdentifier
    Specify the resource unique identifier.
    - number - maxResults
    Specify the maximum number of resources to return.

    Example

    
    -				<FindResourcesInTimeRange>
    -				<resourceFamily>Generic Chassis</resourceFamily>
    -				<resourceModel></resourceModel>
    -				<fromTime>03/01/2012 00:00</fromTime>
    -				<untilTime>05/31/2012 23:59</untilTime>
    -				<attributeValues>
    -				<AttributeNameValue>
    -				<Name>SW_Version</Name>
    -				<Value>1.3</Value>
    -				</AttributeNameValue>
    -				</attributeValues>
    -				<showAllDomains>true</showAllDomains>
    -				<resourceFullName></resourceFullName>
    -				<exactName></exactName>
    -				<includeSubResources>true</includeSubResources>
    -				<resourceAddress></resourceAddress>
    -				<resourceUniqueIdentifier></resourceUniqueIdentifier>
    -				<maxResults>500</maxResults>
    -				</FindResourcesInTimeRange>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Resources>
    -				<Resource Name="Router 1234" Description="a new description for the resource" Address="192.168.1.201" FullName="Lab Routers/Router 1234" FullPath="Lab Routers/Router 1234" FullAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Status="Available" Permission="ReadOnly">
    -				<Reservations/>
    -				<UsageSummary NumOfNotInReservation="130" NumOfReserved="14" NumOfShared="0"/>
    -				</Resource>
    -				</Resources>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC

    GetRoutesSolutionGet solution for specified routes.

    Calculates possible routes between the supplied endpoints and returns their details, without saving, connecting or modifying the reservation in any way.

    - Syntax -

    -			<GetRoutesSolution>
    -			<reservationId>{reservationId}</reservationId>
    -			<sourceResourcesFullPath>
    -			<string>{string}</string>
    -			</sourceResourcesFullPath>
    -			<targetResourcesFullPath>
    -			<string>{string}</string>
    -			</targetResourcesFullPath>
    -			<mappingType>{mappingType}</mappingType>
    -			<maxHops>{maxHops}</maxHops>
    -			<isShared>{isShared}</isShared>
    -			</GetRoutesSolution>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - list - sourceResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RootResourceName/ResourceName
    - list - targetResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RootResourceName/ResourceName
    - string - mappingType
    Specify bidirectional or unidirectional as the mapping type.
    - number - maxHops
    Specify the maximum number or allowed hops.
    - boolean - isShared
    Specify whether these routes are shared. Shared routes can be used in more than one reservation.

    Example

    
    -				<GetRoutesSolution>
    -				<reservationId>28cb2a71-c8fc-4f41-a22b-e65685ebed14</reservationId>
    -				<sourceResourcesFullPath>
    -				<string>Router 1234/Port 1</string>
    -				</sourceResourcesFullPath>
    -				<targetResourcesFullPath>
    -				<string>GenericResource 1234/Port 1</string>
    -				</targetResourcesFullPath>
    -				<mappingType>bi</mappingType>
    -				<maxHops>2</maxHops>
    -				<isShared>0</isShared>
    -				</GetRoutesSolution>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC

    GenerateUtilizationReportGenerate a utilization report.

    Generates a utilization report for the specified resources. To generate a report for all resources, leave the resourceFullName and resourceModel parameters blank.

    - Syntax -

    -			<GenerateUtilizationReport>
    -			<resourceFamilyName>{resourceFamilyName}</resourceFamilyName>
    -			<fromDate>{fromDate}</fromDate>
    -			<toDate>{toDate}</toDate>
    -			<resourceFullName>{resourceFullName}</resourceFullName>
    -			<resourceModelName>{resourceModelName}</resourceModelName>
    -			<includeChildResources>{includeChildResources}</includeChildResources>
    -			<groupBy>{groupBy}</groupBy>
    -			<utilizationReportType>{utilizationReportType}</utilizationReportType>
    -			</GenerateUtilizationReport>
    -		

    - Parameters -

    TypeNameDescription
    - string - resourceFamilyName
    Specify the name of the resource family.
    - string - fromDate
    Specify the start time and date.
    - string - toDate
    Specify the end time and date.
    - string - resourceFullName
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName.
    - string - resourceModelName
    Specify the resource model.
    - boolean - includeChildResources
    Specify whether to include child resources utilization.
    - string - groupBy
    Specify how to group the utilization results: Resource, User, or Machine
    Use 0 for Resource, 1 for User and 2 for Machine.
    - string - utilizationReportType
    Specify the report type: Lock or Mapping.
    Use 0 for Lock and 1 for Mapping.

    Example

    
    -				<GenerateUtilizationReport>
    -				<resourceFamilyName>Router</resourceFamilyName>
    -				<fromDate>03/01/2012 00:00</fromDate>
    -				<toDate>05/31/2012 23:59</toDate>
    -				<resourceFullName></resourceFullName>
    -				<resourceModelName></resourceModelName>
    -				<includeChildResources>0</includeChildResources>
    -				<groupBy>0</groupBy>
    -				<utilizationReportType>0</utilizationReportType>
    -				</GenerateUtilizationReport>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    GetGroupsDetailsRetrieve all system groups.

    Retrieves all groups, including members, roles and associated domains for each group.

    - Syntax -

    <GetGroupsDetails></GetGroupsDetails>

    - Parameters -

    TypeNameDescription

    Example

    <GetGroupsDetails></GetGroupsDetails>

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Groups>
    -				<Group Name="System Administrators" Description="Built in group, all members have administrative rights." GroupRole="SystemAdmin">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users>
    -				<User Name="admin" IsAdmin="true" IsActive="true" IsDomainAdmin="false">
    -				<Groups>
    -				<Group Name="System Administrators" Description="Built in group, all members have administrative rights.">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				<Group Name="Lab1">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Lab1" Description="" Id="71aa4f7e-174d-4df1-b50a-59e98f09005c"/>
    -				</TestShellDomains>
    -				</Group>
    -				</Groups>
    -				</User>
    -				</Users>
    -				</Group>
    -				<Group Name="Domain Administrators" Description="Built in group, all members have administrative Domain rights." GroupRole="DomainAdmin">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users>
    -				<User Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="true" Email="">
    -				<Groups>
    -				<Group Name="Domain Administrators" Description="Built in group, all members have administrative Domain rights.">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				</Groups>
    -				</User>
    -				</Users>
    -				</Group>
    -				<Group Name="QA_Users" Description="QA users" GroupRole="Regular">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users>
    -				<User Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="user1234@work.com">
    -				<Groups>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				<Group Name="QA_Users" Description="QA users">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				</Groups>
    -				</User>
    -				<User Name="User2345" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="">
    -				<Groups>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				<Group Name="QA_Users" Description="QA users">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				</Groups>
    -				</User>
    -				</Users>
    -				</Group>
    -				<Group Name="RND_Users" GroupRole="Regular">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users/>
    -				</Group>
    -				</Groups>
    -				</ResponseInfo>
    -			

    back to TOC

    GetLockedResourcesRetrieve a list of locked resources.

    Retrieves locked resources for a specific user, a specific computer, or a specific folder. If none of these are specified, this method retrieves the list of locked resources for all users, on all machines, in all folders.

    - Syntax -

    -			<GetLockedResources>
    -			<user>{user}</user>
    -			<machine>{machine}</machine>
    -			<folderFullPath>{folderFullPath}</folderFullPath>
    -			</GetLockedResources>
    -		

    - Parameters -

    TypeNameDescription
    - string - user
    Specify a user name to retrieve locked resources for that user.
    - string - machine
    Specify a machine name to retrieve locked resources for that computer.
    - string - folderFullPath
    Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.

    Example

    
    -				<GetLockedResources>
    -				<user>admin</user>
    -				<machine></machine>
    -				<folderFullPath></folderFullPath>
    -				</GetLockedResources>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Reservations>
    -				<Reservation Name="Immediate reservation" Owner="admin" Created="2012-06-20T15:05:06">
    -				<LockedResources>
    -				<Resource Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="true" Excluded="false"/>
    -				<Resource Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="true" Excluded="false"/>
    -				</LockedResources>
    -				</Reservation>
    -				</Reservations>
    -				</ResponseInfo>
    -			

    back to TOC

    GetReservationDetailsRetrieve reservation details and parameters.

    Retrieves all details and parameters for a specified reservation, including its resources, routes and route segments, topologies, and reservation conflicts.The data cached for 5 seconds.

    - Syntax -

    -			<GetReservationDetails>
    -			<reservationId>{reservationId}</reservationId>
    -			<disableCache>{disableCache}</disableCache>
    -			</GetReservationDetails>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - boolean - disableCache
    Specify if the reservation detail is new or cached

    Example

    
    -				<GetReservationDetails>
    -				<reservationId>af626b88-458b-4e7a-9054-c03d8cffa260</reservationId>
    -				<disableCache>true</disableCache>
    -				</GetReservationDetails>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<ReservationDescription Id="caf0324e-680c-4555-8620-bcdab99de690" Name="Environment-03-02-2015 18-21" StartTime="03/02/2015 18:21:00" EndTime="03/02/2015 20:21:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Started" ProvisioningStatus="Not Run" ActualEndTime="" CreateDate="03/02/2015 18:21:56" ModificationDate="03/02/2015 18:21:56" DomainName="Global">
    -				<Topologies>
    -				<TopologyName>Environment-03-02-2015 18-21</TopologyName>
    -				</Topologies>
    -				<TopologiesInfo>
    -				<Topology Name="Environment-03-02-2015 18-21" Alias="Environment-03-02-2015 18-21">
    -				<Type>Regular</Type>
    -				<State>Pending</State>
    -				</Topology>
    -				</TopologiesInfo>
    -				<PermittedUsers>
    -				<PermittedUser>admin</PermittedUser>
    -				</PermittedUsers>
    -				<ReservedResource Name="bridge" FolderFullPath="" FullAddress="1" Shared="true" Availability="Available" Locked="false" Released="true" ResourceFamilyName="Bridge" ResourceModelName="Bridge Generic Model" CreatedByUser="admin" CreatedInDomain="Global">
    -				<AppDetails AppName="TestApp" />
    -				</ReservedResource>
    -				<TopologiesReservedResources/>
    -				<Conflicts/>
    -				<TopologiesRouteInfo/>
    -				<TopologiesResourcesAttributeInfo/>
    -				<TopologiesInstructionsInfo>
    -				<TopologyInstructions TopologyName="Environment-03-02-2015 18-21">
    -				<Instructions/>
    -				</TopologyInstructions>
    -				</TopologiesInstructionsInfo>
    -				<ActiveRoutesInfo/>
    -				<RequestedRoutesInfo/>
    -				<Connectors/>
    -				<ReservationLiveStatus ReservationId="caf0324e-680c-4555-8620-bcdab99de690"/>
    -				<Services/>
    -				</ReservationDescription>
    -				<Apps>
    -				<ReservedApp Name="MonitoringApp">
    -				<LogicalResource Family="Monitoring" Model="DefaultMonitoring"/>
    -				</ReservedApp>
    -				</Apps>
    -				</ResponseInfo>
    -			

    back to TOC

    GetReservationAppImageRetrieve the photo of an app template.

    Retrieves the photo of an app.

    - Syntax -

    -			<GetReservationAppImage>
    -			<reservationId>{reservationId}</reservationId>
    -			<appName>{appName}</appName>
    -			</GetReservationAppImage>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - appName
    Specify the name of the app.

    Example

    
    -				<GetReservationAppImage>
    -				<reservationId>af626b88-458b-4e7a-9054-c03d8cffa260</reservationId>
    -				<appName>MyApp</appName>
    -				</GetReservationAppImage>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<AppTemplateImage>iVBORw0KGgoAAAANSUhEUgAAAG0AAAAgCAYAAAAYPvbkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACAJJREFUeNrsWwuQjVUcP3fvXbRrSa3HkgiV11qVRw8l6SFNNTIpRekhGb1Vqgmp1CS9PFJIidXopUZRSYymtUVh2YTkkcdKilbrcXf39v/P/X3tcZxzv/PdvQ8z9j/zG3e/e777nXN+//f5+AITCoSF+AknEtoQuhM6E1oQGhCqEcoJ/xC2EgoJeYTF+PuAqBKWcwl3EQ5L12oSxgaHZK+UB6ZOXN2a/ulP6IRLywgzadwa/sPnQpoP5PQh3EI4w8Mkg4SvCW8SFhL2H+ekDSC8rbnei8j4BGTxft9KGA9CZSkh3E+YFojwkLqEmwmPE+pFMclUwpUAk/Ys4VtC2XFKWshiTBfCFIKOlzQYwMYUw83sBmcQXomSMFXYpX5EeJRQo8pTajR84moOQQ8ZCHOE+XpEN6AjYRbcYizlJMJzhIaEoYpvr5IwIRdajLtAJa29JWFFSDZ+ha9lLcki5BA6IBaa5B7Eu6GWLuN4Ed6z6jZGKZPWmDAhAmHlSCzeIKwg7CMUE0qhJez2ahMaEW4gDMTfJuLWwn9XScX+FiIzjyRrHdI4bR/MpmcYuJvwIIGznH8NDywBdhKWE94hjCH0NCQpIwiLYK2qm/Br7inDc9wkoLH0EJTL1k2xxrckNIPihbAHqwnblGRKN99yrwkXZZClFNcmWZA20SGtHQc4w6D1hH6oFbwIa01vwmgEWFVOIQxHiivLnVAgPxbvh6K8THjf5ZnsLSYTToULFiDgc8JIg8I5UgO11AAoWh2Q75OI589cU40jzEFtej3hKcIhKcv7Bmvb7XHPZhPOwx74NUrLJcN7AUx2sCFrYavpS/gpSpM/SBhGyIC7VKUbIRsa7IgTG2VrOYASxE14LW2hELL8bLBeR9iqniFcB8uJJGfDi/SBMtbC/bJshTcRHq3tIFkb12KrQNzJ+OpvEDaZxzBR9RGDdDK0EoQ5UgpXmA1NVi2jH4iVXUu0dU7I0oXKwnUku6UmHu/riUx4cZRzNRHHFjuJyJsK5WPl3UbXD8v+/2JCuub+DwlfxijIFkE728F9qO2dZMkV3GFAOy4aydFYWUyESGL3vskUtLsZ7uP48VcM58HmPYhwlnI9C2QWJJiwVoiTkQjbg9hcAhffVsmIfbFuFpCFZSCuFRBxRbiWhWfn07XiALRFl3ysi/EmHUZWqZLGfvv0BJNWAwrU2vD9b+gGLYWXCOKeTCj5w5WwTjfJQBJTm8jaCcVg0vYSbuQyK6AJ2gKE7YjDhFZAa9OUSTZMsJW1QfKlkwWE+wi/aL7bihg/jzAd3aNYSwh7kg04UuDEyhRDPGO3GI+u/B9SKi7XbOkJJMyPWFZNV7gS7jYQpo7jZvrvcZpjmaEW/r8wNBWYvjhtmE8kV/hc8HLDd6PhGm1kA+GlZCwgBQWi0MSZDMM9mUjTuajshFTZtiZpoNHwoEvRG2tJ18RVgc5MnsffmmXYv7gKx7TNqNVUn98Y7kwWzpzGKl0M1sy56DrkuRDQQZNtHYhxlhpyuZ6OgliVpcgWvQjH5/wIlhs3S1upud5EU3/wYsdr2k7cn+Mqfj6BC8LuEbKiHENavUFJo6MtVlMMsUp1jzrZLry/GlGK5CTh7vELw3f9JAtkEvkQs79LvOKU9APCKM3m3AsL1rXKViobUa6ZZ8ByPdVjbKHxuq9SpLF579J814NwDT4fgv8eIMKnz28Rthh+sw7qjJlKynqa0Pf/CsSRB6KHNKT5LTPMgKbjolqwyQVyODghivDSLBmk7UGLSScvEC5CgfkuapMXUcfwMU5voe9N8gZdha6K4y75FIGPd/ZJ43Zonl0ijj5GSbWs5dIsOhQlmljN0gVJlhfhGN85GaQFsXF/Gqwml9BVs3COAR+D1CcMdV1LuNWBqOhfJZwjwscnBxEHv1fu2Y3vVGlusZ52FmN4nrpjpqao37zI7eLot6YSQppAMTnSMIY7Jp+J8DGE7iSas8XnRbjrXahxbbVBErtUPtXeiAKWCX1S83uczRYbSItESqZLzHVkLzJdnYwSFe8aukkXtLNEskhzao5cw7iaKCT5pPk2EX7/sR7iTCoytmVoDW2PoJWLsbH1kXUVGWKcrgTgZw4xZJf14X4vslz3QqFv09VFInV1hCwzA7F+ljC/ThH3Ok3WwOEIyKbFc1E6DQXlMljFPiQKdZAdZkV4XgvExh9E+H2TQjx3Bz4HkZTwIWB7zf13YNNy8dzqouJl2ks8rHs9XPUYzXd86j0H3mU+iu4glLMpCOthUVokhDSWTbCI110KxloR6jEb6aS4oXXo5f2Iv6cgkcnUZJF9gdJKtsVmgOgehvLlWsBJ65PdftO6R0c2wgW+JhL3Hv6Z4sh3/r6DlrspXGU2kl3zA8LuZN70HLbAtccCaU4q/hg0Or+SzyhDAb/eZVxPpZ02LIpeIKfySzyMX4eyZX4U6wohzk8/VkgTSLs/JfRCp2Ohx9/m2DQXQZ1jzqVIVBYJ/Xscl4nwf/KQOyU3wY3ZyAK4s3yP69yM9Q3CZxvZBHc+Qqk75ef5LK3VJmwJuTERsHQjs5EmN0LNxu91tEI5UAsk7EdGuAobl6f084qR+uciaclBstEcaIp4ukSq3bZgMyejrXY+npmOzskuuDee31ei4oA1KNV6vMY1ouIVN51wYjUVNWVXWH1HzCkN3oKbECuQpMyDUrEsR6ngNASqwYJVMnmeT4sjzxPTNO6V92kc1lkmEbYd8xT/CTAAmAbgA3C38T4AAAAASUVORK5CYII==</AppTemplateImage>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    GetResourceDetailsRetrieve the resource parameters and attributes.

    Retrieves resource descriptions for the specified resource, and a matrix of all its associated attributes and attribute values.

    - Syntax -

    -			<GetResourceDetails>
    -			<resourceFullPath>{resourceFullPath}</resourceFullPath>
    -			<showAllDomains>{showAllDomains}</showAllDomains>
    -			</GetResourceDetails>
    -		

    - Parameters -

    TypeNameDescription
    - string - resourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - boolean - showAllDomains
    Show all domains associated with the logged in user.

    Example

    
    -				<GetResourceDetails>
    -				<resourceFullPath>Lab Routers/Router 1234</resourceFullPath>
    -				<showAllDomains>1</showAllDomains>
    -				</GetResourceDetails>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo Name="Router 1234" DriverName="Router Driver" FolderFullPath="Lab Routers" Address="192.168.1.200" FullAddress="192.168.1.200" RootAddress="192.168.1.200" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Locked="false" Excluded="false" Description="a generic router" Permissions="ReadOnly"  ResourceLiveStatusName="name1" ResourceLiveStatusDescription="description1">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"></ResourceAttribute>
    -				</ResourceAttributes>
    -				<Domains></Domains>
    -				<ChildResources>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.200/1" RootAddress="192.168.1.200" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="false" Excluded="false" Description="a generic router port", "ReadOnly">
    -				<ResourceAttributes></ResourceAttributes>
    -				<Domains></Domains>
    -				<LockInfo></LockInfo>
    -				</ResourceInfo>
    -				</ChildResources>
    -				<LockInfo></LockInfo>
    -				<CreatedInReservation></CreatedInReservation>
    -				<CreatedByUser></CreatedByUser>
    -				<CreatedInDomain></CreatedInDomain>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    GetTopologyDetailsRetrieve the topology parameters and attributes.

    Retrieves all resources and attributes associated with the specified topology.

    - Syntax -

    -			<GetTopologyDetails>
    -			<topologyFullPath>{topologyFullPath}</topologyFullPath>
    -			</GetTopologyDetails>
    -		

    - Parameters -

    TypeNameDescription
    - string - topologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.

    Example

    
    -				<GetTopologyDetails>
    -				<topologyFullPath>Temp Automation Resources/TP1</topologyFullPath>
    -				</GetTopologyDetails>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo Name="TP1" Owner="admin" Type="Build" State="Ready">
    -				<Resources>
    -				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false" Excluded="false" WillBeLocked="false">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				</ResourceInfo>
    -				</Resources>
    -				<AbstractResources/>
    -				<Routes>
    -				<Route Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				<Instructions>
    -				Topology instructions.
    -				</Instructions>
    -				<Driver>
    -				ExampleTopologyDriver
    -				</Driver>
    -				<GlobalInputs ParamName="Some global input"></GlobalInputs>
    -				<RequirementsInputs ParamName="Model" ResourceName="test*" InputType="Models">
    -				<PossibleValues>Test Model</PossibleValues>
    -				</RequirementsInputs>
    -				<RequirementsInputs ParamName="Speed" ResourceName="test*" InputType="Attributes">
    -				<PossibleValues>10 Mbps</PossibleValues>
    -				<PossibleValues>100 Mbps</PossibleValues>
    -				<PossibleValues>1 Gbps</PossibleValues>
    -				<PossibleValues>10 Gbps</PossibleValues>
    -				</<RequirementsInputs>
    -				<AdditionalInfoInputs ParamName="Test" ResourceName="test*"></AdditionalInfoInputs>
    -				<ParentTopology Name="Template01">
    -				<Type>Build</Type>
    -				<State>Pending</State>
    -				</ParentTopology>
    -				<Apps>
    -				<App Name="App2222">
    -				<LogicalResource Family="Generic App Family" Model="Generic App Model" Description="">
    -				<Attributes>
    -				<Attribute Name="Access Mode" Value="565"></Attribute>
    -				</Attributes>
    -				</LogicalResource>
    -				<DeploymentPaths>
    -				<DeploymentPath IsDefault="true">
    -				<DeploymentService Name="vCenter VM From Template" Model="vCenter VM From Template" Driver="Deploy From Template Driver">
    -				<Attributes>
    -				<Attribute Name="Access Mode" Value=""></Attribute>
    -				<Attribute Name="vCenter Name" Value="VMWare vCenter"></Attribute>
    -				<Attribute Name="vCenter Template" Value=""></Attribute>
    -				</Attributes>
    -				</DeploymentService>
    -				</DeploymentPath>
    -				</DeploymentPaths>
    -				</App>
    -				</App>
    -				</Apps>
    -				<MaxDuration>02:00:00</MaxDuration>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    PowerCycleResourceCycle power for resource power ports.

    Cycles the power options for resource power ports.

    - Syntax -

    -			<PowerCycleResource>
    -			<reservationId>{reservationId}</reservationId>
    -			<resourceFullPath>{resourceFullPath}</resourceFullPath>
    -			<powerPortsFullPath>
    -			<string>{string}</string>
    -			</powerPortsFullPath>
    -			<delay>{delay}</delay>
    -			</PowerCycleResource>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the reservation’s unique identifier. Admin users may leave this parameter blank to perform power operations on excluded resources.
    - string - resourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - list - powerPortsFullPath
    Specify the list of power ports to use in this operation. Include the full path from the root resource to each power port, separated by slashes. For example: Switch20/Blade5/PowerPort1. Leave blank to perform the power operation on all of the specified resource’s power ports.
    - string - delay
    Specify the number of seconds to delay between each power cycle.

    Example

    
    -				<PowerCycleResource>
    -				<reservationId>28cb2a71-c8fc-4f41-a22b-e65685ebed14</reservationId>
    -				<resourceFullPath>GenericResource 1234</resourceFullPath>
    -				<powerPortsFullPath>
    -				<string>GenericResource 1234/PowerPort 11</string>
    -				</powerPortsFullPath>
    -				<delay>2</delay>
    -				</PowerCycleResource>
    -			

    Output

  • resultXml
  • <ResponseInfo Output=""/>

    back to TOC
    back to TOC
    back to TOC
    back to TOC

    ReplaceServiceWithResourcereplace a service with resource

    Replace a service in reservation with resource

    - Syntax -

    -			<ReplaceServiceWithResource>
    -			<reservationId>{reservationId}</reservationId>
    -			<serviceName>{serviceName}</serviceName>
    -			<domainName>{domainName}</domainName>
    -			<resourceDriverName>{resourceDriverName}</resourceDriverName>
    -			<resourceCreationRequests>
    -			<ResourceInfoDto>
    -			<Family>{Family}</Family>
    -			<Model>{Model}</Model>
    -			<FullName>{FullName}</FullName>
    -			<Address>{Address}</Address>
    -			<FolderFullpath>{FolderFullpath}</FolderFullpath>
    -			<Description>{Description}</Description>
    -			<ParentFullName>{ParentFullName}</ParentFullName>
    -			</ResourceInfoDto>
    -			</resourceCreationRequests>
    -			<resourceAttributesToUpdate>
    -			<ResourceAttributesUpdateRequest>
    -			<ResourceFullName>{ResourceFullName}</ResourceFullName>
    -			<AttributeNamesValues>
    -			<AttributeNameValue>
    -			<Name>{Name}</Name>
    -			<Value>{Value}</Value>
    -			</AttributeNameValue>
    -			</AttributeNamesValues>
    -			</ResourceAttributesUpdateRequest>
    -			</resourceAttributesToUpdate>
    -			</ReplaceServiceWithResource>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    The id of the reservation.
    - string - serviceName
    The name of the service in reservation.
    - string - domainName
    The name of the domain new resources will be added to. (leave empty for Global domain)
    - string - resourceDriverName
    The driver name that would be set on the new resources that will be created.
    - list - resourceCreationRequests
    Requests for creating new resources.
    - list - resourceAttributesToUpdate
    Attributes to update on new resources.

    Example

    
    -				<ReplaceServiceWithResource>
    -				<reservationId>EAE1752D-461F-4049-BEC7-58F37AFB4557</reservationId>
    -				<serviceName>myService</serviceName>
    -				<domainName>Domain1</domainName>
    -				<resourceDriverName>myResourceDriver</resourceDriverName>
    -				<resourceCreationRequests>
    -				<ResourceInfoDto>
    -				<Family>ResourceFamily</Family>
    -				<Model>ResourceModel</Model>
    -				<FullName>MyNewResource</FullName>
    -				<Address>1.1.1.1</Address>
    -				<FolderFullpath>MyNewResourcesFolder</FolderFullpath>
    -				<Description>My New Resource</Description>
    -				<ParentFullName>MyNewResource</ParentFullName>
    -				</ResourceInfoDto>
    -				</resourceCreationRequests>
    -				<resourceAttributesToUpdate>
    -				<ResourceAttributesUpdateRequest>
    -				<ResourceFullName>MyNewResource</ResourceFullName>
    -				<AttributeNamesValues>
    -				<AttributeNameValue>
    -				<Name>NewResourceAttribute1</Name>
    -				<Value>Hello</Value>
    -				</AttributeNameValue>
    -				</AttributeNamesValues>
    -				</ResourceAttributesUpdateRequest>
    -				</resourceAttributesToUpdate>
    -				</ReplaceServiceWithResource>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<RootResources>
    -				MyNewResource
    -				</RootResources>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    RemoveRoutesFromReservationRemove routes from a reservation.

    Disconnects a list of endpoints and removes the mapped route between them. Will only disconnect endpoints using resources reserved to the logged-in user .

    - Syntax -

    -			<RemoveRoutesFromReservation>
    -			<reservationId>{reservationId}</reservationId>
    -			<endpoints>
    -			<string>{string}</string>
    -			</endpoints>
    -			<mappingType>{mappingType}</mappingType>
    -			</RemoveRoutesFromReservation>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - list - endpoints
    The list of removed endpoints.
    - string - mappingType
    Specify bidirectional or unidirectional as the mapping type.

    Example

    
    -				<RemoveRoutesFromReservation>
    -				<reservationId>28cb2a71-c8fc-4f41-a22b-e65685ebed14</reservationId>
    -				<endpoints>
    -				<string>Router 1234/Port 1</string>
    -				<string>GenericResource 1234/Port 1</string>
    -				<string>Router 1234/Port 1</string>
    -				<string>GenericResource 1234/Port 2</string>
    -				</endpoints>
    -				<mappingType>{mappingType}</mappingType>
    -				</RemoveRoutesFromReservation>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" Alias="a route" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" Alias="uni route" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 2" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    SaveReservationAsTopologyCreate a topology from an existing active reservation.

    Creates a topology from an existing reservation. Leave the folder path blank to save the topology directly under the root.

    - Syntax -

    -			<SaveReservationAsTopology>
    -			<reservationId>{reservationId}</reservationId>
    -			<folderFullPath>{folderFullPath}</folderFullPath>
    -			<topologyName>{topologyName}</topologyName>
    -			<includeInactiveRoutes>{includeInactiveRoutes}</includeInactiveRoutes>
    -			</SaveReservationAsTopology>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - folderFullPath
    Full container folder path where the new topology will be saved. leaving the folder path empty will try saving the topology under the root. For example: FolderName/FolderNameA.
    - string - topologyName
    Specify the new name for the new topology.
    - boolean - includeInactiveRoutes
    Include disconnected routes in the created topology

    Example

    
    -				<SaveReservationAsTopology>
    -				<reservationId>af626b88-458b-4e7a-9054-c03d8cffa260</reservationId>
    -				<folderFullPath>Temp Automation Resources</folderFullPath>
    -				<topologyName>TP1</topologyName>
    -				<includeInactiveRoutes>1</includeInactiveRoutes>
    -				</SaveReservationAsTopology>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo Name="TP1">
    -				<Resources>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Studio" Username="admin" Created="2012-06-20T17:20:37"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Studio" Username="admin" Created="2012-06-20T17:20:37"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="true" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T17:20:37"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false" Excluded="false" WillBeLocked="false">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				</Resources>
    -				<AbstractResources/>
    -				<Routes>
    -				<Route Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    SetRouteAttributesSet a route's attributes.

    Sets attributes and associated values for a specified route.

    - Syntax -

    -			<SetRouteAttributes>
    -			<reservationId>{reservationId}</reservationId>
    -			<sourceResourceFullPath>{sourceResourceFullPath}</sourceResourceFullPath>
    -			<targetResourceFullPath>{targetResourceFullPath}</targetResourceFullPath>
    -			<applyChangesTo>{applyChangesTo}</applyChangesTo>
    -			<attributeRequests>
    -			<string>{string}</string>
    -			</attributeRequests>
    -			</SetRouteAttributes>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - sourceResourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - string - targetResourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - string - applyChangesTo
    Specify on which resources to apply the attribute changes: Source/Target/All.Source refers to the resource connected to the source endpoint of the route. Target refers to the resource connected to the target endpoint of the route. All encompasses all route resources.
    Use 0 for Source, 1 for Target and 2 for All.
    - list - attributeRequests
    Specify an array of attributes and associated attribute values.

    Example

    
    -				<SetRouteAttributes>
    -				<reservationId>af626b88-458b-4e7a-9054-c03d8cffa260</reservationId>
    -				<sourceResourceFullPath>Router 1234/Port 1</sourceResourceFullPath>
    -				<targetResourceFullPath>GenericResource 1234/Port 1</targetResourceFullPath>
    -				<applyChangesTo>2</applyChangesTo>
    -				<attributeRequests>
    -				<string>SW_Version</string>
    -				<string>1.3</string>
    -				</attributeRequests>
    -				</SetRouteAttributes>
    -			

    back to TOC
    back to TOC

    SetConnectorAttributesSet a connector's attributes.

    Sets attributes and associated values for a specified connector.

    - Syntax -

    -			<SetConnectorAttributes>
    -			<reservationId>{reservationId}</reservationId>
    -			<sourceResourceFullName>{sourceResourceFullName}</sourceResourceFullName>
    -			<targetResourceFullName>{targetResourceFullName}</targetResourceFullName>
    -			<attributeRequests>
    -			<AttributeNameValue>
    -			<Name>{Name}</Name>
    -			<Value>{Value}</Value>
    -			</AttributeNameValue>
    -			</attributeRequests>
    -			</SetConnectorAttributes>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - sourceResourceFullName
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - string - targetResourceFullName
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - list - attributeRequests
    Specify a matrix of attributes and associated attribute values.

    Example

    
    -				<SetConnectorAttributes>
    -				<reservationId>af626b88-458b-4e7a-9054-c03d8cffa260</reservationId>
    -				<sourceResourceFullName>Router 1234/Port 1</sourceResourceFullName>
    -				<targetResourceFullName>GenericResource 1234/Port 1</targetResourceFullName>
    -				<attributeRequests>
    -				<AttributeNameValue>
    -				<Name>Part Number</Name>
    -				<Value>123</Value>
    -				</AttributeNameValue>
    -				</attributeRequests>
    -				</SetConnectorAttributes>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    UpdateConnectorAliasInReservationUpdate connector alias in reservation.

    Sets alias for a specified connector.

    - Syntax -

    -			<UpdateConnectorAliasInReservation>
    -			<reservationId>{reservationId}</reservationId>
    -			<sourceResourceFullName>{sourceResourceFullName}</sourceResourceFullName>
    -			<targetResourceFullName>{targetResourceFullName}</targetResourceFullName>
    -			<direction>{direction}</direction>
    -			<alias>{alias}</alias>
    -			</UpdateConnectorAliasInReservation>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - string - sourceResourceFullName
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - string - targetResourceFullName
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - string - direction
    Specify bidirectional or unidirectional as the connector direction.
    Use 'bi' for bidirectional or 'uni' for unidirectional connector.
    - string - alias
    Specify the connector’s alias.

    Example

    
    -				<UpdateConnectorAliasInReservation>
    -				<reservationId>2623d08d-9d19-4b95-a8dc-d7cca5ea05fb</reservationId>
    -				<sourceResourceFullName>Router 1234/Port 1</sourceResourceFullName>
    -				<targetResourceFullName>GenericResource 1234/Port 1</targetResourceFullName>
    -				<direction>bi</direction>
    -				<alias>some alias</alias>
    -				</UpdateConnectorAliasInReservation>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    UpdatePhysicalConnectionDefine the physical connection between two resources.

    Define a physical connection (cable link) between two resources.

    - Syntax -

    -			<UpdatePhysicalConnection>
    -			<resourceAFullPath>{resourceAFullPath}</resourceAFullPath>
    -			<resourceBFullPath>{resourceBFullPath}</resourceBFullPath>
    -			<overrideExistingConnections>{overrideExistingConnections}</overrideExistingConnections>
    -			</UpdatePhysicalConnection>
    -		

    - Parameters -

    TypeNameDescription
    - string - resourceAFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    - string - resourceBFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1. You may leave this parameter blank if you wish to disconnect the existing source resource connection.
    - boolean - overrideExistingConnections
    Overriding existing connections will automatically remove existing physical connection if they conflict with the requested new connections. If set to 'No', an error message will be displayed if any port is already connected and the operation will be cancelled.

    Example

    
    -				<UpdatePhysicalConnection>
    -				<resourceAFullPath>Router 1234/Port 1</resourceAFullPath>
    -				<resourceBFullPath>L1 Switch 1234/Blade 1/Port 3</resourceBFullPath>
    -				<overrideExistingConnections>1</overrideExistingConnections>
    -				</UpdatePhysicalConnection>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    UpdateUsersLimitations

    Update MaxConcurrentReservations, MaxReservationDuration, MaxSavedSandboxes, MaxScheduledSandboxes and MaxOwnedBlueprints.

    - Syntax -

    -			<UpdateUsersLimitations>
    -			<userUpdateRequests>
    -			<UserUpdateRequest>
    -			<Username>{Username}</Username>
    -			<MaxConcurrentReservations>{MaxConcurrentReservations}</MaxConcurrentReservations>
    -			<MaxReservationDuration>{MaxReservationDuration}</MaxReservationDuration>
    -			<MaxSavedSandboxes>{MaxSavedSandboxes}</MaxSavedSandboxes>
    -			<MaxScheduledSandboxes>{MaxScheduledSandboxes}</MaxScheduledSandboxes>
    -			<MaxOwnedBlueprints>{MaxOwnedBlueprints}</MaxOwnedBlueprints>
    -			</UserUpdateRequest>
    -			</userUpdateRequests>
    -			</UpdateUsersLimitations>
    -		

    - Parameters -

    TypeNameDescription
    - list - userUpdateRequests
    List of Username, MaxConcurrentReservations, MaxReservationDuration, MaxSavedSandboxes, MaxScheduledSandboxes, and MaxOwnedBlueprints of the users you wish to update.

    Example

    
    -				<UpdateUsersLimitations>
    -				<userUpdateRequests>
    -				<UserUpdateRequest>
    -				<Username>User1234</Username>
    -				<MaxConcurrentReservations>100</MaxConcurrentReservations>
    -				<MaxReservationDuration></MaxReservationDuration>
    -				<MaxSavedSandboxes></MaxSavedSandboxes>
    -				<MaxScheduledSandboxes></MaxScheduledSandboxes>
    -				<MaxOwnedBlueprints>10</MaxOwnedBlueprints>
    -				</UserUpdateRequest>
    -				<UserUpdateRequest>
    -				<Username>User5678</Username>
    -				<MaxConcurrentReservations>100</MaxConcurrentReservations>
    -				<MaxReservationDuration>100</MaxReservationDuration>
    -				<MaxSavedSandboxes>100</MaxSavedSandboxes>
    -				<MaxScheduledSandboxes>10</MaxScheduledSandboxes>
    -				<MaxOwnedBlueprints>10</MaxOwnedBlueprints>
    -				</UserUpdateRequest>
    -				</userUpdateRequests>
    -				</UpdateUsersLimitations>
    -			

    back to TOC
    back to TOC
    back to TOC

    UpdateRouteAliasesInReservationUpdate route aliases in a reservation

    Update route aliases in a reservation.

    - Syntax -

    -			<UpdateRouteAliasesInReservation>
    -			<reservationId>{reservationId}</reservationId>
    -			<routeAliases>
    -			<UpdateRouteAliasRequest>
    -			<SourceResourceName>{SourceResourceName}</SourceResourceName>
    -			<TargetResourceName>{TargetResourceName}</TargetResourceName>
    -			<Alias>{Alias}</Alias>
    -			</UpdateRouteAliasRequest>
    -			</routeAliases>
    -			</UpdateRouteAliasesInReservation>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specifies the string that represents the reservation’s unique identifier.
    - list - routeAliases
    Specify a matrix of route source, route target and alias.

    Example

    
    -				<UpdateRouteAliasesInReservation>
    -				<reservationId>28cb2a71-c8fc-4f41-a22b-e65685ebed14</reservationId>
    -				<routeAliases>
    -				<UpdateRouteAliasRequest>
    -				<SourceResourceName>SourceResourceName</SourceResourceName>
    -				<TargetResourceName>TargetResourceName</TargetResourceName>
    -				<Alias>Alias</Alias>
    -				</UpdateRouteAliasRequest>
    -				</routeAliases>
    -				</UpdateRouteAliasesInReservation>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 2" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    RestoreSavedSandbox

    Restore a saved sandbox

    - Syntax -

    -			<RestoreSavedSandbox>
    -			<reservationName>{reservationName}</reservationName>
    -			<owner>{owner}</owner>
    -			<durationInMinutes>{durationInMinutes}</durationInMinutes>
    -			<notifyOnStart>{notifyOnStart}</notifyOnStart>
    -			<notifyOnSetupComplete>{notifyOnSetupComplete}</notifyOnSetupComplete>
    -			<notifyOnEnd>{notifyOnEnd}</notifyOnEnd>
    -			<notificationMinutesBeforeEnd>{notificationMinutesBeforeEnd}</notificationMinutesBeforeEnd>
    -			<savedSandboxId>{savedSandboxId}</savedSandboxId>
    -			<startTime>{startTime}</startTime>
    -			<endTime>{endTime}</endTime>
    -			<isTerminationProtectionEnabled>{isTerminationProtectionEnabled}</isTerminationProtectionEnabled>
    -			</RestoreSavedSandbox>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationName
    Specify the name of the reservation.
    - string - owner
    Specify the user name of the reservation owner.
    - number - durationInMinutes
    Specify the length of the reservation. (in minutes)
    - boolean - notifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    - boolean - notifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    - number - notificationMinutesBeforeEnd
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    - string - savedSandboxId
    Specify the saved sandbox id.
    - string - startTime
    The start time of the restored sandbox.
    - string - endTime
    The end time of the restored sandbox.
    - boolean - notifyOnSetupComplete
    Indicate whether to notify the reservation owner when the reservation setup completes.
    - boolean - isTerminationProtectionEnabled
    Indicate whether to protect the reservation from being terminated.
    - string - reservationId
    Specifies the string that represents the reservation’s unique identifier.

    Example

    
    -				<RestoreSavedSandbox>
    -				<reservationName>restored reservation</reservationName>
    -				<owner>admin</owner>
    -				<durationInMinutes>0</durationInMinutes>
    -				<notifyOnStart>0</notifyOnStart>
    -				<notifyOnSetupComplete>0</notifyOnSetupComplete>
    -				<notifyOnEnd>0</notifyOnEnd>
    -				<notificationMinutesBeforeEnd>0</notificationMinutesBeforeEnd>
    -				<isTerminationProtectionEnabled>False</isTerminationProtectionEnabled>
    -				<savedSandboxId>af626b88-458b-4e7a-9054-c03d8cffa260</savedSandboxId>
    -				<startTime>2015-01-01T10:00:00</startTime>
    -				<endTime>2015-01-01T11:00:00</endTime>
    -				</RestoreSavedSandbox>
    -			

    back to TOC
    back to TOC
    back to TOC

    SetAppSecurityGroupsSet security groups for apps

    Set security groups for apps.

    - Syntax -

    -			<SetAppSecurityGroups>
    -			<reservationId>{ReservationId}</reservationId>
    -			<securityGroups>
    -			<SecurityGroup>
    -			<Name>{AppName}</Name>
    -			<SecurityGroupsConfigurations>
    -			<SecurityGroupsConfiguration>
    -			<SubnetId>{SubnetId}</SubnetId>
    -			<Rules>
    -			<SecurityGroupRule>
    -			<FromPort>{FromPort}</FromPort>
    -			<ToPort>{ToPort}</ToPort>
    -			<Protocol>{Protocol}</Protocol>
    -			<Source>{Source}</Source>
    -			</SecurityGroupRule>
    -			</Rules>
    -			</SecurityGroupsConfiguration>
    -			</SecurityGroupsConfigurations>
    -			</SecurityGroup>
    -			</securityGroups>
    -			<printOutput>{printOutput}</printOutput>
    -			</SetAppSecurityGroups>
    -		

    - Parameters -

    TypeNameDescription
    - string - reservationId
    Specify the string that represents the reservation’s unique identifier.
    - list - securityGroups
    Security Groups
    - boolean - printOutput
    Defines whether to print the command output in the reservation command output window.

    Example

    
    -				<SetAppSecurityGroups>
    -				<reservationId>f45bba4c-099c-4d27-987e-23aa54654336</reservationId>
    -				<securityGroups>
    -				<SecurityGroup>
    -				<Name>AsafLinux i-0edb435d42bc9b0ef</Name>
    -				<SecurityGroupsConfigurations>
    -				<SecurityGroupsConfiguration>
    -				<SubnetId>sn-f34r4rd4</SubnetId>
    -				<Rules>
    -				<SecurityGroupRule>
    -				<FromPort>80</FromPort>
    -				<ToPort>85</ToPort>
    -				<Protocol>TCP</Protocol>
    -				<Source>0.0.0.0/0</Source>
    -				</SecurityGroupRule>
    -				</Rules>
    -				</SecurityGroupsConfiguration>
    -				</SecurityGroupsConfigurations>
    -				</SecurityGroup>
    -				</securityGroups>
    -				<printOutput>true</printOutput>
    -				</SetAppSecurityGroups>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				<ResultItems>
    -				<ResultItem AppName="Aws i-0f4e2454f1" Success="true" />
    -				</ResultItems>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC

    CreateBlueprintApprovalRequestCreate a new blueprint approval request.

    Create a new approval request.

    - Syntax -

    -			<CreateBlueprintApprovalRequest>
    -			<entityId>{entityId}</entityId>	
    -			<requestNotes>{requestNotes}</requestNotes>
    -			<globalInputs>
    -			<UpdateTopologyGlobalInputsRequest>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			</UpdateTopologyGlobalInputsRequest>
    -			</globalInputs>
    -			<requirementsInputs>
    -			<UpdateTopologyRequirementsInputsRequest>
    -			<ResourceName>{ResourceName}</ResourceName>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			<Type>{Type}</Type>
    -			</UpdateTopologyRequirementsInputsRequest>
    -			</requirementsInputs>
    -			<additionalInfoInputs>
    -			<UpdateTopologyAdditionalInfoInputsRequest>
    -			<ResourceName>{ResourceName}</ResourceName>
    -			<ParamName>{ParamName}</ParamName>
    -			<Value>{Value}</Value>
    -			</UpdateTopologyAdditionalInfoInputsRequest>
    -			</additionalInfoInputs>			
    -			<startTime>{startTime}</startTime>
    -			<endTime>{endTime}</endTime>
    -			<duration>60</duration>
    -			</CreateBlueprintApprovalRequest>
    -		

    - Parameters -

    TypeNameDescription
    - string - entityId
    Unique identifier of the entity (Blueprint id).
    - string - requestNotes
    Request description (optional).
    - list - globalInputs
    Global inputs associated with the specified topology. For example: {['Input Name', 'Value';]}.
    - list - requirementsInputs
    Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity.
    - list - additionalInfoInputs
    Additional info inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value';]}.
    - string - startTime
    Start time of the request (leave empty to immediately request approval).
    - string - endTime
    End time of the request, after which the request will be invalid (leave empty for unlimited request time).
    - string - duration
    Time in minutes to consume the entity. For example, sandbox duration (leave empty for unlimited consumption time).

    Example

    
    -				<CreateBlueprintApprovalRequest>
    -				<entityId>de6f5e37-e3e3-46d0-b915-07a1f30c07d4</entityId>
    -				<requestNotes></requestNotes>
    -				<globalInputs>
    -				<UpdateTopologyGlobalInputsRequest>
    -				<ParamName>Some global</ParamName>
    -				<Value>some value</Value>
    -				</UpdateTopologyGlobalInputsRequest>
    -				</globalInputs>
    -				<requirementsInputs>
    -				<UpdateTopologyRequirementsInputsRequest>
    -				<ResourceName>Some resource</ResourceName>
    -				<ParamName>Model</ParamName>
    -				<Value>Some resource model</Value>
    -				<Type>Models</Type>
    -				</UpdateTopologyRequirementsInputsRequest>
    -				</requirementsInputs>
    -				<additionalInfoInputs>
    -				<UpdateTopologyAdditionalInfoInputsRequest>
    -				<ResourceName>Some resource</ResourceName>
    -				<ParamName>Speed</ParamName>
    -				<Value>10 Mbps</Value>
    -				</UpdateTopologyAdditionalInfoInputsRequest>
    -				</additionalInfoInputs>
    -				<startTime>2023-01-01T12:00:00</startTime>
    -				<endTime>2023-02-0212:00:00</endTime>
    -				<duration>60</duration>
    -				</CreateBlueprintApprovalRequest>
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo>
    -				xsi:type="CreateApprovalRequestResponseInfo"
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    \ No newline at end of file diff --git a/static/api-docs/2023.3/TestShell-API/TestShell cSharp API.html b/static/api-docs/2023.3/TestShell-API/TestShell cSharp API.html deleted file mode 100644 index 6512236eb1..0000000000 --- a/static/api-docs/2023.3/TestShell-API/TestShell cSharp API.html +++ /dev/null @@ -1,3188 +0,0 @@ -C# TestShell API
    - 2023.3.0 TestShell API C# Reference Guide -


    ActivateTopologyActivate a topology.

    Resolves all connectivity requests in the sandbox, and marks unshared resources as "in use".

    - Syntax -

    ActivateTopology(reservationId,topologyFullPath,out activatedTopology,out resources,out attributes,out routes,out connectors, out segments,out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationId
    Specify the string that represents the reservation’s unique identifier.
    stringtopologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    out string[,]activatedTopology
    The activated topology and its associated values.
    out string[,]resources
    List of resources and resource values associated with the activated topology.
    out string[,]attributes
    Attributes and attribute values for resources associated with the specified topology.
    out string[,]routes
    Routes and route values associated with the activated topologies.
    out string[,]connectors
    Visual connectors and their values associated with the activated topologies.
    out string[,]segments
    Segment details for topology routes in the specified reservation. Each route is comprised of one or more segments.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string reservationId = "af626b88-458b-4e7a-9054-c03d8cffa260";
    -				string[,] activatedTopology, resources, attributes, routes, segments;
    -				string resultXml;
    -				testShellAPI.ActivateTopology(reservationId,"Temp Automation Resources/TP1",out activatedTopology,out resources,out attributes,out routes,out connectors,out segments,out resultXml);
    -			

    Output

  • activatedTopology
  • 
    -				{{"Index","TopologyReservationName","TopologyName","Username","MachineName"},
    -				{"1","TP1","TP1","admin","PRODUCT-W7 - Studio"}}
    -			
  • resources
  • 
    -				{{"Index","ActiveTopologyIndex","TopologyReservationName","Name","Address","FullAddress","RootAddress","ResourceFamilyName","ResourceModelName","FolderFullPath","Locked","LockInfo_ReservationName","LockInfo_Username","LockInfo_MachineName","LockInfo_Created","Alias"},
    -				{"1","1","TP1","Router 1234","192.168.1.201","192.168.1.201","192.168.1.201","Generic Chassis","Generic Chassis Model","Lab Routers","False","","","","","Router 1234"},
    -				{"2","1","TP1","L1 Switch 1234/Blade 1/Port 1","1","192.168.43.240/1/1","192.168.43.240","L1 Switch Port","Port EMPMC-36RJ","Temp Automation Resources","True","Immediate reservation","admin","PRODUCT-W7 - Tcl","6/20/2012 6:03:50 PM",""},
    -				{"3","1","TP1","L1 Switch 1234/Blade 1/Port 2","2","192.168.43.240/1/2","192.168.43.240","L1 Switch Port","Port EMPMC-36RJ","Temp Automation Resources","True","Immediate reservation","admin","PRODUCT-W7 - Tcl","6/20/2012 6:03:50 PM",""},
    -				{"4","1","TP1","L1 Switch 1234/Blade 1/Port 3","3","192.168.43.240/1/3","192.168.43.240","L1 Switch Port","Port EMPMC-36RJ","Temp Automation Resources","True","Immediate reservation","admin","PRODUCT-W7 - Tcl","6/20/2012 6:03:50 PM",""},
    -				{"5","1","TP1","GenericResource 1234","192.168.1.20","192.168.1.20","192.168.1.20","Generic Resource","Generic Resource Model","Temp Automation Resources","True","Immediate reservation","admin","PRODUCT-W7 - Tcl","6/20/2012 6:03:50 PM","GenericResource 1234"},
    -				{"6","1","TP1","GenericResource 1234/Port 1","1","192.168.1.20/1","192.168.1.20","Generic Port","Generic Port Model","Temp Automation Resources","True","Immediate reservation","admin","PRODUCT-W7 - Tcl","6/20/2012 6:03:50 PM","Port 1"},
    -				{"7","1","TP1","GenericResource 1234/Port 2","2","192.168.1.20/2","192.168.1.20","Generic Port","Generic Port Model","Temp Automation Resources","True","Immediate reservation","admin","PRODUCT-W7 - Tcl","6/20/2012 6:03:50 PM","Port 2"},
    -				{"8","1","TP1","GenericResource 1234/PowerPort 11","11","192.168.1.20/11","192.168.1.20","Generic Port","Generic Port Model","Temp Automation Resources","True","Immediate reservation","admin","PRODUCT-W7 - Tcl","6/20/2012 6:03:50 PM","PowerPort 11"},
    -				{"9","1","TP1","GenericResource 1234/PowerPort 12","12","192.168.1.20/12","192.168.1.20","Generic Port","Generic Port Model","Temp Automation Resources","True","Immediate reservation","admin","PRODUCT-W7 - Tcl","6/20/2012 6:03:50 PM","PowerPort 12"},
    -				{"10","1","TP1","GenericResource 1234/ConsolePort 21","21","192.168.1.20/21","192.168.1.20","Generic Port","Generic Port Model","Temp Automation Resources","True","Immediate reservation","admin","PRODUCT-W7 - Tcl","6/20/2012 6:03:50 PM","ConsolePort 21"},
    -				{"11","1","TP1","Router 1234/Port 1","1","192.168.1.201/1","192.168.1.201","Generic Port","Generic Port Model","Lab Routers","True","Immediate reservation","admin","PRODUCT-W7 - Tcl","6/20/2012 6:03:50 PM","Port 1"}}
    -			
  • attributes
  • 
    -				{{"ResourceIndex","ResourceName","Name","Value","Type"},
    -				{"1","Router 1234","SW_Version","","String"},
    -				{"2","L1 Switch 1234/Blade 1/Port 1","Shutdown","Disable","Lookup"},
    -				{"2","L1 Switch 1234/Blade 1/Port 1","Linked","False","String"},
    -				{"2","L1 Switch 1234/Blade 1/Port 1","Shutdown Unmapped","Enable","Lookup"},
    -				{"2","L1 Switch 1234/Blade 1/Port 1","LIN","Disable","Lookup"},
    -				{"2","L1 Switch 1234/Blade 1/Port 1","Auto Negotiation","True","Boolean"},
    -				{"2","L1 Switch 1234/Blade 1/Port 1","Speed","10 Mbps","Lookup"},
    -				{"2","L1 Switch 1234/Blade 1/Port 1","Duplex","Full","Lookup"},
    -				{"2","L1 Switch 1234/Blade 1/Port 1","Link Match","Enable","Lookup"},
    -				{"2","L1 Switch 1234/Blade 1/Port 1","MDI","AutoSense","Lookup"},
    -				{"2","L1 Switch 1234/Blade 1/Port 1","Auto Negotiation Advertise","Other/Uknown","Lookup"},
    -				{"3","L1 Switch 1234/Blade 1/Port 2","Shutdown","Enable","Lookup"},
    -				{"3","L1 Switch 1234/Blade 1/Port 2","Linked","False","String"},
    -				{"3","L1 Switch 1234/Blade 1/Port 2","Shutdown Unmapped","Enable","Lookup"},
    -				{"3","L1 Switch 1234/Blade 1/Port 2","LIN","Disable","Lookup"},
    -				{"3","L1 Switch 1234/Blade 1/Port 2","Auto Negotiation","True","Boolean"},
    -				{"3","L1 Switch 1234/Blade 1/Port 2","Speed","1 Gbps","Lookup"},
    -				{"3","L1 Switch 1234/Blade 1/Port 2","Duplex","Full","Lookup"},
    -				{"3","L1 Switch 1234/Blade 1/Port 2","Link Match","Enable","Lookup"},
    -				{"3","L1 Switch 1234/Blade 1/Port 2","MDI","AutoSense","Lookup"},
    -				{"3","L1 Switch 1234/Blade 1/Port 2","Auto Negotiation Advertise","Other/Uknown","Lookup"},
    -				{"4","L1 Switch 1234/Blade 1/Port 3","Shutdown","Enable","Lookup"},
    -				{"4","L1 Switch 1234/Blade 1/Port 3","Linked","False","String"},
    -				{"4","L1 Switch 1234/Blade 1/Port 3","Shutdown Unmapped","Enable","Lookup"},
    -				{"4","L1 Switch 1234/Blade 1/Port 3","LIN","Disable","Lookup"},
    -				{"4","L1 Switch 1234/Blade 1/Port 3","Auto Negotiation","True","Boolean"},
    -				{"4","L1 Switch 1234/Blade 1/Port 3","Speed","1 Gbps","Lookup"},
    -				{"4","L1 Switch 1234/Blade 1/Port 3","Duplex","Full","Lookup"},
    -				{"4","L1 Switch 1234/Blade 1/Port 3","Link Match","Enable","Lookup"},
    -				{"4","L1 Switch 1234/Blade 1/Port 3","MDI","AutoSense","Lookup"},
    -				{"4","L1 Switch 1234/Blade 1/Port 3","Auto Negotiation Advertise","Other/Uknown","Lookup"}}
    -			
  • routes
  • 
    -				{{"Index","Source","Target","RouteType","Alias","Shared"},
    -				{"1","Temp Automation Resources/GenericResource 1234/Port 1","Lab Routers/Router 1234/Port 1","bi","","True"},
    -				{"2","Lab Routers/Router 1234/Port 1","Temp Automation Resources/GenericResource 1234/Port 2","uni","","True"}}
    -			
  • connectors
  • 
    -				{{"Alias","Type","Resource mapping type","Source","Target"}}
    -			
  • segments
  • 
    -				{{"RouteIndex","Source","Target"},
    -				{"1","Temp Automation Resources/GenericResource 1234/Port 1","Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"},
    -				{"1","Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1","Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"},
    -				{"1","Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3","Lab Routers/Router 1234/Port 1"},
    -				{"2","Lab Routers/Router 1234/Port 1","Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"},
    -				{"2","Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3","Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"},
    -				{"2","Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2","Temp Automation Resources/GenericResource 1234/Port 2"}}
    -			
  • resultXml
  • 
    -				<ResponseInfo Name="TP1" MachineName="PRODUCT-W7 - Tcl" Username="admin" Topology="TP1">
    -				<Resources>
    -				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.43.240/1/1" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="Shutdown" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    -				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    -				<ResourceAttribute Name="Speed" Value="10 Mbps" Type="Lookup"/>
    -				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    -				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    -				</ResourceAttributes>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/GenericResource 1234/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.43.240/1/2" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="Shutdown" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    -				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    -				<ResourceAttribute Name="Speed" Value="1 Gbps" Type="Lookup"/>
    -				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    -				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    -				</ResourceAttributes>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/GenericResource 1234/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 3" FolderFullPath="Temp Automation Resources" Address="3" FullAddress="192.168.43.240/1/3" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="Shutdown" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    -				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    -				<ResourceAttribute Name="Speed" Value="1 Gbps" Type="Lookup"/>
    -				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    -				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    -				</ResourceAttributes>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Lab Routers/Router 1234/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				</ResourceInfo>
    -				</Resources>
    -				<Routes>
    -				<Route Source="Temp Automation Resources/GenericResource 1234/Port 1" Target="Lab Routers/Router 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Temp Automation Resources/GenericResource 1234/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3" Target="Lab Routers/Router 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Lab Routers/Router 1234/Port 1" Target="Temp Automation Resources/GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Lab Routers/Router 1234/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2" Target="Temp Automation Resources/GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				<Connectors>
    -				</Connectors>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    AddRoutesToReservationReserve specified routes.

    Adds (but does not connect) routes between all pairs of source and target endpoints, adding additional connectivity ports when required. Use ConnectRoutesInReservation to connect the routes.

    - Syntax -

    AddRoutesToReservation(reservationId,sourceResourcesFullPath,targetResourcesFullPath,mappingType,maxHops,routeAlias,isShared,out segments,out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationId
    Specify the string that represents the reservation’s unique identifier.
    string[]sourceResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    string[]targetResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    MappingTypemappingType
    Specify bidirectional or unidirectional as the mapping type.
    intmaxHops
    Specify the maximum number or allowed hops.
    stringrouteAlias
    Specify the route’s alias.
    YesNoOptionsisShared
    Specify whether these routes are shared. Shared routes can be used in more than one reservation.
    out string[,]routes
    Routes and route values associated with the activated topologies.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string resultXml;
    -				string reservationId = "28cb2a71-c8fc-4f41-a22b-e65685ebed14";
    -				string[,] routes;
    -				testShellAPI.AddRoutesToReservation(reservationId,new string[]{"Router 1234/Port 1"},new string[]{"GenericResource 1234/Port 1"},MappingType.Bidirectional,2,"a route",YesNoOptions.No,out routes,out resultXml);
    -			

    Output

  • routes
  • {{"Router 1234/Port 1","L1 Switch 1234/Blade 1/Port 3","L1 Switch 1234/Blade 1/Port 1","GenericResource 1234/Port 1"}}
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    ConnectRoutesInReservationConnects a list of routes.

    Connects requested routes. It locks the resources and adds route mappings. The routes must already exist in the reservation.

    - Syntax -

    ConnectRoutesInReservation(reservationId,endpoints,mappingType,out routes,out segments,out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationId
    Specify the string that represents the reservation’s unique identifier.
    string[,]endpoints
    The routes’ endpoints to connect.
    MappingTypemappingType
    Specify bidirectional or unidirectional as the mapping type.
    out string[,]routes
    The routes that were connected.
    out string[,]segments
    The segments details of the connected routes.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string resultXml;
    -				string reservationId = "28cb2a71-c8fc-4f41-a22b-e65685ebed14";
    -				string[,] routes,segments;
    -				testShellAPI.ConnectRoutesInReservation(reservationId,new string[,]{{"Router 1234/Port 1","GenericResource 1234/Port 1"}},MappingType.Bidirectional,out segments,out resultXml);
    -			

    Output

  • routes
  • 
    -				{{"Index","Source","Target","RouteType","Alias","Shared"},
    -				{"1","Router 1234/Port 1","GenericResource 1234/Port 1","bi","a route","True"}}
    -			
  • segments
  • 
    -				{{"RouteIndex","Source","Target"},
    -				{"1","Router 1234/Port 1","L1 Switch 1234/Blade 1/Port 3"},
    -				{"1","L1 Switch 1234/Blade 1/Port 3","L1 Switch 1234/Blade 1/Port 1"},
    -				{"1","L1 Switch 1234/Blade 1/Port 1","GenericResource 1234/Port 1"}}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC

    CreateImmediateReservationCreate an imminent reservation.

    Defines a reservation to be started immediately.

    - Syntax -

    CreateImmediateReservation(reservationName,owner,durationInMinutes,notifyOnStart,notifyOnSetupComplete,notifyOnEnd,notificationMinutesBeforeEnd,topology,globalInputs,requirementsInputs,additionalInfoInputs, out reservationId, out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationName
    Specify the name of the reservation.
    stringowner
    Specify the user name of the reservation owner.
    intdurationInMinutes
    Specify the length of the reservation. (in minutes)
    YesNoOptionsnotifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    YesNoOptionsnotifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    intnotificationMinutesBeforeEnd
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    stringtopologyFullPath
    Specify the full topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    string[,]globalInputs
    Global inputs associated with the specified topology. For example: {['Input Name', 'Value';]}.
    string[,]requirementsInputs
    Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity.
    string[,]additionalInfoInputs
    Additional info inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value';]}.
    YesNoOptionsnotifyOnSetupComplete
    Indicate whether to notify the reservation owner when the reservation setup completes.
    YesNoOptionsisTerminationProtectionEnabled
    Indicate whether to protect the reservation from being terminated.
    stringapprovalSid
    Leave empty. Used for internal purposes.
    out stringreservationId
    Reservation’s unique identifier (string).
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[,] globalInputs = {{"input1", "value1"}, {"input2", "value2"}};
    -				string[,] requirementsInputs = {{"resource", "attribute", "value", "Attributes"}};
    -				string[,] additionalInfoInputs = {{"resource", "attribute", "value"}};
    -				string resultXml;
    -				string reservationId;
    -				testShellAPI.CreateImmediateReservation("Immediate reservation", "admin", 30, YesNoOptions.No, YesNoOptions.No, 0, "myTopology", globalInputs, requirementsInputs, additionalInfoInputs, out reservationId, out resultXml);
    -			

    Output

  • reservationId
  • 28cb2a71-c8fc-4f41-a22b-e65685ebed14
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Reservation Id="28cb2a71-c8fc-4f41-a22b-e65685ebed14" Name="Immediate reservation" StartTime="2012-06-20T15:05:00" EndTime="2012-06-20T15:35:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Active" ActualEndTime="" CreateDate="2012-06-20T15:05:06" ModificationDate="2012-06-20T15:05:06">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    -			

    back to TOC

    CreateReservationCreate a reservation.

    Defines a new reservation.

    - Syntax -

    CreateReservation(reservationName,owner,startTime,endTime,notifyOnStart,notifyOnSetupComplete,notifyOnEnd,notificationMinutesBeforeEnd, topology, globalInputs, requirementsInputs, additionalInfoInputs, out reservationId, out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationName
    Specify the name of the reservation.
    stringowner
    Specify the user name of the reservation owner.
    DateTimestartTime
    The start time of the reservation.
    DateTimeendTime
    The end time of the reservation.
    YesNoOptionsnotifyOnStart
    Indicate whether to notify the reservation owner when the reservation starts.
    YesNoOptionsnotifyOnEnd
    Indicate whether to notify the reservation owner when the reservation ends.
    intnotificationMinutesBeforeEnd
    Indicate the number of minutes before the end of the reservation to send out a Notify On End alert to the reservation owner. (0 = disabled)
    stringtopologyFullPath
    Specify the full topology name. Include the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    string[,]globalInputs
    Global inputs associated with the specified topology. For example: {['Input Name', 'Value';]}.
    string[,]requirementsInputs
    Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity.
    string[,]additionalInfoInputs
    Additional info inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value';]}.
    YesNoOptionsnotifyOnSetupComplete
    Indicate whether to notify the reservation owner when the reservation setup completes.
    YesNoOptionsisTerminationProtectionEnabled
    Indicate whether to protect the reservation from being terminated.
    stringapprovalSid
    Leave empty. Used for internal purposes.
    out stringreservationId
    Reservation’s unique identifier (string).
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[,] globalInputs = {{"attribute1", "value1"}, {"attribute2", "value2"}};
    -				string[,] requirementsInputs = {{"resource", "attribute", "value", "Attributes"}};
    -				string[,] additionalInfoInputs = {{"resource", "attribute", "value"}};
    -				string resultXml;
    -				string reservationId;
    -				testShellAPI.CreateReservation("Reservation1", "admin", new DateTime(2015, 1, 1, 10, 0, 0), new DateTime(2015, 1, 1, 11, 0, 0), YesNoOptions.No, YesNoOptions.No, 0, "myTopology", globalInputs, requirementsInputs, additionalInfoInputs, out reservationId, out resultXml);
    -			

    Output

  • reservationId
  • af626b88-458b-4e7a-9054-c03d8cffa260
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Reservation Id="af626b88-458b-4e7a-9054-c03d8cffa260" Name="test reservation" StartTime="2015-01-01T10:00:00" EndTime="2015-01-01T11:00:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Pending" ActualEndTime="" CreateDate="2012-06-20T10:40:47" ModificationDate="2012-06-20T10:40:47">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    -			

    back to TOC

    CreateResourceAdd a new resource.

    Adds a new resource.

    - Syntax -

    CreateResource(resourceFamily,resourceModel,resourceName,resourceAddress,folderFullPath,parentResourceFullPath,resourceDescription,out resource,out attributes,out resultXml);

    - Parameters -

    TypeNameDescription
    stringresourceFamily
    Specify the name of the resource family (optional).
    stringresourceModel
    Specify the resource model.
    stringresourceName
    Specify the resource name.
    stringresourceAddress
    Specify the resource address.
    stringfolderFullPath
    Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.
    stringparentResourceFullPath
    Specify the full path from the root to a parent resource, separated by slashes. For example: Traffic Generators/Generic.
    stringresourceDescription
    Provide a short description to help identify the resource.
    out string[,]resource
    Details associated with the specified resource.
    out string[,]attributes
    Attributes and attribute values associated with the new resource.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string resultXml;
    -				string[,] resource;
    -				string[,] attributes;
    -				testShellAPI.CreateResource("Bridge", "Bridge Generic Model", "Bridge1", "192.168.1.200", "", "", "", out resource, out attributes, out resultXml);
    -			

    Output

  • resource
  • 
    -				{{Index, ParentIndex, Name, Address, FullAddress, RootAddress, ResourceFamilyName, ResourceModelName, FolderFullPath, Locked, LockInfo_ReservationName, LockInfo_Username, LockInfo_MachineName, LockInfo_Created, Excluded, Permission, UniqueIdentifier}
    -				{1, -1, Bridge1, 192.168.1.200, 192.168.1.200, 192.168.1.200, Bridge, Bridge Generic Model, , False, , , , , False, ReadWrite, }}
    -			
  • attributes
  • 
    -				{{ResourceIndex, ResourceName, AttributeName, AttributeValue, AttributeType}
    -				{1, Bridge1, Number of Ports, 0, Numeric}}
    -			
  • resultXml
  • 
    -				<ResponseInfo Name="Bridge1" FolderFullPath="" Address="192.168.1.200" FullAddress="192.168.1.200" RootAddress="192.168.1.200" ResourceFamilyName="Bridge" ResourceModelName="Bridge Generic Model" Locked="false" Excluded="false" Description="" Permission="ReadWrite">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="Number of Ports" Value="0" Type="Numeric"></ResourceAttribute>
    -				</ResourceAttributes>
    -				<Domains></Domains>
    -				<ChildResources></ChildResources>
    -				<LockInfo></LockInfo>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC

    CreateRouteInReservationCreate a route between two resources.

    Creates a route between the specified source and target resources.

    - Syntax -

    CreateRouteInReservation(reservationId,sourceResourceFullPath,targetResourceFullPath,overrideActiveRoutes,mappingType,maxHops,routeAlias,isShared,out segments,out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationId
    Specify the string that represents the reservation’s unique identifier.
    stringsourceResourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    stringtargetResourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    YesNoOptionsoverrideActiveRoutes
    Specify whether the new route can override existing routes.
    MappingTypemappingType
    Specify bidirectional or unidirectional as the mapping type.
    intmaxHops
    Specify the maximum number or allowed hops.
    stringrouteAlias
    Specify the route’s alias.
    YesNoOptionsisShared
    Specify whether this route is shared. Shared routes can be used in more than one reservation.
    out string[,]route
    Routes and route values associated with the activated topologies.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string resultXml;
    -				string reservationId = "28cb2a71-c8fc-4f41-a22b-e65685ebed14";
    -				string[,] route;
    -				testShellAPI.CreateRouteInReservation(reservationId,"Router 1234/Port 1","GenericResource 1234/Port 1",YesNoOptions.Yes,MappingType.Bidirectional,2,"a route",YesNoOptions.No,out route,out resultXml);
    -			

    Output

  • route
  • {{"Router 1234/Port 1","L1 Switch 1234/Blade 1/Port 3","L1 Switch 1234/Blade 1/Port 1","GenericResource 1234/Port 1"}}
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC

    CreateRoutesInReservationCreate routes between the listed source and target resources.

    Create routes between the listed source and target resources. Routes will be created for each pair of source and target resources.

    - Syntax -

    CreateRoutesInReservation(reservationId,sourceResourcesFullPath,targetResourcesFullPath,overrideActiveRoutes,mappingType,maxHops,routeAlias,isShared,out segments,out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationId
    Specify the string that represents the reservation’s unique identifier.
    string[]sourceResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    string[]targetResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    YesNoOptionsoverrideActiveRoutes
    Specify whether the new route can override existing routes.
    MappingTypemappingType
    Specify bidirectional or unidirectional as the mapping type.
    intmaxHops
    Specify the maximum number or allowed hops.
    stringrouteAlias
    Specify the route’s alias.
    YesNoOptionsisShared
    Specify whether these routes are shared. Shared routes can be used in more than one reservation.
    out string[,]routes
    Routes and route values associated with the activated topologies.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string resultXml;
    -				string reservationId = "28cb2a71-c8fc-4f41-a22b-e65685ebed14";
    -				string[,] routes;
    -				testShellAPI.CreateRoutesInReservation(reservationId,new string[]{"Router 1234/Port 1"},new string[]{"GenericResource 1234/Port 2"},YesNoOptions.Yes,MappingType.Bidirectional,2,"a route",YesNoOptions.No,out routes,out resultXml);
    -			

    Output

  • routes
  • {{"Router 1234/Port 1","L1 Switch 1234/Blade 1/Port 3","L1 Switch 1234/Blade 1/Port 2","GenericResource 1234/Port 2"}}
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 2" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    DisconnectRoutesInReservationDisconnects a list of routes.

    Disconnects requested routes. It unlocks the resources (if locked), and removes route mappings, but does not remove the route resources from the reservation.

    - Syntax -

    DisconnectRoutesInReservation(reservationId,endpoints,out routes,out segments,out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationId
    Specify the string that represents the reservation’s unique identifier.
    string[,]endpoints
    The routes endpoints to disconnect.
    out string[,]routes
    The routes that were disconnected.
    out string[,]segments
    The segments details of the disconnected routes.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string resultXml;
    -				string reservationId = "28cb2a71-c8fc-4f41-a22b-e65685ebed14";
    -				string[,] routes,segments;
    -				testShellAPI.DisconnectRoutesInReservation(reservationId,new string[,]{{"Router 1234/Port 1","GenericResource 1234/Port 1"}},out segments,out resultXml);
    -			

    Output

  • routes
  • 
    -				{{"Index","Source","Target","RouteType","Alias","Shared"},
    -				{"1","Router 1234/Port 1","GenericResource 1234/Port 1","bi","a route","True"}}
    -			
  • segments
  • 
    -				{{"RouteIndex","Source","Target"},
    -				{"1","Router 1234/Port 1","L1 Switch 1234/Blade 1/Port 3"},
    -				{"1","L1 Switch 1234/Blade 1/Port 3","L1 Switch 1234/Blade 1/Port 1"},
    -				{"1","L1 Switch 1234/Blade 1/Port 1","GenericResource 1234/Port 1"}}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    ExecuteResourceConnectedCommand

    Executes a command for the specified driver.

    - Syntax -

    ExecuteResourceConnectedCommand(reservationId,resourceFullPath,commandName,commandTag, parameterValues, connectedPortsFullPath,printOutput, out output,out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationId
    Specify the string that represents the reservation’s unique identifier.
    stringresourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RouterA/Port1.
    stringcommandName
    Specify the name of the command.
    stringcommandTag
    Specify the command tag. Connected command tags are used to define categories of functionality (e.g 'virtualization').
    string[]parameterValues
    Specify the list of parameters values required for executing the command.
    string[]connectedPortsFullPath
    Specify the list of connected ports to use in this operation. Include the full path from the root resource to each port, separated by slashes. For example: Switch20/Blade5/PowerPort1. Leave blank to perform the connected operation on all of the specified resource’s connected ports.
    YesNoOptionsprintOutput
    Defines whether to print the command output in the reservation command output window.
    out stringoutput
    The command results.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI testShellAPI = new TestShellAPI();
    -				string output;
    -				string resultXml;
    -				string reservationId = "af626b88-458b-4e7a-9054-c03d8cffa260";
    -				testShellAPI.ExecuteResourceConnectedCommand(reservationId, "Router 1234", "SpinUp","virtualization", new string[]{"abcd", "2"}, {"Router 1234/Port1"}, YesNoOptions.Yes, out output, out resultXml);
    -			

    Output

  • resultXml
  • <ResponseInfo Output="success"/>

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    FindResources

    Retrieves resources that match all the specified search parameters, and all reservations associated with the search results.

    - Syntax -

    FindResources(resourceFamily,resourceModel,attributeValues,showAllDomains,resourceFullName,exactName,includeSubResources,resourceAddress,resourceUniqueIdentifier,maxResults,includeExcludedResources,out resources,out reservations,out usageSummary,out resultXml);

    - Parameters -

    TypeNameDescription
    stringresourceFamily
    Specify the name of the resource family.
    stringresourceModel
    Specify the resource model.
    string[,]attributeValues
    Specify an array of one or more attributes and attribute values.
    out string[,]resources
    All resources that match the specified query conditions.
    YesNoOptionsshowAllDomains
    Show all domains associated with the logged in user.
    stringresourceFullName
    Specify part of or the full name of the resource.
    YesNoOptionsexactName
    Specify whether to search the exact given name or not.
    YesNoOptionsincludeSubResources
    Specify whether to retrieve the sub resources once the parent matches the name.
    stringresourceAddress
    Specify the resource address. Can be partial (e.g. '192.168.').
    stringresourceUniqueIdentifier
    Specify the resource unique identifier.
    intmaxResults
    Specify the maximum number of resources to return.
    YesNoOptionsincludeExcludedResources
    Specify whether to retrieve resources that are excluded
    out string[,]reservations
    All reservations for the resources that match the specified query conditions.
    out string[,]usageSummary
    Specify the number used connected resources, this data will be available only on top level resource.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[,] resources, reservations;
    -				string resultXml;
    -				testShellAPI.FindResources("Generic Chassis", "", false, new string[,]{{"SW_Version","1.3"}},out resources,out reservations,out usageSummary,out resultXml);
    -			

    Output

  • resources
  • 
    -				{{"Index","Name","Description","Address","FullName","FullAddress","ResourceFamilyName","ResourceModelName","Status","Permissions", "ConnectedTo", "FullPath"},
    -				{"1","Router 1234","a new description for the resource","192.168.1.201","Lab Routers/Router 1234","192.168.1.201","Generic Chassis","Generic Chassis Model","Available","ReadOnly"}}
    -			
  • reservations
  • {{"ResourceIndex","ReservationName","Owner","StartTime","EndTime"}}
  • usageSummary
  • {{"ResourceIndex", "NumOfReserved", "NumOfShared", "NumOfNotInReservation"}}
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Resources>
    -				<Resource Name="Router 1234" Description="a new description for the resource" Address="192.168.1.201" FullName="Lab Routers/Router 1234" FullPath="Lab Routers/Router 1234"  FullAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Status="Available" Permission="ReadOnly">
    -				<Reservations/>
    -				<UsageSummary NumOfNotInReservation="130" NumOfReserved="14" NumOfShared="0"/>
    -				</Resource>
    -				</Resources>
    -				</ResponseInfo>
    -			

    back to TOC

    FindResourcesInTimeRange

    Retrieves resources that match all the specified search parameters, and all reservations in the specified time range associated with the search results.

    - Syntax -

    FindResourcesInTimeRange(resourceFamily,resourceModel,fromTime,untilTime,attributeValues,showAllDomains,resourceFullName,exactName,includeSubResources,resourceAddress,resourceUniqueIdentifier,maxResults,out resources,out reservations,out usageSummary,out resultXml);

    - Parameters -

    TypeNameDescription
    stringresourceFamily
    Specify the name of the resource family.
    stringresourceModel
    Specify the resource model.
    DateTimefromTime
    Specify from which future time and date to check the resource's availability.
    DateTimeuntilTime
    Specify until which time and date to check the resource's availability.
    string[,]attributeValues
    Specify an array of one or more attributes and attribute values.
    YesNoOptionsshowAllDomains
    Show all domains associated with the logged in user.
    stringresourceFullName
    Specify part of or the full name of the resource.
    YesNoOptionsexactName
    Specify whether to search the exact given name or not.
    YesNoOptionsincludeSubResources
    Specify whether to retrieve the sub resources once the parent matches the name.
    stringresourceAddress
    Specify the resource address. Can be partial (e.g. '192.168.').
    stringresourceUniqueIdentifier
    Specify the resource unique identifier.
    intmaxResults
    Specify the maximum number of resources to return.
    out string[,]resources
    All resources that match the specified query conditions.
    out string[,]reservations
    All reservations for the resources that match the specified query conditions.
    out string[,]usageSummary
    Specify the number used connected resources, this data will be available only on top level resource.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[,] resources, reservations;
    -				string resultXml;
    -				testShellAPI.FindResourcesInTimeRange("Generic Chassis", "", new DateTime(2012, 3, 1, 0, 0, 0), new DateTime(2012, 5, 31, 23, 59, 59), new string[,]{{"SW_Version","1.3"}}, false,out resources,out reservations,out usageSummary,out resultXml);
    -			

    Output

  • resources
  • 
    -				{{"Index","Name","Description","Address","FullName","FullAddress","ResourceFamilyName","ResourceModelName","Status", "Permissions", "ConnectedTo", "FullPath"},
    -				{"1","Router 1234","a new description for the resource","192.168.1.201","Lab Routers/Router 1234","192.168.1.201","Generic Chassis","Generic Chassis Model","Available","ReadOnly"}}
    -			
  • reservations
  • {{"ResourceIndex","ReservationName","Owner","StartTime","EndTime"}}
  • usageSummary
  • {{"ResourceIndex", "NumOfReserved", "NumOfShared", "NumOfNotInReservation"}}
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Resources>
    -				<Resource Name="Router 1234" Description="a new description for the resource" Address="192.168.1.201" FullName="Lab Routers/Router 1234" FullPath="Lab Routers/Router 1234" FullAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Status="Available" Permission="ReadOnly">
    -				<Reservations/>
    -				<UsageSummary NumOfNotInReservation="130" NumOfReserved="14" NumOfShared="0"/>
    -				</Resource>
    -				</Resources>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC

    GetRoutesSolutionGet solution for specified routes.

    Calculates possible routes between the supplied endpoints and returns their details, without saving, connecting or modifying the reservation in any way.

    - Syntax -

    GetRoutesSolution(reservationId,sourceResourcesFullName,targetResourcesFullName,mappingType,maxHops,isShared,out segments,out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationId
    Specify the string that represents the reservation’s unique identifier.
    string[]sourceResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RootResourceName/ResourceName
    string[]targetResourcesFullPath
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: RootResourceName/ResourceName
    MappingTypemappingType
    Specify bidirectional or unidirectional as the mapping type.
    intmaxHops
    Specify the maximum number or allowed hops.
    YesNoOptionsisShared
    Specify whether these routes are shared. Shared routes can be used in more than one reservation.
    out string[,]routes
    Routes and route values associated with the activated topologies.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string resultXml;
    -				string reservationId = "28cb2a71-c8fc-4f41-a22b-e65685ebed14";
    -				string[,] routes;
    -				testShellAPI.GetRoutesSolution(reservationId,new string[]{"Router 1234/Port 1"},new string[]{"GenericResource 1234/Port 1"},MappingType.Bidirectional,2, YesNoOptions.No,out routes,out resultXml);
    -			

    Output

  • routes
  • {{"Router 1234/Port 1","L1 Switch 1234/Blade 1/Port 3","L1 Switch 1234/Blade 1/Port 1","GenericResource 1234/Port 1"}}
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC

    GenerateUtilizationReportGenerate a utilization report.

    Generates a utilization report for the specified resources. To generate a report for all resources, leave the resourceFullName and resourceModel parameters blank.

    - Syntax -

    GenerateUtilizationReport(resourceFamilyName,fromDate,toDate,resourceFullName,resourceModelName,includeChildResources,groupBy,utilizationReportType,out resultXml);

    - Parameters -

    TypeNameDescription
    stringresourceFamilyName
    Specify the name of the resource family.
    DateTimefromDate
    Specify the start time and date.
    DateTimetoDate
    Specify the end time and date.
    stringresourceFullName
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName.
    stringresourceModelName
    Specify the resource model.
    YesNoOptionsincludeChildResources
    Specify whether to include child resources utilization.
    UtilizationReportGroupByOptiongroupBy
    Specify how to group the utilization results: Resource, User, or Machine
    UtilizationReportTypeOptionutilizationReportType
    Specify the report type: Lock or Mapping.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string resultXml;
    -				testShellAPI.GenerateUtilizationReport("Router", new DateTime(2012, 3, 1, 0, 0, 0), new DateTime(2012, 5, 31, 23, 59, 59), "", "", YesNoOptions.No, UtilizationReportGroupByOption.Resource, UtilizationReportTypeOption.Lock, out resultXml);
    -			

    back to TOC
    back to TOC

    GetAllUsersDetailsRetrieve all users and user settings.

    Retrieves all users and their settings.

    - Syntax -

    GetAllUserDetails(out userDetails,out resultXml);

    - Parameters -

    TypeNameDescription
    out string[,]userDetails
    User settings for the specified user.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				testShellAPI.GetAllUsersDetails();
    -			

    Output

  • userDetails
  • 
    -				{{"Name","Email","IsAdmin","IsActive","IsDomainAdmin","DomainName"},{"admin","admin@work.com","True","True","False",""},{"User1234","user1234@work.com","True","True","False",""}}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Users>
    -				<User Name="admin" IsAdmin="true" IsActive="true" IsDomainAdmin="false">
    -				<Groups>
    -				<Group Name="System Administrators" Description="Built in group, all members have administrative rights.">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				</Groups>
    -				</User>
    -				<User Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="user1234@work.com">
    -				<Groups>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				</Groups>
    -				</User>
    -				<User Name="User2345" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="">
    -				<Groups>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				</Groups>
    -				</User>
    -				</Users>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC

    GetCurrentReservationsRetrieve current reservations.

    Retrieves current reservations for the specified owner. If an owner is not provided, this method retrieves all current reservations.

    - Syntax -

    GetCurrentReservations(reservationOwner,out reservations,out permittedUsers,out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationOwner
    Specify the user name of the reservation owner.
    out string[,]reservations
    All current reservations for the specified owner, or all current reservations (if no owner is specified).
    out string[,]permittedUsers
    Lists users with [active | full] access to the specified reservation.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[,] reservations;
    -				string resultXml;
    -				testShellAPI.GetCurrentReservations(admin, out reservations,out permittedUsers, out resultXml);
    -			

    Output

  • reservations
  • 
    -				{{"Id","Name","Description","Start","End","Owner","Booked","Status","RecurrenceType","Topologies","ActualEndTime","CreateDate","ModificationDate","Provisioning Status","DomainName"},
    -				{"65b45c9b-7694-4a42-b8fa-0239109b5246","Reservation","","6/19/2012 2:30:00 PM","6/19/2012 4:30:00 PM","admin","True","Overtime","None","Topologies/Lab 1/Topology,Topologies/Lab 1/TrafficTopology,Topologies/Lab 1/TrafficTopology1","","6/19/2012 2:30:23 PM","6/19/2012 2:37:55 PM","Pending","Global"}}
    -			
  • permittedUsers
  • 
    -				{{ReservationId, UserName}
    -				{65b45c9b-7694-4a42-b8fa-0239109b5246, admin}
    -				{65b45c9b-7694-4a42-b8fa-0239109b5246, user1}
    -				{65b45c9b-7694-4a42-b8fa-0239109b5246, user2}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Reservations>
    -				<Reservation Id="65b45c9b-7694-4a42-b8fa-0239109b5246" Name="Reservation" StartTime="2012-06-19T14:30:00" EndTime="2012-06-19T16:30:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Overtime" ProvisioningStatus="Ready" ActualEndTime="" CreateDate="2012-06-19T14:30:23" ModificationDate="2012-06-19T14:37:55" DomainName="Global">
    -				<Topologies>
    -				<TopologyName>Topologies/Lab 1/Topology</TopologyName>
    -				<TopologyName>Topologies/Lab 1/TrafficTopology</TopologyName>
    -				<TopologyName>Topologies/Lab 1/TrafficTopology1</TopologyName>
    -				</Topologies>
    -				</Reservation>
    -				</Reservations>
    -				</ResponseInfo>
    -			

    back to TOC

    GetDomainDetailsRetrieves a domain's details including groups, topologies and resources associated with the specified domain.

    Retrieves a domain's details including groups, topologies and resources associated with the specified domain.

    - Syntax -

    GetDomainDetails(domainName,out domainTopologiesFolder,out domainGroups,out domainTopologies,out domainResources,out resultXml);

    - Parameters -

    TypeNameDescription
    stringdomainName
    Specify the name of the domain.
    out stringdomainTopologiesFolder
    The topologies folder of the domain.
    out string[,]domainGroups
    Groups and their associated values for the specified domain.
    out string[,]domainTopologies
    Topologies and their associated values for the specified domain.
    out string[,]domainResources
    Resources and their associated values for the specified domain.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string domainTopologiesFolder;
    -				string[,] domainGroups, domainTopologies, domainResources;
    -				string resultXml;
    -				testShellAPI.GetDomainDetails("Domain1",out domainTopologiesFolder,out domainGroups,out domainTopologies,out domainResources,out resultXml);
    -			

    Output

  • domainTopologiesFolder
  • "Root\Domain1 topologies"
  • domainGroups
  • {{"Animals","","Regular"}}
  • domainTopologies
  • {{"Topology",""}}
  • domainResources
  • {{"b1","b1"}}
  • resultXml
  • 
    -				<ResponseInfo Name="Domain1" Description="" TopologiesFolder="Root\Domain1 topologies">
    -				<Groups>
    -				<Group Name="Animals" Role="Regular"></Group>
    -				</Groups>
    -				<Topologies>
    -				<Topology Name="Topology" Description=""></Topology>
    -				</Topologies>
    -				<Resources>
    -				<Resource Name="b1" Path="b1"></Resource>
    -				</Resources>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC

    GetGroupsDetailsRetrieve all system groups.

    Retrieves all groups, including members, roles and associated domains for each group.

    - Syntax -

    GetGroupsDetails(out groups,out resultXml);

    - Parameters -

    TypeNameDescription
    out string[,]groups
    Retrieves all groups in the system, together with the description and role for each group.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				testShellAPI.GetGroupsDetails();
    -			

    Output

  • groups
  • {{"Name","Description"}, {"System Administrators","Built in group, all members have administrative rights."}, {"Domain Administrators","Built in group, all members have administrative Domain rights."}, {"QA_Users","QA users"}, {"RND users",""}}
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Groups>
    -				<Group Name="System Administrators" Description="Built in group, all members have administrative rights." GroupRole="SystemAdmin">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users>
    -				<User Name="admin" IsAdmin="true" IsActive="true" IsDomainAdmin="false">
    -				<Groups>
    -				<Group Name="System Administrators" Description="Built in group, all members have administrative rights.">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				<Group Name="Lab1">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Lab1" Description="" Id="71aa4f7e-174d-4df1-b50a-59e98f09005c"/>
    -				</TestShellDomains>
    -				</Group>
    -				</Groups>
    -				</User>
    -				</Users>
    -				</Group>
    -				<Group Name="Domain Administrators" Description="Built in group, all members have administrative Domain rights."  GroupRole="DomainAdmin">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users>
    -				<User Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="true" Email="">
    -				<Groups>
    -				<Group Name="Domain Administrators" Description="Built in group, all members have administrative Domain rights.">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				</Groups>
    -				</User>
    -				</Users>
    -				</Group>
    -				<Group Name="QA_Users" Description="QA users" GroupRole="Regular">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users>
    -				<User Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="user1234@work.com">
    -				<Groups>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				<Group Name="QA_Users" Description="QA users">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				</Groups>
    -				</User>
    -				<User Name="User2345" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="">
    -				<Groups>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				<Group Name="QA_Users" Description="QA users">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				</Groups>
    -				</User>
    -				</Users>
    -				</Group>
    -				<Group Name="RND_Users" GroupRole="Regular">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users/>
    -				</Group>
    -				</Groups>
    -				</ResponseInfo>
    -			

    back to TOC

    GetLockedResourcesRetrieve a list of locked resources.

    Retrieves locked resources for a specific user, a specific computer, or a specific folder. If none of these are specified, this method retrieves the list of locked resources for all users, on all machines, in all folders.

    - Syntax -

    GetLockedResources(user,machine,folderFullPath,out reservations,out resources,out resultXml);

    - Parameters -

    TypeNameDescription
    stringuser
    Specify a user name to retrieve locked resources for that user.
    stringmachine
    Specify a machine name to retrieve locked resources for that computer.
    stringfolderFullPath
    Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.
    out string[,]reservations
    Retrieves all reservations for the resources that match the specified query conditions.
    out string[,]resources
    Resources and resource values associated with the specified topology.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[,] reservations,resources;
    -				testShellAPI.GetLockedResources("admin","","",out reservations,out resources,out resultXml);
    -			

    Output

  • reservations
  • {{"Index","Name","Owner","Created"},{"1","Immediate reservation","admin","6/20/2012 3:05:06 PM"}}
  • resources
  • 
    -				{{"ReservationIndex","ReservationName","Name","Address","FullAddress","RootAddress","ResourceModelName","FolderFullPath","Excluded"},
    -				{"1","Immediate reservation","GenericResource 1234/Port 2","2","192.168.1.20/2","192.168.1.20","Generic Port Model","Temp Automation Resources","False"},
    -				{"1","Immediate reservation","GenericResource 1234/Port 1","1","192.168.1.20/1","192.168.1.20","Generic Port Model","Temp Automation Resources","False"}}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Reservations>
    -				<Reservation Name="Immediate reservation" Owner="admin" Created="2012-06-20T15:05:06">
    -				<LockedResources>
    -				<Resource Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="true" Excluded="false"/>
    -				<Resource Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="true" Excluded="false"/>
    -				</LockedResources>
    -				</Reservation>
    -				</Reservations>
    -				</ResponseInfo>
    -			

    back to TOC

    GetReservationDetailsRetrieve reservation details and parameters.

    Retrieves all details and parameters for a specified reservation, including its resources, routes and route segments, topologies, and reservation conflicts.The data cached for 5 seconds.

    - Syntax -

    GetReservationDetails(reservationId, disableCache, out name, out description, out creationTime, out startTime, out endTime,out reservationStatus, out provisioningStatus, out resources, out conflicts, out topologies,out topologyResources, out topologyRoutes, out topologyRouteSegments, out topologyInstructions, out connectedRoutes,out connectedRoutesSegments,out reservationRoutes, out reservationRouteSegments, out permittedUsers, out domainName, out topologyResourcesAttributes, out connectors, out connectorAttributes, out liveStatus,out services, out serviceAttributes, out apps,out setupStage, out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationId
    Specify the string that represents the reservation’s unique identifier.
    YesNoOptionsdisableCache
    Specify if the reservation detail is new or cached
    out stringname
    The name of the reservation associated with the specified reservation ID.
    out stringdescription
    The description of the reservation associated with the specified reservation ID.
    out stringCreation Time
    The creation time and date for the specified reservation.
    out stringstartTime
    The start time and date for the specified reservation.
    out stringendTime
    The end time and date for the specified reservation.
    out stringreservationStatus
    Indicates the current reservation status.
    out stringprovisioningStatus
    Indicates the current provisioning status.
    out string[,]resources
    Resources and their associated values for the specified reservation.
    out string[,]conflicts
    Resource conflicts and their associated values for the specified reservation.
    out string[,]topologies
    Topologies and their associated values for the specified reservation.
    out string[,]topologyResources
    Topology resources and their associated values for the specified reservation.
    out string[,]topologyRoutes
    Topology routes in the specified reservation.
    out string[,]topologyRouteSegments
    Segment details for topology routes in the specified reservation. Each route is comprised of one or more segments.
    out string[,]topologyInstructions
    Topology instructions.
    out string[,]connectedRoutes
    Routes currently connected in the specified reservation.
    out string[,]connectedRoutesSegments
    Segment details for connected routes in the specified reservation. Each route is comprised of one or more segments.
    out string[,]reservationRoutes
    Routes in the specified reservation.
    out string[,]reservationRouteSegments
    Segment details for routes in the specified reservation. Each route is comprised of one or more segments.
    out string[,]permittedUsers
    Lists users with [active | full] access to the specified reservation.
    out stringdomainName
    The domain name of the specified reservation.
    out string[,]topologyResourcesAttributes
    Topology resources and their associated attribute changes for the specified reservation.
    out string[,]connectors
    Visual connectors associated with the specified reservation.
    out string[,]ConnectorAttributes
    Visual connectors attributes associated with a specified connector.
    out string[,]LiveStatus
    Gets the live status of the reservations.
    out string[,]services
    Matrix of service instances.
    out string[,]serviceAttributes
    Matrix of attributes of the services.
    out string[,]apps
    Apps associated with the specified reservation..
    out stringSetupStage
    Reservation's setup stage
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string reservationId = "af626b88-458b-4e7a-9054-c03d8cffa260";
    -				string name, description;
    -				string startTime,endTime;
    -				string reservationStatus, provisioningStatus;
    -				string domainName;
    -				string setupStage;
    -				string[,] resources, conflicts, topologies, topologyResources, topologyRoutes, topologyRouteSegments,topologyInstructions, connectedRoutes, connectedRoutesSegments, reservationRoutes, reservationRouteSegments, permittedUsers, topologyResourcesAttributes, connectors, connectorAttributes, apps;
    -				string resultXml;
    -				testShellAPI.GetReservationDetails(reservationId, true,out name,out description, out creationTime,out startTime,out endTime,out reservationStatus,out provisioningStatus,out resources,out conflicts,out topologies,out topologyResources,out topologyRoutes,out topologyRouteSegments,out topologyInstructions,out connectedRoutes,out connectedRoutesSegments,out reservationRoutes,out reservationRouteSegments,out permittedUsers,out domainName,out topologyResourcesAttributes, out connectors, out connectorAttributes, out liveStatus,out services, out servicrAttributes, out apps,out setupStage, out resultXml);
    -			

    Output

  • name
  • test reservation
  • description
  • My Reservation
  • creationTime
  • 01/01/2015 10:00:00
  • startTime
  • 01/01/2015 10:00:00
  • endTime
  • 01/01/2015 11:00:00
  • reservationStatus
  • Pending
  • provisioningStatus
  • Ready
  • resources
  • {{"Name","FolderFullPath","FullAddress","Shared","Availability","Locked","Released","ResourceFamilyName","ResourceModelName"}}
  • conflicts
  • {{"ResourceName","ConflictType","Topology","ConflictWith","ConflictWithUser","ConflictStarted","ConflictPlannedEndTime"}}
  • topologies
  • {{"Index","Name","Type","State"}}
  • topologyResources
  • {{"TopologyIndex","Name","FullAddress","Shared","Availability","Locked","Released","ResourceFamilyName","ResourceModelName"}}
  • topologyRoutes
  • {{"Index","TopologyIndex","Source","Target","RouteType","Alias","Shared"}}
  • topologyRouteSegments
  • {{"RouteIndex","Source","Target"}}
  • topologyInstructions
  • {{"topology1","topology2","topology3"}}
  • connectedRoutes
  • {{"Index","Source","Target","RouteType","Alias","Shared"}}
  • connectedRoutesSegments
  • {{"RouteIndex","Source","Target"}}
  • reservationRoutes
  • {{"Index","Source","Target","RouteType","Alias","Shared"}}
  • reservationRoutesSegments
  • {{"RouteIndex","Source","Target"}}
  • permittedUsers
  • {{"user1","user2","user3"}}
  • domainName
  • Global
  • topologyResourcesAttributes
  • 
    -				{{"TopologyIndex","Name","Alias", "AttributeName", "AttributeValue", Usage},
    -				{"1", "t2", "test*", "Protocol", "Transparent", "Additional"}}
    -			
  • connectors
  • 
    -				{{"Index","Source","Target","Direction", "Alias"},
    -				{"1","Server1/Port1", "Server2/Port2", "Bi", "Connector1"}}
    -			
  • connectorAttributes
  • 
    -				{{"ConnectorIndex","Name","Value"},
    -				{"1","Duplex", "Half"}}
    -			
  • liveStatus
  • 
    -				{{"Id","LiveStatusName","LiveStatusDescription"},
    -				{"90205def-6c53-4cf5-abfa-632b8486a968","Pass",""}}
    -			
  • services
  • 
    -				{{"Index","ServiceName","Alias"},
    -				{"1","Sql1","Sql64"}}
    -			
  • serviceAttributes
  • 
    -				{{"ServiceInstanceIndex","Name","Value"},
    -				{"1","Duplex", "Half"}}
    -			
  • apps
  • 
    -				{{"Name","LogicalResourceFamily","LogicalResourceModel"},
    -				{"App name","Deployed app family","Deployed app model"}}
    -			
  • setupStage
  • 
    -				"None"
    -			
  • resultXml
  • 
    -
    -				<ResponseInfo xsi:type="GetReservationDescriptionResponseInfo">
    -				<ReservationDescription Id="a97ce9c2-48eb-420e-85b7-2318106c35a3" Name="Sandbox-5-16-2017 15-59" StartTime="16/05/2017 15:59:00" EndTime="16/05/2017 17:59:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Started" ProvisioningStatus="Not Run" ActualEndTime="" CreateDate="16/05/2017 15:59:21" ModificationDate="16/05/2017 16:01:38" DomainName="Global">
    -				<Topologies>
    -				<TopologyName>Environment-03-02-2015 18-21</TopologyName>
    -				</Topologies>
    -				<TopologiesInfo>
    -				<Topology Name="Environment-03-02-2015 18-21" Alias="Environment-03-02-2015 18-21">
    -				<Type>Regular</Type>
    -				<State>Pending</State>
    -				</Topology>
    -				</TopologiesInfo>
    -				<PermittedUsers>
    -				<PermittedUser>admin</PermittedUser>
    -				</PermittedUsers>
    -				<Resources>
    -				<ReservedResource Name="Database_ec513a05" FolderFullPath="" FullAddress="NA" Shared="false" Availability="Available" Locked="false" Released="false" ResourceFamilyName="Generic App Family" ResourceModelName="Generic App Model" CreatedByUser="admin" CreatedInDomain="Global" CreatedInReservation="a97ce9c2-48eb-420e-85b7-2318106c35a3">
    -				<VmDetails UID="4232175a-6a64-bb3c-1cca-e8699845549b" CloudProviderFullName="testing">
    -				<VmCustomParams>
    -				<VmCustomParam Name="ip_regex" Value="" />
    -				<VmCustomParam Name="auto_power_on" Value="True" />
    -				<VmCustomParam Name="auto_power_off" Value="True" />
    -				<VmCustomParam Name="wait_for_ip" Value="True" />
    -				<VmCustomParam Name="auto_delete" Value="True" />
    -				<VmCustomParam Name="refresh_ip_timeout" Value="600" />
    -				<VmCustomParam Name="autoload" Value="True" />
    -				</VmCustomParams>
    -				</VmDetails>
    -				<AppDetails AppName="Database" />
    -				</ReservedResource>
    -				</Resources>
    -				<TopologiesReservedResources />
    -				<Conflicts />
    -				<TopologiesRouteInfo />
    -				<TopologiesResourcesAttributeInfo />
    -				<TopologiesInstructionsInfo />
    -				<ActiveRoutesInfo />
    -				<RequestedRoutesInfo />
    -				<Connectors />
    -				<Apps>
    -				<ReservedApp Name="MonitoringApp">
    -				<LogicalResource Family="Monitoring" Model="DefaultMonitoring"/>
    -				</ReservedApp>
    -				</Apps>
    -				<ReservationLiveStatus ReservationId="a97ce9c2-48eb-420e-85b7-2318106c35a3" />
    -				<SetupStage>None</SetupStage>
    -				<Services />
    -				</ReservationDescription>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC

    GetResourceAvailabilityGet resource availability.

    Get resource availability for the resources.

    - Syntax -

    GetResourceAvailability(resourcesNames,out resources,out reservations,out usageSummary,showAllDomains,out resultXml);

    - Parameters -

    TypeNameDescription
    string[]resourcesNames
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    out string[,]resources
    All resources that match the specified query conditions.
    out string[,]reservations
    All reservations for the resources that match the specified query conditions.
    out string[,]usageSummary
    Specify the number used connected resources, this data will be available only on top level resource
    YesNoOptionsshowAllDomains
    Show all domains associated with the logged in user.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[] resourcesNames = new[] { "Bridge6", "Bridge7" };
    -				string[,] resources;
    -				string[,] reservations;
    -				string[,] usageSummary;
    -				string xmlResult;
    -				testShellAPI.GetResourceAvailability(resourcesNames, out resources, out reservations, out usageSummary, YesNoOptions.Yes, out xmlResult);
    -			

    Output

  • resources
  • 
    -				{{Index, Name, Description, Address, FullName, FullAddress, ResourceFamilyName, ResourceModelName, ReservedStatus, Excluded, Permission, ConnectedTo, FullPath}
    -				{1, Bridge6, , 5, Bridge6, 5, Bridge, Bridge Generic Model, Shared, False, ReadWrite, ,Bridge6}
    -				{2, Bridge7, , NA, Bridge7, NA, Bridge, Bridge Generic Model, Shared, False, ReadWrite, ,Bridge7}
    -				{3, port1, , u, Bridge7/port1, NA/u, Bridge Port, Bridge Port Generic Model, Reserved, False, ReadWrite, Patch6\\jack2, Bridge7/port1}
    -				{4, port1, , u, Bridge6/port1, 5/u, Bridge Port, Bridge Port Generic Model, Reserved, False, ReadWrite, Patch6\\jack1, Bridge6/port1}
    -				{5, port2, , NA, Bridge6/port2, 5/NA, Bridge Port, Bridge Port Generic Model, Reserved, False, ReadWrite, Patch6\\jack4, Bridge6/port2}
    -				{6, port2, , NA, Bridge7/port2, NA/NA, Bridge Port, Bridge Port Generic Model, Reserved, False, ReadWrite, Patch6\\jack5, Bridge7/port2}}
    -			
  • reservations
  • 
    -				{{ResourceIndex, ResourceName, ReservationId, ReservationName, Owner, StartTime, EndTime, Shared}
    -				{1, Bridge6, 2002cfca-50d0-43c4-8dbb-d09e0434dbe7, Topology4, admin, 14/01/2014 08:28:00, 14/01/2014 10:28:00, True}
    -				{2, Bridge7, 2002cfca-50d0-43c4-8dbb-d09e0434dbe7, Topology4, admin, 14/01/2014 08:28:00, 14/01/2014 10:28:00, True}
    -				{3, Bridge7/port1, 2002cfca-50d0-43c4-8dbb-d09e0434dbe7, Topology4, admin, 14/01/2014 08:28:00, 14/01/2014 10:28:00, False}
    -				{4, Bridge6/port1, 2002cfca-50d0-43c4-8dbb-d09e0434dbe7, Topology4, admin, 14/01/2014 08:28:00, 14/01/2014 10:28:00, False}
    -				{5, Bridge6/port2, 2002cfca-50d0-43c4-8dbb-d09e0434dbe7, Topology4, admin, 14/01/2014 08:28:00, 14/01/2014 10:28:00, False}
    -				{6, Bridge7/port2, 2002cfca-50d0-43c4-8dbb-d09e0434dbe7, Topology4, admin, 14/01/2014 08:28:00, 14/01/2014 10:28:00, False}}
    -			
  • usageSummary
  • 
    -				{{ResourceIndex, ResourceName, NumOfReserved, NumOfShared, NumOfNotInReservation}
    -				{1, Bridge6, 2, 0, 0}{2, Bridge7, 2, 0, 0}}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Resources>
    -				<Resource Name="Bridge6" Address="5" FullName="Bridge6" FullAddress="5" ResourceFamilyName="Bridge" ResourceModelName="Bridge Generic Model" ReservedStatus="Shared" Excluded="false" Permission="ReadWrite" FullPath="Bridge6" >
    -				<Reservations>
    -				<Reservation ReservationId="2002cfca-50d0-43c4-8dbb-d09e0434dbe7" ResourceFullName="Bridge6" ReservationName="Topology4" Owner="admin" StartTime="14/01/2014 08:28:00" EndTime="14/01/2014 10:28:00" Shared="true"></Reservation>
    -				</Reservations>
    -				<UsageSummary ResourceFullName="Bridge6" NumOfNotInReservation="0" NumOfReserved="2" NumOfShared="0"></UsageSummary>
    -				</Resource>
    -				<Resource Name="Bridge7" Address="NA" FullName="Bridge7" FullAddress="NA" ResourceFamilyName="Bridge" ResourceModelName="Bridge Generic Model" ReservedStatus="Shared" Excluded="false" Permission="ReadWrite" FullPath="Bridge7" >
    -				<Reservations>
    -				<Reservation ReservationId="2002cfca-50d0-43c4-8dbb-d09e0434dbe7" ResourceFullName="Bridge7" ReservationName="Topology4" Owner="admin" StartTime="14/01/2014 08:28:00" EndTime="14/01/2014 10:28:00" Shared="true"></Reservation>
    -				</Reservations>
    -				<UsageSummary ResourceFullName="Bridge7" NumOfNotInReservation="0" NumOfReserved="2" NumOfShared="0"></UsageSummary>
    -				</Resource>
    -				<Resource Name="port1" Address="u" FullName="Bridge7/port1" FullAddress="NA/u" ResourceFamilyName="Bridge Port" ResourceModelName="Bridge Port Generic Model" ReservedStatus="Reserved" Excluded="false" Permission="ReadWrite" ConnectedTo="Patch6\jack2" FullPath="Bridge7/port1" >
    -				<Reservations>
    -				<Reservation ReservationId="2002cfca-50d0-43c4-8dbb-d09e0434dbe7" ResourceFullName="Bridge7/port1" ReservationName="Topology4" Owner="admin" StartTime="14/01/2014 08:28:00" EndTime="14/01/2014 10:28:00" Shared="false"></Reservation>
    -				</Reservations>
    -				</Resource>
    -				<Resource Name="port1" Address="u" FullName="Bridge6/port1" FullAddress="5/u" ResourceFamilyName="Bridge Port" ResourceModelName="Bridge Port Generic Model" ReservedStatus="Reserved" Excluded="false" Permission="ReadWrite" ConnectedTo="Patch6\jack1" FullPath="Bridge6/port1" >
    -				<Reservations>
    -				<Reservation ReservationId="2002cfca-50d0-43c4-8dbb-d09e0434dbe7" ResourceFullName="Bridge6/port1" ReservationName="Topology4" Owner="admin" StartTime="14/01/2014 08:28:00" EndTime="14/01/2014 10:28:00" Shared="false"></Reservation>
    -				</Reservations>
    -				</Resource>
    -				<Resource Name="port2" Address="NA" FullName="Bridge6/port2" FullAddress="5/NA" ResourceFamilyName="Bridge Port" ResourceModelName="Bridge Port Generic Model" ReservedStatus="Reserved" Excluded="false" Permission="ReadWrite" ConnectedTo="Patch6\jack4" FullPath="Bridge6/port2" >
    -				<Reservations>
    -				<Reservation ReservationId="2002cfca-50d0-43c4-8dbb-d09e0434dbe7" ResourceFullName="Bridge6/port2" ReservationName="Topology4" Owner="admin" StartTime="14/01/2014 08:28:00" EndTime="14/01/2014 10:28:00" Shared="false"></Reservation>
    -				</Reservations>
    -				</Resource>
    -				<Resource Name="port2" Address="NA" FullName="Bridge7/port2" FullAddress="NA/NA" ResourceFamilyName="Bridge Port" ResourceModelName="Bridge Port Generic Model" ReservedStatus="Reserved" Excluded="false" Permission="ReadWrite" ConnectedTo="Patch6\jack5" FullPath="Bridge7/port2" >
    -				<Reservations>
    -				<Reservation ReservationId="2002cfca-50d0-43c4-8dbb-d09e0434dbe7" ResourceFullName="Bridge7/port2" ReservationName="Topology4" Owner="admin" StartTime="14/01/2014 08:28:00" EndTime="14/01/2014 10:28:00" Shared="false"></Reservation>
    -				</Reservations>
    -				</Resource>
    -				</Resources>
    -				</ResponseInfo>
    -			

    back to TOC

    GetResourceAvailabilityInTimeRangeGet resource availability during a specific time range.

    Get resource availability for the resources in the specified time range.

    - Syntax -

    GetResourceAvailabilityInTimeRange(resourcesNames,startTime,endTime,showAllDomains,out resources,out reservations,out usageSummary,out resultXml);

    - Parameters -

    TypeNameDescription
    string[]resourcesNames
    Specify a list of resource names. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/ResourceName
    DateTimestartTime
    The start time of the reservation.
    DateTimeendTime
    The end time of the reservation.
    YesNoOptionsshowAllDomains
    Show all domains associated with the logged in user.
    out string[,]resources
    All resources that match the specified query conditions.
    out string[,]reservations
    All reservations for the resources that match the specified query conditions.
    out string[,]usageSummary
    Specify the number used connected resources, this data will be available only on top level resource
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[] resourcesNames = new[] { "Bridge6", "Bridge7" };
    -				string[,] resources;
    -				string[,] reservations;
    -				string[,] usageSummary;
    -				string xmlResult;
    -				testShellAPI.GetResourceAvailabilityInTimeRange(resourcesNames, DateTime.Now, DateTime.Now.AddYears(1), YesNoOptions.Yes, out resources, out reservations, out usageSummary, out xmlResult);
    -			

    Output

  • resources
  • 
    -				{{Index, Name, Description, Address, FullName, FullAddress, ResourceFamilyName, ResourceModelName, ReservedStatus, Excluded, Permission, ConnectedTo, FullPath}
    -				{1, Bridge6, , 5, Bridge6, 5, Bridge, Bridge Generic Model, Shared, False, ReadWrite, , Bridge6}
    -				{2, Bridge7, , NA, Bridge7, NA, Bridge, Bridge Generic Model, Shared, False, ReadWrite, ,Bridge7}
    -				{3, port1, , u, Bridge7/port1, NA/u, Bridge Port, Bridge Port Generic Model, Reserved, False, ReadWrite, Patch6\\jack2,Bridge7/port1}
    -				{4, port1, , u, Bridge6/port1, 5/u, Bridge Port, Bridge Port Generic Model, Reserved, False, ReadWrite, Patch6\\jack1,Bridge6/port1}
    -				{5, port2, , NA, Bridge6/port2, 5/NA, Bridge Port, Bridge Port Generic Model, Reserved, False, ReadWrite, Patch6\\jack4,Bridge6/port2}
    -				{6, port2, , NA, Bridge7/port2, NA/NA, Bridge Port, Bridge Port Generic Model, Reserved, False, ReadWrite, Patch6\\jack5,Bridge7/port2}}
    -			
  • reservations
  • 
    -				{{ResourceIndex, ResourceName, ReservationId, ReservationName, Owner, StartTime, EndTime, Shared}
    -				{1, Bridge6, 2002cfca-50d0-43c4-8dbb-d09e0434dbe7, Topology4, admin, 14/01/2014 08:28:00, 14/01/2014 10:28:00, True}
    -				{2, Bridge7, 2002cfca-50d0-43c4-8dbb-d09e0434dbe7, Topology4, admin, 14/01/2014 08:28:00, 14/01/2014 10:28:00, True}
    -				{3, Bridge7/port1, 2002cfca-50d0-43c4-8dbb-d09e0434dbe7, Topology4, admin, 14/01/2014 08:28:00, 14/01/2014 10:28:00, False}
    -				{4, Bridge6/port1, 2002cfca-50d0-43c4-8dbb-d09e0434dbe7, Topology4, admin, 14/01/2014 08:28:00, 14/01/2014 10:28:00, False}
    -				{5, Bridge6/port2, 2002cfca-50d0-43c4-8dbb-d09e0434dbe7, Topology4, admin, 14/01/2014 08:28:00, 14/01/2014 10:28:00, False}
    -				{6, Bridge7/port2, 2002cfca-50d0-43c4-8dbb-d09e0434dbe7, Topology4, admin, 14/01/2014 08:28:00, 14/01/2014 10:28:00, False}}
    -			
  • usageSummary
  • 
    -				{{ResourceIndex, ResourceName, NumOfReserved, NumOfShared, NumOfNotInReservation}
    -				{1, Bridge6, 2, 0, 0}{2, Bridge7, 2, 0, 0}}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Resources>
    -				<Resource Name="Bridge6" Address="5" FullName="Bridge6" FullAddress="5" ResourceFamilyName="Bridge" ResourceModelName="Bridge Generic Model" ReservedStatus="Shared" Excluded="false" Permission="ReadWrite" FullPath="Bridge6" >
    -				<Reservations>
    -				<Reservation ReservationId="2002cfca-50d0-43c4-8dbb-d09e0434dbe7" ResourceFullName="Bridge6" ReservationName="Topology4" Owner="admin" StartTime="14/01/2014 08:28:00" EndTime="14/01/2014 10:28:00" Shared="true"></Reservation>
    -				</Reservations>
    -				<UsageSummary ResourceFullName="Bridge6" NumOfNotInReservation="0" NumOfReserved="2" NumOfShared="0"></UsageSummary>
    -				</Resource>
    -				<Resource Name="Bridge7" Address="NA" FullName="Bridge7" FullAddress="NA" ResourceFamilyName="Bridge" ResourceModelName="Bridge Generic Model" ReservedStatus="Shared" Excluded="false" Permission="ReadWrite" FullPath="Bridge7" >
    -				<Reservations>
    -				<Reservation ReservationId="2002cfca-50d0-43c4-8dbb-d09e0434dbe7" ResourceFullName="Bridge7" ReservationName="Topology4" Owner="admin" StartTime="14/01/2014 08:28:00" EndTime="14/01/2014 10:28:00" Shared="true"></Reservation>
    -				</Reservations>
    -				<UsageSummary ResourceFullName="Bridge7" NumOfNotInReservation="0" NumOfReserved="2" NumOfShared="0"></UsageSummary>
    -				</Resource>
    -				<Resource Name="port1" Address="u" FullName="Bridge7/port1" FullAddress="NA/u" ResourceFamilyName="Bridge Port" ResourceModelName="Bridge Port Generic Model" ReservedStatus="Reserved" Excluded="false" Permission="ReadWrite" ConnectedTo="Patch6\jack2" FullPath="Bridge7/port1" >
    -				<Reservations>
    -				<Reservation ReservationId="2002cfca-50d0-43c4-8dbb-d09e0434dbe7" ResourceFullName="Bridge7/port1" ReservationName="Topology4" Owner="admin" StartTime="14/01/2014 08:28:00" EndTime="14/01/2014 10:28:00" Shared="false"></Reservation>
    -				</Reservations>
    -				</Resource>
    -				<Resource Name="port1" Address="u" FullName="Bridge6/port1" FullAddress="5/u" ResourceFamilyName="Bridge Port" ResourceModelName="Bridge Port Generic Model" ReservedStatus="Reserved" Excluded="false" Permission="ReadWrite" ConnectedTo="Patch6\jack1" FullPath="Bridge6/port1" >
    -				<Reservations>
    -				<Reservation ReservationId="2002cfca-50d0-43c4-8dbb-d09e0434dbe7" ResourceFullName="Bridge6/port1" ReservationName="Topology4" Owner="admin" StartTime="14/01/2014 08:28:00" EndTime="14/01/2014 10:28:00" Shared="false"></Reservation>
    -				</Reservations>
    -				</Resource>
    -				<Resource Name="port2" Address="NA" FullName="Bridge6/port2" FullAddress="5/NA" ResourceFamilyName="Bridge Port" ResourceModelName="Bridge Port Generic Model" ReservedStatus="Reserved" Excluded="false" Permission="ReadWrite" ConnectedTo="Patch6\jack4" FullPath="Bridge6/port2" >
    -				<Reservations>
    -				<Reservation ReservationId="2002cfca-50d0-43c4-8dbb-d09e0434dbe7" ResourceFullName="Bridge6/port2" ReservationName="Topology4" Owner="admin" StartTime="14/01/2014 08:28:00" EndTime="14/01/2014 10:28:00" Shared="false"></Reservation>
    -				</Reservations>
    -				</Resource>
    -				<Resource Name="port2" Address="NA" FullName="Bridge7/port2" FullAddress="NA/NA" ResourceFamilyName="Bridge Port" ResourceModelName="Bridge Port Generic Model" ReservedStatus="Reserved" Excluded="false" Permission="ReadWrite" ConnectedTo="Patch6\jack5" FullPath="Bridge7/port2" >
    -				<Reservations>
    -				<Reservation ReservationId="2002cfca-50d0-43c4-8dbb-d09e0434dbe7" ResourceFullName="Bridge7/port2" ReservationName="Topology4" Owner="admin" StartTime="14/01/2014 08:28:00" EndTime="14/01/2014 10:28:00" Shared="false"></Reservation>
    -				</Reservations>
    -				</Resource>
    -				</Resources>
    -				</ResponseInfo>
    -			

    back to TOC

    GetResourceCommandsRetrieve resource driver commands.

    Retrieves driver commands and parameters for a specified resource.

    - Syntax -

    GetResourceCommands(resourceFullPath,out commands,out parameters,out resultXml);

    - Parameters -

    TypeNameDescription
    stringresourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    out string[,]commands
    All commands for drivers associated with the specified resource.
    out string[,]parameters
    Parameters associated with each command.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[,] commands, parameters;
    -				testShellAPI.GetResourceCommands("Router 1234",out commands,out parameters,out resultXml);
    -			

    Output

  • commands
  • 
    -				{{"Index","Name","Description","DisplayName"},
    -				{"1","ExampleCommand","","Example Command"},
    -				{"2","ResetDriver","","Reset Driver"}}
    -			
  • parameters
  • 
    -				{{"CommandIndex","Name","Description","Type","Mandatory","DefaultValue","EnumValues"},
    -				{"1","userParam1","","String","False","Hello",""},
    -				{"1","userParam2","","Numeric","False","42",""}}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Commands>
    -				<Command Name="ExampleCommand" DisplayName="Example Command" >
    -				<Parameters>
    -				<Parameter Name="userParam1" Type="String" Mandatory="false" DefaultValue="Hello"/>
    -				<Parameter Name="userParam2" Type="Numeric" Mandatory="false" DefaultValue="42"/>
    -				</Parameters>
    -				</Command>
    -				<Command Name="ResetDriver" DisplayName="Reset Driver" >
    -				<Parameters/>
    -				</Command>
    -				</Commands>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC

    GetResourceConnectedCommandsRetrieve resource driver commands.

    Gets commands which are added to the resource from connected resources such as power or virtualization.

    - Syntax -

    GetResourceConnectedCommands(resourceFullPath,out commands,out parameters,out resultXml);

    - Parameters -

    TypeNameDescription
    stringresourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    out string[,]commands
    All commands for drivers associated with the specified resource.
    out string[,]parameters
    Parameters associated with each command.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[,] commands, parameters;
    -				testShellAPI.GetResourceConnectedCommands("Router 1234",out commands,out parameters,out resultXml);
    -			

    Output

  • commands
  • 
    -				{{"Index","Name","Tag","Description","DisplayName"},
    -				{"1","ExampleCommand", "virtualization", "","Example Command"},
    -				{"2","PowerOn","power","","Power On"}}
    -			
  • parameters
  • 
    -				{{"CommandIndex","Name","Description","Type","Mandatory","DefaultValue","EnumValues"},
    -				{"1","userParam1","","String","False","Hello",""},
    -				{"1","userParam2","","Numeric","False","42",""}}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Commands>
    -				<Command Name="SpinUp" Tag="virtualization" DisplayName="Example virtualiztion command" >
    -				<Parameters>
    -				<Parameter Name="userParam1" Type="String" Mandatory="false" DefaultValue="Hello"/>
    -				<Parameter Name="userParam2" Type="Numeric" Mandatory="false" DefaultValue="42"/>
    -				</Parameters>
    -				</Command>
    -				<Command Name="PowerOn" Tag="power" DisplayName="Example power command" >
    -				<Parameters/>
    -				</Command>
    -				</Commands>
    -				</ResponseInfo>
    -			

    back to TOC

    GetResourceDetailsRetrieve the resource parameters and attributes.

    Retrieves resource descriptions for the specified resource, and a matrix of all its associated attributes and attribute values.

    - Syntax -

    GetResourceDetails(resourceFullPath, showAllDomains,out resource,out attributes,out resultXml);

    - Parameters -

    TypeNameDescription
    stringresourceFullPath
    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    YesNoOptionsshowAllDomains
    Show all domains associated with the logged in user.
    out string[,]resource
    Details associated with the specified resource.
    out string[,]attributes
    Attributes and attribute values for the specified resource.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[,] resource;
    -				attributes[,] attributes;
    -				string resultXml;
    -				testShellAPI.GetResourceDetails("Lab Routers/Router 1234", false, out resource, out attributes, out resultXml);
    -			

    Output

  • resource
  • 
    -				{{"Index","ParentIndex","Name","Address","FullAddress","RootAddress","ResourceFamilyName","ResourceModelName","FolderFullPath","Locked","LockInfo_ReservationName","LockInfo_Username","LockInfo_MachineName","LockInfo_Created","Excluded", "Permissions"},
    -				{"1","-1","Router 1234","192.168.1.200","192.168.1.200","192.168.1.200","Generic Chassis","Generic Chassis Model","Lab Routers","False","","","","","False", "ReadOnly"},
    -				{"2","1","Router 1234/Port 1","1","192.168.1.200/1","192.168.1.200","Generic Port","Generic Port Model","Lab Routers","False","","","","","False","ReadOnly"}}
    -			
  • attributes
  • 
    -				{{"ResourceIndex","ResourceName","Name","Value","Type"},
    -				{"1","Router 1234","SW_Version","","String"}}
    -			
  • resultXml
  • 
    -				<ResponseInfo Name="Router 1234" DriverName="Router Driver" FolderFullPath="Lab Routers" Address="192.168.1.200" FullAddress="192.168.1.200" RootAddress="192.168.1.200" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Locked="false" Excluded="false" Description="a generic router" Permissions="ReadOnly"  ResourceLiveStatusName="name1" ResourceLiveStatusDescription="description1">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"></ResourceAttribute>
    -				</ResourceAttributes>
    -				<Domains></Domains>
    -				<ChildResources>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.200/1" RootAddress="192.168.1.200" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="false" Excluded="false" Description="a generic router port" Permissions="ReadOnly">
    -				<ResourceAttributes></ResourceAttributes>
    -				<Domains></Domains>
    -				<LockInfo></LockInfo>
    -				</ResourceInfo>
    -				</ChildResources>
    -				<LockInfo></LockInfo>
    -				<CreatedInReservation></CreatedInReservation>
    -				<CreatedByUser></CreatedByUser>
    -				<CreatedInDomain></CreatedInDomain>
    -				</ResponseInfo>
    -			

    back to TOC

    GetResourceListRetrieve a list of resources for a specified path.

    Retrieves resources and resource values for the specified folder path.

    - Syntax -

    GetResourceList(folderFullPath,out resources,out resultXml);

    - Parameters -

    TypeNameDescription
    stringfolderFullPath
    Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.
    out string[,]resources
    Resources and resource values for the specified path.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[,] resources;
    -				string resultXml;
    -				testShellAPI.GetResourceList("Lab Routers", out resources, out resultXml);
    -			

    Output

  • resources
  • 
    -				{{"Name","Address","FullAddress","RootAddress","ResourceFamilyName","ResourceModelName","FolderFullPath","Locked","LockInfo_ReservationName","LockInfo_Username","LockInfo_MachineName","LockInfo_Created","Excluded"},
    -				{Router 1234","192.168.1.200","192.168.1.200","192.168.1.200","Generic Chassis","Generic Chassis Model","Lab Routers","False","","","","","False"},
    -				{Router 4321","192.168.1.201","192.168.1.201","192.168.1.201","Generic Resource","Generic Resource Model","Lab Routers","False","","","","","False"}}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Resources>
    -				<Resource Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.200" FullAddress="192.168.1.200" RootAddress="192.168.1.200" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Locked="false" Excluded="false">
    -				<LockInfo/>
    -				</Resource>
    -				<Resource Name="Router 4321" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Locked="false" Excluded="false">
    -				<LockInfo/>
    -				</Resource>
    -				</Resources>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    GetScheduledReservationsRetrieve scheduled reservations for a specified time range.

    Retrieves all reservations scheduled between the specified start and end times.

    - Syntax -

    GetScheduledReservations(fromTime,untilTime,out reservations,out permittedUsers,out resultXml);

    - Parameters -

    TypeNameDescription
    DateTimefromTime
    Specify from which time and date to search.
    DateTimeuntilTime
    Specify until which time and date to search.
    stringownerName
    Specify reservation owner name
    out string[,]reservations
    Scheduled reservations for the provided time range. Reservations will be listed for the specified owner, or all current reservations (if no owner is specified).
    out string[,]permittedUsers
    Lists users with [active | full] access to the specified reservation.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[,] reservations;
    -				string [,] permittedUsers;
    -				string resultXml;
    -				testShellAPI.GetScheduledReservations(new DateTime(2015, 1, 1, 8, 0, 0), new DateTime(2015, 1, 1, 12, 0, 0), out reservations, out resultXml);
    -			

    Output

  • reservations
  • 
    -				{{"Id","Name","Description","Start","End","Owner","Booked","Status","RecurrenceType","Topologies","ActualEndTime","CreateDate","ModificationDate","Provisioning Status","DomainName","ReservationsLiveStatus","ReservationsLiveStatusDescription"},
    -				{af626b88-458b-4e7a-9054-c03d8cffa260","test reservation","","1/1/2015 10:00:00 AM","1/1/2015 12:00:00 PM","admin","True","Pending","None","","","6/20/2012 10:40:47 AM","6/20/2012 10:45:16 AM","Pending","Global","Pass","Reservation"}}
    -			
  • permittedUsers
  • 
    -				{{ReservationId, UserName}
    -				{af626b88-458b-4e7a-9054-c03d8cffa260, admin}
    -				{af626b88-458b-4e7a-9054-c03d8cffa260, user1}
    -				{af626b88-458b-4e7a-9054-c03d8cffa260, user2}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Reservations>
    -				<Reservation Id="af626b88-458b-4e7a-9054-c03d8cffa260" Name="test reservation" StartTime="2015-01-01T10:00:00" EndTime="2015-01-01T12:00:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Pending" ProvisioningStatus="Ready" ActualEndTime="" CreateDate="2012-06-20T10:40:47" ModificationDate="2012-06-20T10:45:16" DomainName="Global"  ReservationLiveStatusName="Pass" ReservationLiveStatusDescription="Reservation" >
    -				<Topologies/>
    -				</Reservation>
    -				</Reservations>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC

    GetTopologyCommandsRetrieve available topology commands in a reservation.

    [Deprecated] Retrieves driver commands and parameters for a specified reservation.

    - Syntax -

    GetTopologyCommands(reservationId,out commands,out parameters,out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationId
    Specify the string that represents the reservation’s unique identifier.
    out string[,]commands
    All commands for driver associated with a topology in the specified reservation.
    out string[,]parameters
    Parameters associated with each command.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[,] commands, parameters;
    -				string resultXml;
    -				string reservationId = "af626b88-458b-4e7a-9054-c03d8cffa260";
    -				testShellAPI.GetTopologyCommands(reservationId,out commands,out parameters,out resultXml);
    -			

    Output

  • commands
  • 
    -				{{"Index","Name","Description"},
    -				{"1","ExampleCommand",""},
    -				{"2","Setup",""}}
    -			
  • parameters
  • 
    -				{{"CommandIndex","Name","Description","Type","Mandatory","DefaultValue","EnumValues"},
    -				{"1","userParam1","","String","False","Hello",""},
    -				{"1","userParam2","","Numeric","False","42",""}}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Commands>
    -				<Command Name="ExampleCommand">
    -				<Parameters>
    -				<Parameter Name="userParam1" Type="String" Mandatory="false" DefaultValue="Hello"/>
    -				<Parameter Name="userParam2" Type="Numeric" Mandatory="false" DefaultValue="42"/>
    -				</Parameters>
    -				</Command>
    -				<Command Name="Setup">
    -				<Parameters/>
    -				</Command>
    -				</Commands>
    -				</ResponseInfo>
    -			

    back to TOC

    GetEnvironmentCommandsRetrieve available environment commands in a reservation.

    Retrieves driver commands and parameters for a specified reservation.

    - Syntax -

    GetEnvironmentCommands(reservationId,out commands,out parameters,out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationId
    Specify the string that represents the reservation’s unique identifier.
    out string[,]commands
    All commands for driver associated with a topology in the specified reservation.
    out string[,]parameters
    Parameters associated with each command.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[,] commands, parameters;
    -				string resultXml;
    -				string reservationId = "af626b88-458b-4e7a-9054-c03d8cffa260";
    -				testShellAPI.GetEnvironmentCommands(reservationId,out commands,out parameters,out resultXml);
    -			

    Output

  • commands
  • 
    -				{{"Index","Name","Description"},
    -				{"1","ExampleCommand",""},
    -				{"2","Setup",""}}
    -			
  • parameters
  • 
    -				{{"CommandIndex","Name","Description","Type","Mandatory","DefaultValue","EnumValues"},
    -				{"1","userParam1","","String","False","Hello",""},
    -				{"1","userParam2","","Numeric","False","42",""}}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Commands>
    -				<Command Name="ExampleCommand">
    -				<Parameters>
    -				<Parameter Name="userParam1" Type="String" Mandatory="false" DefaultValue="Hello"/>
    -				<Parameter Name="userParam2" Type="Numeric" Mandatory="false" DefaultValue="42"/>
    -				</Parameters>
    -				</Command>
    -				<Command Name="Setup">
    -				<Parameters/>
    -				</Command>
    -				</Commands>
    -				</ResponseInfo>
    -			

    back to TOC

    GetTopologyDetailsRetrieve the topology parameters and attributes.

    Retrieves all resources and attributes associated with the specified topology.

    - Syntax -

    GetTopologyDetails(topologyFullPath,out owner,out instructions,out resources,out attributes,out abstractResources,out abstractResourcesAttributes,out abstractResourcesRequiredAttributes,out routes,out driver,out globalInputs,out requirementsInputs,out additionalInfoInputs,out connectors,out connectorAttributes,out alias,out type,out state,out parentTopology,out services,out serviceAttributes,out apps, out maxDuration, out resultXml);

    - Parameters -

    TypeNameDescription
    stringtopologyFullPath
    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    out stringowner
    Owner of the topology.
    out stringinstructions
    Topology instructions.
    out string[,]resources
    Resources and resource values associated with the specified topology.
    out string[,]attributes
    Attributes and attribute values for resources associated with the specified topology.
    out string[,]abstractResources
    Abstract resources and their associated values for the specified topology.
    out string[,]abstractResourcesAttributes
    Attributes and attribute values for all abstract resources associated with the specified topology.
    out string[,]abstractResourcesRequiredAttributes
    Required attributes and attribute values for all abstract resources associated with the specified topology (multiple possible values for a single attribute are displayed in different rows).
    out string[,]routes
    Routes and route endpoints associated with the specified topology.
    out stringDriver
    The name of the driver associated with this topology.
    out string[,]globalInputs
    Global inputs associated with the specified topology.
    out string[,]requirementsInputs
    Requirements inputs associated with the specified topology.
    out string[,]additionalInfoInputs
    Additional info inputs associated with the specified topology.
    out string[,]connectors
    Connectors associated with the specified topology.
    out string[,]ConnectorAttributes
    Visual connectors attributes associated with a specified connector.
    out stringtype
    The Type of the topology.
    out stringstate
    The State of the topology.
    out string[,]parentTopology
    The Topology from which this topology was created.
    out string[,]permittedEditors
    List of permitted editors names.
    out string[,]services
    Matrix of service instances.
    out string[,]serviceAttributes
    Matrix of attributes of the services.
    out string[,]apps
    Matrix of apps.
    out stringmaxDuration
    The maximun amount of time this topology can be reserved.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				testShellAPI.GetTopologyDetails("Temp Automation Resources/TP1");
    -			

    Output

  • Owner
  • {{"Owner"}}
  • Instructions
  • {{"Instructions"}}
  • resources
  • 
    -				{{"Index","Name","Address","FullAddress","RootAddress","ResourceFamilyName","ResourceModelName","FolderFullPath","Locked","LockInfo_ReservationName","LockInfo_Username","LockInfo_MachineName","LockInfo_Created","Excluded","Alias","WillBeLocked"},
    -				{"1","Router 1234","192.168.1.201","192.168.1.201","192.168.1.201","Generic Chassis","Generic Chassis Model","Lab Routers","False","","","","","False","Router 1234","False"},
    -				{"2","GenericResource 1234/ConsolePort 21","21","192.168.1.20/21","192.168.1.20","Generic Port","Generic Port Model","Temp Automation Resources","False","","","","","False","ConsolePort 21","True"},
    -				{"3","GenericResource 1234/Port 2","2","192.168.1.20/2","192.168.1.20","Generic Port","Generic Port Model","Temp Automation Resources","False","","","","","False","Port 2","True"},
    -				{"4","GenericResource 1234/PowerPort 12","12","192.168.1.20/12","192.168.1.20","Generic Port","Generic Port Model","Temp Automation Resources","False","","","","","False","PowerPort 12","True"},
    -				{"5","Router 1234/Port 1","1","192.168.1.201/1","192.168.1.201","Generic Port","Generic Port Model","Lab Routers","False","","","","","False","Port 1","True"},
    -				{"6","GenericResource 1234/PowerPort 11","11","192.168.1.20/11","192.168.1.20","Generic Port","Generic Port Model","Temp Automation Resources","False","","","","","False","PowerPort 11","True"},
    -				{"7","GenericResource 1234","192.168.1.20","192.168.1.20","192.168.1.20","Generic Resource","Generic Resource Model","Temp Automation Resources","False","","","","","False","GenericResource 1234","True"},
    -				{"8","GenericResource 1234/Port 1","1","192.168.1.20/1","192.168.1.20","Generic Port","Generic Port Model","Temp Automation Resources","False","","","","","False","Port 1","True"}}
    -			
  • attributes
  • 
    -				{{"ResourceIndex","ResourceName","Name","Value","Type"},
    -				{"1","Router 1234","SW_Version","","String"}}
    -			
  • abstractResources
  • {{"Index","ResourceFamilyName","ResourceModelName","Alias","WillBeLocked","Valid","Quantity"}}
  • abstractResourcesAttributes
  • {{"AbstractResourceIndex","AbstractResourceAlias","AttributeName","AttributeValue","AttributeType"}}
  • abstractResourcesRequiredAttributes
  • {{"AbstractResourceIndex","AbstractResourceAlias","AttributeName","AttributeValue","AttributeType"}}
  • routes
  • 
    -				{{"Index","Source","Target","RouteType","Alias","Shared"},
    -				{"1","GenericResource 1234/Port 1","Router 1234/Port 1","bi","","true"},
    -				{"2","Router 1234/Port 1","GenericResource 1234/Port 2","uni","","true"}}
    -			
  • Driver
  • {{"ExampleTopologyDriver"}}
  • globalInputs
  • 
    -				{{"Param Name", "Default Value", "Possible Values", "Description"},
    -				{"Some global input", "", "", ""}}
    -			
  • requirementsInputs
  • 
    -				{{"Resource Name", "Param Name", "Default Value", "Possible Values", "Input Type", "Description"},
    -				{"test*", "Model", "", "", "Models", ""},
    -				{"test*", "Speed", "", "10 Mbps
    -				100 Mbps
    -				1 Gbps
    -				10 Gbps", "Attributes", ""}}
    -			
  • additionalInfoInputs
  • 
    -				{{"Resource Name", "Param Name", "Default Value", "Possible Values", "Description"},
    -				{"test*", "Test", "", ""}}
    -			
  • connectors
  • 
    -				{{"index","Source","Target","ResourceMappingType","Alias"},
    -				{"1","b6/p7","b7/p5","bi","vc1"}}
    -			
  • connectorAttributes
  • 
    -				{{"ConnectorIndex","Name","Value"},
    -				{"1","Duplex", "Half"}}
    -			
  • Type
  • 
    -				"Build"
    -			
  • State
  • 
    -				"Ready"
    -			
  • MaxDuration
  • 
    -				"02:00:00"
    -			
  • ParentTopology
  • 
    -				{{"Index","Name","Type","State"},
    -				{"0","Topo1234","Build","Pending"}}
    -			
  • PermittedEditors
  • 
    -				{"John Doe", "Smith Wilson", "Archie Goldman"}
    -			
  • services
  • 
    -				{{"Index","ServiceName","Alias"},
    -				{"1","Sql1","Sql64"}}
    -			
  • serviceAttributes
  • 
    -				{{"ServiceInstanceIndex","Name","Value"},
    -				{"1","Duplex","Half"}}
    -			
  • apps
  • 
    -				{{"Name","LogicalResourceFamily","LogicalResourceModel"},
    -				{"App","General App Family","General App Model"}}
    -			
  • resultXml
  • 
    -				<ResponseInfo Name="TP1">
    -				<Resources>
    -				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false" Excluded="false" WillBeLocked="false">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				</ResourceInfo>
    -				</Resources>
    -				<AbstractResources/>
    -				<Routes>
    -				<Route Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				<Instructions>
    -				Topology instructions.
    -				</Instructions>
    -				<Driver>
    -				ExampleTopologyDriver
    -				</Driver>
    -				<GlobalInputs ParamName="Some global input"></GlobalInputs>
    -				<RequirementsInputs ParamName="Model" ResourceName="test*" InputType="Models">
    -				<PossibleValues>Test Model</PossibleValues>
    -				</RequirementsInputs>
    -				<RequirementsInputs ParamName="Speed" ResourceName="test*" InputType="Attributes">
    -				<PossibleValues>10 Mbps</PossibleValues>
    -				<PossibleValues>100 Mbps</PossibleValues>
    -				<PossibleValues>1 Gbps</PossibleValues>
    -				<PossibleValues>10 Gbps</PossibleValues>
    -				</<RequirementsInputs>
    -				<AdditionalInfoInputs ParamName="Test" ResourceName="test*"></AdditionalInfoInputs>
    -				<Connectors>
    -				<Connector Alias="connector1" Type="Default" ResourceMappingType="bi" Source="b6/p7" Target="b7/p5">
    -				<Attributes>
    -				<Attribute Name="Numeric" Value="2">
    -				</Attributes>
    -				</Connector>
    -				<Connector Alias="vc444" Type="Default" ResourceMappingType="bi" Source="b6/p6" Target="b7/p4">
    -				<Attributes>
    -				<Attribute Name="Protocol" Value="Transparent">
    -				</Attributes>
    -				</Connector>
    -				</Connectors>
    -				<ParentTopology Name="Template01">
    -				<Type>Build</Type>
    -				<State>Ready</State>
    -				</ParentTopology>
    -				<PermittedEditors>
    -				<string>John Doe<string>
    -				<string>Smith Wilson<string>
    -				<string>Archie Goldman<string>
    -				</PermittedEditors>
    -				<Services>
    -				<Service ServiceName="service1 Instance" Alias="Sql Server">
    -				<Attributes>
    -				<Attribute Name="Numeric" Value="2">
    -				</Attributes>
    -				</Service>
    -				</Services>
    -				<Apps>
    -				<App Name="App2222">
    -				<LogicalResource Family="Generic App Family" Model="Generic App Model" Description="">
    -				<Attributes>
    -				<Attribute Name="Access Mode" Value="565"></Attribute>
    -				</Attributes>
    -				</LogicalResource>
    -				<DeploymentPaths>
    -				<DeploymentPath IsDefault="true">
    -				<DeploymentService Name="vCenter VM From Template" Model="vCenter VM From Template" Driver="Deploy From Template Driver">
    -				<Attributes>
    -				<Attribute Name="Access Mode" Value=""></Attribute>
    -				<Attribute Name="vCenter Name" Value="VMWare vCenter"></Attribute>
    -				<Attribute Name="vCenter Template" Value=""></Attribute>
    -				</Attributes>
    -				</DeploymentService>
    -				</DeploymentPath>
    -				</DeploymentPaths>
    -				</App>
    -				</App>
    -				</Apps>
    -				<MaxDuration>02:00:00</MaxDuration>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    RemoveConnectorsFromReservationRemove connectors from a reservation.

    Removes the mapped connector between given end points.

    - Syntax -

    RemoveConnectorsFromReservation(reservationId,endpoints,out connectors,out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationId
    Specify the string that represents the reservation’s unique identifier.
    string[,]endpoints
    The list of removed endpoints.
    out string[,]connectors
    The list of removed connectors.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string resultXml;
    -				string reservationId = "28cb2a71-c8fc-4f41-a22b-e65685ebed14";
    -				string[,] connectors;
    -				testShellAPI.RemoveConnectorsFromReservation(reservationId,new string[]{"Router 1234/Port 1","Router 1234/Port 1"},new string[]{"GenericResource 1234/Port 1","GenericResource 1234/Port 2"},out connectors,out resultXml);
    -			

    Output

  • connectors
  • 
    -				{{"Index","Source","Target","Direction","Alias"},
    -				{"1","Router 1234/Port 1","GenericResource 1234/Port 1","bi","a connector"},
    -				{"2","Router 1234/Port 1","GenericResource 1234/Port 2","uni","uni connector"}}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Connectors>
    -				<Connector Alias="a connector" Type="Default" ResourceMappingType="bi" Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1">
    -				</Connector>
    -				<Connector Alias="uni connector" Type="Default" ResourceMappingType="uni" Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2">
    -				</Connector>
    -				</Connectors>
    -				</ResponseInfo>
    -			

    back to TOC

    RemoveRoutesFromReservationRemove routes from a reservation.

    Disconnects a list of endpoints and removes the mapped route between them. Will only disconnect endpoints using resources reserved to the logged-in user .

    - Syntax -

    RemoveRoutesFromReservation(reservationId,endpoints,mappingType,out routes,out segments,out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationId
    Specify the string that represents the reservation’s unique identifier.
    string[,]endpoints
    The list of removed endpoints.
    MappingTypemappingType
    Specify bidirectional or unidirectional as the mapping type.
    out string[,]routes
    The list of removed routes.
    out string[,]segments
    The list of removed segments.
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string resultXml;
    -				string reservationId = "28cb2a71-c8fc-4f41-a22b-e65685ebed14";
    -				string[,] routes,segments;
    -				testShellAPI.RemoveRoutesFromReservation(reservationId,new string[]{"Router 1234/Port 1","Router 1234/Port 1"},new string[]{"GenericResource 1234/Port 1","GenericResource 1234/Port 2"},MappingType.Bidirectional,out routes,out segments,out resultXml);
    -			

    Output

  • routes
  • 
    -				{{"Index","Source","Target","RouteType","Alias","Shared"},
    -				{"1","Router 1234/Port 1","GenericResource 1234/Port 1","bi","a route","true"},
    -				{"2","Router 1234/Port 1","GenericResource 1234/Port 2","uni","uni route","true"}}
    -			
  • segments
  • 
    -				{{"RouteIndex","Source","Target"},
    -				{"1","Router 1234/Port 1","L1 Switch 1234/Blade 1/Port 3"},
    -				{"1","L1 Switch 1234/Blade 1/Port 3","L1 Switch 1234/Blade 1/Port 1"},
    -				{"1","L1 Switch 1234/Blade 1/Port 1","GenericResource 1234/Port 1"},
    -				{"2","Router 1234/Port 1","L1 Switch 1234/Blade 1/Port 3"},
    -				{"2","L1 Switch 1234/Blade 1/Port 3","L1 Switch 1234/Blade 1/Port 2"},
    -				{"2","L1 Switch 1234/Blade 1/Port 2","GenericResource 1234/Port 2"}}
    -			
  • resultXml
  • 
    -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" Alias="a route" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" Alias="uni route" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 2" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    SaveReservationAsTopologyCreate a topology from an existing active reservation.

    Creates a topology from an existing reservation. Leave the folder path blank to save the topology directly under the root.

    - Syntax -

    SaveReservationAsTopology(reservationId,folderFullPath,topologyName,includeInactiveRoutes,out resultXml);

    - Parameters -

    TypeNameDescription
    stringreservationId
    Specify the string that represents the reservation’s unique identifier.
    stringfolderFullPath
    Full container folder path where the new topology will be saved. leaving the folder path empty will try saving the topology under the root. For example: FolderName/FolderNameA.
    stringtopologyName
    Specify the new name for the new topology.
    YesNoOptionsincludeInactiveRoutes
    Include disconnected routes in the created topology
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string reservationId = "af626b88-458b-4e7a-9054-c03d8cffa260";
    -				testShellAPI.SaveReservationAsTopology(reservationId,"Temp Automation Resources","TP1",YesNoOptions.Yes,out resultXml);
    -			

    Output

  • resultXml
  • 
    -				<ResponseInfo Name="TP1">
    -				<Resources>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Studio" Username="admin" Created="2012-06-20T17:20:37"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Studio" Username="admin" Created="2012-06-20T17:20:37"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="true" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T17:20:37"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false" Excluded="false" WillBeLocked="false">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				</Resources>
    -				<AbstractResources/>
    -				<Routes>
    -				<Route Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC

    CreateBlueprintApprovalRequestCreate a new blueprint approval request.

    Create a new approval request.

    - Syntax -

    CreateBlueprintApprovalRequest(entityId, requestNotes, globalInputs, requirementsInputs, additionalInfoInputs, startTime, endTime, duration, out resultXml);

    - Parameters -

    TypeNameDescription
    stringentityId
    Unique identifier of the entity (Blueprint id).
    stringrequestNotes
    Request description (optional).
    string[,]globalInputs
    Global inputs associated with the specified topology. For example: {['Input Name', 'Value';]}.
    string[,]requirementsInputs
    Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity.
    string[,]additionalInfoInputs
    Additional info inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value';]}.
    DateTimestartTime
    Start time of the request (leave empty to immediately request approval).
    DateTimeendTime
    End time of the request, after which the request will be invalid (leave empty for unlimited request time).
    stringduration
    Time in minutes to consume the entity. For example, sandbox duration (leave empty for unlimited consumption time).
    out stringresultXml
    Specify the variable for the XML output.

    Example

    
    -				TestShellAPI.TestShellAPI testShellAPI = new TestShellAPI.TestShellAPI();
    -				string[,] globalInputs = {{"input1", "value1"}, {"input2", "value2"}};
    -				string[,] requirementsInputs = {{"resource", "attribute", "value", "Attributes"}};
    -				string[,] additionalInfoInputs = {{"resource", "attribute", "value"}};
    -				testShellAPI.CreateBlueprintApprovalRequest("de6f5e37-e3e3-46d0-b915-07a1f30c07d4", "Request notes", globalInputs, requirementsInputs, additionalInfoInputs, new DateTime(2023, 1, 1, 12, 0, 0), new DateTime(2023, 2, 2, 12, 0, 0), "60");
    -			

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    \ No newline at end of file diff --git a/static/api-docs/2024.1/Python-API/_sources/cloudshell.api.rst.txt b/static/api-docs/2024.1/Python-API/_sources/cloudshell.api.rst.txt deleted file mode 100644 index 5c13dbb3ec..0000000000 --- a/static/api-docs/2024.1/Python-API/_sources/cloudshell.api.rst.txt +++ /dev/null @@ -1,30 +0,0 @@ -cloudshell.api package -====================== - -Submodules ----------- - -cloudshell.api.cloudshell_api module ------------------------------------- - -.. automodule:: cloudshell.api.cloudshell_api - :members: - :undoc-members: - :show-inheritance: - -cloudshell.api.common_cloudshell_api module -------------------------------------------- - -.. automodule:: cloudshell.api.common_cloudshell_api - :members: - :undoc-members: - :show-inheritance: - - -Module contents ---------------- - -.. automodule:: cloudshell.api - :members: - :undoc-members: - :show-inheritance: diff --git a/static/api-docs/2024.1/Python-API/_sources/cloudshell.helpers.rst.txt b/static/api-docs/2024.1/Python-API/_sources/cloudshell.helpers.rst.txt deleted file mode 100644 index 7ea8ae84fb..0000000000 --- a/static/api-docs/2024.1/Python-API/_sources/cloudshell.helpers.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -cloudshell.helpers package -========================== - -Subpackages ------------ - -.. toctree:: - - cloudshell.helpers.from_template - cloudshell.helpers.scripts - -Module contents ---------------- - -.. automodule:: cloudshell.helpers - :members: - :undoc-members: - :show-inheritance: diff --git a/static/api-docs/2024.1/Python-API/_sources/cloudshell.rst.txt b/static/api-docs/2024.1/Python-API/_sources/cloudshell.rst.txt deleted file mode 100644 index 60ba7973fd..0000000000 --- a/static/api-docs/2024.1/Python-API/_sources/cloudshell.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -cloudshell package -================== - -Subpackages ------------ - -.. toctree:: - - cloudshell.api - cloudshell.helpers - -Module contents ---------------- - -.. automodule:: cloudshell - :members: - :undoc-members: - :show-inheritance: diff --git a/static/api-docs/2024.1/Python-API/_sources/index.rst.txt b/static/api-docs/2024.1/Python-API/_sources/index.rst.txt deleted file mode 100644 index 8021be1cfd..0000000000 --- a/static/api-docs/2024.1/Python-API/_sources/index.rst.txt +++ /dev/null @@ -1,22 +0,0 @@ -.. CloudShell Python API documentation master file, created by - sphinx-quickstart on Tue Mar 15 00:33:11 2016. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to CloudShell Python API Reference Guide! -================================================= - -Contents: - -.. toctree:: - :maxdepth: 10 - - cloudshell.api - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/static/api-docs/2024.1/Python-API/_static/css/badge_only.css b/static/api-docs/2024.1/Python-API/_static/css/badge_only.css deleted file mode 100644 index c718cee441..0000000000 --- a/static/api-docs/2024.1/Python-API/_static/css/badge_only.css +++ /dev/null @@ -1 +0,0 @@ -.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/Roboto-Slab-Bold.woff b/static/api-docs/2024.1/Python-API/_static/css/fonts/Roboto-Slab-Bold.woff deleted file mode 100644 index 6cb6000018..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/Roboto-Slab-Bold.woff and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/Roboto-Slab-Bold.woff2 b/static/api-docs/2024.1/Python-API/_static/css/fonts/Roboto-Slab-Bold.woff2 deleted file mode 100644 index 7059e23142..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/Roboto-Slab-Bold.woff2 and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/Roboto-Slab-Regular.woff b/static/api-docs/2024.1/Python-API/_static/css/fonts/Roboto-Slab-Regular.woff deleted file mode 100644 index f815f63f99..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/Roboto-Slab-Regular.woff and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/Roboto-Slab-Regular.woff2 b/static/api-docs/2024.1/Python-API/_static/css/fonts/Roboto-Slab-Regular.woff2 deleted file mode 100644 index f2c76e5bda..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/Roboto-Slab-Regular.woff2 and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.eot b/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca953..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.svg b/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.svg deleted file mode 100644 index 855c845e53..0000000000 --- a/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.ttf b/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2fa1..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.woff b/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a4b0..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.woff2 b/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc6040..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-bold-italic.woff b/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-bold-italic.woff deleted file mode 100644 index 88ad05b9ff..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-bold-italic.woff and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-bold-italic.woff2 b/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-bold-italic.woff2 deleted file mode 100644 index c4e3d804b5..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-bold-italic.woff2 and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-bold.woff b/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-bold.woff deleted file mode 100644 index c6dff51f06..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-bold.woff and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-bold.woff2 b/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-bold.woff2 deleted file mode 100644 index bb195043cf..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-bold.woff2 and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-normal-italic.woff b/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-normal-italic.woff deleted file mode 100644 index 76114bc033..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-normal-italic.woff and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-normal-italic.woff2 b/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-normal-italic.woff2 deleted file mode 100644 index 3404f37e2e..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-normal-italic.woff2 and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-normal.woff b/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-normal.woff deleted file mode 100644 index ae1307ff5f..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-normal.woff and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-normal.woff2 b/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-normal.woff2 deleted file mode 100644 index 3bf9843328..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/css/fonts/lato-normal.woff2 and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/doctools.js b/static/api-docs/2024.1/Python-API/_static/doctools.js deleted file mode 100644 index d06a71d751..0000000000 --- a/static/api-docs/2024.1/Python-API/_static/doctools.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ - "TEXTAREA", - "INPUT", - "SELECT", - "BUTTON", -]); - -const _ready = (callback) => { - if (document.readyState !== "loading") { - callback(); - } else { - document.addEventListener("DOMContentLoaded", callback); - } -}; - -/** - * Small JavaScript module for the documentation. - */ -const Documentation = { - init: () => { - Documentation.initDomainIndexTable(); - Documentation.initOnKeyListeners(); - }, - - /** - * i18n support - */ - TRANSLATIONS: {}, - PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), - LOCALE: "unknown", - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext: (string) => { - const translated = Documentation.TRANSLATIONS[string]; - switch (typeof translated) { - case "undefined": - return string; // no translation - case "string": - return translated; // translation exists - default: - return translated[0]; // (singular, plural) translation tuple exists - } - }, - - ngettext: (singular, plural, n) => { - const translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated !== "undefined") - return translated[Documentation.PLURAL_EXPR(n)]; - return n === 1 ? singular : plural; - }, - - addTranslations: (catalog) => { - Object.assign(Documentation.TRANSLATIONS, catalog.messages); - Documentation.PLURAL_EXPR = new Function( - "n", - `return (${catalog.plural_expr})` - ); - Documentation.LOCALE = catalog.locale; - }, - - /** - * helper function to focus on search bar - */ - focusSearchBar: () => { - document.querySelectorAll("input[name=q]")[0]?.focus(); - }, - - /** - * Initialise the domain index toggle buttons - */ - initDomainIndexTable: () => { - const toggler = (el) => { - const idNumber = el.id.substr(7); - const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); - if (el.src.substr(-9) === "minus.png") { - el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; - toggledRows.forEach((el) => (el.style.display = "none")); - } else { - el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; - toggledRows.forEach((el) => (el.style.display = "")); - } - }; - - const togglerElements = document.querySelectorAll("img.toggler"); - togglerElements.forEach((el) => - el.addEventListener("click", (event) => toggler(event.currentTarget)) - ); - togglerElements.forEach((el) => (el.style.display = "")); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); - }, - - initOnKeyListeners: () => { - // only install a listener if it is really needed - if ( - !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS - ) - return; - - document.addEventListener("keydown", (event) => { - // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; - // bail with special keys - if (event.altKey || event.ctrlKey || event.metaKey) return; - - if (!event.shiftKey) { - switch (event.key) { - case "ArrowLeft": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const prevLink = document.querySelector('link[rel="prev"]'); - if (prevLink && prevLink.href) { - window.location.href = prevLink.href; - event.preventDefault(); - } - break; - case "ArrowRight": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const nextLink = document.querySelector('link[rel="next"]'); - if (nextLink && nextLink.href) { - window.location.href = nextLink.href; - event.preventDefault(); - } - break; - } - } - - // some keyboard layouts may need Shift to get / - switch (event.key) { - case "/": - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; - Documentation.focusSearchBar(); - event.preventDefault(); - } - }); - }, -}; - -// quick alias for translations -const _ = Documentation.gettext; - -_ready(Documentation.init); diff --git a/static/api-docs/2024.1/Python-API/_static/favicon.ico b/static/api-docs/2024.1/Python-API/_static/favicon.ico deleted file mode 100644 index 46bfefd923..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/favicon.ico and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/file.png b/static/api-docs/2024.1/Python-API/_static/file.png deleted file mode 100644 index a858a410e4..0000000000 Binary files a/static/api-docs/2024.1/Python-API/_static/file.png and /dev/null differ diff --git a/static/api-docs/2024.1/Python-API/_static/jquery.js b/static/api-docs/2024.1/Python-API/_static/jquery.js deleted file mode 100644 index c4c6022f29..0000000000 --- a/static/api-docs/2024.1/Python-API/_static/jquery.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/static/api-docs/2024.1/Python-API/_static/js/html5shiv.min.js b/static/api-docs/2024.1/Python-API/_static/js/html5shiv.min.js deleted file mode 100644 index cd1c674f5e..0000000000 --- a/static/api-docs/2024.1/Python-API/_static/js/html5shiv.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** -* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed -*/ -!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/static/api-docs/2024.1/Python-API/_static/js/theme.js b/static/api-docs/2024.1/Python-API/_static/js/theme.js deleted file mode 100644 index 1fddb6ee4a..0000000000 --- a/static/api-docs/2024.1/Python-API/_static/js/theme.js +++ /dev/null @@ -1 +0,0 @@ -!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
    "),n("table.docutils.footnote").wrap("
    "),n("table.docutils.citation").wrap("
    "),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t { - const [docname, title, anchor, descr, score, filename] = result - return score - }, - */ - - // query matches the full name of an object - objNameMatch: 11, - // or matches in the last dotted part of the object name - objPartialMatch: 6, - // Additive scores depending on the priority of the object - objPrio: { - 0: 15, // used to be importantResults - 1: 5, // used to be objectResults - 2: -5, // used to be unimportantResults - }, - // Used when the priority is not in the mapping. - objPrioDefault: 0, - - // query found in title - title: 15, - partialTitle: 7, - // query found in terms - term: 5, - partialTerm: 2, - }; -} - -const _removeChildren = (element) => { - while (element && element.lastChild) element.removeChild(element.lastChild); -}; - -/** - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping - */ -const _escapeRegExp = (string) => - string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string - -const _displayItem = (item, searchTerms) => { - const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; - const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; - const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; - const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; - const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; - - const [docName, title, anchor, descr, score, _filename] = item; - - let listItem = document.createElement("li"); - let requestUrl; - let linkUrl; - if (docBuilder === "dirhtml") { - // dirhtml builder - let dirname = docName + "/"; - if (dirname.match(/\/index\/$/)) - dirname = dirname.substring(0, dirname.length - 6); - else if (dirname === "index/") dirname = ""; - requestUrl = docUrlRoot + dirname; - linkUrl = requestUrl; - } else { - // normal html builders - requestUrl = docUrlRoot + docName + docFileSuffix; - linkUrl = docName + docLinkSuffix; - } - let linkEl = listItem.appendChild(document.createElement("a")); - linkEl.href = linkUrl + anchor; - linkEl.dataset.score = score; - linkEl.innerHTML = title; - if (descr) - listItem.appendChild(document.createElement("span")).innerHTML = - " (" + descr + ")"; - else if (showSearchSummary) - fetch(requestUrl) - .then((responseData) => responseData.text()) - .then((data) => { - if (data) - listItem.appendChild( - Search.makeSearchSummary(data, searchTerms) - ); - }); - Search.output.appendChild(listItem); -}; -const _finishSearch = (resultCount) => { - Search.stopPulse(); - Search.title.innerText = _("Search Results"); - if (!resultCount) - Search.status.innerText = Documentation.gettext( - "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." - ); - else - Search.status.innerText = _( - `Search finished, found ${resultCount} page(s) matching the search query.` - ); -}; -const _displayNextItem = ( - results, - resultCount, - searchTerms -) => { - // results left, load the summary and display it - // this is intended to be dynamic (don't sub resultsCount) - if (results.length) { - _displayItem(results.pop(), searchTerms); - setTimeout( - () => _displayNextItem(results, resultCount, searchTerms), - 5 - ); - } - // search finished, update title and status message - else _finishSearch(resultCount); -}; - -/** - * Default splitQuery function. Can be overridden in ``sphinx.search`` with a - * custom function per language. - * - * The regular expression works by splitting the string on consecutive characters - * that are not Unicode letters, numbers, underscores, or emoji characters. - * This is the same as ``\W+`` in Python, preserving the surrogate pair area. - */ -if (typeof splitQuery === "undefined") { - var splitQuery = (query) => query - .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) - .filter(term => term) // remove remaining empty strings -} - -/** - * Search Module - */ -const Search = { - _index: null, - _queued_query: null, - _pulse_status: -1, - - htmlToText: (htmlString) => { - const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); - const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent !== undefined) return docContent.textContent; - console.warn( - "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." - ); - return ""; - }, - - init: () => { - const query = new URLSearchParams(window.location.search).get("q"); - document - .querySelectorAll('input[name="q"]') - .forEach((el) => (el.value = query)); - if (query) Search.performSearch(query); - }, - - loadIndex: (url) => - (document.body.appendChild(document.createElement("script")).src = url), - - setIndex: (index) => { - Search._index = index; - if (Search._queued_query !== null) { - const query = Search._queued_query; - Search._queued_query = null; - Search.query(query); - } - }, - - hasIndex: () => Search._index !== null, - - deferQuery: (query) => (Search._queued_query = query), - - stopPulse: () => (Search._pulse_status = -1), - - startPulse: () => { - if (Search._pulse_status >= 0) return; - - const pulse = () => { - Search._pulse_status = (Search._pulse_status + 1) % 4; - Search.dots.innerText = ".".repeat(Search._pulse_status); - if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); - }; - pulse(); - }, - - /** - * perform a search for something (or wait until index is loaded) - */ - performSearch: (query) => { - // create the required interface elements - const searchText = document.createElement("h2"); - searchText.textContent = _("Searching"); - const searchSummary = document.createElement("p"); - searchSummary.classList.add("search-summary"); - searchSummary.innerText = ""; - const searchList = document.createElement("ul"); - searchList.classList.add("search"); - - const out = document.getElementById("search-results"); - Search.title = out.appendChild(searchText); - Search.dots = Search.title.appendChild(document.createElement("span")); - Search.status = out.appendChild(searchSummary); - Search.output = out.appendChild(searchList); - - const searchProgress = document.getElementById("search-progress"); - // Some themes don't use the search progress node - if (searchProgress) { - searchProgress.innerText = _("Preparing search..."); - } - Search.startPulse(); - - // index already loaded, the browser was quick! - if (Search.hasIndex()) Search.query(query); - else Search.deferQuery(query); - }, - - /** - * execute search (requires search index to be loaded) - */ - query: (query) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - - // stem the search terms and add them to the correct list - const stemmer = new Stemmer(); - const searchTerms = new Set(); - const excludedTerms = new Set(); - const highlightTerms = new Set(); - const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); - splitQuery(query.trim()).forEach((queryTerm) => { - const queryTermLower = queryTerm.toLowerCase(); - - // maybe skip this "word" - // stopwords array is from language_data.js - if ( - stopwords.indexOf(queryTermLower) !== -1 || - queryTerm.match(/^\d+$/) - ) - return; - - // stem the word - let word = stemmer.stemWord(queryTermLower); - // select the correct list - if (word[0] === "-") excludedTerms.add(word.substr(1)); - else { - searchTerms.add(word); - highlightTerms.add(queryTermLower); - } - }); - - if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js - localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) - } - - // console.debug("SEARCH: searching for:"); - // console.info("required: ", [...searchTerms]); - // console.info("excluded: ", [...excludedTerms]); - - // array of [docname, title, anchor, descr, score, filename] - let results = []; - _removeChildren(document.getElementById("search-progress")); - - const queryLower = query.toLowerCase(); - for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { - for (const [file, id] of foundTitles) { - let score = Math.round(100 * queryLower.length / title.length) - results.push([ - docNames[file], - titles[file] !== title ? `${titles[file]} > ${title}` : title, - id !== null ? "#" + id : "", - null, - score, - filenames[file], - ]); - } - } - } - - // search for explicit entries in index directives - for (const [entry, foundEntries] of Object.entries(indexEntries)) { - if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id] of foundEntries) { - let score = Math.round(100 * queryLower.length / entry.length) - results.push([ - docNames[file], - titles[file], - id ? "#" + id : "", - null, - score, - filenames[file], - ]); - } - } - } - - // lookup as object - objectTerms.forEach((term) => - results.push(...Search.performObjectSearch(term, objectTerms)) - ); - - // lookup as search terms in fulltext - results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); - - // let the scorer override scores with a custom scoring function - if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); - - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort((a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; - }); - - // remove duplicate search results - // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept - let seen = new Set(); - results = results.reverse().reduce((acc, result) => { - let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); - if (!seen.has(resultStr)) { - acc.push(result); - seen.add(resultStr); - } - return acc; - }, []); - - results = results.reverse(); - - // for debugging - //Search.lastresults = results.slice(); // a copy - // console.info("search results:", Search.lastresults); - - // print the results - _displayNextItem(results, results.length, searchTerms); - }, - - /** - * search for object names - */ - performObjectSearch: (object, objectTerms) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const objects = Search._index.objects; - const objNames = Search._index.objnames; - const titles = Search._index.titles; - - const results = []; - - const objectSearchCallback = (prefix, match) => { - const name = match[4] - const fullname = (prefix ? prefix + "." : "") + name; - const fullnameLower = fullname.toLowerCase(); - if (fullnameLower.indexOf(object) < 0) return; - - let score = 0; - const parts = fullnameLower.split("."); - - // check for different match types: exact matches of full name or - // "last name" (i.e. last dotted part) - if (fullnameLower === object || parts.slice(-1)[0] === object) - score += Scorer.objNameMatch; - else if (parts.slice(-1)[0].indexOf(object) > -1) - score += Scorer.objPartialMatch; // matches in last name - - const objName = objNames[match[1]][2]; - const title = titles[match[0]]; - - // If more than one term searched for, we require other words to be - // found in the name/title/description - const otherTerms = new Set(objectTerms); - otherTerms.delete(object); - if (otherTerms.size > 0) { - const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); - if ( - [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) - ) - return; - } - - let anchor = match[3]; - if (anchor === "") anchor = fullname; - else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; - - const descr = objName + _(", in ") + title; - - // add custom score for some objects according to scorer - if (Scorer.objPrio.hasOwnProperty(match[2])) - score += Scorer.objPrio[match[2]]; - else score += Scorer.objPrioDefault; - - results.push([ - docNames[match[0]], - fullname, - "#" + anchor, - descr, - score, - filenames[match[0]], - ]); - }; - Object.keys(objects).forEach((prefix) => - objects[prefix].forEach((array) => - objectSearchCallback(prefix, array) - ) - ); - return results; - }, - - /** - * search for full-text terms in the index - */ - performTermsSearch: (searchTerms, excludedTerms) => { - // prepare search - const terms = Search._index.terms; - const titleTerms = Search._index.titleterms; - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - - const scoreMap = new Map(); - const fileMap = new Map(); - - // perform the search on the required terms - searchTerms.forEach((word) => { - const files = []; - const arr = [ - { files: terms[word], score: Scorer.term }, - { files: titleTerms[word], score: Scorer.title }, - ]; - // add support for partial matches - if (word.length > 2) { - const escapedWord = _escapeRegExp(word); - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord) && !terms[word]) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord) && !titleTerms[word]) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); - }); - } - - // no match but word was a required one - if (arr.every((record) => record.files === undefined)) return; - - // found search word in contents - arr.forEach((record) => { - if (record.files === undefined) return; - - let recordFiles = record.files; - if (recordFiles.length === undefined) recordFiles = [recordFiles]; - files.push(...recordFiles); - - // set score for the word in each file - recordFiles.forEach((file) => { - if (!scoreMap.has(file)) scoreMap.set(file, {}); - scoreMap.get(file)[word] = record.score; - }); - }); - - // create the mapping - files.forEach((file) => { - if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) - fileMap.get(file).push(word); - else fileMap.set(file, [word]); - }); - }); - - // now check if the files don't contain excluded terms - const results = []; - for (const [file, wordList] of fileMap) { - // check if all requirements are matched - - // as search terms with length < 3 are discarded - const filteredTermCount = [...searchTerms].filter( - (term) => term.length > 2 - ).length; - if ( - wordList.length !== searchTerms.size && - wordList.length !== filteredTermCount - ) - continue; - - // ensure that none of the excluded terms is in the search result - if ( - [...excludedTerms].some( - (term) => - terms[term] === file || - titleTerms[term] === file || - (terms[term] || []).includes(file) || - (titleTerms[term] || []).includes(file) - ) - ) - break; - - // select one (max) score for the file. - const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); - // add result to the result list - results.push([ - docNames[file], - titles[file], - "", - null, - score, - filenames[file], - ]); - } - return results; - }, - - /** - * helper function to return a node containing the - * search summary for a given text. keywords is a list - * of stemmed words. - */ - makeSearchSummary: (htmlText, keywords) => { - const text = Search.htmlToText(htmlText); - if (text === "") return null; - - const textLower = text.toLowerCase(); - const actualStartPosition = [...keywords] - .map((k) => textLower.indexOf(k.toLowerCase())) - .filter((i) => i > -1) - .slice(-1)[0]; - const startWithContext = Math.max(actualStartPosition - 120, 0); - - const top = startWithContext === 0 ? "" : "..."; - const tail = startWithContext + 240 < text.length ? "..." : ""; - - let summary = document.createElement("p"); - summary.classList.add("context"); - summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; - - return summary; - }, -}; - -_ready(Search.init); diff --git a/static/api-docs/2024.1/Python-API/_static/sphinx_highlight.js b/static/api-docs/2024.1/Python-API/_static/sphinx_highlight.js deleted file mode 100644 index aae669d7ea..0000000000 --- a/static/api-docs/2024.1/Python-API/_static/sphinx_highlight.js +++ /dev/null @@ -1,144 +0,0 @@ -/* Highlighting utilities for Sphinx HTML documentation. */ -"use strict"; - -const SPHINX_HIGHLIGHT_ENABLED = true - -/** - * highlight a given string on a node by wrapping it in - * span elements with the given class name. - */ -const _highlight = (node, addItems, text, className) => { - if (node.nodeType === Node.TEXT_NODE) { - const val = node.nodeValue; - const parent = node.parentNode; - const pos = val.toLowerCase().indexOf(text); - if ( - pos >= 0 && - !parent.classList.contains(className) && - !parent.classList.contains("nohighlight") - ) { - let span; - - const closestNode = parent.closest("body, svg, foreignObject"); - const isInSVG = closestNode && closestNode.matches("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.classList.add(className); - } - - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - parent.insertBefore( - span, - parent.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling - ) - ); - node.nodeValue = val.substr(0, pos); - - if (isInSVG) { - const rect = document.createElementNS( - "http://www.w3.org/2000/svg", - "rect" - ); - const bbox = parent.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute("class", className); - addItems.push({ parent: parent, target: rect }); - } - } - } else if (node.matches && !node.matches("button, select, textarea")) { - node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); - } -}; -const _highlightText = (thisNode, text, className) => { - let addItems = []; - _highlight(thisNode, addItems, text, className); - addItems.forEach((obj) => - obj.parent.insertAdjacentElement("beforebegin", obj.target) - ); -}; - -/** - * Small JavaScript module for the documentation. - */ -const SphinxHighlight = { - - /** - * highlight the search words provided in localstorage in the text - */ - highlightSearchWords: () => { - if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight - - // get and clear terms from localstorage - const url = new URL(window.location); - const highlight = - localStorage.getItem("sphinx_highlight_terms") - || url.searchParams.get("highlight") - || ""; - localStorage.removeItem("sphinx_highlight_terms") - url.searchParams.delete("highlight"); - window.history.replaceState({}, "", url); - - // get individual terms from highlight string - const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); - if (terms.length === 0) return; // nothing to do - - // There should never be more than one element matching "div.body" - const divBody = document.querySelectorAll("div.body"); - const body = divBody.length ? divBody[0] : document.querySelector("body"); - window.setTimeout(() => { - terms.forEach((term) => _highlightText(body, term, "highlighted")); - }, 10); - - const searchBox = document.getElementById("searchbox"); - if (searchBox === null) return; - searchBox.appendChild( - document - .createRange() - .createContextualFragment( - '" - ) - ); - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords: () => { - document - .querySelectorAll("#searchbox .highlight-link") - .forEach((el) => el.remove()); - document - .querySelectorAll("span.highlighted") - .forEach((el) => el.classList.remove("highlighted")); - localStorage.removeItem("sphinx_highlight_terms") - }, - - initEscapeListener: () => { - // only install a listener if it is really needed - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; - - document.addEventListener("keydown", (event) => { - // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; - // bail with special keys - if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; - if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { - SphinxHighlight.hideSearchWords(); - event.preventDefault(); - } - }); - }, -}; - -_ready(SphinxHighlight.highlightSearchWords); -_ready(SphinxHighlight.initEscapeListener); diff --git a/static/api-docs/2024.1/Quali-API/Quali cSharp API.html b/static/api-docs/2024.1/Quali-API/Quali cSharp API.html deleted file mode 100644 index faa0bfb2f1..0000000000 --- a/static/api-docs/2024.1/Quali-API/Quali cSharp API.html +++ /dev/null @@ -1,744 +0,0 @@ -Quali C# API Guide
    - 2024.1.0 Quali API C# Reference Guide -


    back to TOC
    back to TOC
    back to TOC

    Get Suite Template Details

    Retrieves properties of the specified automation suite template.

    - Syntax -

    void GetSuiteTemplateDetails(string suiteTemplateName, out string description, out string type, out string owner, out DateTime createDate, out DateTime modificationDate, out EmailNotifications emailNotifications, out double removeJobsFromQueueAfter, out bool endReservationOnEnd, out string[,] jobsDetails, out string[,] jobExecutionServers, out string[,] topologyGlobalInputs, out string[,] topologyRequirementsInputs, out string[,] topologyAdditionalInputs, out string[,] jobsTestPaths, out string[,] jobsTestParameters)

    - Parameters -

    TypeNameDescription
    stringSuite Template Name
    the name of the suite template that is used as a container for the suite
    out stringDescription
    Displays the automation suite description.
    out stringType
    Indicates the automation suite type.
    out stringOwner
    Indicates the name of the user who created the automation suite.
    out DateTimeCreate Date
    Indicates the create date and time of the automation suite.
    out DateTimeModification Date
    Indicates the last update date and time of the automation suite.
    out stringEmail Notifications
    Indicates notification trigger settings: None, Errors, Suite and Errors, or All.
    out intRemove Jobs From Queue After
    - Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. - -1 Indicates that queue timeout is disabled. -
    out boolEnd Reservation On End
    Indicates if the suite's reservation was set to end automatically upon execution completion.
    out string[,]Jobs Details
    Output is a 9 column matrix with Job Index, Name, Description, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Topology Name, and Duration Time Buffer as the column headings. - The Index column will display a run of unique numbers. - The suite Name column indicates the name of the parent automation suite. - The Name column indicates the name of each job. - The Description column indicates the description of each job. - The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) - The Estimated Duration column Indicates the number of minutes entered as the job's estimated duration. - -1 indicates that the duration will be calculated automatically according to the test durations. - The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. - The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. - The Topology Name column indicates the name of attached topology. - Duration Time Buffer indicates the number of minutes to be added to the duration estimation. -
    out string[,]Job Execution Servers
    Indicates the execution servers for each job - Output is a two column matrix with Job Index and Execution Server as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If a job has multiple execution servers, there will be a row with the same index value for each required execution server. -
    out string[,]Topology Global Inputs
    Indicates the topology’s input parameters and parameter values. - Output is a four column matrix with Job Index, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Topology Requirements Inputs
    Indicates requirements for specific topology resources. - Output is a six column matrix with Job Index, Resource Path, Name, Value, Type, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. The Resource Path column indicates the full path to the added topology resources. - The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Topology Additional Inputs
    Indicates additional resource input parameters and values for the attached topology. - Output is a five column matrix with Job Index, Resource Path, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Resource Path column indicates the full path to the added topology resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Jobs Test Paths
    Provide the full path to each of the job's tests. - Output is a four column matrix with Job Index, Test Index, Test Path and Test Estimated Duration as the column headers. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. - The test path column should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. -
    out string[,]Jobs Test Parameters
    Parameter information for each of the job's tests. - Output is a four column matrix with Job Index, Test Index, Parameter Name and Parameter Value as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column corresponds to the value in the Test Paths matrix. - Tests with multiple parameters will have a row for each parameter, with the same Test Index value over multiple rows. -
    out stringExisting Reservation ID
    Specify existing reservation ID to use for the created suite. - This will only be possible for suites with one job and no topologies. - Note that the system doesn’t validate the number of jobs attached to the same reservation id. Validation if needed should be applied by the clients of the API. -

    Example

    
    -        string description, type, owner;
    -        DateTime createDate, modificationDate;
    -        EmailNotifications emailNotifications;
    -        double removeJobsFromQueueAfter;
    -        bool endReservationOnEnd;
    -        string[,] jobsDetails, jobExecutionServers, topologyGlobalInputs, topologyRequirementsInputs, topologyAdditionalInputs, jobsTestPaths, jobsTestParameters;
    -
    -        api.GetSuiteTemplateDetails("testcase 10", out description, out type, out owner, out createDate, out modificationDate, out emailNotifications, out removeJobsFromQueueAfter, out endReservationOnEnd, out jobsDetails, out jobExecutionServers, out topologyGlobalInputs, out topologyRequirementsInputs, out topologyAdditionalInputs, out jobsTestPaths, out jobsTestParameters);
    -      

    back to TOC

    Enqueue Custom SuiteEnqueue Custom Suite

    Create a new custom automation suite and add it to queue

    - Syntax -

    void EnqueueCustomSuite(string suiteTemplateName, string suiteName, string description, string type, EmailNotifications emailNotification, double removeJobsFromQueueAfter, bool endReservationOnEnd, string[,] jobsDetails, string[,] jobExecutionServers, string[,] topologyGlobalInputs, string[,] topologyRequirementsInputs, string[,] topologyAdditionalInputs, string[,] jobsTestPaths, string[,] jobsTestParameters, string existingReservationId, out string suiteId)

    - Parameters -

    TypeNameDescription
    stringSuite Template Name
    Specify the name of the suite template to use as a container for the suite. Empty value indicates an adHoc suite.
    stringSuite Name
    Specify the name of the suite template to use as a container for the suite. Empty value indicates an adHoc suite.
    stringDescription
    Specify the automation suite description.
    stringType
    Specify the automation suite type. Default value: TestShell
    stringEmail Notifications
    Specify notification trigger settings: None, Errors Only, Suite and Errors, or All.
    intRemove Jobs From Queue After
    Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. -1 Indicates that queue timeout is disabled.
    boolEnd Reservation On End
    Specify if the suite's reservation should end automatically upon execution completion.
    string[,]Jobs Details
    Input is an 9 column matrix with Job Index, name, Description, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Topology Name, and Duration Time Buffer as the column headings. - The Index column will display a run of unique numbers. - The Suite Name column indicates the name of the parent automation suite. - The Name column indicates the name of each job. - The Description column indicates the description of each job. - The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) - The Estimated Duration column Indicates the number of minutes entered as the job's estimated duration. - -1 indicates that the duration will be calculated automatically according to the test durations. - The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. - The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. - The Topology Name column indicates the name of attached topology. - Duration Time Buffer indicates the number of minutes to be added to the duration estimation. -
    string[,]Job Execution Servers
    Input should be a two column matrix with Job Index and Execution Server as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - In the Job Execution Server column, specify the selected execution server that ran the job. - If a job has multiple execution servers, there will be a row with the same index value for each required execution server. -
    string[,]Topology Global Inputs
    Provide an optional list of input parameters and parameter values for the attached topology. - Input should be a four column matrix with Job Index, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    string[,]Topology Requirements Inputs
    Specify requirements for specific resources that must be included in the topology (Optional). - Input should be a six column matrix with Job Index, Resource Path, Name, Value, Type, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Resource Path column indicates the full path to the added topology resources. - The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    string[,]Topology Additional Inputs
    Specify an optional list of additional input parameters and values for the attached topology. - Input is a five column matrix with Job Index, Resource Path, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Resource Path column indicates the full path to the added topology resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    string[,]Jobs Test Paths
    Specify the full path to each of the job's tests. - Input is a four column matrix with Job Index, Test Index, Test Path and Test Estimated Duration. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. - The test path column should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. -
    string[,]Jobs Test Parameters
    Specify parameter information for each of the job's tests. - Input is a four column matrix with Job Index, Test Index, Parameter Name and Parameter Value as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column corresponds to the value in the Test Paths matrix. - Tests with multiple parameters will have a row for each parameter, with the same Test Index value over multiple rows. -
    stringExisting Reservation ID
    Specify existing reservation ID to use for the created suite. - This will only be possible for suites with one job and no topologies. - Note that the system doesn’t validate the number of jobs attached to the same reservation id. Validation if needed should be applied by the clients of the API. -
    out stringSuite Id
    The ID of the automation suite that was created.

    Example

    
    -        string suiteId;
    -
    -        api.EnqueueCustomSuite("", "Ad Hoc 1", "This is a one time network test", "TestShell", EmailNotifications.ErrorsOnly, 5, true,
    -        // Jobs Details
    -        new string[,] { { "Job Index", "Name", "Description", "Logging Profile", "Estimated Duration", "Stop On Fail", "Stop On Error", "Topology Name", "Duration Time Buffer"},
    -        { "1", "job1", "", "None", "5", "false", "false", "", "10" }  },
    -        // Job Execution Servers
    -        new string[,] { { "Job Index", "Execution Server"} },
    -        //Topology Global Inputs
    -        new string[,] { {"Job Index", "Name", "Value", "Possible Values"} },
    -        //Topology Requirements Inputs
    -        new string[,] { {"Job Index", "Resource Path", "Name", "Value", "Type", "Possible Values" } },
    -        // Topology Additional Inputs
    -        new string[,] { { "Job Index", "Resource Path", "Name", "Value", "Possible Values" } },
    -        // Job Test Paths
    -        new string[,] { {"Job Index", "Test Index", "Test Path", "Test Estimated Duration" },
    -        {"1", "1", "TestShell\\Tests\\Shared\\TestWithInputs", "5" }},
    -        // Job Test Parameters
    -        new string[,] { {"Job Index", "Test Index", "Parameter Name", "Parameter Value" },
    -                        { "1",        "1",          "InStr",          "a"},
    -                        { "1",        "1",          "InNum",          "1"},
    -                        { "1",        "1",          "InStrVect",      "['b', 'c', 'd']"},
    -                        { "1",        "1",          "InNumVect",      "[2, 3, 4]"},
    -                        { "1",        "1",          "InStrMat",       "['e', 'f', 'g';'h', 'i', 'j';]"},
    -                        { "1",        "1",          "InNumMat",       "[5, 6, 7;8, 9, 10;]"}},
    -        null, out suiteId);
    -      

    Output

  • suiteId
  • 
    -        d071cd61-f958-4002-8149-a433c6fc458a
    -      

    back to TOC

    Get Suite Details

    Retrieves the full details of a specific automation suite instance

    - Syntax -

    void GetSuiteDetails(string suiteId, out string suiteTemplateName, out string suiteName, out string description, out string type, out string owner, out double removeJobsFromQueueAfter, out bool endReservationOnEnd, out string[,] jobsDetails, out string[,] jobExecutionServers, out string[,] topologyGlobalInputs, out string[,] topologyRequirementsInputs, out string[,] topologyAdditionalInputs, out string[,] jobsTestDetails, out string[,] jobsTestParameters, out string suiteStatus, out string suiteResult, out int remainingJobs, out DateTime startTime, out DateTime endTime)

    - Parameters -

    TypeNameDescription
    stringSuite Id
    Specify the ID of the automation suite.
    out stringSuite Template Name
    the name of the suite template that is used as a container for the suite
    out stringSuite Name
    Indicates the name of the automation suite.
    out stringDescription
    Displays the automation suite description.
    out stringType
    Indicates the automation suite type.
    out stringOwner
    Indicates the name of the user who created the automation suite.
    out stringEmail Notifications
    Indicates notification trigger settings: None, Errors, Suite and Errors, or All.
    out intRemove Jobs From Queue After
    Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. - -1 Indicates that queue timeout is disabled. -
    out boolEnd Reservation On End
    Indicates if the suite's reservation was set to end automatically upon execution completion.
    out string[,]Jobs Details
    Output is an 11 column matrix with Job Index, Name, Description, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Topology Name, Duration Time Buffer, Job State and Job Result as the column headings. - The Index column will display a run of unique numbers. - The Suite Name column indicates the name of the parent automation suite. - The Name column indicates the name of each job. - The Description column indicates the description of each job. - The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) - The Estimated Duration column indicates the number of minutes entered as the job's estimated duration. -1 indicates that the duration will be calculated automatically according to the test durations. - The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. - The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. - The Topology Name column indicates the name of attached topology. - Duration Time Buffer indicates the number of minutes to be added to the duration estimation. - The job state indicates the current state of the job. - The job result indicates the result of the job execution. -
    out string[,]Job Execution Servers
    Indicates the execution servers for each job - Output is a two column matrix with Job Index and Execution Server as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If a job has multiple execution servers, there will be a row with the same index value for each required execution server. -
    out string[,]Topology Global Inputs
    Indicates the topology’s input parameters and parameter values. - Output is a four column matrix with Job Index, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Topology Requirements Inputs
    Indicates requirements for specific topology resources. - Output is a 6 column matrix with Job Index, Resource Path, Name, Value, Type, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. The Resource Path column indicates the full path to the added topology resources. - The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Topology Additional Inputs
    Indicates additional resource input parameters and values for the attached topology. - Output is a five column matrix with Job Index, Resource Path, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Resource Path column indicates the full path to the added topology resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Jobs Test Details
    Information about the tests that were selected for this job. - Output is a nine column matrix with Job Index, Test Index, Test Path, Test Estimated Duration, State, Start Time, End Time, Result, and Report ID as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. - The Test Path column indicates the location of each test. - The State column indicates the current status for each test. - The Start Time and End Time columns indicate the execution start and end times for each test. - The Result column indicates the test status. - Concatenate the Report ID column value to the relevant IP address to create a URL to the test report. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. -
    out string[,]Jobs Test Parameters
    Parameter information for each of the job's tests. - Output is a four column matrix with Job Index, Test Index, Parameter Name and Parameter Value as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column corresponds to the value in the Test Paths matrix. - Tests with multiple parameters will have a row for each parameter, with the same Test Index value over multiple rows. -
    out stringSuite Status
    Indicates the current status of the automation suite: Pending, Started, Ended or Failed to Start
    out stringSuite Result
    Indicate the result of the suite: Error, Failed, Succeeded
    out stringRemaining Jobs
    Indicates the number of uncompleted jobs
    out DateTimeStart Time
    Indicates the date and time when the suite began execution.
    out DateTimeEnd Time
    Indicates the date and time when the suite completed its execution. The value will be null if the execution hasn't yet ended.

    Example

    
    -        string suiteTemplateName, suiteName, description, type, owner, suiteStatus, suiteResult;
    -        double removeJobsFromQueueAfter;
    -        bool endReservationOnEnd;
    -        string[,] jobsDetails, jobExecutionServers, topologyGlobalInputs, topologyRequirementsInputs, topologyAdditionalInputs, jobsTestDetails, jobsTestParameters;
    -        int remainingJobs;
    -        DateTime startTime, endTime;
    -
    -        api.GetSuiteDetails("d071cd61-f958-4002-8149-a433c6fc458a", out suiteTemplateName, out suiteName, out description, out type, out owner, out removeJobsFromQueueAfter, out endReservationOnEnd, out jobsDetails, out jobExecutionServers, out topologyGlobalInputs, out topologyRequirementsInputs, out topologyAdditionalInputs, out jobsTestDetails, out jobsTestParameters, out suiteStatus, out suiteResult, out remainingJobs, out startTime, out endTime);
    -      

    back to TOC
    back to TOC
    back to TOC
    back to TOC

    Enqueue Custom Job

    Creates a new custom job, attaches it to a new AdHoc suite, and adds it to the job queue.

    - Syntax -

    void EnqueueCustomJob(string name, string description, string[] executionServers, LoggingProfile loggingProfile, double estimatedDuration, bool stopOnFail, bool stopOnError, string[,] testPaths, string[,] testParameters, string topologyName, string[,] topologyGlobalInputs, string[,] topologyRequirementsInputs, string[,] topologyAdditionalInputs, double durationTimeBuffer, EmailNotifications emailNotifications, string type, out string jobId)

    - Parameters -

    TypeNameDescription
    stringJob Name
    Specify the name of the job. (Limited to 50 characters)
    stringDescription
    Provide a short description of the job. (Limited to 500 characters)
    string[,]Execution Servers
    Specify a list of one or more execution servers for running the job. - Leave empty to run the job on any available execution server. -
    stringLogging Profile
    Indicate which logging profile to use when executing the job's tests. - None, All, Results, Measurements and Results -
    intEstimated Duration
    Specify the time (in minutes) it will take to complete the job - -1 indicates that the duration will be calculated automatically according to the test durations. -
    boolStop On Fail
    Indicate whether to stop the job execution if one of the tests fails.
    boolStop On Error
    Indicate whether to abort the job if any test ends with an error.
    string[,]Test Paths
    Provide the full path to each of the job's tests. - The input should be a three column matrix with Index, Test Path, and Test Estimated Duration as the column headings. - If you omit the column headings, use empty values for the top row. - The index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. - The test path column should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. -
    string[,]Test Parameters
    Specify the input parameters for each of the job's tests. - Input should be a three column matrix with Index, Parameter Name, and Parameter Value as the column headings. - If you omit the column headings, leave an empty row. - The Index column corresponds to the test index from the Test Path matrix. - If a test has multiple inputs, there will be a row with the same index value for each required parameter. -
    stringTopology Name
    Specify which topology to attach to the job (Optional)
    string[,]Topology Global Inputs
    Provide a List of input parameters and parameter values for the attached topology (Optional). - Input should be a three column matrix with Name, Value, and Possible Values as the column headings. - If you omit the column headings, use empty values for the top row. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. This column is only relevant when retrieving information. -
    string[,]Topology Requirements Inputs
    Provide requirements for specific resources that must be included in the topology (Optional). - Input should be a five column matrix with Resource Path, Name, Value, Type, and Possible Values as the column headings. - If you omit the column headings, use empty values for the top row. - In the Resource Path column, specify the full path to the required resources. - In the Type column, indicate whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. This column is only relevant when retrieving information. -
    string[,]Topology Additional Inputs
    Provide a list of additional input parameters and values for the attached topology (Optional). - Input should be a four column matrix with Resource Path, Name, Value, and Possible Values as the column headings. - If you omit the column headings, use empty values for the top row. - In the Resource Path column, specify the full path to the required resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. This column is only relevant when retrieving information. -
    intDuration Time Buffer
    Indicates the number of minutes to be added to the duration estimation. - Note that this parameter is used only when "Estimated Duration" is calculated automatically. -
    stringEmail Notification
    Specify notification trigger settings: None, Errors Only, Suite and Errors, or All.
    stringType
    Indicates the automation suite type. Default value: TestShell

    Example

    
    -        string jobId;
    -
    -        api.EnqueueCustomJob("job1", "job description", null, QualiAPI.UserModel.LoggingProfile.Results, 5, false, false,
    -        // test paths
    -        new string[,] { { "Index", "Test Path" }, { "1", "TestShell\\Tests\\Shared\\TestWithInputs" }},
    -        // test params
    -        new string[,] { { "Index", "Parameter Name", "Parameter Value" },
    -                        { "1"    , "InStr",          "a"},
    -                        { "2"    , "InNum",          "1"},
    -                        { "3"    , "InStrVect",      "['b', 'c', 'd']"},
    -                        { "4"    , "InNumVect",      "[2, 3, 4]"},
    -                        { "5"    , "InStrMat",       "['e', 'f', 'g';'h', 'i', 'j';]"},
    -                        { "6"    , "InNumMat",       "[5, 6, 7;8, 9, 10;]"}
    -        },
    -        null,
    -        // topology global inputs
    -        new string[,] { { "Name", "Value", "Possible Values" } },
    -        // topology requirements inputs
    -        new string[,] { { "Resource Path", "Name", "Value", "Type", "Possible Values" } },
    -        // topology additional inputs
    -        new string[,] { { "Resource Path", "Name", "Value", "Possible Values" } },
    -        3, QualiAPI.UserModel.EmailNotifications.None, "TestShell",out jobId);
    -      

    Output

  • jobId
  • 
    -        "001f4d30-31e1-4e56-b02e-d332c6fb91e4"	
    -      

    back to TOC

    Get Job Details

    Retrieves all details and parameters for a specified job.

    - Syntax -

    void GetJobDetails(string jobId, out string suiteId, out string name, out string description, out string ownerName, out JobState jobState, out JobResult jobResult, out string jobFailureDescription, out DateTime enqueueTime, out DateTime startTime, out DateTime endTime, out double elapsedTime, out double estimatedDuration, out double durationTimeBuffer, out bool useAnyExecutionServer, out string[] executionServers, out string selectedExecutionServer, out LoggingProfile loggingProfile, out bool stopOnFail, out bool stopOnError, out DateTime expectedStartTime, out string[,] testDetails, out string[,] testParameters, out string topologyName, out string[,] topologyGlobalInputs, out string[,] topologyRequirementsInputs, out string[,] topologyAdditionalInputs)

    - Parameters -

    TypeNameDescription
    stringJob Id
    Specify the ID of the job to retrieve
    out stringJob Name
    The name of the job associated with the specified job ID. (Limited to 50 characters)
    out stringDescription
    The description of the job associated with the specified job ID. (Limited to 500 characters)
    out stringOwner Name
    The name of the user who created this job.
    out stringJob State
    The current state of the job. Pending, Scheduled, Running, Done, Stopped, Cancelled or Failed to Start.
    out stringJob Result
    The result of the job execution: Completed, Passed, Failed, Ended With Error, Ended With An Exception, Manually Stopped, Terminated, or Not Started
    out stringJob Failure Description
    A short description of the reason for a failed execution. This value will be empty for a running job or for completed jobs that ran without problems.
    out DateTimeEnqueue Time
    The date and time when the job was enqueued.
    out DateTimeStart Time
    The date and time when the job started running. The value will be null if the job is still Pending or Failed to Start.
    out DateTimeEnd Time
    The date and time when the job stopped running. The value will be null if the job has not yet ended.
    out intElapsed Time
    The number of minutes that have elapsed since the job started. - Returns -1 if the job hasn't started yet. - Returns the job duration (in minutes) if the job has already finished. -
    out boolUse Any Execution Server
    Indicates that the job owner allowed the job to run on any available server.
    out string[,]Execution Servers
    A list of Execution server names that were selected by the user for this job. This parameter will have values only if the job is still pending.
    out stringSelected Execution Server
    The execution server that was selected to run the job.
    out stringLogging Profile
    The selected logging profile for this job’s tests. None, All, Results, Measurements and Results
    out boolStop On Fail
    Indicate whether to stop the job execution if one of the tests fails.
    out boolStop On Error
    Indicate whether to abort the job if any test ends with an error.
    out string[,]Test Details
    Information about the tests that were selected for this job. - Output is an eight column matrix with Index, Test Path, Test Estimated Duration, State, Start Time, End Time, Result, and Report ID as the column headings. - The Index column will display a run of unique numbers. - The Test Path column indicates the location of each test. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. - The State column indicates the current status for each test. - The Start Time and End Time columns indicate the execution start and end times for each test. - The Result column indicates the test status. - Concatenate the Report ID column value to the relevant IP address to create a URL to the test report. -
    out string[,]Test Parameters
    Parameter information for each of the job's tests. - Output will be a three column matrix with Index, Parameter Name and Parameter Value as the column headings. - The Index column corresponds to the index value in the Test Details matrix. - Tests with multiple parameters will have a row for each parameter, with the same index value over multiple rows. -
    out stringTopology Name
    Indicates the name of the attached topology.
    out string[,]Topology Global Inputs
    Indicates the topology’s input parameters and parameter values. - Output is a three column matrix with Name, Value, and Possible Values as the column headings. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Topology Requirements Inputs
    Indicates requirements for specific topology resources. - Output is a five column matrix with Resource Path, Name, Value, Type, and Possible Values as the column headings. - The Resource Path column indicates the full path to the added topology resources. - The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Topology Additional Inputs
    Indicates additional resource input parameters and values for the attached topology. - Output is a four column matrix with Resource Path, Name, Value, and Possible Values as the column headings. - The Resource Path column indicates the full path to the added topology resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out intDuration Time Buffer
    Indicates the number of minutes to be added to the duration estimation.
    out DateTimeExpected Start Time
    The expected execution start date and time for a job that is currently pending.
    out stringSuite Id
    The ID of the suite that was used to create this job.

    Example

    
    -        string suiteId, name, description, ownerName, jobFailureDescription, selectedExecutionServer, topologyName;
    -        JobState jobState;
    -        JobResult jobResult;
    -        DateTime enqueueTime, startTime, endTime, expectedStartTime;
    -        double elapsedTime, estimatedDuration, durationTimeBuffer;
    -        bool useAnyExecutionServer, stopOnFail, stopOnError;
    -        string[] executionServers;
    -        LoggingProfile loggingProfile;
    -        string[,] testDetails, testParameters, topologyGlobalInputs, topologyRequirementsInputs, topologyAdditionalInputs;
    -
    -        api.GetJobDetails("c0b859fb-554b-43c5-be04-9d3d55b818f0", out suiteId, out name, out description, out ownerName, out jobState, out jobResult, out jobFailureDescription, out enqueueTime, out startTime, out endTime, out elapsedTime, out estimatedDuration, out durationTimeBuffer, out useAnyExecutionServer, out executionServers, out selectedExecutionServer, out loggingProfile, out stopOnFail, out stopOnError, out expectedStartTime, out testDetails, out testParameters, out topologyName, out topologyGlobalInputs, out topologyRequirementsInputs, out topologyAdditionalInputs);
    -      

    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    back to TOC
    \ No newline at end of file diff --git a/static/api-docs/2024.1/Python-API/.buildinfo b/static/api-docs/latest/Python-API/.buildinfo similarity index 100% rename from static/api-docs/2024.1/Python-API/.buildinfo rename to static/api-docs/latest/Python-API/.buildinfo diff --git a/static/api-docs/2024.1/Python-API/_modules/cloudshell/api/cloudshell_api.html b/static/api-docs/latest/Python-API/_modules/cloudshell/api/cloudshell_api.html similarity index 100% rename from static/api-docs/2024.1/Python-API/_modules/cloudshell/api/cloudshell_api.html rename to static/api-docs/latest/Python-API/_modules/cloudshell/api/cloudshell_api.html diff --git a/static/api-docs/2024.1/Python-API/_modules/cloudshell/api/common_cloudshell_api.html b/static/api-docs/latest/Python-API/_modules/cloudshell/api/common_cloudshell_api.html similarity index 100% rename from static/api-docs/2024.1/Python-API/_modules/cloudshell/api/common_cloudshell_api.html rename to static/api-docs/latest/Python-API/_modules/cloudshell/api/common_cloudshell_api.html diff --git a/static/api-docs/2024.1/Python-API/_modules/index.html b/static/api-docs/latest/Python-API/_modules/index.html similarity index 100% rename from static/api-docs/2024.1/Python-API/_modules/index.html rename to static/api-docs/latest/Python-API/_modules/index.html diff --git a/static/api-docs/2023.3/Python-API/_sources/cloudshell.api.rst.txt b/static/api-docs/latest/Python-API/_sources/cloudshell.api.rst.txt similarity index 100% rename from static/api-docs/2023.3/Python-API/_sources/cloudshell.api.rst.txt rename to static/api-docs/latest/Python-API/_sources/cloudshell.api.rst.txt diff --git a/static/api-docs/2023.3/Python-API/_sources/cloudshell.helpers.rst.txt b/static/api-docs/latest/Python-API/_sources/cloudshell.helpers.rst.txt similarity index 100% rename from static/api-docs/2023.3/Python-API/_sources/cloudshell.helpers.rst.txt rename to static/api-docs/latest/Python-API/_sources/cloudshell.helpers.rst.txt diff --git a/static/api-docs/2023.3/Python-API/_sources/cloudshell.rst.txt b/static/api-docs/latest/Python-API/_sources/cloudshell.rst.txt similarity index 100% rename from static/api-docs/2023.3/Python-API/_sources/cloudshell.rst.txt rename to static/api-docs/latest/Python-API/_sources/cloudshell.rst.txt diff --git a/static/api-docs/2023.3/Python-API/_sources/index.rst.txt b/static/api-docs/latest/Python-API/_sources/index.rst.txt similarity index 100% rename from static/api-docs/2023.3/Python-API/_sources/index.rst.txt rename to static/api-docs/latest/Python-API/_sources/index.rst.txt diff --git a/static/api-docs/2024.1/Python-API/_static/_sphinx_javascript_frameworks_compat.js b/static/api-docs/latest/Python-API/_static/_sphinx_javascript_frameworks_compat.js similarity index 100% rename from static/api-docs/2024.1/Python-API/_static/_sphinx_javascript_frameworks_compat.js rename to static/api-docs/latest/Python-API/_static/_sphinx_javascript_frameworks_compat.js diff --git a/static/api-docs/2024.1/Python-API/_static/basic.css b/static/api-docs/latest/Python-API/_static/basic.css similarity index 100% rename from static/api-docs/2024.1/Python-API/_static/basic.css rename to static/api-docs/latest/Python-API/_static/basic.css diff --git a/static/api-docs/2023.3/Python-API/_static/css/badge_only.css b/static/api-docs/latest/Python-API/_static/css/badge_only.css similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/badge_only.css rename to static/api-docs/latest/Python-API/_static/css/badge_only.css diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/Roboto-Slab-Bold.woff b/static/api-docs/latest/Python-API/_static/css/fonts/Roboto-Slab-Bold.woff similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/Roboto-Slab-Bold.woff rename to static/api-docs/latest/Python-API/_static/css/fonts/Roboto-Slab-Bold.woff diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/Roboto-Slab-Bold.woff2 b/static/api-docs/latest/Python-API/_static/css/fonts/Roboto-Slab-Bold.woff2 similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/Roboto-Slab-Bold.woff2 rename to static/api-docs/latest/Python-API/_static/css/fonts/Roboto-Slab-Bold.woff2 diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/Roboto-Slab-Regular.woff b/static/api-docs/latest/Python-API/_static/css/fonts/Roboto-Slab-Regular.woff similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/Roboto-Slab-Regular.woff rename to static/api-docs/latest/Python-API/_static/css/fonts/Roboto-Slab-Regular.woff diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/Roboto-Slab-Regular.woff2 b/static/api-docs/latest/Python-API/_static/css/fonts/Roboto-Slab-Regular.woff2 similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/Roboto-Slab-Regular.woff2 rename to static/api-docs/latest/Python-API/_static/css/fonts/Roboto-Slab-Regular.woff2 diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/fontawesome-webfont.eot b/static/api-docs/latest/Python-API/_static/css/fonts/fontawesome-webfont.eot similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/fontawesome-webfont.eot rename to static/api-docs/latest/Python-API/_static/css/fonts/fontawesome-webfont.eot diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/fontawesome-webfont.svg b/static/api-docs/latest/Python-API/_static/css/fonts/fontawesome-webfont.svg similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/fontawesome-webfont.svg rename to static/api-docs/latest/Python-API/_static/css/fonts/fontawesome-webfont.svg diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/fontawesome-webfont.ttf b/static/api-docs/latest/Python-API/_static/css/fonts/fontawesome-webfont.ttf similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/fontawesome-webfont.ttf rename to static/api-docs/latest/Python-API/_static/css/fonts/fontawesome-webfont.ttf diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/fontawesome-webfont.woff b/static/api-docs/latest/Python-API/_static/css/fonts/fontawesome-webfont.woff similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/fontawesome-webfont.woff rename to static/api-docs/latest/Python-API/_static/css/fonts/fontawesome-webfont.woff diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/fontawesome-webfont.woff2 b/static/api-docs/latest/Python-API/_static/css/fonts/fontawesome-webfont.woff2 similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/fontawesome-webfont.woff2 rename to static/api-docs/latest/Python-API/_static/css/fonts/fontawesome-webfont.woff2 diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/lato-bold-italic.woff b/static/api-docs/latest/Python-API/_static/css/fonts/lato-bold-italic.woff similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/lato-bold-italic.woff rename to static/api-docs/latest/Python-API/_static/css/fonts/lato-bold-italic.woff diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/lato-bold-italic.woff2 b/static/api-docs/latest/Python-API/_static/css/fonts/lato-bold-italic.woff2 similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/lato-bold-italic.woff2 rename to static/api-docs/latest/Python-API/_static/css/fonts/lato-bold-italic.woff2 diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/lato-bold.woff b/static/api-docs/latest/Python-API/_static/css/fonts/lato-bold.woff similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/lato-bold.woff rename to static/api-docs/latest/Python-API/_static/css/fonts/lato-bold.woff diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/lato-bold.woff2 b/static/api-docs/latest/Python-API/_static/css/fonts/lato-bold.woff2 similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/lato-bold.woff2 rename to static/api-docs/latest/Python-API/_static/css/fonts/lato-bold.woff2 diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/lato-normal-italic.woff b/static/api-docs/latest/Python-API/_static/css/fonts/lato-normal-italic.woff similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/lato-normal-italic.woff rename to static/api-docs/latest/Python-API/_static/css/fonts/lato-normal-italic.woff diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/lato-normal-italic.woff2 b/static/api-docs/latest/Python-API/_static/css/fonts/lato-normal-italic.woff2 similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/lato-normal-italic.woff2 rename to static/api-docs/latest/Python-API/_static/css/fonts/lato-normal-italic.woff2 diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/lato-normal.woff b/static/api-docs/latest/Python-API/_static/css/fonts/lato-normal.woff similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/lato-normal.woff rename to static/api-docs/latest/Python-API/_static/css/fonts/lato-normal.woff diff --git a/static/api-docs/2023.3/Python-API/_static/css/fonts/lato-normal.woff2 b/static/api-docs/latest/Python-API/_static/css/fonts/lato-normal.woff2 similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/css/fonts/lato-normal.woff2 rename to static/api-docs/latest/Python-API/_static/css/fonts/lato-normal.woff2 diff --git a/static/api-docs/2024.1/Python-API/_static/css/theme.css b/static/api-docs/latest/Python-API/_static/css/theme.css similarity index 100% rename from static/api-docs/2024.1/Python-API/_static/css/theme.css rename to static/api-docs/latest/Python-API/_static/css/theme.css diff --git a/static/api-docs/2023.3/Python-API/_static/doctools.js b/static/api-docs/latest/Python-API/_static/doctools.js similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/doctools.js rename to static/api-docs/latest/Python-API/_static/doctools.js diff --git a/static/api-docs/2024.1/Python-API/_static/documentation_options.js b/static/api-docs/latest/Python-API/_static/documentation_options.js similarity index 100% rename from static/api-docs/2024.1/Python-API/_static/documentation_options.js rename to static/api-docs/latest/Python-API/_static/documentation_options.js diff --git a/static/api-docs/2023.3/Python-API/_static/favicon.ico b/static/api-docs/latest/Python-API/_static/favicon.ico similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/favicon.ico rename to static/api-docs/latest/Python-API/_static/favicon.ico diff --git a/static/api-docs/2023.3/Python-API/_static/file.png b/static/api-docs/latest/Python-API/_static/file.png similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/file.png rename to static/api-docs/latest/Python-API/_static/file.png diff --git a/static/api-docs/2023.3/Python-API/_static/jquery.js b/static/api-docs/latest/Python-API/_static/jquery.js similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/jquery.js rename to static/api-docs/latest/Python-API/_static/jquery.js diff --git a/static/api-docs/2023.3/Python-API/_static/js/badge_only.js b/static/api-docs/latest/Python-API/_static/js/badge_only.js similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/js/badge_only.js rename to static/api-docs/latest/Python-API/_static/js/badge_only.js diff --git a/static/api-docs/2023.3/Python-API/_static/js/html5shiv-printshiv.min.js b/static/api-docs/latest/Python-API/_static/js/html5shiv-printshiv.min.js similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/js/html5shiv-printshiv.min.js rename to static/api-docs/latest/Python-API/_static/js/html5shiv-printshiv.min.js diff --git a/static/api-docs/2023.3/Python-API/_static/js/html5shiv.min.js b/static/api-docs/latest/Python-API/_static/js/html5shiv.min.js similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/js/html5shiv.min.js rename to static/api-docs/latest/Python-API/_static/js/html5shiv.min.js diff --git a/static/api-docs/2023.3/Python-API/_static/js/theme.js b/static/api-docs/latest/Python-API/_static/js/theme.js similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/js/theme.js rename to static/api-docs/latest/Python-API/_static/js/theme.js diff --git a/static/api-docs/2023.3/Python-API/_static/just_logo.png b/static/api-docs/latest/Python-API/_static/just_logo.png similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/just_logo.png rename to static/api-docs/latest/Python-API/_static/just_logo.png diff --git a/static/api-docs/2024.1/Python-API/_static/language_data.js b/static/api-docs/latest/Python-API/_static/language_data.js similarity index 100% rename from static/api-docs/2024.1/Python-API/_static/language_data.js rename to static/api-docs/latest/Python-API/_static/language_data.js diff --git a/static/api-docs/2023.3/Python-API/_static/minus.png b/static/api-docs/latest/Python-API/_static/minus.png similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/minus.png rename to static/api-docs/latest/Python-API/_static/minus.png diff --git a/static/api-docs/2023.3/Python-API/_static/plus.png b/static/api-docs/latest/Python-API/_static/plus.png similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/plus.png rename to static/api-docs/latest/Python-API/_static/plus.png diff --git a/static/api-docs/2024.1/Python-API/_static/pygments.css b/static/api-docs/latest/Python-API/_static/pygments.css similarity index 100% rename from static/api-docs/2024.1/Python-API/_static/pygments.css rename to static/api-docs/latest/Python-API/_static/pygments.css diff --git a/static/api-docs/2023.3/Python-API/_static/searchtools.js b/static/api-docs/latest/Python-API/_static/searchtools.js similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/searchtools.js rename to static/api-docs/latest/Python-API/_static/searchtools.js diff --git a/static/api-docs/2023.3/Python-API/_static/sphinx_highlight.js b/static/api-docs/latest/Python-API/_static/sphinx_highlight.js similarity index 100% rename from static/api-docs/2023.3/Python-API/_static/sphinx_highlight.js rename to static/api-docs/latest/Python-API/_static/sphinx_highlight.js diff --git a/static/api-docs/2024.1/Python-API/cloudshell.api.html b/static/api-docs/latest/Python-API/cloudshell.api.html similarity index 100% rename from static/api-docs/2024.1/Python-API/cloudshell.api.html rename to static/api-docs/latest/Python-API/cloudshell.api.html diff --git a/static/api-docs/2024.1/Python-API/cloudshell.helpers.html b/static/api-docs/latest/Python-API/cloudshell.helpers.html similarity index 100% rename from static/api-docs/2024.1/Python-API/cloudshell.helpers.html rename to static/api-docs/latest/Python-API/cloudshell.helpers.html diff --git a/static/api-docs/2024.1/Python-API/cloudshell.html b/static/api-docs/latest/Python-API/cloudshell.html similarity index 100% rename from static/api-docs/2024.1/Python-API/cloudshell.html rename to static/api-docs/latest/Python-API/cloudshell.html diff --git a/static/api-docs/2024.1/Python-API/genindex.html b/static/api-docs/latest/Python-API/genindex.html similarity index 100% rename from static/api-docs/2024.1/Python-API/genindex.html rename to static/api-docs/latest/Python-API/genindex.html diff --git a/static/api-docs/2024.1/Python-API/index.html b/static/api-docs/latest/Python-API/index.html similarity index 100% rename from static/api-docs/2024.1/Python-API/index.html rename to static/api-docs/latest/Python-API/index.html diff --git a/static/api-docs/2024.1/Python-API/objects.inv b/static/api-docs/latest/Python-API/objects.inv similarity index 100% rename from static/api-docs/2024.1/Python-API/objects.inv rename to static/api-docs/latest/Python-API/objects.inv diff --git a/static/api-docs/2024.1/Python-API/py-modindex.html b/static/api-docs/latest/Python-API/py-modindex.html similarity index 100% rename from static/api-docs/2024.1/Python-API/py-modindex.html rename to static/api-docs/latest/Python-API/py-modindex.html diff --git a/static/api-docs/2024.1/Python-API/search.html b/static/api-docs/latest/Python-API/search.html similarity index 100% rename from static/api-docs/2024.1/Python-API/search.html rename to static/api-docs/latest/Python-API/search.html diff --git a/static/api-docs/2024.1/Python-API/searchindex.js b/static/api-docs/latest/Python-API/searchindex.js similarity index 100% rename from static/api-docs/2024.1/Python-API/searchindex.js rename to static/api-docs/latest/Python-API/searchindex.js diff --git a/static/api-docs/2024.1/Quali-API/Quali API Library.html b/static/api-docs/latest/Quali-API/Quali API Library.html similarity index 99% rename from static/api-docs/2024.1/Quali-API/Quali API Library.html rename to static/api-docs/latest/Quali-API/Quali API Library.html index c3b12a6d4b..f2817088c0 100644 --- a/static/api-docs/2024.1/Quali-API/Quali API Library.html +++ b/static/api-docs/latest/Quali-API/Quali API Library.html @@ -226,7 +226,7 @@ } Quali API Guide
    - 2024.1.0 Quali API Library Reference Guide + 2026.1.0 Quali API Library Reference Guide


    Login

    Starts a new session in Quali Server using the requested user credentials.

    Syntax

    Login(serverMachine, serverPort, username, password, domain)

    diff --git a/static/api-docs/2024.1/Quali-API/Quali REST API.html b/static/api-docs/latest/Quali-API/Quali REST API.html similarity index 99% rename from static/api-docs/2024.1/Quali-API/Quali REST API.html rename to static/api-docs/latest/Quali-API/Quali REST API.html index fa4bd38ba9..2ab5073454 100644 --- a/static/api-docs/2024.1/Quali-API/Quali REST API.html +++ b/static/api-docs/latest/Quali-API/Quali REST API.html @@ -321,7 +321,7 @@ hljs.tabReplace = ' '; hljs.initHighlightingOnLoad();



    Login

    Starts a new session in Quali Server using the requested user credentials.
    Use the server address and port in the following way: http://serverAddress:tcpPort/API. The autorization token that is returned should be sent in each consecutive API call as part of the header. (See the examples for further information). diff --git a/static/api-docs/2023.3/Quali-API/Quali cSharp API.html b/static/api-docs/latest/Quali-API/Quali cSharp API.html similarity index 99% rename from static/api-docs/2023.3/Quali-API/Quali cSharp API.html rename to static/api-docs/latest/Quali-API/Quali cSharp API.html index 36e8c0cb7f..e0c06d78c5 100644 --- a/static/api-docs/2023.3/Quali-API/Quali cSharp API.html +++ b/static/api-docs/latest/Quali-API/Quali cSharp API.html @@ -321,424 +321,424 @@ hljs.tabReplace = ' '; hljs.initHighlightingOnLoad();
    - 2023.3.0 Quali API C# Reference Guide + 2026.1.0 Quali API C# Reference Guide


    Login

    Starts a new session in Quali Server using the requested user credentials.

    Syntax

    void Login(string serverMachine, int serverPort, string username, string password, string domain)

    Parameters -

    TypeNameDescription
    stringserverMachine
    IP address or host name of the Quali Server machine, i.e.: 192.100.1.2 or QsServer.
    stringserverPort
    The TCP port that the Portal is configured to work on.
    stringusername
    Username to login with.
    stringpassword
    Specify the user's login password.
    stringdomain
    Specify the name of the domain.

    Example

    
    -        QualiAPI.QualiAPI api = new QualiAPI.QualiAPI();
    -        api.Login("localhost", 9000, "admin", "admin", "Global");
    +      

    TypeNameDescription
    stringserverMachine
    IP address or host name of the Quali Server machine, i.e.: 192.100.1.2 or QsServer.
    stringserverPort
    The TCP port that the Portal is configured to work on.
    stringusername
    Username to login with.
    stringpassword
    Specify the user's login password.
    stringdomain
    Specify the name of the domain.

    Example

    
    +        QualiAPI.QualiAPI api = new QualiAPI.QualiAPI();
    +        api.Login("localhost", 9000, "admin", "admin", "Global");
           

    back to TOC

    SecureLogon

    Starts a new session in Quali Server using the requested user credentials.

    Syntax

    void SecureLogon(string serverMachine, int serverPort, string token, string domain)

    Parameters -

    TypeNameDescription
    stringserverMachine
    IP address or host name of the Quali Server machine, i.e.: 192.100.1.2 or QsServer.
    stringserverPort
    The TCP port that the Portal is configured to work on.
    stringtoken
    Token to login with.
    stringdomain
    Specify the name of the domain.

    Example

    
    -        QualiAPI.QualiAPI api = new QualiAPI.QualiAPI();
    -        api.SecureLogon("localhost", 9000, "authToken", "Global");
    +      

    TypeNameDescription
    stringserverMachine
    IP address or host name of the Quali Server machine, i.e.: 192.100.1.2 or QsServer.
    stringserverPort
    The TCP port that the Portal is configured to work on.
    stringtoken
    Token to login with.
    stringdomain
    Specify the name of the domain.

    Example

    
    +        QualiAPI.QualiAPI api = new QualiAPI.QualiAPI();
    +        api.SecureLogon("localhost", 9000, "authToken", "Global");
           

    back to TOC

    Get Available Suite Templates

    Retrieves the list of all available automation suites.

    Syntax

    void GetAvailableSuiteTemplates(out string[,] templates)

    Parameters -

    TypeNameDescription
    out string[,]templates
    Provides an array of available automation suites. - Each suite is composed of: Name, Description, Owner, Create Date, Modification Date. - The name attribute indicates the name of the suite template. - The description attribute indicates the description of the suite. - The owner attribute indicates the name of the user who created the suite. - The create date attribute indicates the create date and time of the suite. - The modification date attributes indicate the last modification date and time. -

    Example

    
    -        string [,] templates;
    -        api.GetAvailableSuiteTemplates(out templates);
    +      

    TypeNameDescription
    out string[,]templates
    Provides an array of available automation suites. + Each suite is composed of: Name, Description, Owner, Create Date, Modification Date. + The name attribute indicates the name of the suite template. + The description attribute indicates the description of the suite. + The owner attribute indicates the name of the user who created the suite. + The create date attribute indicates the create date and time of the suite. + The modification date attributes indicate the last modification date and time. +

    Example

    
    +        string [,] templates;
    +        api.GetAvailableSuiteTemplates(out templates);
           

    back to TOC

    Get Suite Template Details

    Retrieves properties of the specified automation suite template.

    Syntax

    void GetSuiteTemplateDetails(string suiteTemplateName, out string description, out string type, out string owner, out DateTime createDate, out DateTime modificationDate, out EmailNotifications emailNotifications, out double removeJobsFromQueueAfter, out bool endReservationOnEnd, out string[,] jobsDetails, out string[,] jobExecutionServers, out string[,] topologyGlobalInputs, out string[,] topologyRequirementsInputs, out string[,] topologyAdditionalInputs, out string[,] jobsTestPaths, out string[,] jobsTestParameters)

    Parameters -

    TypeNameDescription
    stringSuite Template Name
    the name of the suite template that is used as a container for the suite
    out stringDescription
    Displays the automation suite description.
    out stringType
    Indicates the automation suite type.
    out stringOwner
    Indicates the name of the user who created the automation suite.
    out DateTimeCreate Date
    Indicates the create date and time of the automation suite.
    out DateTimeModification Date
    Indicates the last update date and time of the automation suite.
    out stringEmail Notifications
    Indicates notification trigger settings: None, Errors, Suite and Errors, or All.
    out intRemove Jobs From Queue After
    - Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. - -1 Indicates that queue timeout is disabled. -
    out boolEnd Reservation On End
    Indicates if the suite's reservation was set to end automatically upon execution completion.
    out string[,]Jobs Details
    Output is a 9 column matrix with Job Index, Name, Description, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Topology Name, and Duration Time Buffer as the column headings. - The Index column will display a run of unique numbers. - The suite Name column indicates the name of the parent automation suite. - The Name column indicates the name of each job. - The Description column indicates the description of each job. - The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) - The Estimated Duration column Indicates the number of minutes entered as the job's estimated duration. - -1 indicates that the duration will be calculated automatically according to the test durations. - The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. - The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. - The Topology Name column indicates the name of attached topology. - Duration Time Buffer indicates the number of minutes to be added to the duration estimation. -
    out string[,]Job Execution Servers
    Indicates the execution servers for each job - Output is a two column matrix with Job Index and Execution Server as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If a job has multiple execution servers, there will be a row with the same index value for each required execution server. -
    out string[,]Topology Global Inputs
    Indicates the topology’s input parameters and parameter values. - Output is a four column matrix with Job Index, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Topology Requirements Inputs
    Indicates requirements for specific topology resources. - Output is a six column matrix with Job Index, Resource Path, Name, Value, Type, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. The Resource Path column indicates the full path to the added topology resources. - The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Topology Additional Inputs
    Indicates additional resource input parameters and values for the attached topology. - Output is a five column matrix with Job Index, Resource Path, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Resource Path column indicates the full path to the added topology resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Jobs Test Paths
    Provide the full path to each of the job's tests. - Output is a four column matrix with Job Index, Test Index, Test Path and Test Estimated Duration as the column headers. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. - The test path column should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. -
    out string[,]Jobs Test Parameters
    Parameter information for each of the job's tests. - Output is a four column matrix with Job Index, Test Index, Parameter Name and Parameter Value as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column corresponds to the value in the Test Paths matrix. - Tests with multiple parameters will have a row for each parameter, with the same Test Index value over multiple rows. -
    out stringExisting Reservation ID
    Specify existing reservation ID to use for the created suite. - This will only be possible for suites with one job and no topologies. - Note that the system doesn’t validate the number of jobs attached to the same reservation id. Validation if needed should be applied by the clients of the API. -

    Example

    
    -        string description, type, owner;
    -        DateTime createDate, modificationDate;
    -        EmailNotifications emailNotifications;
    -        double removeJobsFromQueueAfter;
    -        bool endReservationOnEnd;
    -        string[,] jobsDetails, jobExecutionServers, topologyGlobalInputs, topologyRequirementsInputs, topologyAdditionalInputs, jobsTestPaths, jobsTestParameters;
    -
    -        api.GetSuiteTemplateDetails("testcase 10", out description, out type, out owner, out createDate, out modificationDate, out emailNotifications, out removeJobsFromQueueAfter, out endReservationOnEnd, out jobsDetails, out jobExecutionServers, out topologyGlobalInputs, out topologyRequirementsInputs, out topologyAdditionalInputs, out jobsTestPaths, out jobsTestParameters);
    +      

    TypeNameDescription
    stringSuite Template Name
    the name of the suite template that is used as a container for the suite
    out stringDescription
    Displays the automation suite description.
    out stringType
    Indicates the automation suite type.
    out stringOwner
    Indicates the name of the user who created the automation suite.
    out DateTimeCreate Date
    Indicates the create date and time of the automation suite.
    out DateTimeModification Date
    Indicates the last update date and time of the automation suite.
    out stringEmail Notifications
    Indicates notification trigger settings: None, Errors, Suite and Errors, or All.
    out intRemove Jobs From Queue After
    + Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. + -1 Indicates that queue timeout is disabled. +
    out boolEnd Reservation On End
    Indicates if the suite's reservation was set to end automatically upon execution completion.
    out string[,]Jobs Details
    Output is a 9 column matrix with Job Index, Name, Description, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Topology Name, and Duration Time Buffer as the column headings. + The Index column will display a run of unique numbers. + The suite Name column indicates the name of the parent automation suite. + The Name column indicates the name of each job. + The Description column indicates the description of each job. + The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) + The Estimated Duration column Indicates the number of minutes entered as the job's estimated duration. + -1 indicates that the duration will be calculated automatically according to the test durations. + The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. + The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. + The Topology Name column indicates the name of attached topology. + Duration Time Buffer indicates the number of minutes to be added to the duration estimation. +
    out string[,]Job Execution Servers
    Indicates the execution servers for each job + Output is a two column matrix with Job Index and Execution Server as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. + If a job has multiple execution servers, there will be a row with the same index value for each required execution server. +
    out string[,]Topology Global Inputs
    Indicates the topology’s input parameters and parameter values. + Output is a four column matrix with Job Index, Name, Value, and Possible Values as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. +
    out string[,]Topology Requirements Inputs
    Indicates requirements for specific topology resources. + Output is a six column matrix with Job Index, Resource Path, Name, Value, Type, and Possible Values as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. The Resource Path column indicates the full path to the added topology resources. + The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. +
    out string[,]Topology Additional Inputs
    Indicates additional resource input parameters and values for the attached topology. + Output is a five column matrix with Job Index, Resource Path, Name, Value, and Possible Values as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. + The Resource Path column indicates the full path to the added topology resources. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. +
    out string[,]Jobs Test Paths
    Provide the full path to each of the job's tests. + Output is a four column matrix with Job Index, Test Index, Test Path and Test Estimated Duration as the column headers. + The Job Index column corresponds to the value in the Jobs Details matrix. + The Test Index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. + The test path column should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. + The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. +
    out string[,]Jobs Test Parameters
    Parameter information for each of the job's tests. + Output is a four column matrix with Job Index, Test Index, Parameter Name and Parameter Value as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. + The Test Index column corresponds to the value in the Test Paths matrix. + Tests with multiple parameters will have a row for each parameter, with the same Test Index value over multiple rows. +
    out stringExisting Reservation ID
    Specify existing reservation ID to use for the created suite. + This will only be possible for suites with one job and no topologies. + Note that the system doesn’t validate the number of jobs attached to the same reservation id. Validation if needed should be applied by the clients of the API. +

    Example

    
    +        string description, type, owner;
    +        DateTime createDate, modificationDate;
    +        EmailNotifications emailNotifications;
    +        double removeJobsFromQueueAfter;
    +        bool endReservationOnEnd;
    +        string[,] jobsDetails, jobExecutionServers, topologyGlobalInputs, topologyRequirementsInputs, topologyAdditionalInputs, jobsTestPaths, jobsTestParameters;
    +
    +        api.GetSuiteTemplateDetails("testcase 10", out description, out type, out owner, out createDate, out modificationDate, out emailNotifications, out removeJobsFromQueueAfter, out endReservationOnEnd, out jobsDetails, out jobExecutionServers, out topologyGlobalInputs, out topologyRequirementsInputs, out topologyAdditionalInputs, out jobsTestPaths, out jobsTestParameters);
           

    back to TOC

    Enqueue Custom SuiteEnqueue Custom Suite

    Create a new custom automation suite and add it to queue

    Syntax

    void EnqueueCustomSuite(string suiteTemplateName, string suiteName, string description, string type, EmailNotifications emailNotification, double removeJobsFromQueueAfter, bool endReservationOnEnd, string[,] jobsDetails, string[,] jobExecutionServers, string[,] topologyGlobalInputs, string[,] topologyRequirementsInputs, string[,] topologyAdditionalInputs, string[,] jobsTestPaths, string[,] jobsTestParameters, string existingReservationId, out string suiteId)

    Parameters -

    TypeNameDescription
    stringSuite Template Name
    Specify the name of the suite template to use as a container for the suite. Empty value indicates an adHoc suite.
    stringSuite Name
    Specify the name of the suite template to use as a container for the suite. Empty value indicates an adHoc suite.
    stringDescription
    Specify the automation suite description.
    stringType
    Specify the automation suite type. Default value: TestShell
    stringEmail Notifications
    Specify notification trigger settings: None, Errors Only, Suite and Errors, or All.
    intRemove Jobs From Queue After
    Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. -1 Indicates that queue timeout is disabled.
    boolEnd Reservation On End
    Specify if the suite's reservation should end automatically upon execution completion.
    string[,]Jobs Details
    Input is an 9 column matrix with Job Index, name, Description, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Topology Name, and Duration Time Buffer as the column headings. - The Index column will display a run of unique numbers. - The Suite Name column indicates the name of the parent automation suite. - The Name column indicates the name of each job. - The Description column indicates the description of each job. - The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) - The Estimated Duration column Indicates the number of minutes entered as the job's estimated duration. - -1 indicates that the duration will be calculated automatically according to the test durations. - The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. - The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. - The Topology Name column indicates the name of attached topology. - Duration Time Buffer indicates the number of minutes to be added to the duration estimation. -
    string[,]Job Execution Servers
    Input should be a two column matrix with Job Index and Execution Server as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - In the Job Execution Server column, specify the selected execution server that ran the job. - If a job has multiple execution servers, there will be a row with the same index value for each required execution server. -
    string[,]Topology Global Inputs
    Provide an optional list of input parameters and parameter values for the attached topology. - Input should be a four column matrix with Job Index, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    string[,]Topology Requirements Inputs
    Specify requirements for specific resources that must be included in the topology (Optional). - Input should be a six column matrix with Job Index, Resource Path, Name, Value, Type, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Resource Path column indicates the full path to the added topology resources. - The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    string[,]Topology Additional Inputs
    Specify an optional list of additional input parameters and values for the attached topology. - Input is a five column matrix with Job Index, Resource Path, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Resource Path column indicates the full path to the added topology resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    string[,]Jobs Test Paths
    Specify the full path to each of the job's tests. - Input is a four column matrix with Job Index, Test Index, Test Path and Test Estimated Duration. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. - The test path column should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. -
    string[,]Jobs Test Parameters
    Specify parameter information for each of the job's tests. - Input is a four column matrix with Job Index, Test Index, Parameter Name and Parameter Value as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column corresponds to the value in the Test Paths matrix. - Tests with multiple parameters will have a row for each parameter, with the same Test Index value over multiple rows. -
    stringExisting Reservation ID
    Specify existing reservation ID to use for the created suite. - This will only be possible for suites with one job and no topologies. - Note that the system doesn’t validate the number of jobs attached to the same reservation id. Validation if needed should be applied by the clients of the API. -
    out stringSuite Id
    The ID of the automation suite that was created.

    Example

    
    -        string suiteId;
    -
    -        api.EnqueueCustomSuite("", "Ad Hoc 1", "This is a one time network test", "TestShell", EmailNotifications.ErrorsOnly, 5, true,
    -        // Jobs Details
    -        new string[,] { { "Job Index", "Name", "Description", "Logging Profile", "Estimated Duration", "Stop On Fail", "Stop On Error", "Topology Name", "Duration Time Buffer"},
    -        { "1", "job1", "", "None", "5", "false", "false", "", "10" }  },
    -        // Job Execution Servers
    -        new string[,] { { "Job Index", "Execution Server"} },
    -        //Topology Global Inputs
    -        new string[,] { {"Job Index", "Name", "Value", "Possible Values"} },
    -        //Topology Requirements Inputs
    -        new string[,] { {"Job Index", "Resource Path", "Name", "Value", "Type", "Possible Values" } },
    -        // Topology Additional Inputs
    -        new string[,] { { "Job Index", "Resource Path", "Name", "Value", "Possible Values" } },
    -        // Job Test Paths
    -        new string[,] { {"Job Index", "Test Index", "Test Path", "Test Estimated Duration" },
    -        {"1", "1", "TestShell\\Tests\\Shared\\TestWithInputs", "5" }},
    -        // Job Test Parameters
    -        new string[,] { {"Job Index", "Test Index", "Parameter Name", "Parameter Value" },
    -                        { "1",        "1",          "InStr",          "a"},
    -                        { "1",        "1",          "InNum",          "1"},
    -                        { "1",        "1",          "InStrVect",      "['b', 'c', 'd']"},
    -                        { "1",        "1",          "InNumVect",      "[2, 3, 4]"},
    -                        { "1",        "1",          "InStrMat",       "['e', 'f', 'g';'h', 'i', 'j';]"},
    -                        { "1",        "1",          "InNumMat",       "[5, 6, 7;8, 9, 10;]"}},
    -        null, out suiteId);
    -      

    Output

  • suiteId
  • 
    -        d071cd61-f958-4002-8149-a433c6fc458a
    +      

    TypeNameDescription
    stringSuite Template Name
    Specify the name of the suite template to use as a container for the suite. Empty value indicates an adHoc suite.
    stringSuite Name
    Specify the name of the suite template to use as a container for the suite. Empty value indicates an adHoc suite.
    stringDescription
    Specify the automation suite description.
    stringType
    Specify the automation suite type. Default value: TestShell
    stringEmail Notifications
    Specify notification trigger settings: None, Errors Only, Suite and Errors, or All.
    intRemove Jobs From Queue After
    Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. -1 Indicates that queue timeout is disabled.
    boolEnd Reservation On End
    Specify if the suite's reservation should end automatically upon execution completion.
    string[,]Jobs Details
    Input is an 9 column matrix with Job Index, name, Description, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Topology Name, and Duration Time Buffer as the column headings. + The Index column will display a run of unique numbers. + The Suite Name column indicates the name of the parent automation suite. + The Name column indicates the name of each job. + The Description column indicates the description of each job. + The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) + The Estimated Duration column Indicates the number of minutes entered as the job's estimated duration. + -1 indicates that the duration will be calculated automatically according to the test durations. + The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. + The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. + The Topology Name column indicates the name of attached topology. + Duration Time Buffer indicates the number of minutes to be added to the duration estimation. +
    string[,]Job Execution Servers
    Input should be a two column matrix with Job Index and Execution Server as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. + In the Job Execution Server column, specify the selected execution server that ran the job. + If a job has multiple execution servers, there will be a row with the same index value for each required execution server. +
    string[,]Topology Global Inputs
    Provide an optional list of input parameters and parameter values for the attached topology. + Input should be a four column matrix with Job Index, Name, Value, and Possible Values as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. +
    string[,]Topology Requirements Inputs
    Specify requirements for specific resources that must be included in the topology (Optional). + Input should be a six column matrix with Job Index, Resource Path, Name, Value, Type, and Possible Values as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. + The Resource Path column indicates the full path to the added topology resources. + The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. +
    string[,]Topology Additional Inputs
    Specify an optional list of additional input parameters and values for the attached topology. + Input is a five column matrix with Job Index, Resource Path, Name, Value, and Possible Values as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. + The Resource Path column indicates the full path to the added topology resources. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. +
    string[,]Jobs Test Paths
    Specify the full path to each of the job's tests. + Input is a four column matrix with Job Index, Test Index, Test Path and Test Estimated Duration. + The Job Index column corresponds to the value in the Jobs Details matrix. + The Test Index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. + The test path column should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. + The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. +
    string[,]Jobs Test Parameters
    Specify parameter information for each of the job's tests. + Input is a four column matrix with Job Index, Test Index, Parameter Name and Parameter Value as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. + The Test Index column corresponds to the value in the Test Paths matrix. + Tests with multiple parameters will have a row for each parameter, with the same Test Index value over multiple rows. +
    stringExisting Reservation ID
    Specify existing reservation ID to use for the created suite. + This will only be possible for suites with one job and no topologies. + Note that the system doesn’t validate the number of jobs attached to the same reservation id. Validation if needed should be applied by the clients of the API. +
    out stringSuite Id
    The ID of the automation suite that was created.

    Example

    
    +        string suiteId;
    +
    +        api.EnqueueCustomSuite("", "Ad Hoc 1", "This is a one time network test", "TestShell", EmailNotifications.ErrorsOnly, 5, true,
    +        // Jobs Details
    +        new string[,] { { "Job Index", "Name", "Description", "Logging Profile", "Estimated Duration", "Stop On Fail", "Stop On Error", "Topology Name", "Duration Time Buffer"},
    +        { "1", "job1", "", "None", "5", "false", "false", "", "10" }  },
    +        // Job Execution Servers
    +        new string[,] { { "Job Index", "Execution Server"} },
    +        //Topology Global Inputs
    +        new string[,] { {"Job Index", "Name", "Value", "Possible Values"} },
    +        //Topology Requirements Inputs
    +        new string[,] { {"Job Index", "Resource Path", "Name", "Value", "Type", "Possible Values" } },
    +        // Topology Additional Inputs
    +        new string[,] { { "Job Index", "Resource Path", "Name", "Value", "Possible Values" } },
    +        // Job Test Paths
    +        new string[,] { {"Job Index", "Test Index", "Test Path", "Test Estimated Duration" },
    +        {"1", "1", "TestShell\\Tests\\Shared\\TestWithInputs", "5" }},
    +        // Job Test Parameters
    +        new string[,] { {"Job Index", "Test Index", "Parameter Name", "Parameter Value" },
    +                        { "1",        "1",          "InStr",          "a"},
    +                        { "1",        "1",          "InNum",          "1"},
    +                        { "1",        "1",          "InStrVect",      "['b', 'c', 'd']"},
    +                        { "1",        "1",          "InNumVect",      "[2, 3, 4]"},
    +                        { "1",        "1",          "InStrMat",       "['e', 'f', 'g';'h', 'i', 'j';]"},
    +                        { "1",        "1",          "InNumMat",       "[5, 6, 7;8, 9, 10;]"}},
    +        null, out suiteId);
    +      

    Output

  • suiteId
  • 
    +        d071cd61-f958-4002-8149-a433c6fc458a
           

    back to TOC

    Get Suite Details

    Retrieves the full details of a specific automation suite instance

    Syntax

    void GetSuiteDetails(string suiteId, out string suiteTemplateName, out string suiteName, out string description, out string type, out string owner, out double removeJobsFromQueueAfter, out bool endReservationOnEnd, out string[,] jobsDetails, out string[,] jobExecutionServers, out string[,] topologyGlobalInputs, out string[,] topologyRequirementsInputs, out string[,] topologyAdditionalInputs, out string[,] jobsTestDetails, out string[,] jobsTestParameters, out string suiteStatus, out string suiteResult, out int remainingJobs, out DateTime startTime, out DateTime endTime)

    Parameters -

    TypeNameDescription
    stringSuite Id
    Specify the ID of the automation suite.
    out stringSuite Template Name
    the name of the suite template that is used as a container for the suite
    out stringSuite Name
    Indicates the name of the automation suite.
    out stringDescription
    Displays the automation suite description.
    out stringType
    Indicates the automation suite type.
    out stringOwner
    Indicates the name of the user who created the automation suite.
    out stringEmail Notifications
    Indicates notification trigger settings: None, Errors, Suite and Errors, or All.
    out intRemove Jobs From Queue After
    Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. - -1 Indicates that queue timeout is disabled. -
    out boolEnd Reservation On End
    Indicates if the suite's reservation was set to end automatically upon execution completion.
    out string[,]Jobs Details
    Output is an 11 column matrix with Job Index, Name, Description, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Topology Name, Duration Time Buffer, Job State and Job Result as the column headings. - The Index column will display a run of unique numbers. - The Suite Name column indicates the name of the parent automation suite. - The Name column indicates the name of each job. - The Description column indicates the description of each job. - The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) - The Estimated Duration column indicates the number of minutes entered as the job's estimated duration. -1 indicates that the duration will be calculated automatically according to the test durations. - The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. - The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. - The Topology Name column indicates the name of attached topology. - Duration Time Buffer indicates the number of minutes to be added to the duration estimation. - The job state indicates the current state of the job. - The job result indicates the result of the job execution. -
    out string[,]Job Execution Servers
    Indicates the execution servers for each job - Output is a two column matrix with Job Index and Execution Server as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If a job has multiple execution servers, there will be a row with the same index value for each required execution server. -
    out string[,]Topology Global Inputs
    Indicates the topology’s input parameters and parameter values. - Output is a four column matrix with Job Index, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Topology Requirements Inputs
    Indicates requirements for specific topology resources. - Output is a 6 column matrix with Job Index, Resource Path, Name, Value, Type, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. The Resource Path column indicates the full path to the added topology resources. - The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Topology Additional Inputs
    Indicates additional resource input parameters and values for the attached topology. - Output is a five column matrix with Job Index, Resource Path, Name, Value, and Possible Values as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Resource Path column indicates the full path to the added topology resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Jobs Test Details
    Information about the tests that were selected for this job. - Output is a nine column matrix with Job Index, Test Index, Test Path, Test Estimated Duration, State, Start Time, End Time, Result, and Report ID as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. - The Test Path column indicates the location of each test. - The State column indicates the current status for each test. - The Start Time and End Time columns indicate the execution start and end times for each test. - The Result column indicates the test status. - Concatenate the Report ID column value to the relevant IP address to create a URL to the test report. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. -
    out string[,]Jobs Test Parameters
    Parameter information for each of the job's tests. - Output is a four column matrix with Job Index, Test Index, Parameter Name and Parameter Value as the column headings. - The Job Index column corresponds to the value in the Jobs Details matrix. - The Test Index column corresponds to the value in the Test Paths matrix. - Tests with multiple parameters will have a row for each parameter, with the same Test Index value over multiple rows. -
    out stringSuite Status
    Indicates the current status of the automation suite: Pending, Started, Ended or Failed to Start
    out stringSuite Result
    Indicate the result of the suite: Error, Failed, Succeeded
    out stringRemaining Jobs
    Indicates the number of uncompleted jobs
    out DateTimeStart Time
    Indicates the date and time when the suite began execution.
    out DateTimeEnd Time
    Indicates the date and time when the suite completed its execution. The value will be null if the execution hasn't yet ended.

    Example

    
    -        string suiteTemplateName, suiteName, description, type, owner, suiteStatus, suiteResult;
    -        double removeJobsFromQueueAfter;
    -        bool endReservationOnEnd;
    -        string[,] jobsDetails, jobExecutionServers, topologyGlobalInputs, topologyRequirementsInputs, topologyAdditionalInputs, jobsTestDetails, jobsTestParameters;
    -        int remainingJobs;
    -        DateTime startTime, endTime;
    -
    -        api.GetSuiteDetails("d071cd61-f958-4002-8149-a433c6fc458a", out suiteTemplateName, out suiteName, out description, out type, out owner, out removeJobsFromQueueAfter, out endReservationOnEnd, out jobsDetails, out jobExecutionServers, out topologyGlobalInputs, out topologyRequirementsInputs, out topologyAdditionalInputs, out jobsTestDetails, out jobsTestParameters, out suiteStatus, out suiteResult, out remainingJobs, out startTime, out endTime);
    +      

    TypeNameDescription
    stringSuite Id
    Specify the ID of the automation suite.
    out stringSuite Template Name
    the name of the suite template that is used as a container for the suite
    out stringSuite Name
    Indicates the name of the automation suite.
    out stringDescription
    Displays the automation suite description.
    out stringType
    Indicates the automation suite type.
    out stringOwner
    Indicates the name of the user who created the automation suite.
    out stringEmail Notifications
    Indicates notification trigger settings: None, Errors, Suite and Errors, or All.
    out intRemove Jobs From Queue After
    Indicates the number of minutes for the suite's execution queue timeout. Suites are automatically removed from the queue upon timing out. + -1 Indicates that queue timeout is disabled. +
    out boolEnd Reservation On End
    Indicates if the suite's reservation was set to end automatically upon execution completion.
    out string[,]Jobs Details
    Output is an 11 column matrix with Job Index, Name, Description, Logging Profile, Estimated Duration, Stop On Fail, Stop On Error, Topology Name, Duration Time Buffer, Job State and Job Result as the column headings. + The Index column will display a run of unique numbers. + The Suite Name column indicates the name of the parent automation suite. + The Name column indicates the name of each job. + The Description column indicates the description of each job. + The Logging Profile column indicates the selected logging profile for this job. (None, All, Results, Measurements and Results) + The Estimated Duration column indicates the number of minutes entered as the job's estimated duration. -1 indicates that the duration will be calculated automatically according to the test durations. + The Stop On Fail column indicates whether the job was set to stop execution if any of its tests failed. + The Stop On Error column indicates whether the job was set to stop execution if any of its tests ended with an error. + The Topology Name column indicates the name of attached topology. + Duration Time Buffer indicates the number of minutes to be added to the duration estimation. + The job state indicates the current state of the job. + The job result indicates the result of the job execution. +
    out string[,]Job Execution Servers
    Indicates the execution servers for each job + Output is a two column matrix with Job Index and Execution Server as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. + If a job has multiple execution servers, there will be a row with the same index value for each required execution server. +
    out string[,]Topology Global Inputs
    Indicates the topology’s input parameters and parameter values. + Output is a four column matrix with Job Index, Name, Value, and Possible Values as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. +
    out string[,]Topology Requirements Inputs
    Indicates requirements for specific topology resources. + Output is a 6 column matrix with Job Index, Resource Path, Name, Value, Type, and Possible Values as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. The Resource Path column indicates the full path to the added topology resources. + The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. +
    out string[,]Topology Additional Inputs
    Indicates additional resource input parameters and values for the attached topology. + Output is a five column matrix with Job Index, Resource Path, Name, Value, and Possible Values as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. + The Resource Path column indicates the full path to the added topology resources. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. +
    out string[,]Jobs Test Details
    Information about the tests that were selected for this job. + Output is a nine column matrix with Job Index, Test Index, Test Path, Test Estimated Duration, State, Start Time, End Time, Result, and Report ID as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. + The Test Index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. + The Test Path column indicates the location of each test. + The State column indicates the current status for each test. + The Start Time and End Time columns indicate the execution start and end times for each test. + The Result column indicates the test status. + Concatenate the Report ID column value to the relevant IP address to create a URL to the test report. + The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. +
    out string[,]Jobs Test Parameters
    Parameter information for each of the job's tests. + Output is a four column matrix with Job Index, Test Index, Parameter Name and Parameter Value as the column headings. + The Job Index column corresponds to the value in the Jobs Details matrix. + The Test Index column corresponds to the value in the Test Paths matrix. + Tests with multiple parameters will have a row for each parameter, with the same Test Index value over multiple rows. +
    out stringSuite Status
    Indicates the current status of the automation suite: Pending, Started, Ended or Failed to Start
    out stringSuite Result
    Indicate the result of the suite: Error, Failed, Succeeded
    out stringRemaining Jobs
    Indicates the number of uncompleted jobs
    out DateTimeStart Time
    Indicates the date and time when the suite began execution.
    out DateTimeEnd Time
    Indicates the date and time when the suite completed its execution. The value will be null if the execution hasn't yet ended.

    Example

    
    +        string suiteTemplateName, suiteName, description, type, owner, suiteStatus, suiteResult;
    +        double removeJobsFromQueueAfter;
    +        bool endReservationOnEnd;
    +        string[,] jobsDetails, jobExecutionServers, topologyGlobalInputs, topologyRequirementsInputs, topologyAdditionalInputs, jobsTestDetails, jobsTestParameters;
    +        int remainingJobs;
    +        DateTime startTime, endTime;
    +
    +        api.GetSuiteDetails("d071cd61-f958-4002-8149-a433c6fc458a", out suiteTemplateName, out suiteName, out description, out type, out owner, out removeJobsFromQueueAfter, out endReservationOnEnd, out jobsDetails, out jobExecutionServers, out topologyGlobalInputs, out topologyRequirementsInputs, out topologyAdditionalInputs, out jobsTestDetails, out jobsTestParameters, out suiteStatus, out suiteResult, out remainingJobs, out startTime, out endTime);
           

    back to TOC

    Stop Suite Execution

    Stops the execution of all the suite's jobs

    Syntax

    void StopSuiteExecution(string suiteId)

    Parameters -

    TypeNameDescription
    stringSuite Id
    Specify the ID of the automation suite to stop.

    Example

    
    -        api.StopSuiteExecution("d071cd61-f958-4002-8149-a433c6fc458a");
    +      

    TypeNameDescription
    stringSuite Id
    Specify the ID of the automation suite to stop.

    Example

    
    +        api.StopSuiteExecution("d071cd61-f958-4002-8149-a433c6fc458a");
           

    back to TOC

    Import Package

    Imports a quali package into the system.

    Syntax

    void ImportPackage(string pacakgePath)

    Parameters -

    TypeNameDescription
    stringPackage Path
    Full path to the location of the package that is going to be imported

    Example

    
    -        string packagePath  = @"c:\temp\package.zip";
    -
    -        api.ImportPackage(packagePath);
    +      

    TypeNameDescription
    stringPackage Path
    Full path to the location of the package that is going to be imported

    Example

    
    +        string packagePath  = @"c:\temp\package.zip";
    +
    +        api.ImportPackage(packagePath);
           

    back to TOC

    Export Package

    Export a quali package into the system.

    Syntax

    void ExportPackage(string packageSavePath, string[] topologiesNames)

    Parameters -

    TypeNameDescription
    stringSave Path
    Full file path to the location to where the package is going to be exported. Overwrites the file if exists.
    string[,]Topologies
    Names of the topologies to include in the package

    Example

    
    -        string packageSavePath  = @"c:\temp\package.zip";
    -
    -        api.ExportPackage(packageSavePath, new[] {"topo1","topo2"} );
    +      

    TypeNameDescription
    stringSave Path
    Full file path to the location to where the package is going to be exported. Overwrites the file if exists.
    string[,]Topologies
    Names of the topologies to include in the package

    Example

    
    +        string packageSavePath  = @"c:\temp\package.zip";
    +
    +        api.ExportPackage(packageSavePath, new[] {"topo1","topo2"} );
           

    back to TOC

    Enqueue Custom Job

    Creates a new custom job, attaches it to a new AdHoc suite, and adds it to the job queue.

    Syntax

    void EnqueueCustomJob(string name, string description, string[] executionServers, LoggingProfile loggingProfile, double estimatedDuration, bool stopOnFail, bool stopOnError, string[,] testPaths, string[,] testParameters, string topologyName, string[,] topologyGlobalInputs, string[,] topologyRequirementsInputs, string[,] topologyAdditionalInputs, double durationTimeBuffer, EmailNotifications emailNotifications, string type, out string jobId)

    Parameters -

    TypeNameDescription
    stringJob Name
    Specify the name of the job. (Limited to 50 characters)
    stringDescription
    Provide a short description of the job. (Limited to 500 characters)
    string[,]Execution Servers
    Specify a list of one or more execution servers for running the job. - Leave empty to run the job on any available execution server. -
    stringLogging Profile
    Indicate which logging profile to use when executing the job's tests. - None, All, Results, Measurements and Results -
    intEstimated Duration
    Specify the time (in minutes) it will take to complete the job - -1 indicates that the duration will be calculated automatically according to the test durations. -
    boolStop On Fail
    Indicate whether to stop the job execution if one of the tests fails.
    boolStop On Error
    Indicate whether to abort the job if any test ends with an error.
    string[,]Test Paths
    Provide the full path to each of the job's tests. - The input should be a three column matrix with Index, Test Path, and Test Estimated Duration as the column headings. - If you omit the column headings, use empty values for the top row. - The index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. - The test path column should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. -
    string[,]Test Parameters
    Specify the input parameters for each of the job's tests. - Input should be a three column matrix with Index, Parameter Name, and Parameter Value as the column headings. - If you omit the column headings, leave an empty row. - The Index column corresponds to the test index from the Test Path matrix. - If a test has multiple inputs, there will be a row with the same index value for each required parameter. -
    stringTopology Name
    Specify which topology to attach to the job (Optional)
    string[,]Topology Global Inputs
    Provide a List of input parameters and parameter values for the attached topology (Optional). - Input should be a three column matrix with Name, Value, and Possible Values as the column headings. - If you omit the column headings, use empty values for the top row. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. This column is only relevant when retrieving information. -
    string[,]Topology Requirements Inputs
    Provide requirements for specific resources that must be included in the topology (Optional). - Input should be a five column matrix with Resource Path, Name, Value, Type, and Possible Values as the column headings. - If you omit the column headings, use empty values for the top row. - In the Resource Path column, specify the full path to the required resources. - In the Type column, indicate whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. This column is only relevant when retrieving information. -
    string[,]Topology Additional Inputs
    Provide a list of additional input parameters and values for the attached topology (Optional). - Input should be a four column matrix with Resource Path, Name, Value, and Possible Values as the column headings. - If you omit the column headings, use empty values for the top row. - In the Resource Path column, specify the full path to the required resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. This column is only relevant when retrieving information. -
    intDuration Time Buffer
    Indicates the number of minutes to be added to the duration estimation. - Note that this parameter is used only when "Estimated Duration" is calculated automatically. -
    stringEmail Notification
    Specify notification trigger settings: None, Errors Only, Suite and Errors, or All.
    stringType
    Indicates the automation suite type. Default value: TestShell

    Example

    
    -        string jobId;
    -
    -        api.EnqueueCustomJob("job1", "job description", null, QualiAPI.UserModel.LoggingProfile.Results, 5, false, false,
    -        // test paths
    -        new string[,] { { "Index", "Test Path" }, { "1", "TestShell\\Tests\\Shared\\TestWithInputs" }},
    -        // test params
    -        new string[,] { { "Index", "Parameter Name", "Parameter Value" },
    -                        { "1"    , "InStr",          "a"},
    -                        { "2"    , "InNum",          "1"},
    -                        { "3"    , "InStrVect",      "['b', 'c', 'd']"},
    -                        { "4"    , "InNumVect",      "[2, 3, 4]"},
    -                        { "5"    , "InStrMat",       "['e', 'f', 'g';'h', 'i', 'j';]"},
    -                        { "6"    , "InNumMat",       "[5, 6, 7;8, 9, 10;]"}
    -        },
    -        null,
    -        // topology global inputs
    -        new string[,] { { "Name", "Value", "Possible Values" } },
    -        // topology requirements inputs
    -        new string[,] { { "Resource Path", "Name", "Value", "Type", "Possible Values" } },
    -        // topology additional inputs
    -        new string[,] { { "Resource Path", "Name", "Value", "Possible Values" } },
    -        3, QualiAPI.UserModel.EmailNotifications.None, "TestShell",out jobId);
    -      

    Output

  • jobId
  • 
    -        "001f4d30-31e1-4e56-b02e-d332c6fb91e4"	
    +      

    TypeNameDescription
    stringJob Name
    Specify the name of the job. (Limited to 50 characters)
    stringDescription
    Provide a short description of the job. (Limited to 500 characters)
    string[,]Execution Servers
    Specify a list of one or more execution servers for running the job. + Leave empty to run the job on any available execution server. +
    stringLogging Profile
    Indicate which logging profile to use when executing the job's tests. + None, All, Results, Measurements and Results +
    intEstimated Duration
    Specify the time (in minutes) it will take to complete the job + -1 indicates that the duration will be calculated automatically according to the test durations. +
    boolStop On Fail
    Indicate whether to stop the job execution if one of the tests fails.
    boolStop On Error
    Indicate whether to abort the job if any test ends with an error.
    string[,]Test Paths
    Provide the full path to each of the job's tests. + The input should be a three column matrix with Index, Test Path, and Test Estimated Duration as the column headings. + If you omit the column headings, use empty values for the top row. + The index column should be a run of unique numbers that specifies the order of the tests. The test index will be used as the test identifier in the Test Parameters input matrix. + The test path column should contain the full details about the location of the test, for example: TestShell\Tests\Shared\Validation\TestCase1. + The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. +
    string[,]Test Parameters
    Specify the input parameters for each of the job's tests. + Input should be a three column matrix with Index, Parameter Name, and Parameter Value as the column headings. + If you omit the column headings, leave an empty row. + The Index column corresponds to the test index from the Test Path matrix. + If a test has multiple inputs, there will be a row with the same index value for each required parameter. +
    stringTopology Name
    Specify which topology to attach to the job (Optional)
    string[,]Topology Global Inputs
    Provide a List of input parameters and parameter values for the attached topology (Optional). + Input should be a three column matrix with Name, Value, and Possible Values as the column headings. + If you omit the column headings, use empty values for the top row. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. This column is only relevant when retrieving information. +
    string[,]Topology Requirements Inputs
    Provide requirements for specific resources that must be included in the topology (Optional). + Input should be a five column matrix with Resource Path, Name, Value, Type, and Possible Values as the column headings. + If you omit the column headings, use empty values for the top row. + In the Resource Path column, specify the full path to the required resources. + In the Type column, indicate whether the Name and Value fields refer to resource model, quantity, or attribute. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. This column is only relevant when retrieving information. +
    string[,]Topology Additional Inputs
    Provide a list of additional input parameters and values for the attached topology (Optional). + Input should be a four column matrix with Resource Path, Name, Value, and Possible Values as the column headings. + If you omit the column headings, use empty values for the top row. + In the Resource Path column, specify the full path to the required resources. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. This column is only relevant when retrieving information. +
    intDuration Time Buffer
    Indicates the number of minutes to be added to the duration estimation. + Note that this parameter is used only when "Estimated Duration" is calculated automatically. +
    stringEmail Notification
    Specify notification trigger settings: None, Errors Only, Suite and Errors, or All.
    stringType
    Indicates the automation suite type. Default value: TestShell

    Example

    
    +        string jobId;
    +
    +        api.EnqueueCustomJob("job1", "job description", null, QualiAPI.UserModel.LoggingProfile.Results, 5, false, false,
    +        // test paths
    +        new string[,] { { "Index", "Test Path" }, { "1", "TestShell\\Tests\\Shared\\TestWithInputs" }},
    +        // test params
    +        new string[,] { { "Index", "Parameter Name", "Parameter Value" },
    +                        { "1"    , "InStr",          "a"},
    +                        { "2"    , "InNum",          "1"},
    +                        { "3"    , "InStrVect",      "['b', 'c', 'd']"},
    +                        { "4"    , "InNumVect",      "[2, 3, 4]"},
    +                        { "5"    , "InStrMat",       "['e', 'f', 'g';'h', 'i', 'j';]"},
    +                        { "6"    , "InNumMat",       "[5, 6, 7;8, 9, 10;]"}
    +        },
    +        null,
    +        // topology global inputs
    +        new string[,] { { "Name", "Value", "Possible Values" } },
    +        // topology requirements inputs
    +        new string[,] { { "Resource Path", "Name", "Value", "Type", "Possible Values" } },
    +        // topology additional inputs
    +        new string[,] { { "Resource Path", "Name", "Value", "Possible Values" } },
    +        3, QualiAPI.UserModel.EmailNotifications.None, "TestShell",out jobId);
    +      

    Output

  • jobId
  • 
    +        "001f4d30-31e1-4e56-b02e-d332c6fb91e4"	
           

    back to TOC

    Get Job Details

    Retrieves all details and parameters for a specified job.

    Syntax

    void GetJobDetails(string jobId, out string suiteId, out string name, out string description, out string ownerName, out JobState jobState, out JobResult jobResult, out string jobFailureDescription, out DateTime enqueueTime, out DateTime startTime, out DateTime endTime, out double elapsedTime, out double estimatedDuration, out double durationTimeBuffer, out bool useAnyExecutionServer, out string[] executionServers, out string selectedExecutionServer, out LoggingProfile loggingProfile, out bool stopOnFail, out bool stopOnError, out DateTime expectedStartTime, out string[,] testDetails, out string[,] testParameters, out string topologyName, out string[,] topologyGlobalInputs, out string[,] topologyRequirementsInputs, out string[,] topologyAdditionalInputs)

    Parameters -

    TypeNameDescription
    stringJob Id
    Specify the ID of the job to retrieve
    out stringJob Name
    The name of the job associated with the specified job ID. (Limited to 50 characters)
    out stringDescription
    The description of the job associated with the specified job ID. (Limited to 500 characters)
    out stringOwner Name
    The name of the user who created this job.
    out stringJob State
    The current state of the job. Pending, Scheduled, Running, Done, Stopped, Cancelled or Failed to Start.
    out stringJob Result
    The result of the job execution: Completed, Passed, Failed, Ended With Error, Ended With An Exception, Manually Stopped, Terminated, or Not Started
    out stringJob Failure Description
    A short description of the reason for a failed execution. This value will be empty for a running job or for completed jobs that ran without problems.
    out DateTimeEnqueue Time
    The date and time when the job was enqueued.
    out DateTimeStart Time
    The date and time when the job started running. The value will be null if the job is still Pending or Failed to Start.
    out DateTimeEnd Time
    The date and time when the job stopped running. The value will be null if the job has not yet ended.
    out intElapsed Time
    The number of minutes that have elapsed since the job started. - Returns -1 if the job hasn't started yet. - Returns the job duration (in minutes) if the job has already finished. -
    out boolUse Any Execution Server
    Indicates that the job owner allowed the job to run on any available server.
    out string[,]Execution Servers
    A list of Execution server names that were selected by the user for this job. This parameter will have values only if the job is still pending.
    out stringSelected Execution Server
    The execution server that was selected to run the job.
    out stringLogging Profile
    The selected logging profile for this job’s tests. None, All, Results, Measurements and Results
    out boolStop On Fail
    Indicate whether to stop the job execution if one of the tests fails.
    out boolStop On Error
    Indicate whether to abort the job if any test ends with an error.
    out string[,]Test Details
    Information about the tests that were selected for this job. - Output is an eight column matrix with Index, Test Path, Test Estimated Duration, State, Start Time, End Time, Result, and Report ID as the column headings. - The Index column will display a run of unique numbers. - The Test Path column indicates the location of each test. - The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. - The State column indicates the current status for each test. - The Start Time and End Time columns indicate the execution start and end times for each test. - The Result column indicates the test status. - Concatenate the Report ID column value to the relevant IP address to create a URL to the test report. -
    out string[,]Test Parameters
    Parameter information for each of the job's tests. - Output will be a three column matrix with Index, Parameter Name and Parameter Value as the column headings. - The Index column corresponds to the index value in the Test Details matrix. - Tests with multiple parameters will have a row for each parameter, with the same index value over multiple rows. -
    out stringTopology Name
    Indicates the name of the attached topology.
    out string[,]Topology Global Inputs
    Indicates the topology’s input parameters and parameter values. - Output is a three column matrix with Name, Value, and Possible Values as the column headings. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Topology Requirements Inputs
    Indicates requirements for specific topology resources. - Output is a five column matrix with Resource Path, Name, Value, Type, and Possible Values as the column headings. - The Resource Path column indicates the full path to the added topology resources. - The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out string[,]Topology Additional Inputs
    Indicates additional resource input parameters and values for the attached topology. - Output is a four column matrix with Resource Path, Name, Value, and Possible Values as the column headings. - The Resource Path column indicates the full path to the added topology resources. - If any of the parameters have predefined values, they will be displayed in the Possible Values column. -
    out intDuration Time Buffer
    Indicates the number of minutes to be added to the duration estimation.
    out DateTimeExpected Start Time
    The expected execution start date and time for a job that is currently pending.
    out stringSuite Id
    The ID of the suite that was used to create this job.

    Example

    
    -        string suiteId, name, description, ownerName, jobFailureDescription, selectedExecutionServer, topologyName;
    -        JobState jobState;
    -        JobResult jobResult;
    -        DateTime enqueueTime, startTime, endTime, expectedStartTime;
    -        double elapsedTime, estimatedDuration, durationTimeBuffer;
    -        bool useAnyExecutionServer, stopOnFail, stopOnError;
    -        string[] executionServers;
    -        LoggingProfile loggingProfile;
    -        string[,] testDetails, testParameters, topologyGlobalInputs, topologyRequirementsInputs, topologyAdditionalInputs;
    -
    -        api.GetJobDetails("c0b859fb-554b-43c5-be04-9d3d55b818f0", out suiteId, out name, out description, out ownerName, out jobState, out jobResult, out jobFailureDescription, out enqueueTime, out startTime, out endTime, out elapsedTime, out estimatedDuration, out durationTimeBuffer, out useAnyExecutionServer, out executionServers, out selectedExecutionServer, out loggingProfile, out stopOnFail, out stopOnError, out expectedStartTime, out testDetails, out testParameters, out topologyName, out topologyGlobalInputs, out topologyRequirementsInputs, out topologyAdditionalInputs);
    +      

    TypeNameDescription
    stringJob Id
    Specify the ID of the job to retrieve
    out stringJob Name
    The name of the job associated with the specified job ID. (Limited to 50 characters)
    out stringDescription
    The description of the job associated with the specified job ID. (Limited to 500 characters)
    out stringOwner Name
    The name of the user who created this job.
    out stringJob State
    The current state of the job. Pending, Scheduled, Running, Done, Stopped, Cancelled or Failed to Start.
    out stringJob Result
    The result of the job execution: Completed, Passed, Failed, Ended With Error, Ended With An Exception, Manually Stopped, Terminated, or Not Started
    out stringJob Failure Description
    A short description of the reason for a failed execution. This value will be empty for a running job or for completed jobs that ran without problems.
    out DateTimeEnqueue Time
    The date and time when the job was enqueued.
    out DateTimeStart Time
    The date and time when the job started running. The value will be null if the job is still Pending or Failed to Start.
    out DateTimeEnd Time
    The date and time when the job stopped running. The value will be null if the job has not yet ended.
    out intElapsed Time
    The number of minutes that have elapsed since the job started. + Returns -1 if the job hasn't started yet. + Returns the job duration (in minutes) if the job has already finished. +
    out boolUse Any Execution Server
    Indicates that the job owner allowed the job to run on any available server.
    out string[,]Execution Servers
    A list of Execution server names that were selected by the user for this job. This parameter will have values only if the job is still pending.
    out stringSelected Execution Server
    The execution server that was selected to run the job.
    out stringLogging Profile
    The selected logging profile for this job’s tests. None, All, Results, Measurements and Results
    out boolStop On Fail
    Indicate whether to stop the job execution if one of the tests fails.
    out boolStop On Error
    Indicate whether to abort the job if any test ends with an error.
    out string[,]Test Details
    Information about the tests that were selected for this job. + Output is an eight column matrix with Index, Test Path, Test Estimated Duration, State, Start Time, End Time, Result, and Report ID as the column headings. + The Index column will display a run of unique numbers. + The Test Path column indicates the location of each test. + The Test Estimated Duration is the estimated number of minutes for the execution of the test, This value will be used to calculate the job duration. + The State column indicates the current status for each test. + The Start Time and End Time columns indicate the execution start and end times for each test. + The Result column indicates the test status. + Concatenate the Report ID column value to the relevant IP address to create a URL to the test report. +
    out string[,]Test Parameters
    Parameter information for each of the job's tests. + Output will be a three column matrix with Index, Parameter Name and Parameter Value as the column headings. + The Index column corresponds to the index value in the Test Details matrix. + Tests with multiple parameters will have a row for each parameter, with the same index value over multiple rows. +
    out stringTopology Name
    Indicates the name of the attached topology.
    out string[,]Topology Global Inputs
    Indicates the topology’s input parameters and parameter values. + Output is a three column matrix with Name, Value, and Possible Values as the column headings. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. +
    out string[,]Topology Requirements Inputs
    Indicates requirements for specific topology resources. + Output is a five column matrix with Resource Path, Name, Value, Type, and Possible Values as the column headings. + The Resource Path column indicates the full path to the added topology resources. + The Type column indicates whether the Name and Value fields refer to resource model, quantity, or attribute. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. +
    out string[,]Topology Additional Inputs
    Indicates additional resource input parameters and values for the attached topology. + Output is a four column matrix with Resource Path, Name, Value, and Possible Values as the column headings. + The Resource Path column indicates the full path to the added topology resources. + If any of the parameters have predefined values, they will be displayed in the Possible Values column. +
    out intDuration Time Buffer
    Indicates the number of minutes to be added to the duration estimation.
    out DateTimeExpected Start Time
    The expected execution start date and time for a job that is currently pending.
    out stringSuite Id
    The ID of the suite that was used to create this job.

    Example

    
    +        string suiteId, name, description, ownerName, jobFailureDescription, selectedExecutionServer, topologyName;
    +        JobState jobState;
    +        JobResult jobResult;
    +        DateTime enqueueTime, startTime, endTime, expectedStartTime;
    +        double elapsedTime, estimatedDuration, durationTimeBuffer;
    +        bool useAnyExecutionServer, stopOnFail, stopOnError;
    +        string[] executionServers;
    +        LoggingProfile loggingProfile;
    +        string[,] testDetails, testParameters, topologyGlobalInputs, topologyRequirementsInputs, topologyAdditionalInputs;
    +
    +        api.GetJobDetails("c0b859fb-554b-43c5-be04-9d3d55b818f0", out suiteId, out name, out description, out ownerName, out jobState, out jobResult, out jobFailureDescription, out enqueueTime, out startTime, out endTime, out elapsedTime, out estimatedDuration, out durationTimeBuffer, out useAnyExecutionServer, out executionServers, out selectedExecutionServer, out loggingProfile, out stopOnFail, out stopOnError, out expectedStartTime, out testDetails, out testParameters, out topologyName, out topologyGlobalInputs, out topologyRequirementsInputs, out topologyAdditionalInputs);
           

    back to TOC

    Get Queued Jobs

    Retrieves the list of all jobs that are currently in the job queue.

    Syntax

    void GetQueuedJobs(out string[,] queuedJobs)

    Parameters -

    TypeNameDescription
    out string[,]Queued Jobs
    Output is an seven column matrix with Job ID, Job Name, Owner, Enqueue Time, Job Details Url, Expected Start Time, and Suite Id as the column headings. - Job ID indicates the ID of each job. - Job Name indicates the name of the job. - Suite Id indicates the ID of the automation suite that was used to create each job. - Owner indicates name of the user who initiated each job. - Enqueue Time indicates the date and time that each job was added to the queue. - Expected Start Time indicates each job's expected execution start date and time. - Job Details Url indicates the link address to the REST function that retrieves the full details of the job. -

    Example

    
    -        string[,] queuedJobs;
    -        api.GetQueuedJobs(out queuedJobs);
    +      

    TypeNameDescription
    out string[,]Queued Jobs
    Output is an seven column matrix with Job ID, Job Name, Owner, Enqueue Time, Job Details Url, Expected Start Time, and Suite Id as the column headings. + Job ID indicates the ID of each job. + Job Name indicates the name of the job. + Suite Id indicates the ID of the automation suite that was used to create each job. + Owner indicates name of the user who initiated each job. + Enqueue Time indicates the date and time that each job was added to the queue. + Expected Start Time indicates each job's expected execution start date and time. + Job Details Url indicates the link address to the REST function that retrieves the full details of the job. +

    Example

    
    +        string[,] queuedJobs;
    +        api.GetQueuedJobs(out queuedJobs);
           

    back to TOC

    Get Running Jobs

    Retrieves the list of all jobs that are currently running

    Syntax

    void GetRunningJobs(out string[,] runningJobs)

    Parameters -

    TypeNameDescription
    out string[,]Running Jobs
    Output is a nine column matrix with Job ID, JobName, Owner, Start Time, Execution Server, Current Test, Current Test ID, Total Tests, and suiteId as the column headings. - Job ID indicates the ID of each running job. - JobName indicates the name of the job. - suiteId indicates the ID of the automation suite that was used to create each job. - Owner indicates name of the user who initiated each job. - Start Time indicates when each job was started. - Execution Server indicates the name of the execution server running each job. - Current Test indicates the test that is currently being executed for each running job. - Current Test ID indicates the ID of the currently running test. - Total Tests indicates the number of tests for each running job. -

    Example

    
    -        string[,] runningJobs;
    -        api.GetRunningJobs(out runningJobs);
    +      

    TypeNameDescription
    out string[,]Running Jobs
    Output is a nine column matrix with Job ID, JobName, Owner, Start Time, Execution Server, Current Test, Current Test ID, Total Tests, and suiteId as the column headings. + Job ID indicates the ID of each running job. + JobName indicates the name of the job. + suiteId indicates the ID of the automation suite that was used to create each job. + Owner indicates name of the user who initiated each job. + Start Time indicates when each job was started. + Execution Server indicates the name of the execution server running each job. + Current Test indicates the test that is currently being executed for each running job. + Current Test ID indicates the ID of the currently running test. + Total Tests indicates the number of tests for each running job. +

    Example

    
    +        string[,] runningJobs;
    +        api.GetRunningJobs(out runningJobs);
           

    back to TOC

    Stop Job Execution

    Stops the execution of the job

    Syntax

    void StopJobExecution(string jobId)

    Parameters -

    TypeNameDescription
    stringJob Id
    Specify the ID of the job to stop.

    Example

    
    -          api.StopJobExecution("c0b859fb-554b-43c5-be04-9d3d55b818f0");
    +      

    TypeNameDescription
    stringJob Id
    Specify the ID of the job to stop.

    Example

    
    +          api.StopJobExecution("c0b859fb-554b-43c5-be04-9d3d55b818f0");
           

    back to TOC

    Get Reservation Attachment

    Get Reservation Attachment

    Syntax

    void GetReservationAttachment(string reservationId, string fileName, string saveToFolderPath)

    Parameters -

    TypeNameDescription
    stringReservation Id
    Specify the id of the reservation.
    stringFilename
    Specify the requested filename in the reservation.
    stringSave Path
    Specify the path where the file will be saved

    Example

    
    -          api.GetReservationAttachment("c0b859fb-554b-43c5-be04-9d3d55b818f0","report","c:\");
    +      

    TypeNameDescription
    stringReservation Id
    Specify the id of the reservation.
    stringFilename
    Specify the requested filename in the reservation.
    stringSave Path
    Specify the path where the file will be saved

    Example

    
    +          api.GetReservationAttachment("c0b859fb-554b-43c5-be04-9d3d55b818f0","report","c:\");
           

    back to TOC

    Get Reservation Attachments Details

    Get Reservation Attachments Details

    Syntax

    void GetReservationAttachmentsDetails(string reservationId, out string[] filenames)

    Parameters -

    TypeNameDescription
    stringReservation Id
    Specify the id of the reservation.
    out string[,]Filenames
    List of reservation's saved attachments.

    Example

    
    -		  string[] filenames;
    -          api.GetReservationAttachmentsDetails("c0b859fb-554b-43c5-be04-9d3d55b818f0",out filenames);
    +      

    TypeNameDescription
    stringReservation Id
    Specify the id of the reservation.
    out string[,]Filenames
    List of reservation's saved attachments.

    Example

    
    +		  string[] filenames;
    +          api.GetReservationAttachmentsDetails("c0b859fb-554b-43c5-be04-9d3d55b818f0",out filenames);
           

    back to TOC

    Attach File To Reservation

    Attach File To Reservation

    Syntax

    void AttachFileToReservation(string reservationId, string filePath, string saveFileAs, bool overwriteIfExists)

    Parameters -

    TypeNameDescription
    stringReservation Id
    Specify the id of the reservation.
    stringFile path
    Specify the path of the file that needs to be uploaded as a form-data param named ‘QualiPackage’.
    stringSave file as
    Save file as
    stringOverwrite If Exists
    Overwrite If Exists

    Example

    
    -          api.AttachFileToReservation("c0b859fb-554b-43c5-be04-9d3d55b818f0","c:\report.ext","report1",true);
    +      

    TypeNameDescription
    stringReservation Id
    Specify the id of the reservation.
    stringFile path
    Specify the path of the file that needs to be uploaded as a form-data param named ‘QualiPackage’.
    stringSave file as
    Save file as
    stringOverwrite If Exists
    Overwrite If Exists

    Example

    
    +          api.AttachFileToReservation("c0b859fb-554b-43c5-be04-9d3d55b818f0","c:\report.ext","report1",true);
           

    back to TOC

    Delete File From Reservation

    Delete File From Reservation

    Syntax

    void DeleteFileFromReservation(string reservationId, string fileName)

    Parameters -

    TypeNameDescription
    stringReservation Id
    Specify the id of the reservation.
    stringFilename
    Specify the fullname of the file to delete

    Example

    \ No newline at end of file diff --git a/static/api-docs/2024.1/TestShell-API/TestShell API Library.html b/static/api-docs/latest/TestShell-API/TestShell API Library.html similarity index 99% rename from static/api-docs/2024.1/TestShell-API/TestShell API Library.html rename to static/api-docs/latest/TestShell-API/TestShell API Library.html index 897dd1e92b..b7e441a3bc 100644 --- a/static/api-docs/2024.1/TestShell-API/TestShell API Library.html +++ b/static/api-docs/latest/TestShell-API/TestShell API Library.html @@ -226,7 +226,7 @@ } TestShell API Guide
    - 2024.1.0 TestShell API Library Reference Guide + 2026.1.0 TestShell API Library Reference Guide


    back to TOC
    back to TOC

    DeleteUser

    Deletes the specified user.

    diff --git a/static/api-docs/2024.1/TestShell-API/TestShell Python API.html b/static/api-docs/latest/TestShell-API/TestShell Python API.html similarity index 99% rename from static/api-docs/2024.1/TestShell-API/TestShell Python API.html rename to static/api-docs/latest/TestShell-API/TestShell Python API.html index 3044648f0d..186609b3e9 100644 --- a/static/api-docs/2024.1/TestShell-API/TestShell Python API.html +++ b/static/api-docs/latest/TestShell-API/TestShell Python API.html @@ -321,7 +321,7 @@ hljs.tabReplace = ' '; hljs.initHighlightingOnLoad();



    back to TOC
    back to TOC
    back to TOC

    DeleteUserDeletes a user.

    Deletes the specified user.

    Syntax

    DeleteUser(username)

    Parameters diff --git a/static/api-docs/2024.1/TestShell-API/TestShell TCL API.html b/static/api-docs/latest/TestShell-API/TestShell TCL API.html similarity index 98% rename from static/api-docs/2024.1/TestShell-API/TestShell TCL API.html rename to static/api-docs/latest/TestShell-API/TestShell TCL API.html index 7a34a62d62..10bd218a47 100644 --- a/static/api-docs/2024.1/TestShell-API/TestShell TCL API.html +++ b/static/api-docs/latest/TestShell-API/TestShell TCL API.html @@ -227,7 +227,7 @@ } TestShell TCL API



    ActivateTopologyActivate a topology.

    Resolves all connectivity requests in the sandbox, and marks unshared resources as "in use".

    Syntax

    ::TestShellAPI::ActivateTopology reservationId topologyFullPath ?resultXml?

    @@ -238,117 +238,117 @@ string topologyFullPath

    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::ActivateTopology $reservationId "Temp Automation Resources/TP1" resultXml

    Output

  • resultXml
  • -				<ResponseInfo Name="TP1" MachineName="PRODUCT-W7 - Tcl" Username="admin" Topology="TP1">
    -				<Resources>
    -				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.43.240/1/1" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="Shutdown" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    -				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    -				<ResourceAttribute Name="Speed" Value="10 Mbps" Type="Lookup"/>
    -				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    -				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    -				</ResourceAttributes>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/GenericResource 1234/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.43.240/1/2" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="Shutdown" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    -				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    -				<ResourceAttribute Name="Speed" Value="1 Gbps" Type="Lookup"/>
    -				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    -				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    -				</ResourceAttributes>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/GenericResource 1234/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 3" FolderFullPath="Temp Automation Resources" Address="3" FullAddress="192.168.43.240/1/3" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="Shutdown" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    -				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    -				<ResourceAttribute Name="Speed" Value="1 Gbps" Type="Lookup"/>
    -				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    -				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    -				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    -				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    -				</ResourceAttributes>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Lab Routers/Router 1234/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				</ResourceInfo>
    -				</Resources>
    -				<Routes>
    -				<Route Source="Temp Automation Resources/GenericResource 1234/Port 1" Target="Lab Routers/Router 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Temp Automation Resources/GenericResource 1234/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3" Target="Lab Routers/Router 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Lab Routers/Router 1234/Port 1" Target="Temp Automation Resources/GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Lab Routers/Router 1234/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2" Target="Temp Automation Resources/GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				<Connectors>
    -				</Connectors>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::ActivateTopology $reservationId "Temp Automation Resources/TP1" resultXml

    Output

  • resultXml
  • +				<ResponseInfo Name="TP1" MachineName="PRODUCT-W7 - Tcl" Username="admin" Topology="TP1">
    +				<Resources>
    +				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false">
    +				<ResourceAttributes>
    +				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    +				</ResourceAttributes>
    +				<LockInfo/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.43.240/1/1" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    +				<ResourceAttributes>
    +				<ResourceAttribute Name="Shutdown" Value="Disable" Type="Lookup"/>
    +				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    +				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    +				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    +				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    +				<ResourceAttribute Name="Speed" Value="10 Mbps" Type="Lookup"/>
    +				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    +				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    +				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    +				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    +				</ResourceAttributes>
    +				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    +				<Connections FullPath="Temp Automation Resources/GenericResource 1234/Port 1"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.43.240/1/2" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    +				<ResourceAttributes>
    +				<ResourceAttribute Name="Shutdown" Value="Enable" Type="Lookup"/>
    +				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    +				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    +				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    +				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    +				<ResourceAttribute Name="Speed" Value="1 Gbps" Type="Lookup"/>
    +				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    +				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    +				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    +				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    +				</ResourceAttributes>
    +				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    +				<Connections FullPath="Temp Automation Resources/GenericResource 1234/Port 2"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="L1 Switch 1234/Blade 1/Port 3" FolderFullPath="Temp Automation Resources" Address="3" FullAddress="192.168.43.240/1/3" RootAddress="192.168.43.240" ResourceFamilyName="L1 Switch Port" ResourceModelName="Port EMPMC-36RJ" Alias="" Locked="true">
    +				<ResourceAttributes>
    +				<ResourceAttribute Name="Shutdown" Value="Enable" Type="Lookup"/>
    +				<ResourceAttribute Name="Linked" Value="False" Type="String"/>
    +				<ResourceAttribute Name="Shutdown Unmapped" Value="Enable" Type="Lookup"/>
    +				<ResourceAttribute Name="LIN" Value="Disable" Type="Lookup"/>
    +				<ResourceAttribute Name="Auto Negotiation" Value="True" Type="Boolean"/>
    +				<ResourceAttribute Name="Speed" Value="1 Gbps" Type="Lookup"/>
    +				<ResourceAttribute Name="Duplex" Value="Full" Type="Lookup"/>
    +				<ResourceAttribute Name="Link Match" Value="Enable" Type="Lookup"/>
    +				<ResourceAttribute Name="MDI" Value="AutoSense" Type="Lookup"/>
    +				<ResourceAttribute Name="Auto Negotiation Advertise" Value="Other/Uknown" Type="Lookup"/>
    +				</ResourceAttributes>
    +				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    +				<Connections FullPath="Lab Routers/Router 1234/Port 1"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="true">
    +				<ResourceAttributes/>
    +				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true">
    +				<ResourceAttributes/>
    +				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    +				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="true">
    +				<ResourceAttributes/>
    +				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    +				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="true">
    +				<ResourceAttributes/>
    +				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    +				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="true">
    +				<ResourceAttributes/>
    +				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    +				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="true">
    +				<ResourceAttributes/>
    +				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    +				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true">
    +				<ResourceAttributes/>
    +				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T18:03:50"/>
    +				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    +				</ResourceInfo>
    +				</Resources>
    +				<Routes>
    +				<Route Source="Temp Automation Resources/GenericResource 1234/Port 1" Target="Lab Routers/Router 1234/Port 1" RouteType="bi" Shared="true">
    +				<Segments>
    +				<Segment Source="Temp Automation Resources/GenericResource 1234/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    +				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    +				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3" Target="Lab Routers/Router 1234/Port 1"/>
    +				</Segments>
    +				</Route>
    +				<Route Source="Lab Routers/Router 1234/Port 1" Target="Temp Automation Resources/GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    +				<Segments>
    +				<Segment Source="Lab Routers/Router 1234/Port 1" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    +				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3" Target="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    +				<Segment Source="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2" Target="Temp Automation Resources/GenericResource 1234/Port 2"/>
    +				</Segments>
    +				</Route>
    +				</Routes>
    +				<Connectors>
    +				</Connectors>
    +				</ResponseInfo>
     			

    back to TOC

    AddGroupsToDomainAdd groups to a domain.

    Add groups to a domain.

    Syntax

    ::TestShellAPI::AddGroupsToDomain domainName groupNames readOnly ?resultXml?

    @@ -383,10 +383,10 @@ string groupRole

    Specify the role of the group, possible values: External, Regular, DomainAdmin.
    string - ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::AddNewGroup QA_Users "QA users" resultXml

    Output

  • resultXml
  • -				<ResponseInfo Name="QA_Users" Description="QA users">
    -				<TestShellDomains/>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::AddNewGroup QA_Users "QA users" resultXml

    Output

  • resultXml
  • +				<ResponseInfo Name="QA_Users" Description="QA users">
    +				<TestShellDomains/>
    +				</ResponseInfo>
     			

    back to TOC

    AddNewUserAdd a new TestShell user.

    Configures user login details and permissions. Use AddUsersToGroup to specify the user’s domain access.

    Syntax

    ::TestShellAPI::AddNewUser username password email isActive isAdmin ?resultXml?

    @@ -437,10 +437,10 @@ string shared

    Specify whether all resources will be shared among other enviroments
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::AddResourcesToReservation $reservationId {"Router 1234" "GenericResource 1234"} 1 resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Conflicts/>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::AddResourcesToReservation $reservationId {"Router 1234" "GenericResource 1234"} 1 resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Conflicts/>
    +				</ResponseInfo>
     			

    back to TOC

    AddRoutesToReservationReserve specified routes.

    Adds (but does not connect) routes between all pairs of source and target endpoints, adding additional connectivity ports when required. Use ConnectRoutesInReservation to connect the routes.

    Syntax

    ::TestShellAPI::AddRoutesToReservation reservationId sourceResourcesFullPath targetResourcesFullPath mappingType maxHops routeAlias isShared ?resultXml?

    @@ -461,18 +461,18 @@ boolean isShared

    Specify whether these routes are shared. Shared routes can be used in more than one reservation.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::AddRoutesToReservation $reservationId {"Router 1234/Port 1"} {"GenericResource 1234/Port 1"} bi 2 "a route" 0 resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::AddRoutesToReservation $reservationId {"Router 1234/Port 1"} {"GenericResource 1234/Port 1"} bi 2 "a route" 0 resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Routes>
    +				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    +				<Segments>
    +				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    +				</Segments>
    +				</Route>
    +				</Routes>
    +				</ResponseInfo>
     			

    back to TOC

    AddTopologiesToDomainAdds a list of one or more topologies to a domain.

    Adds a list of one or more topologies to a domain.

    Syntax

    ::TestShellAPI::AddTopologiesToDomain domainName topologyNames validateResourceAvailability ?resultXml?

    @@ -535,9 +535,9 @@ string positionY

    Specify the y coordinate of the App's top left corner.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::AddAppToReservation 077e6b4f-5e70-46b5-aa4b-43e6f039acc3 "Demo App Template" "vCenter VM From Template" 100 100 resultXml

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="AddAppToReservationResponseInfo" ReservedAppName="Added app">
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::AddAppToReservation 077e6b4f-5e70-46b5-aa4b-43e6f039acc3 "Demo App Template" "vCenter VM From Template" 100 100 resultXml

    Output

  • resultXml
  • +				<ResponseInfo xsi:type="AddAppToReservationResponseInfo" ReservedAppName="Added app">
    +				</ResponseInfo>
     			

    back to TOC

    AddServiceToReservationAdd service resource to existing reservation.

    Add service resource to existing reservation.

    Syntax

    ::TestShellAPI::AddServiceToReservation reservationId serviceName alias attributes ?resultXml?

    @@ -552,8 +552,8 @@ list attributes

    Specify a matrix of attributes and associated attribute values.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::AddServiceToReservation 077e6b4f-5e70-46b5-aa4b-43e6f039acc3 "serviceName" "alias" {{"attribute01" "value01"} {"attribute02" "value02"}} resultXml

    Output

  • resultXml
  • -				<ResponseInfo/>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::AddServiceToReservation 077e6b4f-5e70-46b5-aa4b-43e6f039acc3 "serviceName" "alias" {{"attribute01" "value01"} {"attribute02" "value02"}} resultXml

    Output

  • resultXml
  • +				<ResponseInfo/>
     			

    back to TOC

    CopyDomainsResourcesCopy resources to a domain.

    Copy resources from a list of source domains to a target domain.

    Syntax

    ::TestShellAPI::CopyDomainsResources domainNameSources domainNameDestination ?resultXml?

    @@ -590,18 +590,18 @@ string mappingType

    Specify bidirectional or unidirectional as the mapping type.
    Use 'bi' for bidirectional mapping or 'uni' for unidirectional mapping.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::ConnectRoutesInReservation $reservationId {"Router 1234/Port 1" "GenericResource 1234/Port 1"} bi resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::ConnectRoutesInReservation $reservationId {"Router 1234/Port 1" "GenericResource 1234/Port 1"} bi resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Routes>
    +				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    +				<Segments>
    +				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    +				</Segments>
    +				</Route>
    +				</Routes>
    +				</ResponseInfo>
     			

    back to TOC

    CreateFolderAdd a new folder.

    Adds a new folder to the specified path.

    Syntax

    ::TestShellAPI::CreateFolder folderFullPath ?resultXml?

    @@ -632,12 +632,12 @@ string approvalSid

    Leave empty. Used for internal purposes.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateImmediateReservation "immediate reservation" "admin" 30 0 0 0 0 resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Reservation Id="28cb2a71-c8fc-4f41-a22b-e65685ebed14" Name="Immediate reservation" StartTime="2012-06-20T15:05:00" EndTime="2012-06-20T15:35:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Active" ActualEndTime="" CreateDate="2012-06-20T15:05:06" ModificationDate="2012-06-20T15:05:06">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateImmediateReservation "immediate reservation" "admin" 30 0 0 0 resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Reservation Id="28cb2a71-c8fc-4f41-a22b-e65685ebed14" Name="Immediate reservation" StartTime="2012-06-20T15:05:00" EndTime="2012-06-20T15:35:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Active" ActualEndTime="" CreateDate="2012-06-20T15:05:06" ModificationDate="2012-06-20T15:05:06">
    +				<Topologies/>
    +				</Reservation>
    +				</ResponseInfo>
     			

    back to TOC

    CreateImmediateTopologyReservationCreate an imminent reservation.

    Defines a reservation to be started immediately. The reservation will start regardless of conflicting resources.

    Syntax

    ::TestShellAPI::CreateImmediateTopologyReservation reservationName owner durationInMinutes notifyOnStart notifyOnSetupComplete notifyOnEnd notificationMinutesBeforeEnd topologyFullPath globalInputs requirementsInputs additionalInfoInputs ?resultXml?

    @@ -662,41 +662,41 @@ list globalInputs

    Global inputs associated with the specified topology.
    list - requirementsInputs
    - Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. - - The Value field can be used to input to requirement fields with different operator types. - - If pass value as is, it will be treated as "equals", for example if pass "5" it will indicate to system that seek requirement that fulfills =5 - Other operators (aside from equals) can be fulfilled using this convention: - in the value field, write use the format symbol[space]value - for example - - for numeric values - > 4 - < 4 - >= 4 - <= 4 - = 4 - != 4 - - for textual values - = "hi there" - != "hi there" - startswith hi there - endswith hi there - contains hi there - doesnotcontain hi there + requirementsInputs
    + Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. + + The Value field can be used to input to requirement fields with different operator types. + + If pass value as is, it will be treated as "equals", for example if pass "5" it will indicate to system that seek requirement that fulfills =5 + Other operators (aside from equals) can be fulfilled using this convention: + in the value field, write use the format symbol[space]value + for example + + for numeric values + > 4 + < 4 + >= 4 + <= 4 + = 4 + != 4 + + for textual values + = "hi there" + != "hi there" + startswith hi there + endswith hi there + contains hi there + doesnotcontain hi there
    list additionalInfoInputs
    Additional info inputs associated with the specified topology.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateImmediateTopologyReservation "immediate reservation" "admin" 30 0 0 0 0 "Temp Automation Resources/TP1" {{"GlobalInputName_0" "GlobalInputValue_0"} {"GlobalInputName_1" "GlobalInputValue_1"}} {{"ResourceName_0" "RequiredInputName_0" "RequiredInputValue_0" "RequiredInputType_0"}} {{"ResourceName_0" "AdditionalInfoName_0" "AdditionalInfoValue_0"}} resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Reservation Id="28cb2a71-c8fc-4f41-a22b-e65685ebed14" Name="Immediate reservation" StartTime="2012-06-20T15:05:00" EndTime="2012-06-20T15:35:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Active" ActualEndTime="" CreateDate="2012-06-20T15:05:06" ModificationDate="2012-06-20T15:05:06">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateImmediateTopologyReservation "immediate reservation" "admin" 30 0 0 0 "Temp Automation Resources/TP1" {{"GlobalInputName_0" "GlobalInputValue_0"} {"GlobalInputName_1" "GlobalInputValue_1"}} {{"ResourceName_0" "RequiredInputName_0" "RequiredInputValue_0" "RequiredInputType_0"}} {{"ResourceName_0" "AdditionalInfoName_0" "AdditionalInfoValue_0"}} resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Reservation Id="28cb2a71-c8fc-4f41-a22b-e65685ebed14" Name="Immediate reservation" StartTime="2012-06-20T15:05:00" EndTime="2012-06-20T15:35:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Active" ActualEndTime="" CreateDate="2012-06-20T15:05:06" ModificationDate="2012-06-20T15:05:06">
    +				<Topologies/>
    +				</Reservation>
    +				</ResponseInfo>
     			

    back to TOC

    CreateReservationCreate a reservation.

    Defines a new reservation.

    Syntax

    ::TestShellAPI::CreateReservation reservationName owner startTime endTime notifyOnStart notifyOnEnd notifyOnSetupComplete notificationMinutesBeforeEnd isTerminationProtectionEnabled approvalSid ?resultXml?

    @@ -721,12 +721,12 @@ string approvalSid

    Leave empty. Used for internal purposes.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateReservation "test reservation" "admin" "01/01/2026 00:00" "12/21/2026 00:00" 1 1 0 0 0 "" resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Reservation Id="af626b88-458b-4e7a-9054-c03d8cffa260" Name="test reservation" StartTime="2015-01-01T10:00:00" EndTime="2015-01-01T11:00:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Pending" ActualEndTime="" CreateDate="2012-06-20T10:40:47" ModificationDate="2012-06-20T10:40:47">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateReservation "test reservation" "admin" "01/01/1970 00:00" "12/21/2012 00:00" 1 1 10 resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Reservation Id="af626b88-458b-4e7a-9054-c03d8cffa260" Name="test reservation" StartTime="2015-01-01T10:00:00" EndTime="2015-01-01T11:00:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Pending" ActualEndTime="" CreateDate="2012-06-20T10:40:47" ModificationDate="2012-06-20T10:40:47">
    +				<Topologies/>
    +				</Reservation>
    +				</ResponseInfo>
     			

    back to TOC

    CreateTopologyReservationCreate a reservation.

    Defines a new reservation.

    Syntax

    ::TestShellAPI::CreateTopologyReservation reservationName owner startTime endTime notifyOnStart notifyOnSetupComplete notifyOnEnd notificationMinutesBeforeEnd topologyFullPath globalInputs requirementsInputs additionalInfoInputs ?resultXml?

    @@ -753,41 +753,41 @@ list globalInputs

    Global inputs associated with the specified topology.
    list - requirementsInputs
    - Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. - - The Value field can be used to input to requirement fields with different operator types. - - If pass value as is, it will be treated as "equals", for example if pass "5" it will indicate to system that seek requirement that fulfills =5 - Other operators (aside from equals) can be fulfilled using this convention: - in the value field, write use the format symbol[space]value - for example - - for numeric values - > 4 - < 4 - >= 4 - <= 4 - = 4 - != 4 - - for textual values - = "hi there" - != "hi there" - startswith hi there - endswith hi there - contains hi there - doesnotcontain hi there + requirementsInputs
    + Requirements inputs associated with the specified topology. For example: {['Resource Name', 'Input Name', 'Value', 'AttributeType';]}, AttributeType can be one of the following: Attributes/Models/Quantity. + + The Value field can be used to input to requirement fields with different operator types. + + If pass value as is, it will be treated as "equals", for example if pass "5" it will indicate to system that seek requirement that fulfills =5 + Other operators (aside from equals) can be fulfilled using this convention: + in the value field, write use the format symbol[space]value + for example + + for numeric values + > 4 + < 4 + >= 4 + <= 4 + = 4 + != 4 + + for textual values + = "hi there" + != "hi there" + startswith hi there + endswith hi there + contains hi there + doesnotcontain hi there
    list additionalInfoInputs
    Additional info inputs associated with the specified topology.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateTopologyReservation "test reservation" "admin" "01/01/1970 00:00" "12/21/2012 00:00" 1 1 10 "Temp Automation Resources/TP1" {{"GlobalInputName_0" "GlobalInputValue_0"} {"GlobalInputName_1" "GlobalInputValue_1"}} {{"ResourceName_0" "RequiredInputName_0" "RequiredInputValue_0" "RequiredInputType_0"}} {{"ResourceName_0" "AdditionalInfoName_0" "AdditionalInfoValue_0"}} resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Reservation Id="af626b88-458b-4e7a-9054-c03d8cffa260" Name="test reservation" StartTime="2015-01-01T10:00:00" EndTime="2015-01-01T11:00:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Pending" ActualEndTime="" CreateDate="2012-06-20T10:40:47" ModificationDate="2012-06-20T10:40:47">
    -				<Topologies/>
    -				</Reservation>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateTopologyReservation "test reservation" "admin" "01/01/1970 00:00" "12/21/2012 00:00" 1 1 10 "Temp Automation Resources/TP1" {{"GlobalInputName_0" "GlobalInputValue_0"} {"GlobalInputName_1" "GlobalInputValue_1"}} {{"ResourceName_0" "RequiredInputName_0" "RequiredInputValue_0" "RequiredInputType_0"}} {{"ResourceName_0" "AdditionalInfoName_0" "AdditionalInfoValue_0"}} resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Reservation Id="af626b88-458b-4e7a-9054-c03d8cffa260" Name="test reservation" StartTime="2015-01-01T10:00:00" EndTime="2015-01-01T11:00:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Pending" ActualEndTime="" CreateDate="2012-06-20T10:40:47" ModificationDate="2012-06-20T10:40:47">
    +				<Topologies/>
    +				</Reservation>
    +				</ResponseInfo>
     			

    back to TOC

    CreateResourceAdd a new resource.

    Adds a new resource.

    Syntax

    ::TestShellAPI::CreateResource resourceFamily resourceModel resourceName resourceAddress folderFullPath parentResourceFullPath resourceDescription ?resultXml?

    @@ -808,26 +808,21 @@ string resourceDescription

    Provide a short description to help identify the resource.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    -
    #create chassis -
    ::TestShellAPI::CreateResource "Generic Chassis" "Generic Chassis Model" "Router 1234" "192.168.1.200" "Lab Routers" "" "a generic router" resultXml -
    #create a child port for the chassis -
    ::TestShellAPI::CreateResource "Generic Port" "Generic Port Model" "Port 1" "1" "Lab Routers" "Router 1234" "a generic router port" resultXml -

    Output

  • resultXml
  • -				<ResponseInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.200" FullAddress="192.168.1.200" RootAddress="192.168.1.200" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Locked="false" Excluded="false" Description="a generic router">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<Domains/>
    -				<ChildResources/>
    -				<LockInfo/>
    -				</ResponseInfo>
    -				<ResponseInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.200/1" RootAddress="192.168.1.200" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="false" Excluded="false" Description="a generic router port">
    -				<ResourceAttributes/>
    -				<Domains/>
    -				<ChildResources/>
    -				<LockInfo/>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example


    #create chassis
    ::TestShellAPI::CreateResource "Generic Chassis" "Generic Chassis Model" "Router 1234" "192.168.1.200" "Lab Routers" "" "a generic router" resultXml
    #create a child port for the chassis
    ::TestShellAPI::CreateResource "Generic Port" "Generic Port Model" "Port 1" "1" "Lab Routers" "Router 1234" "a generic router port" resultXml

    Output

  • resultXml
  • +				<ResponseInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.200" FullAddress="192.168.1.200" RootAddress="192.168.1.200" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Locked="false" Excluded="false" Description="a generic router">
    +				<ResourceAttributes>
    +				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    +				</ResourceAttributes>
    +				<Domains/>
    +				<ChildResources/>
    +				<LockInfo/>
    +				</ResponseInfo>
    +				<ResponseInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.200/1" RootAddress="192.168.1.200" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="false" Excluded="false" Description="a generic router port">
    +				<ResourceAttributes/>
    +				<Domains/>
    +				<ChildResources/>
    +				<LockInfo/>
    +				</ResponseInfo>
     			

    back to TOC
    back to TOC
    back to TOC

    CreateRouteInReservationCreate a route between two resources.

    Creates a route between the specified source and target resources.

    Syntax

    ::TestShellAPI::CreateRouteInReservation reservationId sourceResourceFullPath targetResourceFullPath overrideActiveRoutes mappingType maxHops routeAlias isShared ?resultXml?

    Parameters @@ -863,18 +853,18 @@ boolean isShared

    Specify whether this route is shared. Shared routes can be used in more than one reservation.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateRouteInReservation $reservationId "Router 1234/Port 1" "GenericResource 1234/Port 1" 1 bi 2 "a route" 0 resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateRouteInReservation $reservationId "Router 1234/Port 1" "GenericResource 1234/Port 1" 1 bi 2 "a route" 0 resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Routes>
    +				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    +				<Segments>
    +				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    +				</Segments>
    +				</Route>
    +				</Routes>
    +				</ResponseInfo>
     			

    back to TOC

    CreateRoutesInReservationCreate routes between the listed source and target resources.

    Create routes between the listed source and target resources. Routes will be created for each pair of source and target resources.

    Syntax

    ::TestShellAPI::CreateRoutesInReservation reservationId sourceResourcesFullPath targetResourcesFullPath overrideActiveRoutes mappingType maxHops routeAlias isShared ?resultXml?

    @@ -897,18 +887,18 @@ boolean isShared

    Specify whether these routes are shared. Shared routes can be used in more than one reservation.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateRoutesInReservation $reservationId {"Router 1234/Port 1"} {"GenericResource 1234/Port 2"} 1 uni 2 "uni route" 0 resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 2" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::CreateRoutesInReservation $reservationId {"Router 1234/Port 1"} {"GenericResource 1234/Port 2"} 1 uni 2 "uni route" 0 resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Routes>
    +				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    +				<Segments>
    +				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 2" Target="GenericResource 1234/Port 2"/>
    +				</Segments>
    +				</Route>
    +				</Routes>
    +				</ResponseInfo>
     			

    back to TOC
    back to TOC

    DeleteReservationDelete a reservation.

    - Deletes the specified reservation. - Important: DeleteReservation does not perform teardown and therefore does not revert and clean up the sandbox environment. + ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::DeleteGroup QA_Users resultXml

    back to TOC
    back to TOC
    back to TOC
    back to TOC

    DeleteUserDeletes a user.

    Deletes the specified user.

    Syntax

    ::TestShellAPI::DeleteUser username ?resultXml?

    Parameters @@ -988,18 +986,18 @@ list endpoints

    The routes endpoints to disconnect.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::DisconnectRoutesInReservation $reservationId {"Router 1234/Port 1" "GenericResource 1234/Port 1"} resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Cisco Catalyst 1/Blade 1/Port 1" Target="IXIA 400T/Card 1/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Cisco Catalyst 1/Blade 1/Port 1" Target="ONPATH 3901 1/Blade01/Port15"/>
    -				<Segment Source="ONPATH 3901 1/Blade01/Port15" Target="ONPATH 3901 1/Blade01/Port09"/>
    -				<Segment Source="ONPATH 3901 1/Blade01/Port09" Target="IXIA 400T/Card 1/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::DisconnectRoutesInReservation $reservationId {"Router 1234/Port 1" "GenericResource 1234/Port 1"} resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Routes>
    +				<Route Source="Cisco Catalyst 1/Blade 1/Port 1" Target="IXIA 400T/Card 1/Port 1" RouteType="bi" Shared="true">
    +				<Segments>
    +				<Segment Source="Cisco Catalyst 1/Blade 1/Port 1" Target="ONPATH 3901 1/Blade01/Port15"/>
    +				<Segment Source="ONPATH 3901 1/Blade01/Port15" Target="ONPATH 3901 1/Blade01/Port09"/>
    +				<Segment Source="ONPATH 3901 1/Blade01/Port09" Target="IXIA 400T/Card 1/Port 1"/>
    +				</Segments>
    +				</Route>
    +				</Routes>
    +				</ResponseInfo>
     			

    back to TOC

    DecryptPasswordDecrypt a password.

    Decrypt a password.

    Syntax

    ::TestShellAPI::DecryptPassword encryptedString ?resultXml?

    @@ -1346,15 +1344,15 @@ boolean includeExcludedResources

    Specify whether to retrieve resources that are excluded
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::FindResources "Generic Chassis" resourceModel {{"SW_Version1.3"}} "true" resourceFullName exactName includeSubResources resourceAddress resourceUniqueIdentifier maxResults includeExcludedResources resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Resources>
    -				<Resource Name="Router 1234" Description="a new description for the resource" Address="192.168.1.201" FullName="Lab Routers/Router 1234" FullPath="Lab Routers/Router 1234" FullAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Status="Available" Permission="ReadOnly">
    -				<Reservations/>
    -				<UsageSummary NumOfNotInReservation="130" NumOfReserved="14" NumOfShared="0"/>
    -				</Resource>
    -				</Resources>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::FindResources "Generic Chassis" resourceModel {{"SW_Version1.3"}} "true" resourceFullName exactName includeSubResources resourceAddress resourceUniqueIdentifier maxResults includeExcludedResources resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Resources>
    +				<Resource Name="Router 1234" Description="a new description for the resource" Address="192.168.1.201" FullName="Lab Routers/Router 1234" FullPath="Lab Routers/Router 1234" FullAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Status="Available" Permission="ReadOnly">
    +				<Reservations/>
    +				<UsageSummary NumOfNotInReservation="130" NumOfReserved="14" NumOfShared="0"/>
    +				</Resource>
    +				</Resources>
    +				</ResponseInfo>
     			

    back to TOC

    FindResourcesInTimeRange

    Retrieves resources that match all the specified search parameters, and all reservations in the specified time range associated with the search results.

    Syntax

    ::TestShellAPI::FindResourcesInTimeRange resourceFamily resourceModel fromTime untilTime attributeValues showAllDomains resourceFullName exactName includeSubResources resourceAddress resourceUniqueIdentifier maxResults ?resultXml?

    @@ -1385,15 +1383,15 @@ number maxResults

    Specify the maximum number of resources to return.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::FindResourcesInTimeRange "Generic Chassis" resourceModel "03/01/2012 00:00" "05/31/2012 23:59" {{"SW_Version1.3"}} "false" resourceFullName exactName includeSubResources resourceAddress resourceUniqueIdentifier maxResults resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Resources>
    -				<Resource Name="Router 1234" Description="a new description for the resource" Address="192.168.1.201" FullName="Lab Routers/Router 1234" FullPath="Lab Routers/Router 1234" FullAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Status="Available" Permission="ReadOnly">
    -				<Reservations/>
    -				<UsageSummary NumOfNotInReservation="130" NumOfReserved="14" NumOfShared="0"/>
    -				</Resource>
    -				</Resources>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::FindResourcesInTimeRange "Generic Chassis" resourceModel "03/01/2012 00:00" "05/31/2012 23:59" {{"SW_Version1.3"}} "false" resourceFullName exactName includeSubResources resourceAddress resourceUniqueIdentifier maxResults resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Resources>
    +				<Resource Name="Router 1234" Description="a new description for the resource" Address="192.168.1.201" FullName="Lab Routers/Router 1234" FullPath="Lab Routers/Router 1234" FullAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Status="Available" Permission="ReadOnly">
    +				<Reservations/>
    +				<UsageSummary NumOfNotInReservation="130" NumOfReserved="14" NumOfShared="0"/>
    +				</Resource>
    +				</Resources>
    +				</ResponseInfo>
     			

    back to TOC

    GetReservationResourcesPositionsGet resource positions in a reservation.

    Retrieves the x/y coordinates for all resources in the reservation's diagram.

    Syntax

    ::TestShellAPI::GetReservationResourcesPositions reservationId ?resultXml?

    @@ -1402,10 +1400,10 @@ string reservationId

    Specify the string that represents the reservation’s unique identifier.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetReservationResourcesPositions $reservationId resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<layout/>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetReservationResourcesPositions $reservationId resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<layout/>
    +				</ResponseInfo>
     			

    back to TOC

    GetRoutesSolutionGet solution for specified routes.

    Calculates possible routes between the supplied endpoints and returns their details, without saving, connecting or modifying the reservation in any way.

    Syntax

    ::TestShellAPI::GetRoutesSolution reservationId sourceResourcesFullPath targetResourcesFullPath mappingType maxHops isShared ?resultXml?

    @@ -1424,18 +1422,18 @@ boolean isShared

    Specify whether these routes are shared. Shared routes can be used in more than one reservation.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetRoutesSolution $reservationId {"Router 1234/Port 1"} {"GenericResource 1234/Port 1"} bi 2 0 resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetRoutesSolution $reservationId {"Router 1234/Port 1"} {"GenericResource 1234/Port 1"} bi 2 0 resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Routes>
    +				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    +				<Segments>
    +				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    +				</Segments>
    +				</Route>
    +				</Routes>
    +				</ResponseInfo>
     			

    back to TOC

    GenerateUtilizationReportGenerate a utilization report.

    Generates a utilization report for the specified resources. To generate a report for all resources, leave the resourceFullName and resourceModel parameters blank.

    Syntax

    ::TestShellAPI::GenerateUtilizationReport resourceFamilyName fromDate toDate resourceFullName resourceModelName includeChildResources groupBy utilizationReportType ?resultXml?

    @@ -1464,49 +1462,49 @@ Parameters

    TypeNameDescription
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetActiveTopologyNames resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Topologies>
    -				<TopologyName>Temp Automation Resources/TP1</TopologyName>
    -				</Topologies>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetActiveTopologyNames resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Topologies>
    +				<TopologyName>Temp Automation Resources/TP1</TopologyName>
    +				</Topologies>
    +				</ResponseInfo>
     			

    back to TOC

    GetAllUsersDetailsRetrieve all users and user settings.

    Retrieves all users and their settings.

    Syntax

    ::TestShellAPI::GetAllUsersDetails ?resultXml?

    Parameters

    TypeNameDescription
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetAllUsersDetails resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Users>
    -				<User Name="admin" IsAdmin="true" IsActive="true" IsDomainAdmin="false">
    -				<Groups>
    -				<Group Name="System Administrators" Description="Built in group, all members have administrative rights.">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				</Groups>
    -				</User>
    -				<User Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="user1234@work.com">
    -				<Groups>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				</Groups>
    -				</User>
    -				<User Name="User2345" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="">
    -				<Groups>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				</Groups>
    -				</User>
    -				</Users>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetAllUsersDetails resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Users>
    +				<User Name="admin" IsAdmin="true" IsActive="true" IsDomainAdmin="false">
    +				<Groups>
    +				<Group Name="System Administrators" Description="Built in group, all members have administrative rights.">
    +				<TestShellDomains>
    +				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    +				</TestShellDomains>
    +				</Group>
    +				<Group Name="Everyone">
    +				<TestShellDomains/>
    +				</Group>
    +				</Groups>
    +				</User>
    +				<User Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="user1234@work.com">
    +				<Groups>
    +				<Group Name="Everyone">
    +				<TestShellDomains/>
    +				</Group>
    +				</Groups>
    +				</User>
    +				<User Name="User2345" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="">
    +				<Groups>
    +				<Group Name="Everyone">
    +				<TestShellDomains/>
    +				</Group>
    +				</Groups>
    +				</User>
    +				</Users>
    +				</ResponseInfo>
     			

    back to TOC

    GetAttributeValueRetrieve an attribute's value.

    Retrieves the value of the specified attribute

    Syntax

    ::TestShellAPI::GetAttributeValue resourceFullPath attributeName ?resultXml?

    @@ -1525,15 +1523,13 @@ string topologyPath

    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    string - ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    -
    ::TestShellAPI::GetCategoriesOfTopology "Folder1/exampleTopology" resultXml -

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="CategoriesOfTopologyInfo">
    -				<Categories>
    -				<Category Name="sampleCategory" Value="hello"/>
    -				<Category Name="Category2" Value="bye"/>
    -				</Categories>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example


    ::TestShellAPI::GetCategoriesOfTopology "Folder1/exampleTopology" resultXml

    Output

  • resultXml
  • +				<ResponseInfo xsi:type="CategoriesOfTopologyInfo">
    +				<Categories>
    +				<Category Name="sampleCategory" Value="hello"/>
    +				<Category Name="Category2" Value="bye"/>
    +				</Categories>
    +				</ResponseInfo>
     			

    back to TOC

    GetCurrentReservationsRetrieve current reservations.

    Retrieves current reservations for the specified owner. If an owner is not provided, this method retrieves all current reservations.

    Syntax

    ::TestShellAPI::GetCurrentReservations reservationOwner ?resultXml?

    @@ -1542,18 +1538,18 @@ string reservationOwner

    Specify the user name of the reservation owner.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetCurrentReservations admin resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Reservations>
    -				<Reservation Id="65b45c9b-7694-4a42-b8fa-0239109b5246" Name="Reservation" StartTime="2012-06-19T14:30:00" EndTime="2012-06-19T16:30:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Overtime" ProvisioningStatus="Ready" ActualEndTime="" CreateDate="2012-06-19T14:30:23" ModificationDate="2012-06-19T14:37:55" DomainName="Global">
    -				<Topologies>
    -				<TopologyName>Topologies/Lab 1/Topology</TopologyName>
    -				<TopologyName>Topologies/Lab 1/TrafficTopology</TopologyName>
    -				<TopologyName>Topologies/Lab 1/TrafficTopology1</TopologyName>
    -				</Topologies>
    -				</Reservation>
    -				</Reservations>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetCurrentReservations admin resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Reservations>
    +				<Reservation Id="65b45c9b-7694-4a42-b8fa-0239109b5246" Name="Reservation" StartTime="2012-06-19T14:30:00" EndTime="2012-06-19T16:30:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Overtime" ProvisioningStatus="Ready" ActualEndTime="" CreateDate="2012-06-19T14:30:23" ModificationDate="2012-06-19T14:37:55" DomainName="Global">
    +				<Topologies>
    +				<TopologyName>Topologies/Lab 1/Topology</TopologyName>
    +				<TopologyName>Topologies/Lab 1/TrafficTopology</TopologyName>
    +				<TopologyName>Topologies/Lab 1/TrafficTopology1</TopologyName>
    +				</Topologies>
    +				</Reservation>
    +				</Reservations>
    +				</ResponseInfo>
     			

    back to TOC

    GetDomainDetailsRetrieves a domain's details including groups, topologies and resources associated with the specified domain.

    Retrieves a domain's details including groups, topologies and resources associated with the specified domain.

    Syntax

    ::TestShellAPI::GetDomainDetails domainName ?resultXml?

    @@ -1562,18 +1558,18 @@ string domainName

    Specify the name of the domain.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetDomainDetails Domain1 resultXml

    Output

  • resultXml
  • -				<ResponseInfo Name="Domain1" Description="" TopologiesFolder="Root\Domain1 topologies">
    -				<Groups>
    -				<Group Name="Animals" Role="Regular"></Group>
    -				</Groups>
    -				<Topologies>
    -				<Topology Name="Topology" Description=""></Topology>
    -				</Topologies>
    -				<Resources>
    -				<Resource Name="b1" Path="b1"></Resource>
    -				</Resources>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetDomainDetails Domain1 resultXml

    Output

  • resultXml
  • +				<ResponseInfo Name="Domain1" Description="" TopologiesFolder="Root\Domain1 topologies">
    +				<Groups>
    +				<Group Name="Animals" Role="Regular"></Group>
    +				</Groups>
    +				<Topologies>
    +				<Topology Name="Topology" Description=""></Topology>
    +				</Topologies>
    +				<Resources>
    +				<Resource Name="b1" Path="b1"></Resource>
    +				</Resources>
    +				</ResponseInfo>
     			

    back to TOC

    GetFolderContentRetrieve content for a specified path.

    Retrieves content for the specified path.

    Syntax

    ::TestShellAPI::GetFolderContent fullPath showAllDomains ?resultXml?

    @@ -1584,13 +1580,13 @@ boolean showAllDomains

    Show all domains associated with the logged in user.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetFolderContent "Lab Routers" 0 resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<ContentArray>
    -				<Content Name="Router 1234" Type="Resource"/>
    -				<Content Name="Router 4321" Type="Resource"/>
    -				</ContentArray>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetFolderContent "Lab Routers" 0 resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<ContentArray>
    +				<Content Name="Router 1234" Type="Resource"/>
    +				<Content Name="Router 4321" Type="Resource"/>
    +				</ContentArray>
    +				</ResponseInfo>
     			

    back to TOC

    MoveFolderAllows to change the location of a folder (and all its content, including sub folders) in the folder hierarchy.

    Move a folder (and all its content, including sub folders) in the folder hierarchy.

    Syntax

    ::TestShellAPI::MoveFolder originalFolder targetFolder ?resultXml?

    @@ -1609,103 +1605,103 @@ string groupName

    Specify the name of the group.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetGroupDomains QA_Users resultXml

    Output

  • resultXml
  • -				<ResponseInfo Name="QA_Users" Description="QA users">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetGroupDomains QA_Users resultXml

    Output

  • resultXml
  • +				<ResponseInfo Name="QA_Users" Description="QA users">
    +				<TestShellDomains>
    +				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    +				</TestShellDomains>
    +				</ResponseInfo>
     			

    back to TOC

    GetGroupsDetailsRetrieve all system groups.

    Retrieves all groups, including members, roles and associated domains for each group.

    Syntax

    ::TestShellAPI::GetGroupsDetails ?resultXml?

    Parameters

    TypeNameDescription
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetGroupsDetails resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Groups>
    -				<Group Name="System Administrators" Description="Built in group, all members have administrative rights." GroupRole="SystemAdmin">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users>
    -				<User Name="admin" IsAdmin="true" IsActive="true" IsDomainAdmin="false">
    -				<Groups>
    -				<Group Name="System Administrators" Description="Built in group, all members have administrative rights.">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				<Group Name="Lab1">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Lab1" Description="" Id="71aa4f7e-174d-4df1-b50a-59e98f09005c"/>
    -				</TestShellDomains>
    -				</Group>
    -				</Groups>
    -				</User>
    -				</Users>
    -				</Group>
    -				<Group Name="Domain Administrators" Description="Built in group, all members have administrative Domain rights." GroupRole="DomainAdmin">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users>
    -				<User Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="true" Email="">
    -				<Groups>
    -				<Group Name="Domain Administrators" Description="Built in group, all members have administrative Domain rights.">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				</Groups>
    -				</User>
    -				</Users>
    -				</Group>
    -				<Group Name="QA_Users" Description="QA users" GroupRole="Regular">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users>
    -				<User Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="user1234@work.com">
    -				<Groups>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				<Group Name="QA_Users" Description="QA users">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				</Groups>
    -				</User>
    -				<User Name="User2345" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="">
    -				<Groups>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				<Group Name="QA_Users" Description="QA users">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				</Group>
    -				</Groups>
    -				</User>
    -				</Users>
    -				</Group>
    -				<Group Name="RND_Users" GroupRole="Regular">
    -				<TestShellDomains>
    -				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    -				</TestShellDomains>
    -				<Users/>
    -				</Group>
    -				</Groups>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetGroupsDetails resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Groups>
    +				<Group Name="System Administrators" Description="Built in group, all members have administrative rights." GroupRole="SystemAdmin">
    +				<TestShellDomains>
    +				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    +				</TestShellDomains>
    +				<Users>
    +				<User Name="admin" IsAdmin="true" IsActive="true" IsDomainAdmin="false">
    +				<Groups>
    +				<Group Name="System Administrators" Description="Built in group, all members have administrative rights.">
    +				<TestShellDomains>
    +				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    +				</TestShellDomains>
    +				</Group>
    +				<Group Name="Everyone">
    +				<TestShellDomains/>
    +				</Group>
    +				<Group Name="Lab1">
    +				<TestShellDomains>
    +				<TestShellDomain Name="Lab1" Description="" Id="71aa4f7e-174d-4df1-b50a-59e98f09005c"/>
    +				</TestShellDomains>
    +				</Group>
    +				</Groups>
    +				</User>
    +				</Users>
    +				</Group>
    +				<Group Name="Domain Administrators" Description="Built in group, all members have administrative Domain rights." GroupRole="DomainAdmin">
    +				<TestShellDomains>
    +				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    +				</TestShellDomains>
    +				<Users>
    +				<User Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="true" Email="">
    +				<Groups>
    +				<Group Name="Domain Administrators" Description="Built in group, all members have administrative Domain rights.">
    +				<TestShellDomains>
    +				<TestShellDomain Name="Global" Description="" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    +				</TestShellDomains>
    +				</Group>
    +				<Group Name="Everyone">
    +				<TestShellDomains/>
    +				</Group>
    +				</Groups>
    +				</User>
    +				</Users>
    +				</Group>
    +				<Group Name="QA_Users" Description="QA users" GroupRole="Regular">
    +				<TestShellDomains>
    +				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    +				</TestShellDomains>
    +				<Users>
    +				<User Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="user1234@work.com">
    +				<Groups>
    +				<Group Name="Everyone">
    +				<TestShellDomains/>
    +				</Group>
    +				<Group Name="QA_Users" Description="QA users">
    +				<TestShellDomains>
    +				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    +				</TestShellDomains>
    +				</Group>
    +				</Groups>
    +				</User>
    +				<User Name="User2345" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="">
    +				<Groups>
    +				<Group Name="Everyone">
    +				<TestShellDomains/>
    +				</Group>
    +				<Group Name="QA_Users" Description="QA users">
    +				<TestShellDomains>
    +				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    +				</TestShellDomains>
    +				</Group>
    +				</Groups>
    +				</User>
    +				</Users>
    +				</Group>
    +				<Group Name="RND_Users" GroupRole="Regular">
    +				<TestShellDomains>
    +				<TestShellDomain Name="Global" Description="A domain that includes all available resources" Id="dbaf480c-09f7-46d3-a2e2-e35d3e374a16"/>
    +				</TestShellDomains>
    +				<Users/>
    +				</Group>
    +				</Groups>
    +				</ResponseInfo>
     			

    back to TOC

    GetLockedResourcesRetrieve a list of locked resources.

    Retrieves locked resources for a specific user, a specific computer, or a specific folder. If none of these are specified, this method retrieves the list of locked resources for all users, on all machines, in all folders.

    Syntax

    ::TestShellAPI::GetLockedResources user machine folderFullPath ?resultXml?

    @@ -1718,17 +1714,17 @@ string folderFullPath

    Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetLockedResources admin "" "" resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Reservations>
    -				<Reservation Name="Immediate reservation" Owner="admin" Created="2012-06-20T15:05:06">
    -				<LockedResources>
    -				<Resource Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="true" Excluded="false"/>
    -				<Resource Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="true" Excluded="false"/>
    -				</LockedResources>
    -				</Reservation>
    -				</Reservations>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetLockedResources admin "" "" resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Reservations>
    +				<Reservation Name="Immediate reservation" Owner="admin" Created="2012-06-20T15:05:06">
    +				<LockedResources>
    +				<Resource Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="true" Excluded="false"/>
    +				<Resource Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="true" Excluded="false"/>
    +				</LockedResources>
    +				</Reservation>
    +				</Reservations>
    +				</ResponseInfo>
     			

    back to TOC

    GetReservationDetailsRetrieve reservation details and parameters.

    Retrieves all details and parameters for a specified reservation, including its resources, routes and route segments, topologies, and reservation conflicts.The data cached for 5 seconds.

    Syntax

    ::TestShellAPI::GetReservationDetails reservationId disableCache ?resultXml?

    @@ -1739,55 +1735,55 @@ boolean disableCache

    Specify if the reservation detail is new or cached
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetReservationDetails $reservationId true resultXml

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="GetReservationDescriptionResponseInfo">
    -				<ReservationDescription Id="a97ce9c2-48eb-420e-85b7-2318106c35a3" Name="Sandbox-5-16-2017 15-59" StartTime="16/05/2017 15:59:00" EndTime="16/05/2017 17:59:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Started" ProvisioningStatus="Not Run" ActualEndTime="" CreateDate="16/05/2017 15:59:21" ModificationDate="16/05/2017 16:01:38" DomainName="Global">
    -				<Topologies>
    -				<TopologyName>Environment-03-02-2015 18-21</TopologyName>
    -				</Topologies>
    -				<TopologiesInfo>
    -				<Topology Name="Environment-03-02-2015 18-21" Alias="Environment-03-02-2015 18-21">
    -				<Type>Regular</Type>
    -				<State>Pending</State>
    -				</Topology>
    -				</TopologiesInfo>
    -				<PermittedUsers>
    -				<PermittedUser>admin</PermittedUser>
    -				</PermittedUsers>
    -				<Resources>
    -				<ReservedResource Name="Database_ec513a05" FolderFullPath="" FullAddress="NA" Shared="false" Availability="Available" Locked="false" Released="false" ResourceFamilyName="Generic App Family" ResourceModelName="Generic App Model" CreatedByUser="admin" CreatedInDomain="Global" CreatedInReservation="a97ce9c2-48eb-420e-85b7-2318106c35a3">
    -				<VmDetails UID="4232175a-6a64-bb3c-1cca-e8699845549b" CloudProviderFullName="testing">
    -				<VmCustomParams>
    -				<VmCustomParam Name="ip_regex" Value="" />
    -				<VmCustomParam Name="auto_power_on" Value="True" />
    -				<VmCustomParam Name="auto_power_off" Value="True" />
    -				<VmCustomParam Name="wait_for_ip" Value="True" />
    -				<VmCustomParam Name="auto_delete" Value="True" />
    -				<VmCustomParam Name="refresh_ip_timeout" Value="600" />
    -				<VmCustomParam Name="autoload" Value="True" />
    -				</VmCustomParams>
    -				</VmDetails>
    -				<AppDetails AppName="Database" />
    -				</ReservedResource>
    -				</Resources>
    -				<TopologiesReservedResources />
    -				<Conflicts />
    -				<TopologiesRouteInfo />
    -				<TopologiesResourcesAttributeInfo />
    -				<TopologiesInstructionsInfo />
    -				<ActiveRoutesInfo />
    -				<RequestedRoutesInfo />
    -				<Connectors />
    -				<Apps>
    -				<ReservedApp Name="MonitoringApp">
    -				<LogicalResource Family="Monitoring" Model="DefaultMonitoring"/>
    -				</ReservedApp>
    -				</Apps>
    -				<ReservationLiveStatus ReservationId="a97ce9c2-48eb-420e-85b7-2318106c35a3" />
    -				<SetupStage>None</SetupStage>
    -				<Services />
    -				</ReservationDescription>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetReservationDetails $reservationId true resultXml

    Output

  • resultXml
  • +				<ResponseInfo xsi:type="GetReservationDescriptionResponseInfo">
    +				<ReservationDescription Id="a97ce9c2-48eb-420e-85b7-2318106c35a3" Name="Sandbox-5-16-2017 15-59" StartTime="16/05/2017 15:59:00" EndTime="16/05/2017 17:59:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Started" ProvisioningStatus="Not Run" ActualEndTime="" CreateDate="16/05/2017 15:59:21" ModificationDate="16/05/2017 16:01:38" DomainName="Global">
    +				<Topologies>
    +				<TopologyName>Environment-03-02-2015 18-21</TopologyName>
    +				</Topologies>
    +				<TopologiesInfo>
    +				<Topology Name="Environment-03-02-2015 18-21" Alias="Environment-03-02-2015 18-21">
    +				<Type>Regular</Type>
    +				<State>Pending</State>
    +				</Topology>
    +				</TopologiesInfo>
    +				<PermittedUsers>
    +				<PermittedUser>admin</PermittedUser>
    +				</PermittedUsers>
    +				<Resources>
    +				<ReservedResource Name="Database_ec513a05" FolderFullPath="" FullAddress="NA" Shared="false" Availability="Available" Locked="false" Released="false" ResourceFamilyName="Generic App Family" ResourceModelName="Generic App Model" CreatedByUser="admin" CreatedInDomain="Global" CreatedInReservation="a97ce9c2-48eb-420e-85b7-2318106c35a3">
    +				<VmDetails UID="4232175a-6a64-bb3c-1cca-e8699845549b" CloudProviderFullName="testing">
    +				<VmCustomParams>
    +				<VmCustomParam Name="ip_regex" Value="" />
    +				<VmCustomParam Name="auto_power_on" Value="True" />
    +				<VmCustomParam Name="auto_power_off" Value="True" />
    +				<VmCustomParam Name="wait_for_ip" Value="True" />
    +				<VmCustomParam Name="auto_delete" Value="True" />
    +				<VmCustomParam Name="refresh_ip_timeout" Value="600" />
    +				<VmCustomParam Name="autoload" Value="True" />
    +				</VmCustomParams>
    +				</VmDetails>
    +				<AppDetails AppName="Database" />
    +				</ReservedResource>
    +				</Resources>
    +				<TopologiesReservedResources />
    +				<Conflicts />
    +				<TopologiesRouteInfo />
    +				<TopologiesResourcesAttributeInfo />
    +				<TopologiesInstructionsInfo />
    +				<ActiveRoutesInfo />
    +				<RequestedRoutesInfo />
    +				<Connectors />
    +				<Apps>
    +				<ReservedApp Name="MonitoringApp">
    +				<LogicalResource Family="Monitoring" Model="DefaultMonitoring"/>
    +				</ReservedApp>
    +				</Apps>
    +				<ReservationLiveStatus ReservationId="a97ce9c2-48eb-420e-85b7-2318106c35a3" />
    +				<SetupStage>None</SetupStage>
    +				<Services />
    +				</ReservationDescription>
    +				</ResponseInfo>
     			

    back to TOC

    GetResourcesLabelsInReservationGet resources associated with labels in reservation.

    Retrieves all resources associated with labels in the specified reservation.

    Syntax

    ::TestShellAPI::GetResourcesLabelsInReservation reservationId ?resultXml?

    @@ -1796,19 +1792,19 @@ string reservationId

    Specify the string that represents the reservation’s unique identifier.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourcesLabelsInReservation "af626b88-458b-4e7a-9054-c03d8cffa260" resultXml

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="GetResourcesLabelsInTopologyResponseInfo">
    -				<Resources>				
    -				<Resource Name="res" Type="Resource" LabelName="label1">
    -				</Resource>
    -				<Resource Name="res2" Type="Resource" LabelName="label2">
    -				</Resource>
    -				<Resource Name="service1" Type="Service" LabelName="label3">
    -				</Resource>
    -				<Resource Name="app1" Type="App" LabelName="label4">
    -				</Resource>
    -				</Resources>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourcesLabelsInReservation "af626b88-458b-4e7a-9054-c03d8cffa260" resultXml

    Output

  • resultXml
  • +				<ResponseInfo xsi:type="GetResourcesLabelsInTopologyResponseInfo">
    +				<Resources>				
    +				<Resource Name="res" Type="Resource" LabelName="label1">
    +				</Resource>
    +				<Resource Name="res2" Type="Resource" LabelName="label2">
    +				</Resource>
    +				<Resource Name="service1" Type="Service" LabelName="label3">
    +				</Resource>
    +				<Resource Name="app1" Type="App" LabelName="label4">
    +				</Resource>
    +				</Resources>
    +				</ResponseInfo>
     			

    back to TOC

    GetStickyNotesInReservationGet sticky notes in reservation.

    Retrieves all sticky notes in the specified reservation.

    Syntax

    ::TestShellAPI::GetStickyNotesInReservation reservationId ?resultXml?

    @@ -1817,15 +1813,15 @@ string reservationId

    Specify the string that represents the reservation’s unique identifier.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetStickyNotesInReservation "c3e48d7d-affb-4efc-baee-31c01f0f4be2" resultXml

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="GetStickyNotesInReservationResponseInfo">
    -				<StickyNotes>
    -				<StickyNote Id="14acdd6f-90c9-413a-bb2f-de73421483ac" Content="Phase 1 - Planning" Color="#FFBD47">
    -				</StickyNote>
    -				<StickyNote Id="cf60f589-dbfb-4153-8da1-256b05438bc5" Content="Requirements Gathering" LabelName="#94B0DA">
    -				</StickyNote>
    -				</StickyNotes>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetStickyNotesInReservation "c3e48d7d-affb-4efc-baee-31c01f0f4be2" resultXml

    Output

  • resultXml
  • +				<ResponseInfo xsi:type="GetStickyNotesInReservationResponseInfo">
    +				<StickyNotes>
    +				<StickyNote Id="14acdd6f-90c9-413a-bb2f-de73421483ac" Content="Phase 1 - Planning" Color="#FFBD47">
    +				</StickyNote>
    +				<StickyNote Id="cf60f589-dbfb-4153-8da1-256b05438bc5" Content="Requirements Gathering" LabelName="#94B0DA">
    +				</StickyNote>
    +				</StickyNotes>
    +				</ResponseInfo>
     			

    back to TOC

    GetReservationInputsRetrieves all topology inputs for a specified reservation.

    Retrieves all topology inputs for a specified reservation.

    Syntax

    ::TestShellAPI::GetReservationInputs reservationId ?resultXml?

    @@ -1880,20 +1876,20 @@ string resourceFullPath

    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourceCommands "Router 1234" resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Commands>
    -				<Command Name="ExampleCommand" DisplayName="Example Command" >
    -				<Parameters>
    -				<Parameter Name="userParam1" Type="String" Mandatory="false" DefaultValue="Hello"/>
    -				<Parameter Name="userParam2" Type="Numeric" Mandatory="false" DefaultValue="42"/>
    -				</Parameters>
    -				</Command>
    -				<Command Name="ResetDriver" DisplayName="Reset Driver" >
    -				<Parameters/>
    -				</Command>
    -				</Commands>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourceCommands "Router 1234" resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Commands>
    +				<Command Name="ExampleCommand" DisplayName="Example Command" >
    +				<Parameters>
    +				<Parameter Name="userParam1" Type="String" Mandatory="false" DefaultValue="Hello"/>
    +				<Parameter Name="userParam2" Type="Numeric" Mandatory="false" DefaultValue="42"/>
    +				</Parameters>
    +				</Command>
    +				<Command Name="ResetDriver" DisplayName="Reset Driver" >
    +				<Parameters/>
    +				</Command>
    +				</Commands>
    +				</ResponseInfo>
     			

    back to TOC

    GetServiceCommandsRetrieve service driver commands.

    Retrieves driver commands and parameters for a specified service.

    Syntax

    ::TestShellAPI::GetServiceCommands serviceName ?resultXml?

    @@ -1902,20 +1898,20 @@ string serviceName

    Specify the service name.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetServiceCommands "VLAN" resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Commands>
    -				<Command Name="ExampleCommand" DisplayName="Example Command" >
    -				<Parameters>
    -				<Parameter Name="userParam1" Type="String" Mandatory="false" DefaultValue="Hello"/>
    -				<Parameter Name="userParam2" Type="Numeric" Mandatory="false" DefaultValue="42"/>
    -				</Parameters>
    -				</Command>
    -				<Command Name="ResetDriver" DisplayName="Reset Driver" >
    -				<Parameters/>
    -				</Command>
    -				</Commands>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetServiceCommands "VLAN" resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Commands>
    +				<Command Name="ExampleCommand" DisplayName="Example Command" >
    +				<Parameters>
    +				<Parameter Name="userParam1" Type="String" Mandatory="false" DefaultValue="Hello"/>
    +				<Parameter Name="userParam2" Type="Numeric" Mandatory="false" DefaultValue="42"/>
    +				</Parameters>
    +				</Command>
    +				<Command Name="ResetDriver" DisplayName="Reset Driver" >
    +				<Parameters/>
    +				</Command>
    +				</Commands>
    +				</ResponseInfo>
     			

    back to TOC

    GetResourceConnectedCommandsRetrieve resource driver commands.

    Gets commands which are added to the resource from connected resources such as power or virtualization.

    Syntax

    ::TestShellAPI::GetResourceConnectedCommands resourceFullPath ?resultXml?

    @@ -1924,20 +1920,20 @@ string resourceFullPath

    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourceConnectedCommands "Router 1234" resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Commands>
    -				<Command Name="SpinUp" Tag="virtualization" DisplayName="Example virtualiztion command" >
    -				<Parameters>
    -				<Parameter Name="userParam1" Type="String" Mandatory="false" DefaultValue="Hello"/>
    -				<Parameter Name="userParam2" Type="Numeric" Mandatory="false" DefaultValue="42"/>
    -				</Parameters>
    -				</Command>
    -				<Command Name="PowerOn" Tag="power" DisplayName="Example power command" >
    -				<Parameters/>
    -				</Command>
    -				</Commands>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourceConnectedCommands "Router 1234" resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Commands>
    +				<Command Name="SpinUp" Tag="virtualization" DisplayName="Example virtualiztion command" >
    +				<Parameters>
    +				<Parameter Name="userParam1" Type="String" Mandatory="false" DefaultValue="Hello"/>
    +				<Parameter Name="userParam2" Type="Numeric" Mandatory="false" DefaultValue="42"/>
    +				</Parameters>
    +				</Command>
    +				<Command Name="PowerOn" Tag="power" DisplayName="Example power command" >
    +				<Parameters/>
    +				</Command>
    +				</Commands>
    +				</ResponseInfo>
     			

    back to TOC

    GetResourceDetailsRetrieve the resource parameters and attributes.

    Retrieves resource descriptions for the specified resource, and a matrix of all its associated attributes and attribute values.

    Syntax

    ::TestShellAPI::GetResourceDetails resourceFullPath showAllDomains ?resultXml?

    @@ -1948,24 +1944,24 @@ boolean showAllDomains

    Show all domains associated with the logged in user.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourceDetails "Lab Routers/Router 1234" 0 resultXml

    Output

  • resultXml
  • -        <ResponseInfo Name="Router 1234" DriverName="Router Driver" FolderFullPath="Lab Routers" Address="192.168.1.200" FullAddress="192.168.1.200" RootAddress="192.168.1.200" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Locked="false" Excluded="false" Description="a generic router" Permissions="ReadOnly" ResourceLiveStatusName="name1" ResourceLiveStatusDescription="description1" >
    -        <ResourceAttributes>
    -        <ResourceAttribute Name="SW_Version" Value="" Type="String"></ResourceAttribute>
    -        </ResourceAttributes>
    -        <Domains></Domains>
    -        <ChildResources>
    -        <ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.200/1" RootAddress="192.168.1.200" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="false" Excluded="false" Description="a generic router port" Permissions="ReadOnly">
    -        <ResourceAttributes></ResourceAttributes>
    -        <Domains></Domains>
    -        <LockInfo></LockInfo>
    -        </ResourceInfo>
    -        </ChildResources>
    -        <LockInfo></LockInfo>
    -        <CreatedInReservation></CreatedInReservation>
    -        <CreatedByUser></CreatedByUser>
    -        <CreatedInDomain></CreatedInDomain>
    -        </ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourceDetails "Lab Routers/Router 1234" 0 resultXml

    Output

  • resultXml
  • +        <ResponseInfo Name="Router 1234" DriverName="Router Driver" FolderFullPath="Lab Routers" Address="192.168.1.200" FullAddress="192.168.1.200" RootAddress="192.168.1.200" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Locked="false" Excluded="false" Description="a generic router" Permissions="ReadOnly" ResourceLiveStatusName="name1" ResourceLiveStatusDescription="description1" >
    +        <ResourceAttributes>
    +        <ResourceAttribute Name="SW_Version" Value="" Type="String"></ResourceAttribute>
    +        </ResourceAttributes>
    +        <Domains></Domains>
    +        <ChildResources>
    +        <ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.200/1" RootAddress="192.168.1.200" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Locked="false" Excluded="false" Description="a generic router port" Permissions="ReadOnly">
    +        <ResourceAttributes></ResourceAttributes>
    +        <Domains></Domains>
    +        <LockInfo></LockInfo>
    +        </ResourceInfo>
    +        </ChildResources>
    +        <LockInfo></LockInfo>
    +        <CreatedInReservation></CreatedInReservation>
    +        <CreatedByUser></CreatedByUser>
    +        <CreatedInDomain></CreatedInDomain>
    +        </ResponseInfo>
           

    back to TOC

    GetResourcesAttributeValuesRetrieve the resources attributes.

    Retrieves resources associated attributes and attribute values.

    Syntax

    ::TestShellAPI::GetResourcesAttributeValues resourceFullNames ?resultXml?

    @@ -1974,15 +1970,15 @@ list resourceFullNames

    Specify the resource names array. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourcesAttributeValues {"Lab Routers/Router 1234"} resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<ResourceAttributeInfoList>
    -				<ResourceAttributeInfo FullPath="Lab Routers/Router 1234">
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String">
    -				</ResourceAttribute>
    -				</ResourceAttributeInfo>
    -				</ResourceAttributeInfoList>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourcesAttributeValues {"Lab Routers/Router 1234"} resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<ResourceAttributeInfoList>
    +				<ResourceAttributeInfo FullPath="Lab Routers/Router 1234">
    +				<ResourceAttribute Name="SW_Version" Value="" Type="String">
    +				</ResourceAttribute>
    +				</ResourceAttributeInfo>
    +				</ResourceAttributeInfoList>
    +				</ResponseInfo>
     			

    back to TOC

    GetResourceListRetrieve a list of resources for a specified path.

    Retrieves resources and resource values for the specified folder path.

    Syntax

    ::TestShellAPI::GetResourceList folderFullPath ?resultXml?

    @@ -1991,17 +1987,17 @@ string folderFullPath

    Specify the full folder name. Include the full path from the root to a specific folder, separated by slashes. For example: ResourceFamilyFolder/ResourceModelFolder.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourceList "Lab Routers" resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Resources>
    -				<Resource Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.200" FullAddress="192.168.1.200" RootAddress="192.168.1.200" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Locked="false" Excluded="false">
    -				<LockInfo/>
    -				</Resource>
    -				<Resource Name="Router 4321" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Locked="false" Excluded="false">
    -				<LockInfo/>
    -				</Resource>
    -				</Resources>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourceList "Lab Routers" resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Resources>
    +				<Resource Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.200" FullAddress="192.168.1.200" RootAddress="192.168.1.200" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Locked="false" Excluded="false">
    +				<LockInfo/>
    +				</Resource>
    +				<Resource Name="Router 4321" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Locked="false" Excluded="false">
    +				<LockInfo/>
    +				</Resource>
    +				</Resources>
    +				</ResponseInfo>
     			

    back to TOC

    GetResourceLiveStatusGets the live status of a resource.

    Gets the live status of the resource.

    Syntax

    ::TestShellAPI::GetResourceLiveStatus resourceFullPath ?resultXml?

    @@ -2010,9 +2006,9 @@ string resourceFullPath

    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourceLiveStatus {"myPath"} ? resultXml ?

    Output

  • resultXml
  • -				<ResponseInfo type="ResourceLiveStatusInfo" liveStatusName="Online" liveStatusDescription="Resource was responding to pings at 12/12/2013 10:35 AM"/>
    -				</Response>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourceLiveStatus {"myPath"} ? resultXml ?

    Output

  • resultXml
  • +				<ResponseInfo type="ResourceLiveStatusInfo" liveStatusName="Online" liveStatusDescription="Resource was responding to pings at 12/12/2013 10:35 AM"/>
    +				</Response>
     			

    back to TOC

    GetReservationsLiveStatusGets the live status the reservations.

    Gets the live status of the reservations.

    Syntax

    ::TestShellAPI::GetReservationsLiveStatus reservationsId ?resultXml?

    @@ -2021,12 +2017,12 @@ list reservationsId

    Specifies a string array that represents reservation unique identifiers.
    string - ?resultXml?
    Specify the variable for the XML output.

    Example

    ::TestShellAPI::GetReservationsLiveStatus {"a2f1b35e-3deb-42ee-b70d-78189dd10d56"} resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<ReservationLiveStatuses>
    -				<ReservationLiveStatus ReservationId="a2f1b35e-3deb-42ee-b70d-78189dd10d56" ReservationLiveStatusName="Pass" ReservationLiveStatusDescription="My Description"></ReservationLiveStatus>
    -				</ReservationLiveStatuses>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.

    Example

    ::TestShellAPI::GetReservationsLiveStatus {"a2f1b35e-3deb-42ee-b70d-78189dd10d56"} resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<ReservationLiveStatuses>
    +				<ReservationLiveStatus ReservationId="a2f1b35e-3deb-42ee-b70d-78189dd10d56" ReservationLiveStatusName="Pass" ReservationLiveStatusDescription="My Description"></ReservationLiveStatus>
    +				</ReservationLiveStatuses>
    +				</ResponseInfo>
     			

    back to TOC

    GetResourceMappingsRetrieve current mappings for specified resources.

    Retrieves mappings for a list of one or more resources.

    Syntax

    ::TestShellAPI::GetResourceMappings resources ?resultXml?

    @@ -2035,10 +2031,10 @@ list resources

    Specify a list of resources.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourceMappings {"L1 Switch 1234/Blade 1/Port 2"} resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Mapping Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2" RouteType="uni"/>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourceMappings {"L1 Switch 1234/Blade 1/Port 2"} resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Mapping Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2" RouteType="uni"/>
    +				</ResponseInfo>
     			

    back to TOC

    GetRouteSegmentsRetrieves all the ports on the route.

    Retrieves all the ports on the route from the selected endpoint to the target endpoint.

    Syntax

    ::TestShellAPI::GetRouteSegments resource ?resultXml?

    @@ -2047,18 +2043,18 @@ string resource

    Specify the resource name. You can also include the full path from the root to the resource before the resource name, separated by slashes. For example: FolderName/RouterA/Port1.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetRouteSegments "Router 1234/Port 1" resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetRouteSegments "Router 1234/Port 1" resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Routes>
    +				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" RouteType="bi" Shared="true">
    +				<Segments>
    +				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    +				</Segments>
    +				</Route>
    +				</Routes>
    +				</ResponseInfo>
     			

    back to TOC

    GetScheduledReservationsRetrieve scheduled reservations for a specified time range.

    Retrieves all reservations scheduled between the specified start and end times.

    Syntax

    ::TestShellAPI::GetScheduledReservations fromTime untilTime ownerName ?resultXml?

    @@ -2071,14 +2067,14 @@ string ownerName

    Specify reservation owner name
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetScheduledReservations "01/01/2015 08:00" "01/01/2015 12:00" resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Reservations>
    -				<Reservation Id="af626b88-458b-4e7a-9054-c03d8cffa260" Name="test reservation" StartTime="2015-01-01T10:00:00" EndTime="2015-01-01T12:00:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Pending" ProvisioningStatus="Ready" ActualEndTime="" CreateDate="2012-06-20T10:40:47" ModificationDate="2012-06-20T10:45:16" DomainName="Global">
    -				<Topologies/>
    -				</Reservation>
    -				</Reservations>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetScheduledReservations "01/01/2015 08:00" "01/01/2015 12:00" resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Reservations>
    +				<Reservation Id="af626b88-458b-4e7a-9054-c03d8cffa260" Name="test reservation" StartTime="2015-01-01T10:00:00" EndTime="2015-01-01T12:00:00" RecurrenceType="None" Owner="admin" Booked="true" Status="Pending" ProvisioningStatus="Ready" ActualEndTime="" CreateDate="2012-06-20T10:40:47" ModificationDate="2012-06-20T10:45:16" DomainName="Global">
    +				<Topologies/>
    +				</Reservation>
    +				</Reservations>
    +				</ResponseInfo>
     			

    back to TOC

    GetServerDateAndTimeRetrieve the server's date and time.

    Retrieves the server’s UTC date and time.

    Syntax

    ::TestShellAPI::GetServerDateAndTime ?resultXml?

    @@ -2093,20 +2089,20 @@ string reservationId

    Specify the string that represents the reservation’s unique identifier.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetTopologyCommands $reservationId resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Commands>
    -				<Command Name="ExampleCommand">
    -				<Parameters>
    -				<Parameter Name="userParam1" Type="String" Mandatory="false" DefaultValue="Hello"/>
    -				<Parameter Name="userParam2" Type="Numeric" Mandatory="false" DefaultValue="42"/>
    -				</Parameters>
    -				</Command>
    -				<Command Name="Setup">
    -				<Parameters/>
    -				</Command>
    -				</Commands>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetTopologyCommands $reservationId resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Commands>
    +				<Command Name="ExampleCommand">
    +				<Parameters>
    +				<Parameter Name="userParam1" Type="String" Mandatory="false" DefaultValue="Hello"/>
    +				<Parameter Name="userParam2" Type="Numeric" Mandatory="false" DefaultValue="42"/>
    +				</Parameters>
    +				</Command>
    +				<Command Name="Setup">
    +				<Parameters/>
    +				</Command>
    +				</Commands>
    +				</ResponseInfo>
     			

    back to TOC

    GetEnvironmentCommandsRetrieve available environment commands in a reservation.

    Retrieves driver commands and parameters for a specified reservation.

    Syntax

    ::TestShellAPI::GetEnvironmentCommands reservationId ?resultXml?

    @@ -2115,20 +2111,20 @@ string reservationId

    Specify the string that represents the reservation’s unique identifier.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetEnvironmentCommands $reservationId resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Commands>
    -				<Command Name="ExampleCommand">
    -				<Parameters>
    -				<Parameter Name="userParam1" Type="String" Mandatory="false" DefaultValue="Hello"/>
    -				<Parameter Name="userParam2" Type="Numeric" Mandatory="false" DefaultValue="42"/>
    -				</Parameters>
    -				</Command>
    -				<Command Name="Setup">
    -				<Parameters/>
    -				</Command>
    -				</Commands>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetEnvironmentCommands $reservationId resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Commands>
    +				<Command Name="ExampleCommand">
    +				<Parameters>
    +				<Parameter Name="userParam1" Type="String" Mandatory="false" DefaultValue="Hello"/>
    +				<Parameter Name="userParam2" Type="Numeric" Mandatory="false" DefaultValue="42"/>
    +				</Parameters>
    +				</Command>
    +				<Command Name="Setup">
    +				<Parameters/>
    +				</Command>
    +				</Commands>
    +				</ResponseInfo>
     			

    back to TOC

    GetTopologyDetailsRetrieve the topology parameters and attributes.

    Retrieves all resources and attributes associated with the specified topology.

    Syntax

    ::TestShellAPI::GetTopologyDetails topologyFullPath ?resultXml?

    @@ -2137,86 +2133,86 @@ string topologyFullPath

    Specify topology (name or full path). For full path, specify the full path from the root to the topology, separated by slashes. For example: FolderName/Topologies/TopologyName.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetTopologyDetails "Temp Automation Resources/TP1" resultXml

    Output

  • resultXml
  • -				<ResponseInfo Name="TP1" Owner="admin" Type="Build" State="Ready">
    -				<Resources>
    -				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false" Excluded="false" WillBeLocked="false">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				</ResourceInfo>
    -				</Resources>
    -				<AbstractResources/>
    -				<Routes>
    -				<Route Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				<Instructions>
    -				Topology instructions.
    -				</Instructions>
    -				<Driver>
    -				ExampleTopologyDriver
    -				</Driver>
    -				<GlobalInputs ParamName="Some global input"></GlobalInputs>
    -				<RequirementsInputs ParamName="Model" ResourceName="test*" InputType="Models">
    -				<PossibleValues>Test Model</PossibleValues>
    -				</RequirementsInputs>
    -				<RequirementsInputs ParamName="Speed" ResourceName="test*" InputType="Attributes">
    -				<PossibleValues>10 Mbps</PossibleValues>
    -				<PossibleValues>100 Mbps</PossibleValues>
    -				<PossibleValues>1 Gbps</PossibleValues>
    -				<PossibleValues>10 Gbps</PossibleValues>
    -				</<RequirementsInputs>
    -				<AdditionalInfoInputs ParamName="Test" ResourceName="test*"></AdditionalInfoInputs>
    -				<ParentTopology Name="Template01">
    -				<Type>Build</Type>
    -				<State>Pending</State>
    -				</ParentTopology>
    -				<MaxDuration>02:00:00</MaxDuration>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetTopologyDetails "Temp Automation Resources/TP1" resultXml

    Output

  • resultXml
  • +				<ResponseInfo Name="TP1" Owner="admin" Type="Build" State="Ready">
    +				<Resources>
    +				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false" Excluded="false" WillBeLocked="false">
    +				<ResourceAttributes>
    +				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    +				</ResourceAttributes>
    +				<LockInfo/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="false" Excluded="false" WillBeLocked="true">
    +				<ResourceAttributes/>
    +				<LockInfo/>
    +				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="false" Excluded="false" WillBeLocked="true">
    +				<ResourceAttributes/>
    +				<LockInfo/>
    +				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="false" Excluded="false" WillBeLocked="true">
    +				<ResourceAttributes/>
    +				<LockInfo/>
    +				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="false" Excluded="false" WillBeLocked="true">
    +				<ResourceAttributes/>
    +				<LockInfo/>
    +				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="false" Excluded="false" WillBeLocked="true">
    +				<ResourceAttributes/>
    +				<LockInfo/>
    +				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="false" Excluded="false" WillBeLocked="true">
    +				<ResourceAttributes/>
    +				<LockInfo/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="false" Excluded="false" WillBeLocked="true">
    +				<ResourceAttributes/>
    +				<LockInfo/>
    +				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    +				</ResourceInfo>
    +				</Resources>
    +				<AbstractResources/>
    +				<Routes>
    +				<Route Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1" RouteType="bi" Shared="true">
    +				<Segments>
    +				<Segment Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1"/>
    +				</Segments>
    +				</Route>
    +				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    +				<Segments>
    +				<Segment Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2"/>
    +				</Segments>
    +				</Route>
    +				</Routes>
    +				<Instructions>
    +				Topology instructions.
    +				</Instructions>
    +				<Driver>
    +				ExampleTopologyDriver
    +				</Driver>
    +				<GlobalInputs ParamName="Some global input"></GlobalInputs>
    +				<RequirementsInputs ParamName="Model" ResourceName="test*" InputType="Models">
    +				<PossibleValues>Test Model</PossibleValues>
    +				</RequirementsInputs>
    +				<RequirementsInputs ParamName="Speed" ResourceName="test*" InputType="Attributes">
    +				<PossibleValues>10 Mbps</PossibleValues>
    +				<PossibleValues>100 Mbps</PossibleValues>
    +				<PossibleValues>1 Gbps</PossibleValues>
    +				<PossibleValues>10 Gbps</PossibleValues>
    +				</<RequirementsInputs>
    +				<AdditionalInfoInputs ParamName="Test" ResourceName="test*"></AdditionalInfoInputs>
    +				<ParentTopology Name="Template01">
    +				<Type>Build</Type>
    +				<State>Pending</State>
    +				</ParentTopology>
    +				<MaxDuration>02:00:00</MaxDuration>
    +				</ResponseInfo>
     			

    back to TOC

    GetResourcesLabelsInTopologyGet resources associated with labels in topology.

    Retrieves all resources associated with labels in the specified topology.

    Syntax

    ::TestShellAPI::GetResourcesLabelsInTopology topologyName ?resultXml?

    @@ -2225,19 +2221,19 @@ string topologyName

    Specify the topology name.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourcesLabelsInTopology "topo1" resultXml

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="GetResourcesLabelsInTopologyResponseInfo">
    -				<Resources>				
    -				<Resource Name="res" Type="Resource" LabelName="label1">
    -				</Resource>
    -				<Resource Name="res2" Type="Abstract Resource" LabelName="label2">
    -				</Resource>
    -				<Resource Name="service1" Type="Service" LabelName="label3">
    -				</Resource>
    -				<Resource Name="app1" Type="App" LabelName="label4">
    -				</Resource>
    -				</Resources>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetResourcesLabelsInTopology "topo1" resultXml

    Output

  • resultXml
  • +				<ResponseInfo xsi:type="GetResourcesLabelsInTopologyResponseInfo">
    +				<Resources>				
    +				<Resource Name="res" Type="Resource" LabelName="label1">
    +				</Resource>
    +				<Resource Name="res2" Type="Abstract Resource" LabelName="label2">
    +				</Resource>
    +				<Resource Name="service1" Type="Service" LabelName="label3">
    +				</Resource>
    +				<Resource Name="app1" Type="App" LabelName="label4">
    +				</Resource>
    +				</Resources>
    +				</ResponseInfo>
     			

    back to TOC

    GetStickyNotesInTopologyGet sticky notes in topology.

    Retrieves all sticky notes in the specified topology.

    Syntax

    ::TestShellAPI::GetStickyNotesInTopology topologyName ?resultXml?

    @@ -2246,15 +2242,15 @@ string topologyName

    Specify the topology name.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetStickyNotesInTopology "topo1" resultXml

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="GetStickyNotesInTopologyResponseInfo">
    -				<StickyNotes>
    -				<StickyNote Id="14acdd6f-90c9-413a-bb2f-de73421483ac" Content="Phase 1 - Planning" Color="#FFBD47">
    -				</StickyNote>
    -				<StickyNote Id="cf60f589-dbfb-4153-8da1-256b05438bc5" Content="Requirements Gathering" LabelName="#94B0DA">
    -				</StickyNote>
    -				</StickyNotes>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetStickyNotesInTopology "topo1" resultXml

    Output

  • resultXml
  • +				<ResponseInfo xsi:type="GetStickyNotesInTopologyResponseInfo">
    +				<StickyNotes>
    +				<StickyNote Id="14acdd6f-90c9-413a-bb2f-de73421483ac" Content="Phase 1 - Planning" Color="#FFBD47">
    +				</StickyNote>
    +				<StickyNote Id="cf60f589-dbfb-4153-8da1-256b05438bc5" Content="Requirements Gathering" LabelName="#94B0DA">
    +				</StickyNote>
    +				</StickyNotes>
    +				</ResponseInfo>
     			

    back to TOC

    GetTopologiesByCategoryRetrieves the full path of all topologies.

    Retrives full topology path for each topology that contains given category name (and value if entered).

    Syntax

    ::TestShellAPI::GetTopologiesByCategory categoryName categoryValue ?resultXml?

    @@ -2265,39 +2261,37 @@ string categoryValue

    Specify the category's value/sub category
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    -
    ::TestShellAPI::GetTopologiesByCategory lookUpCategory bonjour resultXml -

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Topologies>
    -				<FullPath>
    -				Root\otherTopology
    -				</FullPath>
    -				<FullPath>
    -				dir1/myTopology
    -				</FullPath>
    -				</Topologies>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example


    ::TestShellAPI::GetTopologiesByCategory lookUpCategory bonjour resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Topologies>
    +				<FullPath>
    +				Root\otherTopology
    +				</FullPath>
    +				<FullPath>
    +				dir1/myTopology
    +				</FullPath>
    +				</Topologies>
    +				</ResponseInfo>
     			

    back to TOC

    GetTopologyCategoriesRetrieves all topology categories.

    Retrieves all root categories from 'Environment' catalog.

    Syntax

    ::TestShellAPI::GetTopologyCategories ?resultXml?

    Parameters

    TypeNameDescription
    string - ?resultXml?
    Specify the variable for the XML output.

    Example

    ::TestShellAPI::GetTopologyCategories resultXml

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="CategoryListInfo">
    -				<Categories>
    -				<Name>
    -				category1
    -				</Name>
    -				<Name>
    -				otherCategory
    -				</Name>
    -				<Name>
    -				lookUpCategory
    -				</Name>
    -				</Categories>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.

    Example

    ::TestShellAPI::GetTopologyCategories resultXml

    Output

  • resultXml
  • +				<ResponseInfo xsi:type="CategoryListInfo">
    +				<Categories>
    +				<Name>
    +				category1
    +				</Name>
    +				<Name>
    +				otherCategory
    +				</Name>
    +				<Name>
    +				lookUpCategory
    +				</Name>
    +				</Categories>
    +				</ResponseInfo>
     			

    back to TOC

    GetCategoriesRetrieves all the logged in user's root categories and sub categories

    Retrieves all the logged in user's root categories and sub categories for Topologies and Services from the 'Environment' catalog.

    Syntax

    ::TestShellAPI::GetCategories type ?resultXml?

    @@ -2306,13 +2300,13 @@ string type

    Specify the categoriy type: Services, Environment or empty for both.
    string - ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetCategories "" resultXml

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="CategoryListBriefInfo">
    -				<Categories>
    -				<Category Name="root1/bpc1" Description="blueprint category" Type="blueprint"/>
    -				<Category Name="root2/svcc1" Description="service category" Type="service"/>
    -				</Categories>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetCategories "" resultXml

    Output

  • resultXml
  • +				<ResponseInfo xsi:type="CategoryListBriefInfo">
    +				<Categories>
    +				<Category Name="root1/bpc1" Description="blueprint category" Type="blueprint"/>
    +				<Category Name="root2/svcc1" Description="service category" Type="service"/>
    +				</Categories>
    +				</ResponseInfo>
     			

    back to TOC

    GetUserDetailsRetrieve a user's settings.

    Retrieves the specified user's configuration settings and associated domains.

    Syntax

    ::TestShellAPI::GetUserDetails username ?resultXml?

    @@ -2321,27 +2315,27 @@ string username

    Specify the name of the user.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetUserDetails User1234 resultXml

    Output

  • resultXml
  • -				<ResponseInfo Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="user1234@work.com">
    -				<Groups>
    -				<Group Name="Everyone">
    -				<TestShellDomains/>
    -				</Group>
    -				</Groups>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetUserDetails User1234 resultXml

    Output

  • resultXml
  • +				<ResponseInfo Name="User1234" IsAdmin="false" IsActive="true" IsDomainAdmin="false" Email="user1234@work.com">
    +				<Groups>
    +				<Group Name="Everyone">
    +				<TestShellDomains/>
    +				</Group>
    +				</Groups>
    +				</ResponseInfo>
     			

    back to TOC

    GetAbstractTemplateListRetrieve a list of abstract templates.

    Retrieve a list of abstract templates.

    Syntax

    ::TestShellAPI::GetAbstractTemplateList ?resultXml?

    Parameters

    TypeNameDescription
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetAbstractTemplateList resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<AbstractTemplates>
    -				<AbstractTemplate ResourceFamilyName="VM Instance" ResourceModelName="VM" Name="abs" Description="" Owner="admin" DomainName="Global" CreateDate="5/18/2014 6:09:07 AM" Valid="true"></AbstractTemplate>
    -				<AbstractTemplate ResourceFamilyName="VM Instance" ResourceModelName="VM" Name="abs2" Description="" Owner="admin" DomainName="Global" CreateDate="5/18/2014 6:09:07 AM" Valid="true"></AbstractTemplate>
    -				</AbstractTemplates>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetAbstractTemplateList resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<AbstractTemplates>
    +				<AbstractTemplate ResourceFamilyName="VM Instance" ResourceModelName="VM" Name="abs" Description="" Owner="admin" DomainName="Global" CreateDate="5/18/2014 6:09:07 AM" Valid="true"></AbstractTemplate>
    +				<AbstractTemplate ResourceFamilyName="VM Instance" ResourceModelName="VM" Name="abs2" Description="" Owner="admin" DomainName="Global" CreateDate="5/18/2014 6:09:07 AM" Valid="true"></AbstractTemplate>
    +				</AbstractTemplates>
    +				</ResponseInfo>
     			

    back to TOC

    GetServicesRetrieve a list of services and their attributes.

    Retrieve a list of services and their attributes.

    Syntax

    ::TestShellAPI::GetServices categoryName serviceName ?resultXml?

    @@ -2352,17 +2346,17 @@ string serviceName

    The name of the service you want to receive.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetServices resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Services>
    -				<Service Name="ServiceModel1" Description="">
    -				<Attributes>
    -				<Attribute Name="Alarm State" Type="String" IsRequired="false" DefaultValue="On" PossibleValues="On,Off"> </Attribute>
    -				<Attribute Name="Part Number" Type="String" IsRequired="false" DefaultValue="1" PossibleValues=""> </Attribute>
    -				</Attributes>
    -				</Service>
    -				</Services>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetServices resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Services>
    +				<Service Name="ServiceModel1" Description="">
    +				<Attributes>
    +				<Attribute Name="Alarm State" Type="String" IsRequired="false" DefaultValue="On" PossibleValues="On,Off"> </Attribute>
    +				<Attribute Name="Part Number" Type="String" IsRequired="false" DefaultValue="1" PossibleValues=""> </Attribute>
    +				</Attributes>
    +				</Service>
    +				</Services>
    +				</ResponseInfo>
     			

    back to TOC

    GetReservationServicesPositionsGet service positions in a reservation.

    Retrieves the x/y coordinates for all services in the reservation's diagram.

    Syntax

    ::TestShellAPI::GetReservationServicesPositions reservationId ?resultXml?

    @@ -2371,10 +2365,10 @@ string reservationId

    Specify the string that represents the reservation’s unique identifier.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetReservationServicesPositions $reservationId resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<layout/>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetReservationServicesPositions $reservationId resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<layout/>
    +				</ResponseInfo>
     			

    back to TOC

    IncludeResourceInclude a resource.

    Includes a specified resource.

    Syntax

    ::TestShellAPI::IncludeResource resourceFullPath ?resultXml?

    @@ -2431,12 +2425,12 @@ string domainName

    Specify the name of the domain. If no domain is specified, it logs the user in to the global (default) domain.
    string - ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::Logon admin admin Global resultXml

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="LogonResponseInfo">
    -				<Domain Name="Global" Description="A domain that includes all available resources" DomainId="dbaf480c-09f7-46d3-a2e2-e35d3e374a16" />
    -				<User Name="admin" IsAdmin="false" IsActive="false" IsDomainAdmin="false" />
    -				<Token Token="Yzhumq0qVkyIwyMkxzk7wQ==" />
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::Logon admin admin Global resultXml

    Output

  • resultXml
  • +				<ResponseInfo xsi:type="LogonResponseInfo">
    +				<Domain Name="Global" Description="A domain that includes all available resources" DomainId="dbaf480c-09f7-46d3-a2e2-e35d3e374a16" />
    +				<User Name="admin" IsAdmin="false" IsActive="false" IsDomainAdmin="false" />
    +				<Token Token="Yzhumq0qVkyIwyMkxzk7wQ==" />
    +				</ResponseInfo>
     			

    back to TOC

    LogoutTNSessionLogout from a console port TN session.

    Logs the user out from a console port TN session.

    Syntax

    ::TestShellAPI::LogoutTNSession reservationId resourceFullPath consolePortsFullPath baudRate ?resultXml?

    @@ -2579,10 +2573,10 @@ boolean deleteDeployedApps

    Specify false to block deletion of deployed apps when removing them from reservation - only applies to resources of that are deployed apps, when applied to other resources argument is ignored. Parameter is optional and can be left empty
    string - ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::RemoveResourcesFromReservation $reservationId {"Router 1234" "GenericResource 1234"} resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Conflicts/>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::RemoveResourcesFromReservation $reservationId {"Router 1234" "GenericResource 1234"} resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Conflicts/>
    +				</ResponseInfo>
     			

    back to TOC

    RemoveConnectorsFromReservationRemove connectors from a reservation.

    Removes the mapped connector between given end points.

    Syntax

    ::TestShellAPI::RemoveConnectorsFromReservation reservationId endpoints ?resultXml?

    @@ -2593,15 +2587,15 @@ list endpoints

    The list of removed endpoints.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::RemoveConnectorsFromReservation $reservationId {"Router 1234/Port 1" "GenericResource 1234/Port 1" "Router 1234/Port 1" "GenericResource 1234/Port 2"} resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Connectors>
    -				<Connector Alias="a connector" Type="Default" ResourceMappingType="bi" Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1">
    -				</Connector>
    -				<Connector Alias="uni connector" Type="Default" ResourceMappingType="uni" Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2">
    -				</Connector>
    -				</Connectors>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::RemoveConnectorsFromReservation $reservationId {"Router 1234/Port 1" "GenericResource 1234/Port 1" "Router 1234/Port 1" "GenericResource 1234/Port 2"} resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Connectors>
    +				<Connector Alias="a connector" Type="Default" ResourceMappingType="bi" Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1">
    +				</Connector>
    +				<Connector Alias="uni connector" Type="Default" ResourceMappingType="uni" Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2">
    +				</Connector>
    +				</Connectors>
    +				</ResponseInfo>
     			

    back to TOC

    RemoveRoutesFromReservationRemove routes from a reservation.

    Disconnects a list of endpoints and removes the mapped route between them. Will only disconnect endpoints using resources reserved to the logged-in user .

    Syntax

    ::TestShellAPI::RemoveRoutesFromReservation reservationId endpoints mappingType ?resultXml?

    @@ -2614,25 +2608,25 @@ string mappingType

    Specify bidirectional or unidirectional as the mapping type.
    Use 'bi' for bidirectional mapping or 'uni' for unidirectional mapping.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::RemoveRoutesFromReservation $reservationId {"Router 1234/Port 1" "GenericResource 1234/Port 1" "Router 1234/Port 1" "GenericResource 1234/Port 2"} bi resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" Alias="a route" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" Alias="uni route" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 2" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::RemoveRoutesFromReservation $reservationId {"Router 1234/Port 1" "GenericResource 1234/Port 1" "Router 1234/Port 1" "GenericResource 1234/Port 2"} bi resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Routes>
    +				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 1" Alias="a route" RouteType="bi" Shared="true">
    +				<Segments>
    +				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 1"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 1" Target="GenericResource 1234/Port 1"/>
    +				</Segments>
    +				</Route>
    +				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" Alias="uni route" RouteType="uni" Shared="true">
    +				<Segments>
    +				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 2" Target="GenericResource 1234/Port 2"/>
    +				</Segments>
    +				</Route>
    +				</Routes>
    +				</ResponseInfo>
     			

    back to TOC
    back to TOC
    back to TOC

    SetResourcesFolderSet the folder of multiple resources.

    Allows to change the folder that the specified root resources belong to.

    Syntax

    ::TestShellAPI::SetResourcesFolder resourcesName targetFolder ?resultXml?

    Parameters @@ -2705,8 +2697,8 @@ string appName

    Specify the name of the App.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::RemoveAppFromReservation 077e6b4f-5e70-46b5-aa4b-43e6f039acc3 "App in reservation" resultXml

    Output

  • resultXml
  • -				<ResponseInfo/>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::RemoveAppFromReservation 077e6b4f-5e70-46b5-aa4b-43e6f039acc3 "App in reservation" resultXml

    Output

  • resultXml
  • +				<ResponseInfo/>
     			

    back to TOC

    GetAppsDetailsInReservationRetrieves information on Apps in the reservation.

    Retrieves information on Apps in the reservation.

    Syntax

    ::TestShellAPI::GetAppsDetailsInReservation reservationId appNames ?resultXml?

    @@ -2717,8 +2709,8 @@ list appNames

    Specify the name of the Apps.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetAppsDetailsInReservation 077e6b4f-5e70-46b5-aa4b-43e6f039acc3 {{"App1" "App2"}} resultXml

    Output

  • resultXml
  • -				<ResponseInfo/>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetAppsDetailsInReservation 077e6b4f-5e70-46b5-aa4b-43e6f039acc3 {{"App1" "App2"}} resultXml

    Output

  • resultXml
  • +				<ResponseInfo/>
     			

    back to TOC

    RemoveServicesFromReservationRemove services and apps from existing reservation.

    Remove services and apps from existing reservation.

    Syntax

    ::TestShellAPI::RemoveServicesFromReservation reservationId services ?resultXml?

    @@ -2729,8 +2721,8 @@ list services

    List of aliases. This list should contain the aliases for both the services and apps that should be removed.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::RemoveServicesFromReservation "b8ed1fb9-7903-40de-b5b4-f6cba31f6fa0" {"alias1" "alias2"} resultXml

    Output

  • resultXml
  • -				<ResponseInfo/>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::RemoveServicesFromReservation "b8ed1fb9-7903-40de-b5b4-f6cba31f6fa0" {"alias1" "alias2"} resultXml

    Output

  • resultXml
  • +				<ResponseInfo/>
     			

    back to TOC

    SaveReservationAsTopologyCreate a topology from an existing active reservation.

    Creates a topology from an existing reservation. Leave the folder path blank to save the topology directly under the root.

    Syntax

    ::TestShellAPI::SaveReservationAsTopology reservationId folderFullPath topologyName includeInactiveRoutes ?resultXml?

    @@ -2745,64 +2737,64 @@ boolean includeInactiveRoutes

    Include disconnected routes in the created topology
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SaveReservationAsTopology $reservationId "Temp Automation Resources" TP1 1 resultXml

    Output

  • resultXml
  • -				<ResponseInfo Name="TP1">
    -				<Resources>
    -				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Studio" Username="admin" Created="2012-06-20T17:20:37"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Studio" Username="admin" Created="2012-06-20T17:20:37"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="true" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T17:20:37"/>
    -				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="false" Excluded="false" WillBeLocked="true">
    -				<ResourceAttributes/>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false" Excluded="false" WillBeLocked="false">
    -				<ResourceAttributes>
    -				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    -				</ResourceAttributes>
    -				<LockInfo/>
    -				</ResourceInfo>
    -				</Resources>
    -				<AbstractResources/>
    -				<Routes>
    -				<Route Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1" RouteType="bi" Shared="true">
    -				<Segments>
    -				<Segment Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1"/>
    -				</Segments>
    -				</Route>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SaveReservationAsTopology $reservationId "Temp Automation Resources" TP1 1 resultXml

    Output

  • resultXml
  • +				<ResponseInfo Name="TP1">
    +				<Resources>
    +				<ResourceInfo Name="Router 1234/Port 1" FolderFullPath="Lab Routers" Address="1" FullAddress="192.168.1.201/1" RootAddress="192.168.1.201" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true" Excluded="false" WillBeLocked="true">
    +				<ResourceAttributes/>
    +				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Studio" Username="admin" Created="2012-06-20T17:20:37"/>
    +				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 3"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/Port 1" FolderFullPath="Temp Automation Resources" Address="1" FullAddress="192.168.1.20/1" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 1" Locked="true" Excluded="false" WillBeLocked="true">
    +				<ResourceAttributes/>
    +				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Studio" Username="admin" Created="2012-06-20T17:20:37"/>
    +				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 1"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/Port 2" FolderFullPath="Temp Automation Resources" Address="2" FullAddress="192.168.1.20/2" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="Port 2" Locked="true" Excluded="false" WillBeLocked="true">
    +				<ResourceAttributes/>
    +				<LockInfo ReservationName="Immediate reservation" MachineName="PRODUCT-W7 - Tcl" Username="admin" Created="2012-06-20T17:20:37"/>
    +				<Connections FullPath="Temp Automation Resources/L1 Switch 1234/Blade 1/Port 2"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/PowerPort 11" FolderFullPath="Temp Automation Resources" Address="11" FullAddress="192.168.1.20/11" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 11" Locked="false" Excluded="false" WillBeLocked="true">
    +				<ResourceAttributes/>
    +				<LockInfo/>
    +				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 1"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/PowerPort 12" FolderFullPath="Temp Automation Resources" Address="12" FullAddress="192.168.1.20/12" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="PowerPort 12" Locked="false" Excluded="false" WillBeLocked="true">
    +				<ResourceAttributes/>
    +				<LockInfo/>
    +				<Connections FullPath="Temp Automation Resources/SmartPower2L 1234/PowerPort 2"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234/ConsolePort 21" FolderFullPath="Temp Automation Resources" Address="21" FullAddress="192.168.1.20/21" RootAddress="192.168.1.20" ResourceFamilyName="Generic Port" ResourceModelName="Generic Port Model" Alias="ConsolePort 21" Locked="false" Excluded="false" WillBeLocked="true">
    +				<ResourceAttributes/>
    +				<LockInfo/>
    +				<Connections FullPath="Temp Automation Resources/ConsoleServer 1234/ConsolePort 1"/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="GenericResource 1234" FolderFullPath="Temp Automation Resources" Address="192.168.1.20" FullAddress="192.168.1.20" RootAddress="192.168.1.20" ResourceFamilyName="Generic Resource" ResourceModelName="Generic Resource Model" Alias="GenericResource 1234" Locked="false" Excluded="false" WillBeLocked="true">
    +				<ResourceAttributes/>
    +				<LockInfo/>
    +				</ResourceInfo>
    +				<ResourceInfo Name="Router 1234" FolderFullPath="Lab Routers" Address="192.168.1.201" FullAddress="192.168.1.201" RootAddress="192.168.1.201" ResourceFamilyName="Generic Chassis" ResourceModelName="Generic Chassis Model" Alias="Router 1234" Locked="false" Excluded="false" WillBeLocked="false">
    +				<ResourceAttributes>
    +				<ResourceAttribute Name="SW_Version" Value="" Type="String"/>
    +				</ResourceAttributes>
    +				<LockInfo/>
    +				</ResourceInfo>
    +				</Resources>
    +				<AbstractResources/>
    +				<Routes>
    +				<Route Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1" RouteType="bi" Shared="true">
    +				<Segments>
    +				<Segment Source="GenericResource 1234/Port 1" Target="Router 1234/Port 1"/>
    +				</Segments>
    +				</Route>
    +				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    +				<Segments>
    +				<Segment Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2"/>
    +				</Segments>
    +				</Route>
    +				</Routes>
    +				</ResponseInfo>
     			

    back to TOC

    SecureLogonLog in to the TestShell service using the AuthToken.

    Logs in a user with a token. If no domain is specified, this method logs the user in to the global (default) domain.

    Syntax

    ::TestShellAPI::SecureLogon token domainName ?resultXml?

    @@ -2813,12 +2805,12 @@ string domainName

    Specify the name of the domain. If no domain is specified, it logs the user in to the global (default) domain.
    string - ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SecureLogon xoV3libZzEG/ii7ZQqAuqw== Global resultXml

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="LogonResponseInfo">
    -				<Domain Name="Global" Description="A domain that includes all available resources" DomainId="dbaf480c-09f7-46d3-a2e2-e35d3e374a16" />
    -				<User Name="admin" IsAdmin="false" IsActive="false" IsDomainAdmin="false" />
    -				<Token Token="Yzhumq0qVkyIwyMkxzk7wQ==" />
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SecureLogon xoV3libZzEG/ii7ZQqAuqw== Global resultXml

    Output

  • resultXml
  • +				<ResponseInfo xsi:type="LogonResponseInfo">
    +				<Domain Name="Global" Description="A domain that includes all available resources" DomainId="dbaf480c-09f7-46d3-a2e2-e35d3e374a16" />
    +				<User Name="admin" IsAdmin="false" IsActive="false" IsDomainAdmin="false" />
    +				<Token Token="Yzhumq0qVkyIwyMkxzk7wQ==" />
    +				</ResponseInfo>
     			

    back to TOC

    SetAttributeValueSet an attribute value.

    Sets the value of the specified attribute.

    Syntax

    ::TestShellAPI::SetAttributeValue resourceFullPath attributeName attributeValue ?resultXml?

    @@ -2879,9 +2871,9 @@ string additionalInfo

    Resource live status additional info
    string - ?resultXml?
    Resource live status additional info
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SetResourceLiveStatus {"myPath"} {"Online"} {"Resource was responding to pings at 12/12/2013 10:35 AM"} resultXml

    Output

  • resultXml
  • -				<ResponseInfo type="ResourceLiveStatusInfo" liveStatusName="Online" liveStatusDescription="Resource was responding to pings at 12/12/2013 10:35 AM"/>
    -				</Response>
    +          ?resultXml?
    Resource live status additional info
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SetResourceLiveStatus {"myPath"} {"Online"} {"Resource was responding to pings at 12/12/2013 10:35 AM"} resultXml

    Output

  • resultXml
  • +				<ResponseInfo type="ResourceLiveStatusInfo" liveStatusName="Online" liveStatusDescription="Resource was responding to pings at 12/12/2013 10:35 AM"/>
    +				</Response>
     			

    back to TOC

    SetReservationLiveStatusSets the live status of the reservation.

    Sets the live status of the reservation

    Syntax

    ::TestShellAPI::SetReservationLiveStatus reservationId liveStatusName additionalInfo ?resultXml?

    @@ -2894,12 +2886,12 @@ string additionalInfo

    Reservation live status additional info
    string - ?resultXml?
    Reservations live status additional info.

    Example

    ::TestShellAPI::SetReservationLiveStatus {DCFF5355-58F9-41F8-ABD0-2E666AC9B0FB} {"Pass"} {"Reservation was responding to pings at 12/12/2013 10:35 AM"} resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<ReservationLiveStatuses>
    -				<ReservationLiveStatus reservationId="344c2d21-578c-4653-a826-54c2035ff998" ReservationLiveStatusName="Pass"></ReservationLiveStatus>
    -				</ReservationLiveStatuses>
    -				</ResponseInfo>
    +          ?resultXml?
    Reservations live status additional info.

    Example

    ::TestShellAPI::SetReservationLiveStatus {DCFF5355-58F9-41F8-ABD0-2E666AC9B0FB} {"Pass"} {"Reservation was responding to pings at 12/12/2013 10:35 AM"} resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<ReservationLiveStatuses>
    +				<ReservationLiveStatus reservationId="344c2d21-578c-4653-a826-54c2035ff998" ReservationLiveStatusName="Pass"></ReservationLiveStatus>
    +				</ReservationLiveStatuses>
    +				</ResponseInfo>
     			

    back to TOC

    SetResourceSharedStateSet the resource sharing state.

    Sets the resource sharing state.

    Syntax

    ::TestShellAPI::SetResourceSharedState reservationId resourcesFullName isShared ?resultXml?

    @@ -2990,12 +2982,12 @@ list connectors

    List of connectors to set in the reservation.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SetConnectorsInReservation "28cb2a71-c8fc-4f41-a22b-e65685ebed14" {{"bridge1/port1" "bridge2/port1" "bi" "some alias"}} resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Connectors>
    -				<Connector Alias="some alias" Type="Default" ResourceMappingType="bi" Source="bridge1/port1" Target="bridge2/port1"></Connector>
    -				</Connectors>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SetConnectorsInReservation "28cb2a71-c8fc-4f41-a22b-e65685ebed14" {{"bridge1/port1" "bridge2/port1" "bi" "some alias"}} resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Connectors>
    +				<Connector Alias="some alias" Type="Default" ResourceMappingType="bi" Source="bridge1/port1" Target="bridge2/port1"></Connector>
    +				</Connectors>
    +				</ResponseInfo>
     			

    back to TOC
    back to TOC
    back to TOC

    SyncResourceFromDeviceUpdate a resource with current device settings and mappings.

    Synchronizes the specified resource with current device settings and mappings.

    Syntax

    ::TestShellAPI::SyncResourceFromDevice resourceFullPath ?resultXml?

    Parameters @@ -3040,9 +3030,9 @@ string y

    Specify the y coordinate of the resource's top left corner.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SetReservationResourcePosition $reservationId $resourceFullName $x $y resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SetReservationResourcePosition $reservationId $resourceFullName $x $y resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				</ResponseInfo>
     			

    back to TOC

    SetServiceDriverSets a service model driver.

    Sets the driver for a specified service model, if empty, removes its driver.

    Syntax

    ::TestShellAPI::SetServiceDriver serviceName driverName ?resultXml?

    @@ -3067,9 +3057,9 @@ string additionalInfo

    Resource live status additional info
    string - ?resultXml?
    Resource live status additional info
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SetServiceLiveStatus "0e937c16-2865-4ad1-b843-aa7608282e56" "My Service" "Online" "Resource was responding to pings at 12/12/2013 10:35 AM" resultXml

    Output

  • resultXml
  • -			<ResponseInfo/>
    -			</Response>
    +          ?resultXml?
    Resource live status additional info
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SetServiceLiveStatus "0e937c16-2865-4ad1-b843-aa7608282e56" "My Service" "Online" "Resource was responding to pings at 12/12/2013 10:35 AM" resultXml

    Output

  • resultXml
  • +			<ResponseInfo/>
    +			</Response>
     		

    back to TOC

    GetServiceLiveStatusGets the live status of a service.

    Gets the live status of a service

    Syntax

    ::TestShellAPI::GetServiceLiveStatus reservationId serviceAlias ?resultXml?

    @@ -3080,9 +3070,9 @@ string serviceAlias

    Specify the string that represents the service's alias.
    string - ?resultXml?
    Resource live status additional info
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetServiceLiveStatus "0e937c16-2865-4ad1-b843-aa7608282e56" "My Service" resultXml

    Output

  • resultXml
  • -				<ResponseInfo/>
    -				</Response>
    +          ?resultXml?
    Resource live status additional info
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetServiceLiveStatus "0e937c16-2865-4ad1-b843-aa7608282e56" "My Service" resultXml

    Output

  • resultXml
  • +				<ResponseInfo/>
    +				</Response>
     			

    back to TOC

    SetReservationServicePositionSet service position in a reservation.

    Sets the location of a specified service in the reservation diagram.

    Syntax

    ::TestShellAPI::SetReservationServicePosition reservationId serviceAlias x y ?resultXml?

    @@ -3097,9 +3087,9 @@ string y

    Specify the y coordinate of the resource's top left corner.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SetReservationServicePosition $reservationId $serviceAlias $x $y

    Output

  • resultXml
  • -				<ResponseInfo>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::SetReservationServicePosition $reservationId $serviceAlias $x $y

    Output

  • resultXml
  • +				<ResponseInfo>
    +				</ResponseInfo>
     			

    back to TOC

    SetServiceAttributesValuesSet a resource's attributes.

    Sets attributes and associated values for a specified resource.

    Syntax

    ::TestShellAPI::SetServiceAttributesValues reservationId serviceAlias attributeRequests ?resultXml?

    @@ -3244,8 +3234,8 @@ boolean printOutput

    Defines whether to print the command output in the reservation command output window.
    string - ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::RemapConnections $reservationId {"Router 1234" "GenericResource 1234"} 1 resultXml

    Output

  • resultXml
  • -				<ResponseInfo/>
    +          ?resultXml?
    Specify the variable for the XML output. If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::RemapConnections $reservationId {"Router 1234" "GenericResource 1234"} 1 resultXml

    Output

  • resultXml
  • +				<ResponseInfo/>
     			

    back to TOC

    UpdateReservationDescriptionChange a reservation description.

    Modifies the description for a specified reservation.

    Syntax

    ::TestShellAPI::UpdateReservationDescription reservationId description ?resultXml?

    @@ -3406,18 +3396,18 @@ list routeAliases

    Specify a matrix of route source, route target and alias.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::UpdateRouteAliasesInReservation $reservationId {{"Router 1234/Port 1" "GenericResource 1234/Port 2" "uni route"}} resultXml

    Output

  • resultXml
  • -				<ResponseInfo>
    -				<Routes>
    -				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    -				<Segments>
    -				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2"/>
    -				<Segment Source="L1 Switch 1234/Blade 1/Port 2" Target="GenericResource 1234/Port 2"/>
    -				</Segments>
    -				</Route>
    -				</Routes>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::UpdateRouteAliasesInReservation $reservationId {{"Router 1234/Port 1" "GenericResource 1234/Port 2" "uni route"}} resultXml

    Output

  • resultXml
  • +				<ResponseInfo>
    +				<Routes>
    +				<Route Source="Router 1234/Port 1" Target="GenericResource 1234/Port 2" RouteType="uni" Shared="true">
    +				<Segments>
    +				<Segment Source="Router 1234/Port 1" Target="L1 Switch 1234/Blade 1/Port 3"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 3" Target="L1 Switch 1234/Blade 1/Port 2"/>
    +				<Segment Source="L1 Switch 1234/Blade 1/Port 2" Target="GenericResource 1234/Port 2"/>
    +				</Segments>
    +				</Route>
    +				</Routes>
    +				</ResponseInfo>
     			

    back to TOC

    UpdateDriverUpdate Driver

    Uploads a new version of an existing driver

    Syntax

    ::TestShellAPI::UpdateDriver driverName driverFile driverFileName ?resultXml?

    @@ -3456,14 +3446,14 @@ Parameters

    TypeNameDescription
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetAllApprovalRequests resultXml

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="GetAllApprovalRequestsResponseInfo">
    -				<ApprovalRequestResponseInfos>				
    -				<ApprovalRequest Id="1" RequestedEntityId="de6f5e37-e3e3-46d0-b915-07a1f30c07d4" RequestedEntityType="Blueprint" UserInfoId="3" StartTime="01/02/2023" EndTime="02/02/2023 14:00:00" State="Pending" CreationDate="30/01/2023 13:18:42" ModifiedDate="30/01/2023 13:18:42" EntityName="BlueprintName" IsApprover="true" RequesterName="userA">
    -				<Duration>60</Duration>
    -				</ApprovalRequest>
    -				</ApprovalRequestResponseInfos>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetAllApprovalRequests resultXml

    Output

  • resultXml
  • +				<ResponseInfo xsi:type="GetAllApprovalRequestsResponseInfo">
    +				<ApprovalRequestResponseInfos>				
    +				<ApprovalRequest Id="1" RequestedEntityId="de6f5e37-e3e3-46d0-b915-07a1f30c07d4" RequestedEntityType="Blueprint" UserInfoId="3" StartTime="01/02/2023" EndTime="02/02/2023 14:00:00" State="Pending" CreationDate="30/01/2023 13:18:42" ModifiedDate="30/01/2023 13:18:42" EntityName="BlueprintName" IsApprover="true" RequesterName="userA">
    +				<Duration>60</Duration>
    +				</ApprovalRequest>
    +				</ApprovalRequestResponseInfos>
    +				</ResponseInfo>
     			

    back to TOC

    GetApprovalRequestGet Approval request.

    Get approval request info.

    Syntax

    ::TestShellAPI::GetApprovalRequest id ?resultXml?

    @@ -3472,10 +3462,10 @@ number id

    Specify the number that represents the request’s unique identifier.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::resultXml

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="GetApprovalRequestResponseInfo" Id="1" RequestedEntityId="de6f5e37-e3e3-46d0-b915-07a1f30c07d4" RequestedEntityType="Blueprint" UserInfoId="3" StartTime="01/02/2023" EndTime="02/02/2023 14:00:00" State="Pending" CreationDate="30/01/2023 13:18:42" ModifiedDate="30/01/2023 13:18:42" EntityName="BlueprintName" IsApprover="true" RequesterName="userA">
    -				<Duration>60</Duration>
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::resultXml

    Output

  • resultXml
  • +				<ResponseInfo xsi:type="GetApprovalRequestResponseInfo" Id="1" RequestedEntityId="de6f5e37-e3e3-46d0-b915-07a1f30c07d4" RequestedEntityType="Blueprint" UserInfoId="3" StartTime="01/02/2023" EndTime="02/02/2023 14:00:00" State="Pending" CreationDate="30/01/2023 13:18:42" ModifiedDate="30/01/2023 13:18:42" EntityName="BlueprintName" IsApprover="true" RequesterName="userA">
    +				<Duration>60</Duration>
    +				</ResponseInfo>
     			

    back to TOC

    CreateBlueprintApprovalRequestCreate a new blueprint approval request.

    Create a new approval request.

    Syntax

    ::TestShellAPI::CreateBlueprintApprovalRequest entityId requestNotes globalInputs requirementsInputs additionalInfoInputs startTime endTime duration ?resultXml?

    @@ -3560,9 +3550,9 @@ string version

    System version.
    string - ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetSystemInfo resultXml

    Output

  • resultXml
  • -				<ResponseInfo xsi:type="GetSystemInfoResponseInfo" Version="2024.1">				
    -				</ResponseInfo>
    +          ?resultXml?
    Specify the variable for the XML output.
    If a variable is not provided, the results will be sent to stdout.

    Example

    ::TestShellAPI::GetSystemInfo resultXml

    Output

  • resultXml
  • +				<ResponseInfo xsi:type="GetSystemInfoResponseInfo" Version="2024.1">				
    +				</ResponseInfo>
     			

    back to TOC

    GetExecutionServersGet all Execution Servers.

    Get all the Execution Servers.

    Syntax

    ::TestShellAPI::GetExecutionServers ?resultXml?

    diff --git a/static/api-docs/2024.1/TestShell-API/TestShell XML RPC API.html b/static/api-docs/latest/TestShell-API/TestShell XML RPC API.html similarity index 98% rename from static/api-docs/2024.1/TestShell-API/TestShell XML RPC API.html rename to static/api-docs/latest/TestShell-API/TestShell XML RPC API.html index 1213bccd39..5c061c8199 100644 --- a/static/api-docs/2024.1/TestShell-API/TestShell XML RPC API.html +++ b/static/api-docs/latest/TestShell-API/TestShell XML RPC API.html @@ -321,7 +321,7 @@ hljs.tabReplace = ' '; hljs.initHighlightingOnLoad();



    Introduction

    Using the XML RPC API requires setting several http request headers. NOTE: ASCII decimal characters 0-31 are invalid inputs, not including 9, 10, and 13 @@ -339,7 +339,7 @@ string Authorization
    A string of the format: Token=xoV3libZzEG/ii7ZQqAuqw==;MachineName=y - The Authorization header must be set after successfully login after using the “Logon” or "SecureLogon" API, by using the Token returned in the Logon response. Prior to making the response the value of this header should have the value ‘Unset’ + The Authorization header must be set after successfully login after using the “Logon” or "SecureLogon" API, by using the Token returned in the Logon response. Prior to making the response the value of this header should have an empty value.
    back to TOC
    back to TOC
    back to TOC

    DeleteUserDeletes a user.

    Deletes the specified user.

    Syntax

    diff --git a/static/api-docs/2024.1/TestShell-API/TestShell cSharp API.html b/static/api-docs/latest/TestShell-API/TestShell cSharp API.html
    similarity index 99%
    rename from static/api-docs/2024.1/TestShell-API/TestShell cSharp API.html
    rename to static/api-docs/latest/TestShell-API/TestShell cSharp API.html
    index 493226f104..8b1e44eb19 100644
    --- a/static/api-docs/2024.1/TestShell-API/TestShell cSharp API.html	
    +++ b/static/api-docs/latest/TestShell-API/TestShell cSharp API.html	
    @@ -321,7 +321,7 @@
     		  hljs.tabReplace = '    ';
     		  hljs.initHighlightingOnLoad();
     		  
    - 2024.1.0 TestShell API C# Reference Guide + 2026.1.0 TestShell API C# Reference Guide


    back to TOC
    back to TOC

    DeleteUserDeletes a user.

    Deletes the specified user.

    Syntax

    DeleteUser(username);

    diff --git a/versioned_docs/version-2023.3/admin/_category_.json b/versioned_docs/version-2023.3/admin/_category_.json deleted file mode 100644 index 5169ab27ac..0000000000 --- a/versioned_docs/version-2023.3/admin/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "CloudShell Administration", - "position": 8 -} diff --git a/versioned_docs/version-2023.3/admin/administrative-operations-overview.md b/versioned_docs/version-2023.3/admin/administrative-operations-overview.md deleted file mode 100644 index 3e93896c57..0000000000 --- a/versioned_docs/version-2023.3/admin/administrative-operations-overview.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Administrative Operations Overview - -This guide covers CloudShell administrative operations. Some of these actions are performed in **Resource Manager Client** and others in **CloudShell Portal** - -Admin responsibilities include: - -- Defining the resource data model -- Populating the resource data model -- Adding users, groups, and domains -- Assigning users to groups and domains -- Setting up the CloudShell license server - -## ![](/Images/Admin-Guide/Admin-operations.png) Define the resource data hierarchy - -After defining the data model, structure resource families and models into a logical hierarchy. - -## ![](/Images/Admin-Guide/Admin-operations_1.png) Build the attributes repository - -Use attributes to define resource runtime behavior, to assist with route resolution, and to define blueprint categories. - -## ![](/Images/Admin-Guide/Admin-operations_3.png) Add resource families and models - -Define the various models for each type or resource family, and populate the resource repository with instances of these models. -:::important -Tasks related to the resource data model only apply to resources based on 1st Gen shells. While CloudShell supports 1st Gen shells, we recommend using 2nd Gen shells, which already include all the data modeling and configurations, and offer enhanced shell management capabilities. For details, see [Shells Overview](../intro/features/shells.md). -::: -## ![](/Images/Admin-Guide/Admin-operations_4.png) Define CloudShell users - -Add or import your users into CloudShell. - -## ![](/Images/Admin-Guide/Admin-operations_5.png) Control permission levels - -Manage user access to resources by assigning them users to groups. Permission levels are determined by group membership. - -## ![](/Images/Admin-Guide/Admin-operations_6.png) Allocate resources - -Associating groups with domains allows the group's user access to domain resources. - -## Related Topics - -- [CloudShell Deployment Overview](../admin/setting-up-cloudshell/cloudshell-deployment-overview.md) -- [Inventory Operations](../admin/setting-up-cloudshell/inventory-operations/) -- [CloudShell Identity Management](../admin/cloudshell-identity-management/) -- [CloudShell Manage Dashboard](../admin/cloudshell-manage-dashboard/) -- [CloudShell Execution Server Configurations](../admin/cloudshell-execution-server-configurations/) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-event-queue.md b/versioned_docs/version-2023.3/admin/cloudshell-event-queue.md deleted file mode 100644 index 3bc25e7782..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-event-queue.md +++ /dev/null @@ -1,155 +0,0 @@ ---- -sidebar_position: 7 ---- - -# CloudShell Server Events Queue - -Cloudshell Server emits events when some operations occur in the backend. -System designers can subscribe to these events for audit or automation purposes. - -This article describes how to configure this integration, as well as what events are available. - -# Requirements - -Cloudshell Server can publish to RabbitMQ. -The RabbitMQ Server needs to share a reliable network with Cloudshell Server. -RabbitMQ TCP listener port must be accessible by Cloudshell Server. - -Cloudshell Server Events Queue has been tested with RabbitMQ version 3.11 but should work with RabbitMQ 3.X - -To experiment with this, it is possible to emit messages to the RabbitMQ service used by an embedded Sandbox Service (which is installed with Cloudshell Server). -[See example](#example-configuration). - - -## Configuring Cloudshell Server Events Queue - -In RabbitMQ, make sure you have an exchange, and a queue. -Bind the queue to the exchange, with a routing key. - -In Cloudshell Server `customer.config`, set the following keys: - -:::info[customer.config] -```xml - - - - - - - -``` -::: - -### Whitelisting events - -It is possible to determine which events will be published by Cloudshell Server. -To do so, create a file titled ServerEventsWhiteList.csv in the application directory (next to QsTeamServer.exe). - -Typically this is `%Program Files(x86)%\Qualisystems\Server` -The contents of the CSV should be the events you *allow* to be published - -:::note -ServerEventsWhiteList.csv should be line-break separated, not comma separated. -::: - -[See](#supported-events) which [events](#supported-events) are supported (all are sent by default) - -:::info[Example csv] -``` -UserCreatedEvent -UserGroupsListUpdatedEvent -LoginEvent -``` -::: - -In the above example, Cloudshell Server would only emit events related to new users created, or modification to user groups (adding or removing users) or to logins - - -## Example Configuration - -:::info[Example for embedded sandbox service] -```xml - - - - - - - -``` -::: - - -## Supported Events -**UserCreatedEvent**: This event is triggered when a new user is created. - -**UserDeletedEvent**: This event occurs when a user is deleted. - -**UserGroupsListUpdatedEvent**: This event is fired when the list of user groups is updated. - -**UserUpdatedEvent**: This event happens when a user's details are updated. - -**LoginEvent**: This event is triggered when a user logs in. - -**UserGroupAddedEvent**: This event occurs when a new user group is added. - -**UserGroupDeletedEvent**: This event is fired when a user group is deleted. - -**UserGroupDomainsUpdatedEvent**: This event is triggered when the domains of a user group are updated. - -**UserGroupUpdatedEvent**: This event happens when a user group is updated. - -**JobEndedEvent**: This event occurs when a job ends. - -**JobSetEndedEvent**: This event is fired when a job suite ends. - -**ResourceAvailabilityChangedDomainEvent**: This event is triggered when the availability of a resource changes. - -**TopologyCreatedEvent**: This event occurs when a new blueprint is created. - -**TopologyUpdatedEvent**: This event is fired when a blueprint is updated. - -**TopologyDeletedEvent**: This event is triggered when a blueprint is deleted. - -**TopologyRenamedEvent**: This event happens when a blueprint is renamed. - -**DeployResourceEvent**: This event occurs when a resource is deployed. - -**ResourceEnabledEvent**: This event is fired when a resource is enabled. - -**ResourceDisabledEvent**: This event is triggered when a resource is disabled. - -**ResourceAddedEvent**: This event occurs when a resource is added. - -**ResourceDeletedEvent**: This event is fired when a resource is deleted. - -**ResourceMovedEvent**: This event happens when a resource is moved. - -**ResourceRenamedEvent**: This event occurs when a resource is renamed. - -**ResourceUpdatedEvent**: This event is fired when a resource is updated. - -**ResourcesReservedEvent**: This event is triggered when resources are reserved. - -**ResourceUnlockedEvent**: This event occurs when a resource is unlocked. - -**BulkResourcesAddedEvent**: This event is fired when multiple resources are added in bulk. - -**ReservationCreatedEvent**: This event is triggered when a sandbox is created. - -**ReservationDeleteEvent**: This event occurs when a sandbox is deleted. - -**ReservationEndEvent**: This event is fired when a sandbox ends. - -**ReservationEndTimeChangedEvent**: This event is triggered when the end time of a sandbox is changed. - -**ReservationRejectedEvent**: This event happens when a sandbox is rejected (typically due to user or license restrictions). - -**ReservationRenamedEvent**: This event occurs when a sandbox is renamed. - -**ReservationSetupEndedEvent**: This event is fired when the setup of a sandbox ends. - -**ReservationStartTimeChangedEvent**: This event is triggered when the start time of a sandbox is changed. - -**ReservationUpdateEvent**: This event happens when a sandbox is updated. - diff --git a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/_category_.json deleted file mode 100644 index 59961fb8fd..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/_category_.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "label": "CloudShell Execution Server Configurations", - "position": 5, - "link": { - "slug": "admin/cloudshell-execution-server-configurations", - "type": "generated-index", - "description": "This chapter explains how to configure execution servers to run tests and commands in CloudShell." - } -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/connecting-an-execution-server-to-quali-server.md b/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/connecting-an-execution-server-to-quali-server.md deleted file mode 100644 index b7cf009411..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/connecting-an-execution-server-to-quali-server.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Connecting an Execution Server to Quali Server - -This article explains how to connect, or associate, an Execution Server to Quali Server. You need to do this whenever you install a new Execution Server, or deploy an Azure Template or AWS CloudFormation for a cloud-based Quali Server and need to associate the newly-created Execution Server with the Quali Server. - -:::note -The Azure and AWS Execution Servers created as part of the integration are installed on Linux machines. -::: - -**To associate a Windows Execution Server with Quali Server:** - -1. In the Execution Server machine, run the Execution Server configuration wizard. -2. In the **Server connectivity** screen, specify the Quali Server hostname or IP address and CloudShell system administrator's username/password. - -For additional information, see [Configure the Execution Server](../../install-configure/cloudshell-suite/configure-products/config-execution-server.md). - -**To associate a Linux Execution Server with Quali Server:** - -- Log in to the Execution Server machine and follow the instructions in [Configure the Linux Execution Server](../../install-configure/linux-virtual-appliance/post-installation/configure/). - -## Related Topics - -- [Integrating Azure with Cloud-based CloudShell Installation](../../admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/integrating-azure-with-cloud-based-cloudshell-installation.md) -- [Create a Management VPC and Networks using CloudFormation](../../admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/create-a-management-vpc/) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/deleting-execution-servers.md b/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/deleting-execution-servers.md deleted file mode 100644 index 10d5a7d15f..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/deleting-execution-servers.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Deleting Execution Servers - -This article explains how to properly remove execution servers from CloudShell. This includes having a backup execution server that is configured to handle the to-be-deleted execution server's assignments. - -**To delete an execution server:** - -1. In CloudShell Portal, open the **Manage \> Execution Servers \> Servers** page. - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/ExecutionServerManagementPage_587x389.png) - -2. Make sure you have at least one other working execution server (online and included). - -3. Click the name of the execution server to be deleted and check if it has a configured Execution Server Selector attribute. For example: - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/ExecutionServerAssociations_474x303.png) - - If the execution server has associations, make sure to set the same associations on another execution server. For details, see [Setting Up Execution Servers to Run Commands](./setting-up-execution-servers-to-run-commands.md). - -4. Delete the execution server. - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/ExecutionServerDelete_753x327.png) - -5. On the execution server machine, open Apps & Features and uninstall the execution server. - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/ExecutionServerAppsAndFeatures_606x452.png) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/optimizing-execution-provisioning.md b/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/optimizing-execution-provisioning.md deleted file mode 100644 index 85a4da3fb8..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/optimizing-execution-provisioning.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Optimizing Execution Provisioning - -This article provides guidelines on how to optimize execution provisioning in CloudShell, taking into account the number of execution servers to include, command/job slots, types of executions to handle (commands, test jobs, Python/Authoring drivers), test runtimes and their load on the system. - -## How CloudShell selects job/command slots for execution assignments - -When a new job or command execution is needed, CloudShell finds an execution server with an available slot based on these several factors: - -- Number of available execution servers (only execution servers that are both Online and Included can be used) -- Maximum job/command slot capacity of each execution server (how many tests/commands it can run in parallel. These are defined when installing or configuring an execution server, as explained in [Configure the Execution Server](../../install-configure/cloudshell-suite/configure-products/config-execution-server.md). -- Is the execution associated with a specific execution server or group of execution servers. For example, the resource is associated with a specific execution server via an **Execution Server Selector** attribute. -- Number of job/command executions in the queue -- Availability of resources (for jobs configured to run in a sandbox) - -## How to maximize execution capacity and performance - -You can maximize available execution capacity by installing additional execution servers, increasing job/command capacities of the execution server, and adding more CPU/RAM to the execution servers. - -- **Number of machines that can be allocated for execution provisioning**: Execution servers have no capacity limits and do not require a license, but it's more about what the execution server can handle. In most cases, you'll start with one execution server for the commands, and monitor the performance. Then, either add more power to the same machine or just add more execution servers for better redundancy (if one of the servers fails, it's always good to have others available). For details, see [Distributed provisioning](./setting-up-execution-servers-to-run-commands.md#distributed-provisioning). - - In addition, you can also **associate groups of resources and Apps to specific execution servers for improved performance**. This is extremely useful if you have geographically distributed sites in your organization and you want the infrastructure of each site to be handled by one or more execution servers that are physically located at or near that site. For details, see [Setting Up Execution Servers to Run Commands](./setting-up-execution-servers-to-run-commands.md). - -- **Types of automation to be run (Python-based or Authoring drivers)**: Execution servers are used for commands and orchestration, which are Python-based in most cases but also support Authoring drivers. The runtime for Authoring drivers takes more RAM/CPU than Python so limit the number of concurrent jobs to 5. -- **App deployment requires additional command slots**: For details, see [Configuring Execution Servers to Deploy vCenter Apps](./setting-up-execution-servers-to-run-commands#configuring-execution-servers-to-deploy-vcenter-apps) -- **To optimize run-time performance for individual tests**: Quali recommends setting each execution server's **Job slot capacity** to 1 (**Command slot capacity** is set to 20 by default). A job slot capacity of 1 ensures that maximum resources are always available to the running instance. For example, if there is some software/hardware that is installed on this machine that is required for the tests, and you cannot use it concurrently. - - That said, the runtime for Job Scheduling suites is heavier (more RAM/CPU) than python, but the execution server can still run a few tests concurrently if they are all independent and run against some remote targets. For example, if there is some software/hardware that is installed on this machine that is required for the tests, and you cannot use it concurrently, then you will need to limit the job slots on this execution server to 1. *This applies to the original Job Scheduling, the New Job Scheduling is specifically designed to handle high loads in the hundreds of concurrent executions.* - -- **Total number of job slots cannot exceed number of Runner licenses**: If you’re running TestShell Studio tests using the original Job Scheduling, then each test that starts consumes a runner license. These tests are also executed on the execution server and use a job slot. As such, you need to make sure the total number of job slots you allocate in the different execution servers does not exceed the number of Runner licenses you have. If this limit is reached and another test is executed, it will fail and exclude the execution server until an available license is found. -- **Test execution time and load on the system**: - - - How heavy are the tests to be executed (simple/complicated/short/long)? - - If the time it takes to execute each test is less important than the time it takes to run a series of tests, you can set execution server capacity according to the number of cores or the number of RAM on each machine. diff --git a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-execution-servers-to-run-commands.md b/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-execution-servers-to-run-commands.md deleted file mode 100644 index 0c12e17b3b..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-execution-servers-to-run-commands.md +++ /dev/null @@ -1,182 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Setting Up Execution Servers to Run Commands - -This article explains how to configure execution servers to run commands in CloudShell. Note that associating execution servers to automation suites is done on the job level, as explained in [Add jobs to an automation suite](../../portal/job-scheduling/manage-automation-suites/add-suites.md#add-jobs-to-an-automation-suite). - -## Managing execution servers - -The **Execution Servers** management pages in the web portal allow you to both manage and troubleshoot your execution servers, providing critical, real time data about the status of your execution servers, command and job executions, and troubleshooting information and options. For additional information, see [Managing Execution Servers](../../admin/manage-dashboard/execution-servers). - -## Distributed provisioning - -To allow for more flexibility and control, CloudShell uses execution servers to manage the executions of jobs and commands. Each CloudShell execution server has a job and command capacity, which can be modified as needed. CloudShell execution servers do not require a license, allowing for multiple execution servers to be used in CloudShell. For example, you can install several execution servers to distribute execution tasks and use execution servers that are physically closest to geographically distributed sites to minimize latency/avoid firewall issues. - -Execution servers can be installed in Windows and Linux environments. -:::important -Blueprint orchestration can be configured to run on one execution server, while the blueprint's orchestration can trigger resource commands that run on a completely different execution server. In this case, the orchestration will wait for the resource command(s) to finish. This kind of design decouples the resource level connectivity requirements from the orchestration. -::: -### Optimizing execution capacity - -For detailed information, see [Optimizing Execution Provisioning](./optimizing-execution-provisioning.md). - -### Distributed command execution - -Multiple execution servers can be deployed in order to scale out the provisioning and resource command tasks. By default, blueprint and resource commands are distributed between the execution servers according to their capacity. It is possible, however, to specify more explicit rules to control the execution server selection for commands, as explained in the "execution server selection" sections below. For additional information, see [Optimizing Execution Provisioning](./optimizing-execution-provisioning.md). - -### Resource commands - -*In this section, the term resource denotes resource, service or App.* - -When a resource command is executed, the system first checks whether a driver for that resource is already active on one of the execution servers. If it is, the command is automatically sent to that driver to be queued and handled. In case no driver is currently active, the resource driver is started on an available execution server. - -## Controlling execution server selection for resource commands - -Attributes can be used to match resource commands to the right execution server based on geographical location of the server and resource, execution server capabilities or other concerns. In a multi-site deployment, for example, there is an advantage in ensuring that overseas lab resources are only controlled by an on-premise execution server. This will help reduce the network latency and improve performance. - -For additional information, see [Associating Resources to Specific Execution Servers](../../portal/inventory/managing-resources/associate-resources-to-es.md). - -## Controlling execution server selection for App deployments - -To learn how to do this, see the appropriate article: - -- For private cloud Apps, see [Managing Private Cloud Apps in Domains](../supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md). -- For public cloud Apps, see [Managing Public Cloud Apps in Domains](../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/managing-public-cloud-apps-in-domains.md). - -## Controlling execution server selection for blueprint commands - -Blueprint driver commands are also distributed between the execution servers based on availability and capacity. In order to restrict blueprint commands to a specific group of execution servers, a configuration key needs to be added specifying the relevant selector attribute value. - -1. Create a selector attribute and assign it to an execution server, as explained in [Associating Resources to Specific Execution Servers](../../portal/inventory/managing-resources/associate-resources-to-es.md). - -2. Specify an attribute value for blueprint commands. Add the following configuration key to the Quali server `customer.config` file: `EnvironmentCommandsESRestrictions` - -The value should be the attribute name and value given the syntax `Name=Value`. For example: - -![](/Images/CloudShell-Portal/Manage/Management_2_3_565x28.png) - -## Configuring the Execution Server to Run as a Process by Default - -See [Configure the Execution Server to Run as a Process by Default](../../install-configure/cloudshell-suite/configure-products/config-execution-server-process.md). - -## Working with local tests - -If you are using a source control tool and wish to configure CloudShell to work with your local tests, see [Source Control: Using Local Tests in Automation Suites](../setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/) or contact Quali support or your Customer Success representative. - -## Configuring Execution Servers to Deploy vCenter Apps - -### Number of execution slots for VM deployments - -Take the following considerations into account when setting the number of Execution Server command slots for the deployment of Apps. - -| App deployment | Number of command slots required | -| --- | --- | -| **Apps deployed manually** | 3 slots per App | -| **Apps deployed automatically by CloudShell setup** | 2n + 1 (n = total number of Apps to be deployed at the same time)
    For example, deploying 5 Apps requires at least 11 execution slots. | - -### Deployments from OVF image files - -The following configurations should be performed on each execution server machine that will be used by the vCenter resource to deploy VMs from OVF image files during App deployments. - -- Configure access to vCenter OVF image file path - -- Install the OVF tool - -## Configuring Execution Servers to support Python 3 shells and scripts - -Python 3 automation requires Microsoft Visual C++ Redistributable 2015 x86 and x64 to be installed on the Execution Server(s). Without this installation, CloudShell will not create the Python virtual environment for the shell or script's execution on the Execution Server. - -## Enabling custom execution servers - -You can enable or disable the use of your own custom-built execution server. This feature is enabled by default. - -To enable custom execution servers: - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -3. Restart the **CloudShell Portal IIS** service. - -## Setting the Virtual Environment validity period - -CloudShell virtual environments (venv) are used to isolate Python driver and script executions on the Execution Server, and include all the dependencies required by the execution. Since dependencies may change, the Execution Server has the capability to reinstall/upgrade the venv dependencies on each subsequent execution of a script or driver that has a live venv. However, doing this is time-consuming, even if the requirements are already met. - -It is therefore important to limit the number of times venvs are updated by the Execution Servers. This is done using the `VirtualEnvironmentLifetimeDurationInMinutes` configuration key, which sets the global validity period, in minutes, for venvs. During this timeframe, on subsequent executions of the venv's driver or script, the Execution Server will not attempt to update the venv as long as the validity period has not expired. - -The default value is 480 minutes. - -:::note Notes -- If the Execution Server restarts and there are existing virtual environments in place, the Execution Server will update the venv and reset the validity period. - -- This key applies to online and offline modes. -- Venvs are used for resource drivers, resource scripts and orchestration scripts. -- Since old venvs may still be in use, they are not deleted until the next CloudShell update or Execution Server restart. -::: -**To Setting the Virtual Environment validity period:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Set the desired value. -3. Save the file. -4. Restart the **Quali Server** service. - -## Setting the logging level for Python drivers and scripts running on an Execution Server - -It is possible to set the logging level for automation processes running on a specific Execution Server or Python driver (for drivers, see CloudShell Dev Guide's [Tips and Tricks for Shells](../../devguide/developing-shells/tips-and-tricks-for-shells.md) article). The logging levels are: DEBUG, INFO, WARN and ERROR.Only messages that are greater than the specified log level are saved to the logs. - -Logs are organized in different files according to resource and sandbox. The folder location will be relative to the driver in the virtual environment location at: `%venv%\[drivername]\Lib\site-packages\cloudshell\Logs` (e.g. C:\\ProgramData\\QualiSystems\\venv\\Deployment\_Orchestrator\_5\_2\\Lib\\site-packages\\cloudshell\\Logs). Under windows, `[venv]` will be located at `%programdata%\qualisystems\venv`. - -**To set the logging level for Python drivers and scripts:** - -1. Go to `C:\Program Files (x86)\QualiSystems\TestShell\ExecutionServer\customer.config` file, and add the following key: - - `` - -2. Replace `` with the desired level. - - For example: - - `` - -3. Restart the **TestShell Execution Server** service. - -## Setting environment variables to be used by Python driver instances - -Using the `DefaultPythonEnvrionmentVariables` key, you can define environment variables to be used by the driver. The environment variable is defined on the Execution Server and will be used by the appropriate driver instances that are running on that Execution Server. - -**To set environment variables for Python driver instances:** - -1. Go to `C:\Program Files (x86)\QualiSystems\TestShell\ExecutionServer\customer.config` file, and add the following key: - - `` - -3. Replace each `` with a semicolon (;) separated list of the appropriate variable name-value pairs. - - For example: - - `` - -4. Restart the **TestShell Execution Server** service. - -## Troubleshooting - -- **What happens if the Execution Server is offline while I run the update process?** - - The execution server will still change to a state of Waiting for update and once it gets back online, it will start the update process first, and only then it will get jobs to run. - -- **What happens if I (or someone else) start another update process before the previous one is done?** - - You cannot start another process until the update on the QualiServer is done. - - Once its done, and the system is updating or waiting to update the execution servers, you can start another update process and even provide different blueprint parameters. - - Idle stations that were already updated by the previous process and stations that are currently updating will start the update again. Each station that is in a Waiting for update state will remain in that state and will execute the batch file with the new parameters when it becomes idle - -- **If the batch files fails, how can I check what happened?** - - On each machine, you define the batch file to launch and a folder in which we save the outputs from these batch files. If your batch files outputs any information about the process, then you'll be able to see it in these files and check what might have gone wrong. If the process stopped on TestShell Studio, you can check the logs of the portal for other relevant details. If it failed on the execution server, check the logs of it to see if there is more information. diff --git a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/_category_.json deleted file mode 100644 index c16e5d3bea..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Setting Up Python Virtual Environments", - "position": 5 -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/cleaning-up-the-virtual-environments-folder.md b/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/cleaning-up-the-virtual-environments-folder.md deleted file mode 100644 index 2abd1f11ab..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/cleaning-up-the-virtual-environments-folder.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Cleaning Up the Virtual Environments Folder - -CloudShell creates a new virtual environment in the installation path on the Execution Server whenever: - -- A new or updated shell or script is being run in CloudShell -- (Applies to resource and orchestration scripts only) The same script is being run with a different Python version - defined in the **Manage - Scripts** page - -This takes up disk space as virtual environments of the older driver and script versions are retained. You can remove these older virtual environments to free up disk space. - -:::note -The installation paths are: - -- On Windows: `%PROGRAMDATA%\QualiSystems\venv` - -- On Linux: `/usr/share/QualiSystems/venv/`. -::: -**To remove unneeded virtual environments:** - -- Restart the Execution Server. - - CloudShell will automatically clean up the unneeded virtual environments that were associated with previous driver and script versions. diff --git a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/configuring-cloudshell-to-execute-python-commands-in-offline-mode.md b/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/configuring-cloudshell-to-execute-python-commands-in-offline-mode.md deleted file mode 100644 index f01d43830d..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/configuring-cloudshell-to-execute-python-commands-in-offline-mode.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Configuring CloudShell to Execute Python Commands in Offline Mode - -When a Python driver or script runs in CloudShell, the Execution Server gets the Python packages from the local PyPi Server repository or downloads them from the online public PyPi repository (if they're missing from the local PyPi) and places them in the driver or script's virtual environment on the execution server. - -PyPi Server is installed on the Quali Server machine and requires an internet connection, so if Quali Server and/or the execution servers work offline (i.e. do not have an internet connection), or the packages are missing from public PyPi, you will need to copy the required Python packages, including the out-of-the-box ones, to the local PyPi Server repository on the Quali Server computer. When a driver or script runs, the **PyPi Server** process running on the Quali Server computer will copy the required dependencies from this folder to the driver or script's virtual environment on the appropriate execution server. For additional information, see [Loading packages to your PyPi Server repository](./pypi-server-managing-python-shell-and-script-dependencies.md#loading-packages-to-your-pypi-server-repository). -:::warning -The `` configuration key that defines the local offline package folder has been deprecated in CloudShell 8.3. Therefore, when upgrading to CloudShell 8.3 and above, you will need to configure PyPi Server as the mechanism for serving Python dependencies to your Python drivers and scripts. For details, see this [Migrate Python Dependencies to PyPi Server](../../../install-configure/cloudshell-suite/upgrade-procedure/migrate-python-dependencies.md). To learn more about PyPi Server, see [PyPi Server - Managing Python Shell and Script Dependencies](./pypi-server-managing-python-shell-and-script-dependencies.md). -::: -In this article (perform the procedures that are relevant for you): - -- [Add the out-of-the-box dependencies package to the local PyPi Server repository](#add-shell-and-script-packages-to-the-local-pypi-server-repository) (required) -- [Add Shell and script packages to the local PyPi Server repository](#add-shell-and-script-packages-to-the-local-pypi-server-repository) - -## Add the out-of-the-box dependencies package to the local PyPi Server repository - -*This procedure applies to CloudShell deployments in which the Quali Server and/or the execution servers are offline and must be done when installing or upgrading CloudShell.* - -Some native CloudShell operations require running Python code that uses certain Python packages. These include out-of-the-box CloudShell orchestration, App deployments on private cloud providers and configuration management operations. These dependencies are included in the `OfflinePackageRepository.zip` package CloudShell provides with every CloudShell release. - -**To add out-of-the-box dependencies to the local PyPi Server repository:** - -- Download the extract the `OfflinePackageRepository.zip` **Offline Package** zip file from [CloudShell Download Center](https://support.quali.com/hc/en-us/articles/231613247) and extract it to the local PyPi Server repository (by default: `C:\Program Files (x86)\QualiSystems\CloudShell\Server\Config\Pypi Server Repository`). - -## Add Shell and script packages to the local PyPi Server repository - -*This procedure applies to CloudShell deployments that are either offline or require the use of Python packages that are not in the public PyPi repository.* - -Shells and scripts running in CloudShell may also rely on packages in the public PyPi Python repository. Therefore, each time you add a Shell or script to CloudShell, to enable your offline execution servers to run this Shell or script, make sure to download its dependent packages and place them in the local PyPi Server repository as well. - -**To add Python packages to the local PyPi Server repository (do this for each shell or script you add into CloudShell):** - -1. From an online computer, do one of the following: - - - Connect to the Internet and download each dependency specified in the `requirements.txt` file with the following command:  - :::note - For Python 2 shells or scripts, use a Python 2.7.10 (and up) interpreter and for Python 3, use a 3.x interpreter. The Python version is defined in the shell's `drivermetadata.xml`'s `PythonVersion` property and when editing the script in CloudShell Portal's **Manage>Assets** page. - ::: - ```python - pip download -r requirements.txt - ``` - - The Shell or script's requirements are downloaded as zip files. - - - In [Quali Repositories](https://github.com/orgs/QualiSystems/repositories), locate the Shell and click the Shell's **Download** link. In the page that is displayed, from the **Downloads** area, extract the dependencies package zip file. -2. Place these zip files in the local PyPi Server repository. - -## Related Topics - -- [PyPi Server - Managing Python Shell and Script Dependencies](./pypi-server-managing-python-shell-and-script-dependencies.md) -- [Updating Python Dependencies for Shells, Drivers and Scripts](./updating-python-dependencies-for-shells-drivers-and-scripts.md) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/index.md b/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/index.md deleted file mode 100644 index 1c0f9ebe1b..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/index.md +++ /dev/null @@ -1,13 +0,0 @@ -# Setting Up Python Virtual Environments - -You can use Python virtual environments in CloudShell in order to isolate the different Python drivers and scripts, and enable CloudShell to install their dependencies without worrying about contradicting dependencies in different driver or script versions. - -The following articles describe what Python virtual environments are, how to configure virtual environments, manage the Execution Server, manage driver dependencies, implement manual processes (when required) to run Python drivers in CloudShell, and remove unneeded virtual environments to free up disk space. - -## Related topics - -- [What are Python Virtual Environments?](./what-are-python-virtual-environments.md) -- [PyPi Server - Managing Python Shell and Script Dependencies](./pypi-server-managing-python-shell-and-script-dependencies.md) -- [Configuring CloudShell to Execute Python Commands in Offline Mode](./configuring-cloudshell-to-execute-python-commands-in-offline-mode.md) -- [Updating Python Dependencies for Shells, Drivers and Scripts](./updating-python-dependencies-for-shells-drivers-and-scripts.md) -- [Cleaning Up the Virtual Environments Folder](./cleaning-up-the-virtual-environments-folder.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/pypi-server-managing-python-shell-and-script-dependencies.md b/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/pypi-server-managing-python-shell-and-script-dependencies.md deleted file mode 100644 index 77b72d3751..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/pypi-server-managing-python-shell-and-script-dependencies.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -sidebar_position: 2 ---- - -# PyPi Server - Managing Python Shell and Script Dependencies - -CloudShell manages driver and script dependencies using **PyPi Server**. PyPi Server is a process that is installed with CloudShell on the **Quali Server** computer. -:::note -If you are upgrading to CloudShell 8.3 and above, make sure to migrate your offline and locally developed Python packages to the PyPi Server repository. For additional information, see [Migrate Python Dependencies to PyPi Server](../../../install-configure/cloudshell-suite/upgrade-procedure/migrate-python-dependencies.md). -::: -The PyPi server allows easy and organized development of Python packages for local use. A developer can remotely upload their own local Python packages to the local PyPi server, making them available to all the Execution Servers, without having to expose these packages in a public repository (such as public PyPi) or a testing repository (such as a local TestPy). For details, see [Configuring CloudShell to Execute Python Commands in Offline Mode](./configuring-cloudshell-to-execute-python-commands-in-offline-mode.md). - -As illustrated below, the following takes place when a Python script or driver is launched: - -1. The execution server contacts the PyPi Server to get the required package versions. -2. If copies of the packages, with the right versions, reside in the local PyPi Server repository, the Execution Server will download them. However, if the repository contains packages that don't have the right versions (as defined in the shell or script's `requirements.txt` file \- see [Referencing other packages](../../../devguide/developing-shells/driver-deep-dive.md#referencing-other-packages)), the operation will fail. -3. If the packages are missing from the local PyPi Server repository, the Execution Server will search and download the packages from public PyPi. - -![](/Images/Admin-Guide/Setting-Up-CloudShell/PyPiServer-flow_673x332.png) - -:::note Notes -- To configure PyPi Server behind a proxy to allow the Execution Servers to reach PyPi Server, see [Using a Proxy to Download Python Packages from Public PyPi](../setting-up-python-virtual-environments/using-a-proxy-to-download-python-packages-from-public-pypi.md). -- To configure PyPi Server behind a reverse proxy for secure communication between the PyPi Server and the Execution Servers, see [Configuring PyPi Server to Work in Secure Mode](../../../install-configure/cloudshell-suite/secure-communication/config-secured-pypi.md). -::: -The following configuration modes are available for Python driver and script dependencies: - -## Automatic online mode -:::note -The PyPi Server and Execution Servers must have access to the Internet in order for CloudShell to work in this mode. -::: -This is the default mode. When a Python driver or script that has dependencies is running, the execution server running the driver or script automatically creates a new virtual environment for the driver or script's instance and PyPi Server sends the dependencies (i.e. links to download the dependencies) to the execution server, which downloads the missing dependencies and loads all the required dependencies to the virtual environment. - -If any of the dependencies are not in the local repository, PyPi Server searches for them online in public PyPi and sends links to their online locations for download to the local PyPi server. *To learn how to block PyPi Server from downloading certain packages in online mode, see the section below.* -:::important -Packages you add to the local PyPi Server repository will constrict all Python scripts and drivers that use any version of these packages to use the specific versions residing in the repository (if they require a different version, the execution will result in error). Therefore, for packages that are published in the public PyPi repository, the best practice is to specify the package versions in the `requirements.txt` instead of adding them to the local repository. -::: -### Blocking PyPi Server from downloading packages from public PyPi - -If you have internet access but want to block PyPi Server from downloading packages that reside in the public PyPi repository, place all the Python dependencies in your local PyPi Server repository, including the dependencies of Shells you are using and any other dependencies required by custom scripts and drivers you have in CloudShell. - -However, we do not recommend to place CloudShell dependencies in the repository (packages that come out\-of\-the\-box with CloudShell and packages that are released by Quali's Shells team), as this will force your scripts and drivers to use those package versions even if newer ones are in public PyPi (as explained in the note above). Therefore, we recommend to leave out any CloudShell dependencies (packages that include "cloudshell" in their name) to make sure you get backwards\-compatible CloudShell fixes and updates we publish from time to time on public PyPi. - -## Manual offline mode - -This mode is used when access to the Internet is unavailable for Quali Server and the execution servers. To make dependencies available in offline mode, the admin needs to download the dependencies and place them in the local PyPi Server repository residing on the Quali Server machine when installing or upgrading CloudShell. - -For additional information, see [Configuring CloudShell to Execute Python Commands in Offline Mode](./configuring-cloudshell-to-execute-python-commands-in-offline-mode.md). - -## Loading packages to your PyPi Server repository - -This procedure explains how to place specific packages in the local PyPi Server repository. This is required if Quali Server is in offline mode and cannot download packages from public PyPi and is useful for development and testing of drivers and scripts that require the use of packages, which are not published in the public PyPI Python repository. - -There are two ways to load packages to your PyPi Server repository, you can **manually extract** the dependencies packages to the repository or **use command\-line** to load specific packages, as explained below. -:::note -This applies to both online and offline CloudShell deployments. -::: -### Special considerations - -Packages you add to the local PyPi Server repository will constrict all Python scripts and drivers that use any version of these packages to use the specific versions residing in the repository (if they require a different version, the execution will result in error). Therefore, for packages that are published in the public PyPi repository, the best practice is to specify the package versions in the `requirements.txt` instead of adding them to the local repository. - -If you are upgrading from version 8.2 or below, you will need to add many packages at once, for example, when migrating to the PyPi Server method for managing Python packages. If this is the case, copy the Python dependencies residing in the dependencies folder(s) defined by the `` key to the new PyPi Server repository. You can also manually copy the packages to the new location if you have access to the Quali Server machine. - -### Manually uploading the dependencies to the local PyPi Server repository - -You can manually copy the dependency packages to the new location if you have access to the Quali Server machine. - -**To manually upload the dependencies:** - -1. Copy the ZIP packages to the Quali Server computer. - - You can download the dependencies from the shell's [Quali Repositories](https://github.com/orgs/QualiSystems/discussions/categories/integrations). - - For custom shells and scripts that are not available in the Community, you can download the dependencies listed in the `requirements.txt` file using the following command: - - ```python - pip download -r requirements.txt - ``` - :::warning - For custom shells, make sure to install dependencies that match the operating system of the Execution Server (Windows/Linux). - ::: -2. If multiple dependencies are zipped up together \- extract the bundle to the local PyPi Server repository DON’T extract the actual packages. - - For example: - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/extracting-dependencies_633x90.png) - - By default, the local PyPi Server repository is at: `C:\Program Files (x86)\QualiSystems\CloudShell\Server\Config\Pypi Server Repository`. - - -### Loading a package using command\-line - -For this method, you need the access credentials to the PyPi Server repository, which were defined when running the Quali Server configuration wizard. If you do not have them, contact your IT administrator. By default, the username and password are "pypiadmin". - -**To load a package using command\-line:** - -1. Unzip the package. Make sure the package contains a `setup.py` file. -2. In the unzipped package, create a file named **.pypirc** with the following data (common practice when working with Python packages and uploading them to PyPi): - - ```python - [distutils] - index-servers = - pypiserver - - [pypiserver] - repository=http://: - username= - password= - ``` - - For example: - - ```python - [distutils] - index-servers = - pypiserver - - [pypiserver] - repository=http://192.168.54.37:8036 - username=pypiadmin - password=pypiadmin - ``` - -3. Save the file. -4. Open command\-line from the unzipped package folder location and upload using the suitable option: **Setup** or **Twine**: - - - **To upload using Setup:** - - ```python - set HOME= - python setup.py sdist upload -r pypiserver - ``` - - - **To upload using Twine:** - - (If the dist folder is missing from the package, run `python setup.py sdist`) - - ```python - pip install twine - python -m twine upload dist/* --config-file .pypirc -r pypiserver - ``` - - - The package is uploaded to the local PyPi Server repository. - - -## Related Topics - -- [Updating Python Dependencies for Shells, Drivers and Scripts](./updating-python-dependencies-for-shells-drivers-and-scripts) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/updating-python-dependencies-for-shells-drivers-and-scripts.md b/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/updating-python-dependencies-for-shells-drivers-and-scripts.md deleted file mode 100644 index 71b4533c7f..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/updating-python-dependencies-for-shells-drivers-and-scripts.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Updating Python Dependencies for Shells, Drivers and Scripts - -This article explains how to update your local PyPi Server repository. This is required when you upgrade a Shell, driver or script that has new/updated dependencies. It applies to both online and offline dependencies. - -## Updating offline Python dependencies - -**To update offline Python dependencies:** - -1. Make a backup copy of the PyPi Server repository folder so you have the option to revert back if any errors occur. -2. Download the latest Python dependencies package zip file locally and extract the zip file to the local PyPi Server repository. See [Configuring CloudShell to Execute Python Commands in Offline Mode](./configuring-cloudshell-to-execute-python-commands-in-offline-mode.md). -3. Restart any execution server that has a live instance of the relevant driver or script. This requires running the Execution Server's configuration wizard - see [Configure the Execution Server](../../../install-configure/cloudshell-suite/configure-products/config-execution-server.md). - - -## Updating online Python dependencies - -In online mode, the PyPi Server process automatically downloads and extracts the appropriate dependencies file to the driver or script's virtual environment every time a new instance of the driver or script is created. - -**To update online Python dependencies:** - -- If there is a live instance of the driver or script, restart the execution server to delete the instance, as explained above. The next time a command of the driver or script is executed, PyPi Server will download the Python dependencies. - -## Related Topics - -- [PyPi Server - Managing Python Shell and Script Dependencies](./pypi-server-managing-python-shell-and-script-dependencies.md) -- [Configuring CloudShell to Execute Python Commands in Offline Mode](./configuring-cloudshell-to-execute-python-commands-in-offline-mode.md) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/using-a-proxy-to-download-python-packages-from-public-pypi.md b/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/using-a-proxy-to-download-python-packages-from-public-pypi.md deleted file mode 100644 index 72db64c61d..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/using-a-proxy-to-download-python-packages-from-public-pypi.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Using a Proxy to Download Python Packages from Public PyPi - -If the CloudShell Server resides on your internal network, you may need to set up an outbound proxy server to allow it to access [Public PyPi](https://pypi.org/) for downloading Python packages required by your scripts and shells. - -There are different ways to do this, and we'll cover using a configuration file or environment variables. - -## Using configuration file - -1. On the Execution Server machine, create a file called `pip.ini` under `C:\programdata\pip\`. -2. In `pip.ini` specify the proxy server's address as follows: - - ```javascript - [global] - proxy = http://[username:password@]proxyserver:port - ``` - - No need to specify the port if it's 80 for HTTP or 443 for HTTPS. - - -The process may differ if you're on a Linux Execution Server. For details, see the pip official documentation: [https://pip.pypa.io/en/stable/user\_guide/#using\-a-proxy\-server](https://pip.pypa.io/en/stable/user_guide/#using-a-proxy-server). - -## Using environment variables - -1. Depending on the proxy's communication protocol, create an environment variable on the Execution Server machine: - - `http_proxy` or `https_proxy variables` - -2. Set the variable's address in the format: - - ```javascript - http://[username:password@]proxyserver:port - ``` - - No need to specify the port if it's 80 for HTTP or 443 for HTTPS. - - -## Points to consider - -- In the proxy, sometimes not all internet access is allowed. In such cases, make sure at least these 2 addresses are allowed (both are over HTTPS and therefore use port 443): - - [https://pypi.org](https://pypi.org/) - - [https://files.pythonhosted.org](https://files.pythonhosted.org/) - -- When setting the proxy to use, the Execution Server will also try to reach out to the Quali Server (where the local PyPi Server is installed) using this proxy information, so if the proxy needs to allow access to the Quali Server machine, this is something you might want to consider adding to the proxy. - -- If you cannot add the Quali Server to the proxy, one option is to use the environment variables, and only set the `https_proxy` variable, which will be used to access the online Python repositories. However, this will not be used for HTTP access to the local PyPi Server on Quali Server. - - Note that only using the `https_proxy` variable will not work if the local PyPi Server is also secured and uses HTTPS. In this case, you need to either apply the changes to the proxy as mentioned in the note above, or use the offline mode (i.e. copy all packages to the local PyPi repository). - - -## Related Topics - -- [Configuring CloudShell to Execute Python Commands in Offline Mode](../../../admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/configuring-cloudshell-to-execute-python-commands-in-offline-mode.md) -- [Configuring PyPi Server to Work in Secure Mode](../../../install-configure/cloudshell-suite/secure-communication/config-secured-pypi.md) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/what-are-python-virtual-environments.md b/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/what-are-python-virtual-environments.md deleted file mode 100644 index 37fbf23156..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/what-are-python-virtual-environments.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -sidebar_position: 1 ---- - -# What are Python Virtual Environments? - -*This article discusses virtual environments for shells and scripts. For virtual environments created for New Job Scheduling jobs, see [Setting Up a Test Repository](../../../install-configure/cloudshell-suite/new-jss-install-config/test-repository-config/set-up-repo.md).* - -A virtual environment is a folder containing the dependencies required by a particular Python shell driver or script that is running in CloudShell. This enables running different drivers and scripts with different dependencies simultaneously. - -Therefore, whenever a Python driver or script runs in an execution server for the first time, CloudShell creates a new virtual environment in the execution server for that driver or script, and installs, in the virtual environment, the dependencies specified in the driver or script's `requirements.txt` file. This virtual environment is used in subsequent runs of the driver or script on that execution server, which enables the execution of different drivers and scripts with different dependencies simultaneously. - -However, if a newer version of the shell or script runs, or the same script is run with a different Python version, CloudShell will create a new virtual environment for the updated driver or script, but will only delete the old virtual environment when the execution server is restarted. The installation path of the virtual environment is:  - -- On Windows: `%PROGRAMDATA%\QualiSystems\venv` -- On Linux: `/usr/share/QualiSystems/venv/` -:::note -Using the driver or script for the first time on the execution server may take some setup time to create the new virtual environment and install the dependencies. The next time the same Python driver script is used, any new dependencies uploaded to the Python Package Index (PyPI) repository for this driver or script will be installed. Any existing dependencies will be reused without any changes (and will not require additional setup time). For details on how and when the Execution Server updates the venv, see [Setting the Virtual Environment validity period](../setting-up-execution-servers-to-run-commands.md#setting-the-virtual-environment-validity-period). -::: -## Related Topics - -- [PyPi Server - Managing Python Shell and Script Dependencies](./pypi-server-managing-python-shell-and-script-dependencies.md) -- [Configuring CloudShell to Execute Python Commands in Offline Mode](./configuring-cloudshell-to-execute-python-commands-in-offline-mode.md) -- [Cleaning Up the Virtual Environments Folder](./cleaning-up-the-virtual-environments-folder.md) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/_category_.json deleted file mode 100644 index 0ff2d6653f..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "CloudShell Identity Management", - "position": 3 -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/_category_.json deleted file mode 100644 index 3d1b87f7c0..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Access Control and Authentication", - "position": 4 -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/active-directory-integration/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/active-directory-integration/_category_.json deleted file mode 100644 index 98ef3e589f..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/active-directory-integration/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Active Directory Integration", - "position": 1 -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/active-directory-integration/configuring-cloudshell-to-automatically-import-active-directory-users-on-first-login.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/active-directory-integration/configuring-cloudshell-to-automatically-import-active-directory-users-on-first-login.md deleted file mode 100644 index c431d16caa..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/active-directory-integration/configuring-cloudshell-to-automatically-import-active-directory-users-on-first-login.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Configuring CloudShell to Automatically Import Active Directory Users on First Login - -This article explains how to configure CloudShell to automatically import users from an active directory (or LDAP) when they log in to CloudShell for the first time, and associate the imported users to the appropriate group. Note that the passwords of imported users are managed by the directory service provider itself. - -**To configure CloudShell to auto-import users on first login:** - -1. Make sure Quali Server is running using a Microsoft login account with access to the appropriate active directory domain. - :::note - The account is displayed in the **Windows Windows Services** window, in the **Properties** of the Quali Server service, in the **Log On** tab. - ::: -2. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following keys: - - | Key | Description | - | --- | --- | - | ActiveDirectory.Domain | This key sets the active directory domain containing the users you want to allow into CloudShell. Specify the active directory domain as the value. For example, setting an active directory domain called "Router\_UK":
    \
    **Prerequisite:** The computer that will be used to import the users must be in your corporate domain. | - | ExternalUserManagement.AutoImportUser | Add this key to enable CloudShell to automatically import users from an active directory or LDAP when they log in to CloudShell for the first time.
    \ | - | Registration.AdditionalGroup | When added automatically (at login), users imported from an active directory or LDAP will be added to the Group that is defined in this key.
    For example, setting the "Regular Users" group for imported users:
    \
    The default group is **External Users**.
    **Important:** The Group must be associated with a domain. | - -3. Save the file. -4. Restart the **Quali Server** service. diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/active-directory-integration/importing-users-into-cloudshell-from-an-active-directory.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/active-directory-integration/importing-users-into-cloudshell-from-an-active-directory.md deleted file mode 100644 index d546f23e0f..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/active-directory-integration/importing-users-into-cloudshell-from-an-active-directory.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Importing users into CloudShell from an active directory - -The following procedures explain how to import users from your active directory into CloudShell. To enable user import, the `ActiveDirectory.Domain` configuration key needs to be set - see [Configuring CloudShell to import user definitions from an active directory](../../../setting-up-cloudshell/cloudshell-configuration-options/advanced-cloudshell-customizations.md#configuring-cloudshell-to-import-user-definitions-from-an-active-directory). - -Once imported and associated to the relevant CloudShell groups and domains, imported users log into CloudShell using their active directory username and password, and the desired CloudShell domain. In addition, the password of an imported user can only be changed from the active directory itself. - -In **Resource Manager Client**, in the **Users** tab, imported users have the **Imported** check box selected (illustrated for user "Mika-y" in the image below). - -![](/Images/Admin-Guide/User-Management/UsersTabCheckboxes.png) - -## Importing users from an active directory group - -**To import users from a specific active directory group**: - -1. Log in to **Resource Manager Client** as administrator. -2. In the **Admin** ribbon, click **Users**. -3. Click the **Import Users** button. -4. In the **Import Users** dialog box, select the **Group** option. - - ![](/Images/Admin-Guide/User-Management/ImportUsersFromGroup_491x468.png) - -5. Click **Refresh** to get a full list of groups that exist in the current domain. -6. Select the required group from the **Group** drop down list or leave **All Groups** to get all users in the active directory. -7. Click **Run Query** to get the list of users. -8. Select the users to import. Press the **\[CTRL\]+\[A\]** keys to select all users in the list or press the **\[CTRL\]** key to select specific users. - - :::note Active Directory users are added as follows: - - AD First Name field maps to the CloudShell Username (in user list and auto-import dialog) - - AD Display Name field maps to the CloudShell Display Name (in auto-import dialog) - - AD Pre-win2000 field (SamAccountName) maps to Cloudshell Username. -

    - More... - - ![](/Images/Admin-Guide/User-Management/SamAccountName.png) -
    - - -9. Click **OK**. - -## Importing active directory users from a file - -You can also import users from an external text file. The file must contain a list of valid email addresses in the active directory, separated with a comma or semicolon. - -**To import users from a file**: - -1. Log in to **Resource Manager Client** as administrator. -2. In the **Admin** ribbon, click **Users**. -3. Click the **Import Users** button. -4. In the **Import Users** dialog box, select the **Import from file** option. - -![](/Images/Admin-Guide/User-Management/ImportUsersFromFile_511x416.png) - -5. Click **Browse** and select the txt file. The email addresses must be comma or semicolon-separated. For example: jane.d@company.com,john.j@company.com,steve.b@company.com,deb.h@company.com - - The file contents are displayed in the text box. - -6. Click the **Run Query** button to get the list of users from the loaded file. - - The users are listed in the dialog box. Nonexistent users in the file are not listed. - -7. Select the users to import: Press the **\[CTRL\]+\[A\]** keys to select all users in the list or press the **\[CTRL\]** key to select specific users. -8. Click **OK**. - - The users are added to the **Users Management** list from the current domain. diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/active-directory-integration/index.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/active-directory-integration/index.md deleted file mode 100644 index ac65fd6bab..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/active-directory-integration/index.md +++ /dev/null @@ -1,12 +0,0 @@ -# Active Directory Integration - -CloudShell provides built-in integration with Microsoft Active Directory services for user authentication and authorization. To learn how to use Active Directory with CloudShell, see the following articles: - -- [Importing users into CloudShell from an active directory](./importing-users-into-cloudshell-from-an-active-directory.md) -- [Configuring CloudShell to Automatically Import Active Directory Users on First Login](./configuring-cloudshell-to-automatically-import-active-directory-users-on-first-login.md) - -If you cannot integrate with Active Directory, we also support integration with an LDAP, SSO or JWT solution: - -- [LDAP Integration](../ldap-integration.md) -- [Configuring Single Sign-On (SSO)](../saml-authentication-configuration-sso-slo/configure-sso/index.md) -- [JSON Web Token (JWT) Configuration](../json-web-token-jwt-configuration.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/index.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/index.md deleted file mode 100644 index 02070dd646..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/index.md +++ /dev/null @@ -1,10 +0,0 @@ -# Access Control and Authentication - -CloudShell provides several access control and authentication methods. Active Directory and LDAP enable your users to access CloudShell with their own corporate accounts, while SSO and JWT provide user access to CloudShell through your own login page. - -## Related Topics - -- [Active Directory Integration](./active-directory-integration/index.md) -- [LDAP Integration](./ldap-integration.md) -- [Configuring Single Sign-On (SSO)](./saml-authentication-configuration-sso-slo/configure-sso/index.md) -- [JSON Web Token (JWT) Configuration](./json-web-token-jwt-configuration.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/json-web-token-jwt-configuration.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/json-web-token-jwt-configuration.md deleted file mode 100644 index e3a7877148..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/json-web-token-jwt-configuration.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -sidebar_position: 3 ---- - -# JSON Web Token (JWT) Configuration - -*JWT configuration is available for Premium accounts only. Using JWT Authentication in order to log into CloudShell requires advanced customization of the login requests, as well as on the CloudShell side. Please consult with your Technical Account Manager prior to such customization.* - -JWT is an access control and authentication method that enables you to access several services through a single login page, prompting you to enter your credentials only once. You can use JWT to enable your users to access CloudShell through your homepage. - -## Configuring JWT Authentication - -To integrate JWT authentication with CloudShell, make sure JWT is installed and configured on your web app. For additional information, see [JWT documentation](https://jwt.io/). Using JWT, an online Service Provider (SP) - CloudShell in our case - can contact a separate online Identity Provider (IdP), the customer's web app for example, to authenticate users who are trying to access secure content. - -The following figure shows the typical use case addressed by JWT, where the principal (user) tries to access CloudShell. CloudShell redirects to the customer's login page, prompting the user to log in. Successful login grants the user access to CloudShell and the user is redirected back into CloudShell Portal, along with a JWT token. In subsequent logins, the user will automatically be granted access to CloudShell Portal as long as this token exists and is valid. - -![](/Images/Admin-Guide/Setting-Up-CloudShell/JWT-worfklow.png) - -## Enabling JWT authentication for CloudShell Portal - -In order to enable your users to access CloudShell using JWT authentication, CloudShell needs to obtain certain details about the user from the cookie created by your login page. - -**To enable JWT authentication for CloudShell Portal:** - -1. Go to the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following keys: - - | Configuration key | Description | - | --- | --- | - | \ | The URL to the customer's login page. The user will be redirected to this page for login authentication.
    For example: "http://localhost:7658/home/login" | - | \ | Name of the cookie created by the customer's login page | - | \ | The customer's verification code. CloudShell uses this code to verify the customer's identity. | - | \ | The field containing the user's name in the cookie. | - | \ | The field containing the user's email in the cookie. | - | \ | **\[server\]** is the IdP server's IP or DNS. The URL to the customer's logout page. This page will be displayed when the user logs out of CloudShell. | - - :::note - You can map **JWT.UsernameField** and **JWT.EmailField** to fields in a `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\jwt_payload_mapping.config.json` claims file. For example: - ![](/Images/Admin-Guide/Setting-Up-CloudShell/jwt_payload_file.png) - ::: -2. Restart the **CloudShell Portal IIS** service. -3. Next, follow the steps in the below procedure to define the user's access permissions in CloudShell. - -## Defining the user's access permissions in CloudShell - -When the user logs in to your web app, a CloudShell user is created. This user is created only once, and will be used to allow your application's user to access CloudShell on all future logins. This user is allowed to access a predefined CloudShell domain containing blueprints, resources and other assets that have been prepared in advance for the user. The configuration keys below set the login mode to be used and the CloudShell domain, the user's group and the group's role. - -**To define the user's access permissions in CloudShell:** - -1. Go to the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Specify the user's settings in CloudShell. - - | Configuration key | Description | - | --- | --- | - | \ | The CloudShell domain which the user will be able to access | - | \ | The group associated to the specified domain | - | \ | The group's role | -:::note -You can change the user's permissions in the future, as appropriate. -::: -4. Restart the **Quali Server** service. - - Your users should now be able to access CloudShell with their own accounts. diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/ldap-integration.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/ldap-integration.md deleted file mode 100644 index 74df79dfef..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/ldap-integration.md +++ /dev/null @@ -1,146 +0,0 @@ ---- -sidebar_position: 4 ---- - -# LDAP Integration - -The integration of an LDAP server with CloudShell enables LDAP users to log in to CloudShell Portal with their credentials, without having to be imported manually into the **Resource Manager** users list. The import is done automatically when the user logs in to the portal. -:::tip -CloudShell provides additional user authentication options, including Active Directory, SSO and JWT. However, if possible, consider using Active Directory for user authentication as it features a simple configuration process. For additional information, see [Active Directory Integration](../../../admin/cloudshell-identity-management/access-control-and-authentication/active-directory-integration/index.md). -::: - -## Enabling secure LDAP (LDAPS) - -This procedure configures LDAP users to access CloudShell over SSL. - -**To enable LDAP to run in SSL mode:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file. -2. Copy the following keys to the file: - - ```javascript - - - - - ``` - -3. Set the key values according to your LDAP server configurations: - - - - - - - - - - - - - - - - - - - - - - - - - - -
    KeyDescription
    <add key="LDAP.IsLDAPS" value="true"/>true enables LDAPS mode.
    <add key="LDAP.AuthType" value="1"/> - Determines how to authenticate Active Directory users in CloudShell. Possible values are: - - - - - - - -
    -

    **0** - Anonymous

    -

    **1** - Basic

    -

    **2** - Negotiate

    -

    **3** - Ntlm

    -

    **4** - Digest

    -
    -

    **5** - Sicily

    -

    **6** - Dpa

    -

    **7** - Msn

    -

    **8** - External

    -

    **9** - Kerberos

    -
    -
    <add key="LDAP.Timeout" value="600"/>Timeout period, in seconds. If the system does not respond within this period, an error is displayed.
    <add key="LDAP.CheckCertificate" value="false"/> - Determine whether to validate the given SSL certificate against the local store.
    Default is false. -
    - - :::important - In addition, you will need to set the `LDAP.Port` key to **636**. This is covered in the following section. - ::: -4. Save the file. -5. Proceed to register LDAP users in CloudShell below. If you already registered your LDAP users in CloudShell, restart the **Quali Server** service to apply the changes. - -## Registering LDAP users in CloudShell - -This procedure requires good working knowledge of LDAP servers. - -**To register LDAP users in CloudShell:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file. -2. Make sure the following key is in the file. If it is missing, add it. - - `` - -3. Copy the following keys to the file: - - ```javascript - - - - - - - - - - - - - - - - - - - - - - - - - - ``` - -4. Set the key values according to your LDAP server configurations. For assistance, contact your IT department or use your preferred LDAP browser utility to verify the object classes used by your LDAP Server. - -5. To enable CloudShell to automatically add the users when they first log in to CloudShell, copy this key to the file: - - `` - -6. When added automatically (at login), users imported from LDAP will be added to the Group that is listed in the `Registration.AdditionalGroup` key. The default group is **External Users** (Used to be **System Administrators**). If you want a different Group, change the value of the key. - :::note - For the registration of non-imported users to succeed, the group defined in the `Registration.AdditionalGroup` key must be included in **Resource Manager Client** and associated with a domain. - ::: -7. Save the file. -8. Restart the **Quali Server** service. -9. To prevent users from changing their passwords in CloudShell, do the following: - - 1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file and add this key: - - `` - - 2. Save the file and restart the **CloudShell Portal IIS** service. diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/_category_.json deleted file mode 100644 index bfd7ed3550..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "SAML Authentication Configuration (SSO / SLO)", - "position": 2 -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configure-sso/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configure-sso/_category_.json deleted file mode 100644 index 2c6a0218cd..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configure-sso/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Configuring Single Sign-On (SSO)", - "position": 1 -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configure-sso/index.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configure-sso/index.md deleted file mode 100644 index 39eaecea6f..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configure-sso/index.md +++ /dev/null @@ -1,306 +0,0 @@ -# Configuring Single Sign-On (SSO) - -## SSO Overview - -*SSO/SLO configuration is available with CloudShell Premium Tier.* - -Single sign-on is an access control and authentication method that enables you to access several services through a single login page, prompting you to enter you credentials only once. You can use SSO to enable your users to access CloudShell through your homepage. - -Single sign on to the CloudShell Portal is done using the SAML protocol. This configuration relies on a third-party identity provider (IdP) for authentication and authorization, using Security Assertion Markup Language (SAML). - -SAML SSO for CloudShell is implemented through Saml2 (previously known as Kentor AuthServices), an open-source library that adds SAML2 support to ASP.NET and IIS websites, integrating with various identity providers. - -## Configuring SAML Single Sign-On (SSO) - -You can configure Security Assertion Markup Language (SAML) single sign-on (SSO) to allow secure web domains to exchange user authentication and authorization data (such as username and password). Using SAML, an online Service Provider (SP) can contact a separate online Identity Provider (IdP) to authenticate users who are trying to access secure content. - -The following figure shows the typical use case addressed by SAML, where the principal (user) requests a service from the Service Provider. The Service Provider requests and obtains an identity assertion from the Identity Provider. On the basis of this assertion, the Service Provider can make an access control decision, in other words it can decide whether to perform some service for the connected principal (user). -:::note -CloudShell supports SAML v2.0. If you encounter an error, please contact your SAML administrator. -::: -![](/Images/Admin-Guide/Setting-Up-CloudShell/SAML-workflow.png) - -**To configure SAML SSO for CloudShell Portal:** - -1. [Set up an Identity Provider (IdP)](#set-up-an-identity-provider-idp). - :::note - When setting up and managing the Identity provider, make sure to configure the IdP to recognize CloudShell Portal as a service provider. - ::: -2. [Install a certificate on a local machine](#install-a-certificate-on-a-local-machine). -3. [Configure CloudShell to work with SAML SSO](#configure-cloudshell-to-work-with-saml-sso). - -### Set up an Identity Provider (IdP) - -When setting up an Identity Provider, make sure you do the following: - -1. Configure a SAML 2.0 app with the required users. - :::note Notes - When creating users in the IdP, the users must have the following attributes in order to be authenticated (see the `kentor.config` example to see how they are used): - - - `userName`: with the user name; - - `emailAddress`: with the email address; - - `timezoneName`: with the values from the **Time zone name** column in [MSDN's Time Zone IDs](https://msdn.microsoft.com/en-us/library/gg154758.aspx) - - `RelayState`: with the URL of the location to be directed to after sign-on - - (Optional) `Domain`: with the CloudShell domain name to log the user into (if the user's group is associated with more than one domain). To change the name of the `Domain` attribute, see [SAML Single Sign On (SSO)](../../../../../admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/single-sign-on-sso.md#saml-single-sign-on-sso). - - - When a user logs into CloudShell for the first time or if the specified CloudShell domain does not exist, they will be logged in randomly to one of the domains they can access. - - The user will be logged into the domain they were last logged into if either the user does not have permission to access this domain, or no domain attribute was created in the IdP for that user. - - Plus any other attributes according to which users should be mapped into groups in the sso\_group\_rules.config.json file - ::: -2. In the ACS URL field, add the following URL: `http://[server]/AuthServices/ACS` - - `[Server]` should be replaced with the address or name of the machine on which the CloudShell Portal client is installed. -
    - - To see a sample configuration using Okta, click here... - - 1. Log in to your Okta organization as a user with administrative privileges. If you don’t have an Okta organization, you can create a free [Okta Developer Edition organization](https://developer.okta.com/signup/). - 2. Click **Admin**. - - ![](/Images/Admin-Guide/SLO-configuration/OktaAdminButton_58x30.png). - - 3. Click the **Add Applications** shortcut. - - ![](/Images/Admin-Guide/SLO-configuration/OktaAddApplicationsShortcut_118x16.png). - - 4. Click **Create New App**. - - ![](/Images/Admin-Guide/SLO-configuration/OktaCreateNewAppButton_125x27.png). - - 5. In the dialog that opens, select the **SAML 2.0** option, then click **Create**. - - ![](/Images/Admin-Guide/SLO-configuration/OktaCreateNewApplicationIntegrationPage_447x255.png) - - 6. In step 1 - **General Settings**, enter **Example SAML Application** in the **App name** field, then click **Next**. - - ![](/Images/Admin-Guide/SLO-configuration/OktaGeneralSettings_456x286.png) - - 7. In step 2 - **Configure SAML**, section A **SAML Settings**, paste the logout page URL in the **Single sign on URL** and **Audience URI (SP Entity ID)** fields. - - ![](/Images/Admin-Guide/SLO-configuration/OktaSAMLSettings_468x303.png) - - 8. In the **Attribute Statements** section, add the following two attribute statements: - - - **emailAddress: user.email** - - **userName: user.login** - - - ![](/Images/Admin-Guide/SLO-configuration/OktaAttributeStatements_463x156.png) - - 9. Click **Next**. - 10. In step 3 - **Feedback**, select **I'm a software vendor. I'd like to integrate my app with Okta** then click **Finish**. - - ![](/Images/Admin-Guide/SLO-configuration/OktaFeedback_434x204.png) - - 11. The **Sign On** section of your newly created “Example SAML Application” application is displayed. Right-click the **Identity Provider metadata** link, select copy and save it somewhere you'll remember. - - ![](/Images/Admin-Guide/SLO-configuration/OktaSignOn_434x406.png) - - 12. Right-click the **Assignments** section of the “Example SAML Application” application and select **Open Link In New Tab** (so that you can come back to the “Sign On” section later). - 13. In the new tab that opens, click **Assign** button and select **Assign to People**. - - ![](/Images/Admin-Guide/SLO-configuration/OktaAssignments_231x139.png) - - 14. In the **Assign Example SAML Application to People** dialog box, type your username into the search box and click the **Assign** button next to your username. - - ![](/Images/Admin-Guide/SLO-configuration/OktaAssignUser_303x81.png) - - 15. Verify your user's attributes and select **Save and Go Back**. - - ![](/Images/Admin-Guide/SLO-configuration/OktaVerifyUser.png) - - 16. Click **Done**. -
    -3. Download the X.509 Certificate acquired from the IdP. Make sure the file type is `.cer`. -4. Copy the Identity Provider Single Sign-On URL and save it for later. -5. Copy the Issuer URL and save it for later. - -### Install a certificate on a local machine - -While setting-up an IdP, you are required to download a certificate file used for communication with the IdP. For increased security, install certificates on your local machine. - -**To install a certificate:** - -1. After downloading the `.cer` file to your local directory, double-click to open it. -2. In the **Security Warning** window, click **Open**. -3. In the **Certificates** window, click **Install Certificate**. - - The **Certificates Import Wizard** displays. - -4. In the **Store Location** section, select **Local Machine** and click **Next**. -5. Select the certificate store in which you want to install your certificate, and click **Next**. -6. Click **Finish** to import the certificate. - -### Configure CloudShell to work with SAML SSO - -Configuration includes defining user groups and enabling the use of SAML SSO in CloudShell. - -Users created in the IdP can use their defined **User Name** and **Email** attributes to log in to CloudShell Portal. If they are not pre-existing CloudShell users, they are automatically mapped to a group in CloudShell, according to the group rules defined in a dedicated `sso_group_rules.config.json` file. -:::note -By default, users that are added to CloudShell via SSO are also added to the **External Users** group. However, you can change this via the `Registration.AdditionalGroup` configuration key. -::: -For information about creating users, see [Managing CloudShell Users](../../../../../admin/cloudshell-identity-management/managing-users/managing-cloudshell-users.md). - -#### To define user groups for SAML SSO: - -1. Make sure the required user groups already exist in CloudShell and are added to a domain. -2. Create a JSON file with the groups and their constraints per your needs, and save it under the name `sso_group_rules.config.json` in the root folder of the CloudShell Portal installation directory. -3. Alternatively, you can download the [sample JSON file](https://qualisystems.hosted-by-files.com/Onlinehelpresources/SSO/sso_group_rules.config.json) and use it as a template for the construction of a static predefined group. - - :::note Points to consider - - Users are associated to a group if their attributes match all the constraints defined for that group. Users can be associated to more than one group. - - By default, group associations are created when registering the user. However, admins can set CloudShell to update the group associations whenever the user logs into CloudShell. For details, see [Enabling CloudShell to auto-update group associations on user login](#enabling-cloudshell-to-auto-update-group-associations-on-user-login). - - Optionally, you can use regular expressions in the `sso_group_rules.config.json` file you created to define dynamic groups that are conditioned by the values of the SAML parameters. Once regular expressions are enabled, with the `EnableRegex` element, the constraints' values are recognized as regular expressions. - ::: - :::note Notes for setting up SSO login to a CloudShell API: - - If you're setting up SSO login to a CloudShell API, place the file under the Server installation directory (usually at `C:\Program Files (x86)\QualiSystems\CloudShell\Server\`). - - Users are created according to the email and **preferred\_username** claim. If there is no **preferred\_username**, the username will be the email. - ::: - **Example: A group defined using regular expressions:** - - ```javascript - { - "Groups":[ - { - "EnableRegex":true, - "GroupName":"{group_name}", - "Constraints":[ - { - "Attribute":"TargetGroup", - "Value":"^(?.*)$" - } - { - "Attribute":"Location", - "Value":"*" - } - ] - } - ] - - } - ``` - - **Example: Adding all new SSO users to a specific group:** - - *The attribute you use is an attribute that comes back from the IdP, so it doesn't matter which one you choose. If the value is set to \*, it will match any user and assign them to the NewUsers group.* - - ```javascript - { - "Groups":[ - { - "GroupName":"NewUsers", - "Constraints":[ - { - "Attribute":"userName", - "Value":"*" - } - ] - } - ] - } - ``` - :::note - The asterisk in `Value="*"` is recognized as a regular expression, even if regular expressions are not enabled. - ::: -4. Save your JSON file under the name `sso_group_rules.config.json` (make sure the name is an exact match). - -**To enable SAML SSO:** - -1. Go to the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Go to the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, add the following keys and set the required values: - - `` (Used to redirect the user to a specified URL whenever the user browses the CloudShell Portal's login page. The \[Server\] should be replaced with the address or name of the machine on which the CloudShell Portal client is installed.) - - `` (\[server\] is the IdP server's IP or DNS (for some IdPs, you may need to specify the CloudShell Portal instead). Used to redirect users after logging out of CloudShell Portal.) -3. Add the `kentor.config` file, based on our [sample file](https://qualisystems.hosted-by-files.com/Onlinehelpresources/SSO/kentor.config), to the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal` folder. - -The `kentor.config` file contains all the Authentication requirements, for example, the location of the certificate store and requested attributes for the IdP response. - -#### Sample file requirements -
    - -Expand for a description of the requirements in the sample file: - -| Requirement | Description | -| --- | --- | -| **\** | | -| entityId | The name the service provider will use for itself when sending messages. In this case, it is the CloudShell Portal location on your local machine with the addition of /**AuthServices**. | -| returnUrl | The URL that you want users to be redirected to once the authentication is complete. This is typically the start page of the application, or a special signed in start page. | -| **\** | | -| requestedAttributes | List of attributes to be included in the assertions generated by the identity provider. The **requestedAttributes** section SHOULD NEVER be changed. | -| **\** | | -| entityId | The name that the IdP will use for itself when sending responses. Here you must enter the Issuer URL you retrieved from the IdP. | -| signOnUrl | The URL to the sign-in page of the IdP, to which CloudShell Portal will redirect users in order to sign in. | -| allowUnsolicitedAuthnResponse | This enables the IdP to initiate sign on where there was no prior authentication request. | -| binding | The binding that the services provider should use when sending requests to the identity provider. | -| **\** | | -| storeLocation | The location of the certificate store to search for the certificate you installed. | -| storeName | Name of the certificate store to search for the certificate.
    **Note**: If you stored the certificate in the Personal store, enter "My" as value. For more information see MSDN's [StoreName Enumeration](https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.storename(v=vs.110).aspx) page. | -| findValue | A search term to use to find the certificate. The value will be searched for in the field specified by the **x509FindType** attribute. The required information can be found in the installed certificate details in the certificate store. | -| x509FindType | The field according to which the certificate will be searched, as defined by the value in the **findValue** attribute. You can find more information about this in MSDN's [X509FindType Enumeration](https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509findtype.aspx) page. | -
    -:::note Notes -- The sample file shows only the minimum requirements. -- You may also save the certificate file and use the key `` with your certificate file path. -::: -4. Edit the file according to the additional information required by your IdP. - - For more details on the file and its elements, see the [Saml2 Configuration documentation](https://github.com/Sustainsys/Saml2/blob/master/docs/configuration.rst). - -5. Restart **Quali Server** and **CloudShell Portal IIS** services. -6. Open your browser and navigate to your portal. - - You are redirected to the IdP's login page instead of CloudShell Portal. - :::note - When trying to access the login page, if you receive a "Missing BASE64 Value" error message, make sure you have configured all the required application details correctly in the IdP. - ::: -7. Enter the user name and password you gave the user via the IdP, and you will be referred directly to the Portal's home. -:::tip -You can use the SSO Tester utility to test your SSO configuration. For additional information, see [SSO Tester](../../../../../admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configure-sso/sso-tester.md). -::: -## Enabling CloudShell to auto-update group associations on user login - -By default, group associations are created when registering the user. However, by enabling the `ReevaluateSSOUserAssociationUponLogin` configuration key, CloudShell will update the group associations whenever the user logs into CloudShell. - -**To enable group associations on login:** - -1. Go to the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Restart the **CloudShell Server** service. - - -## Enabling direct access to CloudShell Portal - -Users with CloudShell credentials can access CloudShell Portal directly, not via the SSO login page. By default this is disabled. - -**To enable direct access to CloudShell Portal:** - -1. Go to the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. Restart the **CloudShell Portal IIS** service. - -3. Log in to CloudShell Portal using this URL format: **https://\/Account/Login?nocustom=nocustom**. - - For example: "`https://192.173.45.80/Account/Login?nocustom=nocustom`" - - You are directed to the CloudShell Portal login page - -4. If you encounter an error, in IIS Manager, in the **Advanced Settings** window of the CloudShell Portal site's application pool, set **Load User Profile** to **True**. - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/SsoLoadUserProfile_408x508.png) - - -## Disabling SSO - -**To disable SSO:** - -1. Go to the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and take out the following key: - - `` - -2. Restart the **CloudShell Portal IIS** service. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configure-sso/sso-tester.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configure-sso/sso-tester.md deleted file mode 100644 index 267e9a278d..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configure-sso/sso-tester.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -sidebar_position: 1 ---- - -# SSO Tester - -The SSO Tester utility allows you to test the Saml2 configuration on a CloudShell system with predefined SSO SAML integration. It is used to ensure that the SSO implementation works with your IdP and local configurations. We recommend using the SSO Tester utility on your staging environment before implementing CloudShell with Saml2 SSO in your production environment. - -## Prerequisites - -Before using the SSO Tester utility, make sure to: - -1. [Install the SSO Tester utility](#install-the-sso-tester-utility) -2. [Create a new website in IIS Manager](#create-a-new-website-in-iis-manager) -3. [Configure CloudShell to work with SAML SSO](./index.md#configure-cloudshell-to-work-with-saml-sso) -:::note -Make sure you have IIS installed on your machine. The SSO Tester utility does not work on machines on which the default IIS Express is installed. -::: -### Install the SSO Tester utility - -The SSO Tester package includes a web application that tests SSO integration with CloudShell Portal. - -**To install the SSO Tester utility:** - -1. Download the [SSO Tester](https://qualisystems.hosted-by-files.com/Downloadcenter/Platform%20Extensions/SSOTester/SSO%20Tester%207.2.exe) package file. -2. Extract the contents of the compressed archive to your local directory. - -### Create a new website in IIS Manager - -**To create a new website in IIS Manager:** - -1. Open IIS Manager. - -2. In the **Connections** pane, right-click **Sites**. - - ![](/Images/Admin-Guide/User-Management/SSO_Check-for-CloudShell-required_1.png) - -3. Select **Add Website**. - - ![](/Images/Admin-Guide/User-Management/SSO_Check-for-CloudShell-required_2_559x541.png) - -4. In the **Site name** field, specify a name for the site. -5. In the **Content Directory** field, specify a **Physical Path**, pointing to your CloudShell installation's `Portal` folder (usually at `C:\Program Files (x86)\QualiSystems\CloudShell\Portal`). -6. In the **Binding** field, specify an available port and click **OK**. - - ![](/Images/Admin-Guide/User-Management/SSO_Check-for-CloudShell-required_3.png) - -7. In the **Connections** pane, click **Application Pools**. - -8. In the **Application Pools** window, double-click your new website. - - ![](/Images/Admin-Guide/User-Management/SSO_Check-for-CloudShell-required_4.png) - -9. In the **Edit Application Pool** window, edit the application pool that was created for your website. -10. Verify that the **.NET CLR version is 4.0.\***. -11. Select the **Start application pool immediately** checkbox, and click **OK**. -12. In the **Connections** pane, click your website, then in the **Actions** pane, under **Manage Website**, click **Restart**. -13. If you are using IIS 8 with Windows Server 2012 or Windows Server 2012 R2, make sure to install the 'Web Server' role within the server manager. -14. After selecting the web server role, click **Next** and in the **Role Services** section, under **Application Development**, select **ASP.NET 4.5**. - - This sub-role enables IIS to use the ASP.NET 4.5 for running the CloudShell Portal. - - -## Using the SSO Tester utility - -**To use the SSO Tester utility:** - -1. Browse to the location to which you extracted the tester. Open the `customer.config` file, and add the URL of the newly created website to the following key: - - `` - -2. In the same folder, open the `kentor.config` file, and add the URL of the newly created website as the value of both the `entityId` and `returnUrl` attributes of the following key: - - ```javascript - - ``` - -3. Edit the `kentor.config` file, according to the requirements described in [Sample file requirements](./index.md#sample-file-requirements). -4. Open CloudShell Portal. - - You are redirected to the IdP login page. - -5. Log in with the credentials of one of the users you defined in the IdP. - - A test page with the attributes returned by the IdP is displayed. - -6. If errors are displayed, make the required changes and reload the website. - :::note Notes - - If error message HTTP Error 500.19 is issued, change the permissions of the SSO Tester's Portal folder and reload the website. - - If changes were made to the `kentor.config` file, reset the application in the IIS Manager. - - ![](/Images/Admin-Guide/User-Management/SSO_Restart-IIS.png) - ::: \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configuring-single-logout-slo.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configuring-single-logout-slo.md deleted file mode 100644 index 51e0166fa3..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configuring-single-logout-slo.md +++ /dev/null @@ -1,180 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Configuring Single Logout (SLO) - -*SSO/SLO configuration is available with CloudShell Premium Tier.* - -Single logout (SLO) invalidates CloudShell single sign-on (SSO) sessions and redirects the logging out user to their defined logout page. If your CloudShell deployment includes multiple domains, where each domain uses a different logout page, each one of your users will be redirected to their respective logout page. -:::note -SLO must be used in conjunction with SSO. -::: - -## Creating an SSL certificate - -The first step is to create an SSL certificate, which you will need to install on all CloudShell Portal machines. - -**To create an SSL certificate:** - -1. In your personal store, create an SSL certificate with a private key. - - 1. If CloudShell Portal is not installed on the Quali Server machine, copy the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\Certificates\makecert.exe` file from the Quali Server machine to the Portal machine - 2. Create an SSL certificate: - - ```javascript - cd "makecert.exe containing folder" - ``` - - ```javascript - makecert.exe -n "CN=My Company Development Root CA,O=My Company, OU=Development,L=Quali,S=NY,C=US" -pe -ss My -sr LocalMachine -sky exchange -m 120 -a sha1 -len 2048 -r - ``` - - Where "My Company Development Root CA" is the name of the certificate - -2. Export the certificate to all CloudShell Portal machines. - - 1. From the Start menu, search for the **Manage Computer Certificates** app and locate the certificate you created in the previous step. - - The certificate should have the same name you gave it in the command. In our example: "My Company Development Root CA". - - 2. Right-click the certificate and select **Export>All Tasks>Export**. - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/SAMLExportCertificate.png) - - 3. In the **Certificate Export Wizard**, select **Yes, export the private key**. - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/SAMLExportWithPrivate.png) - - 4. Click **Next**. - 5. Specify the **Password** to allow exporting the certificate. - 6. Click **Next**, specify the file name. and complete the wizard. - 7. Import the certificate to the personal store on all CloudShell Portal machines. -3. Export the certificate for the service provider. - - 1. In the **Certificate Export Wizard**, select **No, do not export the private key**. - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/SAMLExportCertificateWithoutPrivateKey.png) - - 2. Select **DER encoded binary X.509 (.CER)**. - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/SAMLSaveCertificateFormat_376x111.png) - - 3. Specify the file name and location of the `.cer` certificate and complete the wizard. - 4. Import the generated public key to the service provider. Okta example: - - 1. In Okta, from the **Applications** menu, select the app you created for SSO.. - 2. In the **General** tab, edit the SAML settings. - 3. Under **SAML Settings**, click **Edit.** - 4. Proceed to **SAML Settings**. - 5. Select **Show Advanced Settings**, and set the following: - - - **Signature Certificate**: Upload the public certificate. - - **Enable Single Logout** - - **Single Logout URL**: Specify the URL. - - **SP Issuer**: Specify the SP issuer URL. - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/OktaSLOConfig.png) - - :::note - In some cases, you may also need to import the generated certificate to the trusted certificates folder in CloudShell Portal. Right-click the **Trusted Root Certification>Certificates** folder and select **All Tasks>Import**. - ::: - -## Configuring SAML SLO on each CloudShell Portal - -Perform the following procedure on each CloudShell Portal machine. - -**To configure SAML SLO for CloudShell Portal:** - -1. Make sure SSO is configured. For details, see [Configuring Single Sign-On (SSO)](./configure-sso/index.md). -2. Disable the `requireSsl` flag by adding the following code to the `web.config` file. - :::note - The `requireSsl` flag only applies to websites that do not use HTTPS. If HTTPS is used, perform the steps in the [Configuring SAML SLO for CloudShell Portal in SSL mode](../../../../admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configuring-single-logout-slo.md#configuring-saml-slo-for-cloudshell-portal-in-ssl-mode) section and carry on with the configuration process. - ::: - ```javascript - - - - - - - ``` - :::important - The `web.config` file is overridden during a CloudShell patch or version upgrade. Therefore, make sure to keep a backup copy of the file, and after upgrade, replace the file's `` section with the one in the backup version. - ::: -3. In the `Kentor.config` file, do the following: - - 1. In the ` - - ``` - - 2. Under the `` section, set the following: - - - `entityId`: Identity provider issuer - - `logoutUrl`: Identity provider SLO URL - - For example: - - ```javascript - - - ``` - - 3. In the `Kentor.config` file, add a section that will point to the newly created certificate. For example: - - ```javascript - - - - - ``` - -4. Configure your identity provider. This typically includes setting the SLO logout page URL, CloudShell Portal issuer (for example: "`http://192.168.20.134/AuthServices`") and .cer certificate file. - - **To configure the identity provider on Okta:** - - -1. Restart **Quali Server** and **CloudShell Portal IIS** services. -2. Log in to CloudShell Portal with your Idp user. -3. Log out of CloudShell Portal. - - You are redirected to the defined logout page. - - -## Configuring SAML SLO for CloudShell Portal in SSL mode - -If CloudShell Portal is running in SSL mode (HTTPS), you will need to perform several additional configurations to enable SLO. - -**To configure SAML SLO to work in HTTPS:** - -1. In your identity provider, update all SLO logout URLs to be in https mode. For example: "`https://192.168.30.27/AuthServices/Acs`". -2. In the `Kentor.config` file, in the `Topologies** tab, to add a blueprint to the domain. Any resources within that blueprint are automatically added to the domain. - - ![](/Images/Admin-Guide/User-Management/AddDomainRes_1.png) - - -**To associate multiple domains to a specific resource:** - -1. Right-click the resource and select **Configuration** from the context menu. - ![](/Images/Admin-Guide/User-Management/AddDomainRes_2_261x345.png) -2. In the resource's **Configuration** tab, select the **Domains** tab. - -![](/Images/Admin-Guide/User-Management/AddDomainRes_3.png) - -1. To allocate the resource to additional domains, click **Add** to open the **Domains Selection** window. - - -![](/Images/Admin-Guide/User-Management/AddDomainRes_4.png) - -6. Select one or more domains and click **OK**. - -## Removing resources from domains - -This section explains how to remove resources from domains in Resource Manager Client. Admins can also remove resources via the CloudShell Portal Inventory dashboard but this removes the resource entirely - see [Deleting Resources from the Inventory](../../../portal/inventory/managing-resources/deleting-resources-from-inventory.md). - -**To remove resources via the domain's Resources page:** - -1. Click the **Admin** ribbon's **Domains** icon to open the **Domains Explorer** window. - -![](/Images/Admin-Guide/User-Management/AddDomainRes_428x106.png) - -2. In the **Domains** pane, right-click a domain and select **Open** from the context menu to open the domain's tab. -3. Open the **Resources** page from the **Page** drop down list. - -![](/Images/Admin-Guide/User-Management/AddDomainRes_5.png) - -1. In the **Resources** page, select the resource that you wish to delete and click the **Delete** button. If the selected resource has descendants, they will be removed as well. - -**To remove resources via the domain's Diagram page:** - -1. Click the **Admin** ribbon's **Domains** button to open the **Domains** pane. -2. In the **Domains** pane, right-click a domain and select **Open** from the context menu to open the domain's tab. -3. Open the **Diagram** page from the **Page** drop down list. -4. In the **Diagram** page, select the resources and click the **Remove** button in the top left corner of the diagram. - -**To remove a specific resource from associated domains**: - -1. Right-click the resource and select **Configuration** from the context menu. - ![](/Images/Admin-Guide/User-Management/AddDomainRes_2_235x310.png) -2. In the resource's **Configuration** tab, select the **Domains** tab. - ![](/Images/Admin-Guide/User-Management/AddDomainRes_3.png) -3. Select one or more associated domains and click **Remove**. diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/cloudshell-domains/archiving-and-restoring-domains.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/cloudshell-domains/archiving-and-restoring-domains.md deleted file mode 100644 index 999ce26060..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/cloudshell-domains/archiving-and-restoring-domains.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Archiving and Restoring Domains - -This article explains how to archive and restore domains. Archiving domains applies to scenarios where the domain is no longer needed but you want to keep it for future use. It is also possible to delete domains that are no longer needed as well as set an end date on domains in the domain's properties tab (for details, see [Domains Window](../../../admin/cloudshell-identity-management/cloudshell-domains/domains-window.md)). - -## Archiving domains - -**To archive a domain that is no longer needed**: - -1. Click the **Admin** tab's **Domains** icon to open the **Domains Explorer** window. - ![](/Images/Admin-Guide/User-Management/DomainsButton.png) - -2. In the **Domains Explorer**, double-click a domain or right-click a domain and choose **Open** from the context menu to open the domain's tab. -3. Click the **Archive** button, to the right of the **Edit** button next to the **Domain Name** field. - -## Deleting domains - -**To delete a domain**: - -1. Click the **Admin** tab's **Domains** icon to open the **Domains Explorer** window. - ![](/Images/Admin-Guide/User-Management/DomainsButton.png) -2. In the **Domains Explorer**, select the domain that you wish to delete and click the toolbar's **Delete** icon. -3. Click **OK** to confirm. - -## Restoring archived domains - -Unlike deleted domains, archived domains can be restored. Restoring an archived domain restores all associated groups and allocated resources and blueprints. Deleted sandboxes will not be restored. - -**To restore an archived domain**: - -1. Click the Admin tab's **Domains** icon to open the **Domains Explorer** window. -2. In the **Domains Explorer**, if archived domains aren't visible, click the toolbar's **Show Archived Domains** icon. -3. Double-click a domain or right-click a domain and choose **Open** from the context menu to open the domain's tab. -4. Click the **Unarchive** button, to the right of the **Edit** button next to the **Domain Name** field. diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/cloudshell-domains/domains-window.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/cloudshell-domains/domains-window.md deleted file mode 100644 index c3c4208db1..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/cloudshell-domains/domains-window.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Domains Window - -Use the domain's tab to add and remove resources, and blueprints (including their components and logic) to and from domains. User access to a domain is determined according to the domain's associated groups. - -**To configure a domain:** - -1. In the **Domains** pane, right-click a domain and select **Open** from the context menu, or double-click the domain. - - ![](/Images/Admin-Guide/User-Management/The-Domain-window.png) - - The domain's tab is displayed. - -2. Use the buttons in the pane to add, remove and show archived domains. - - The domain's tab has three pages: - - - [Properties page](#properties-page) - - [Resources page](#resources-page) - - [Diagram page](#diagram-page) - -## Properties page - -The **Properties** page displays the current domain settings: the domain name, description, the default blueprints folder, a short summary of the domain's reservation history, and any groups or blueprints that are associated with the domain. - -![](/Images/Admin-Guide/User-Management/The-Domain-window_1.png) - -**To configure settings in the Properties page:** - -1. To change a domain's name and description, click the **Edit** button next to the **Domain Name** field. -2. To archive the domain, click the **Archive** button next to the **Domain Name** field. If the domain is currently archived, click the **Archive** button to restore the domain. For additional information, see [Archiving and Restoring Domains](./archiving-and-restoring-domains.md). -3. The domain's **Topologies Folder** arranges all blueprints created within that domain. To change the domain's topologies folder, click the **Change** button next to the **Topologies Folder** field. - :::tip - Clicking the Clear button next to the Topologies Folder field will remove the blueprints folder and prevent users from adding blueprints to the domain. - ::: -4. The domain's **License Pool** determines the domain's permitted number of concurrent sandboxes. To change the domain's default license pool, click the **License Pool** drop down list and specify the number of sandboxes to be allowed to run at the same time. -5. To specify an expiry date for the domain, click the **Calendar** button next to the **End Time** field. Click **Clear** to remove the expiry date. - :::note - The default duration for a domain is indefinite. - ::: -6. The **Resources** field displays the number of resources associated with the domain. Click the **Add Resource** button to find additional resources. -7. The **Reservations** field shows a real time summary of the domain's activity. -8. To add or remove groups from the domain, click the **Groups** tab. The **Groups** tab lists all groups associated with the domain. The **View Only** field is checked for any group with view-only access to the domain. To manage groups and their permission levels, see [Managing CloudShell Groups](../managing-users/managing-cloudshell-groups.md). - :::note - You can also associate a group with a domain via the **Domains** area in the **Groups** tab. - ::: -9. Click the **Topologies** tab to add or remove blueprints. The **Topologies** tab lists all blueprints associated with the domain. When you add a blueprint to a domain, the blueprint's resources, Apps and services are added as well. For additional information, see [Adding resources to a domain](./addingremoving-resources-from-a-domain.md#adding-resources-to-a-domain). - - ![](/Images/Admin-Guide/User-Management/The-Domain-window_2.png) - :::note - You can also manage domain blueprints via the domain's **Diagram** page. - ::: - -## Resources page - -The **Resources** page lists all resources associated with the domain. Here you can search for and add resources to domains. For additional information, see [Searching for resources to add to a domain](./addingremoving-resources-from-a-domain.md#searching-for-resources-to-add-to-a-domain). - -![](/Images/Admin-Guide/User-Management/The-Domain-window_3.png) - -:::note -You can also add and remove resources via the **Diagram** page. -::: -Use the **Resources** page to add resources via a resource search, or for adding resources to large domains. - -## Diagram page - -The **Diagram** page displays the domain's resources and blueprints. You can use the domain diagram to add and remove resources and to manage domain blueprints. - -- Drag and drop resources from the Resource Explorer or from the search results to allocate the resources to the domain. -- Drag and drop a blueprint from the Resource Explorer to add the blueprint and its associated routes and resources to the domain. - -Resource Manager resolves blueprints that are added via the domain diagram. If any of the blueprints' connected resources are connected via an L1 switch or a patch panel, these will be added automatically to the blueprint. - -**To toggle display of the blueprint's L1 switches and patch panels:** - -1. Click **Logical** to view only the requested resources. - - ![](/Images/Admin-Guide/User-Management/The-Domain-window_4.png) - -2. Click **Physical** to also display resource connections. - - ![](/Images/Admin-Guide/User-Management/The-Domain-window_5.png) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/cloudshell-domains/index.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/cloudshell-domains/index.md deleted file mode 100644 index a20ca6fb19..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/cloudshell-domains/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# CloudShell Domains - -The following articles explain how to manage CloudShell domains. A domain is a subnet of lab resources and blueprints that are blocked for use by specific teams. The System Administrator specifies which resources and blueprints are available to each domain. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/cloudshell-domains/optimized-resource-utilization-using-domains.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/cloudshell-domains/optimized-resource-utilization-using-domains.md deleted file mode 100644 index 82150d99f2..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/cloudshell-domains/optimized-resource-utilization-using-domains.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Optimized Resource Utilization Using Domains - -A domain is a subnet of lab resources and blueprints that are blocked for use by specific teams. The System Administrator specifies which resources and blueprints are available to each domain. - -You can allocate resources to a domain via the **Resources** and **Diagram** pages in the domain's tab, or via the **Domains** tab in the resource's **Configuration** tab. - -A user's access to lab resources is dictated by the user's group memberships. The System Administrator user limits the scope of each user's access to lab resources and blueprints by adding the users to groups where the user is allowed to operate. - -Group association with a domain can be either active or view-only. When a group is added to a domain, the admin user specifies the group's level of access to that domain. - -You can associate groups with a domain via the **Groups** tab in the domain's **Properties** page or via the **Domains** tab in the **Groups** tab. - -You can view the group associations of any resource in the in the resource's **Configuration** tab's **Groups** area. - -Associating a group with a domain grants users of that group access to all of the domain's resources and blueprints. If the group is granted only view-only access to a domain, users in that group will be able to view and request available resource from that domain, but will not be able to reserve resources or sandboxes from that domain. - -In the simplest scenario, the admin adds users to groups, and associates each group with a domain. The group membership specifies the user's permissions; while the domain defines where these permissions are applicable. - -It's actually somewhat more complex, as users can be added to multiple groups, and groups can be added to multiple domains. - -The system includes a built in Global domain which contains all the entities: folders, resources and blueprints. By default, only System Administrators have access to this domain. diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/index.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/index.md deleted file mode 100644 index 50e388e303..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/index.md +++ /dev/null @@ -1,15 +0,0 @@ -# CloudShell Identity Management - -Users can be created within CloudShell, or imported from an active directory or LDAP server. In addition, CloudShell allows integration with an SSO solution to allow your users to access CloudShell from your company's home page. - -CloudShell user permissions are determined by the role (e.g. domain admin, regular user) assigned to the user's group, while access to the system's existing blueprints, sandboxes, resources and Apps is provided through the user's domain. Groups are associated to domains, thereby providing domain access to the group's users. A user can be associated to multiple groups, each with a different role and associated to a different domain, essentially enabling the same user, for example, to log in as a regular user in "Domain A" and as a domain admin in "Domain B". - -:::note -Additional permissions like creating CloudShell blueprints and extending external user permissions require the use of configuration keys. -::: - -## Related Topics - - - [Managing Users](../../admin/cloudshell-identity-management/managing-users/index.md) - - [Managing CloudShell Permissions](../../admin/cloudshell-identity-management/managing-cloudshell-permissions/index.md) - - [Access Control and Authentication](../../admin/cloudshell-identity-management/access-control-and-authentication/index.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-cloudshell-permissions/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-cloudshell-permissions/_category_.json deleted file mode 100644 index 0a981bc425..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-cloudshell-permissions/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Managing CloudShell Permissions", - "position": 3 -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-cloudshell-permissions/cloudshell-user-permission-levels-rbac.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-cloudshell-permissions/cloudshell-user-permission-levels-rbac.md deleted file mode 100644 index 3232c40958..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-cloudshell-permissions/cloudshell-user-permission-levels-rbac.md +++ /dev/null @@ -1,873 +0,0 @@ ---- -sidebar_position: 1 ---- -# CloudShell User Permission Levels (RBAC) - -

    This article lists the different actions each user type can perform in CloudShell. In the tables below, supported actions are indicated in green while unsupported actions are red.

    - - -For more information about group roles and access levels, see [Managing CloudShell Groups](../managing-users/managing-cloudshell-groups.md). -:::note -In the tables below, "View Only access" indicates the permissible actions for users who are members of a group that is defined as **View Only** in the domain. For more information, see [Associating groups with a domain](../managing-users/managing-cloudshell-groups.md#associating-groups-with-a-domain). -::: -## Blueprints - -The following table shows which actions are available for each CloudShell user type in a blueprint. - -The permissible actions in a blueprint for users other than the blueprint owner are determined by a combination of the user type, group's role (regular, domain, external), and the group's access level (whether the group is defined as View Only in the current domain). -:::note -For brevity, the "Edit" action indicates the user type can create, edit and delete the element. -::: -\* indicates that the action is available to the blueprint owner - -\*\* indicates that the option can be hidden from non-admin users with the `BlockPackageExportForNonAdmins` key - -\*\*\* If the `` key is defined on the server , users can only create blueprints from a template but not from scratch (empty blueprints). However, if there are no templates assigned to the domain, users of that domain cannot create new blueprints. For details, see [The + Create Blueprint Link is Missing From the Blueprint Catalog](../../../troubleshooting/cloudshell-portal/the-create-blueprint-link-is-missing-from-the-blueprint-catalog.md). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ActionSystem Administrator userDomain administrator userRegular userView-only accessExternalExtended external
    **View the list of blueprints**vvvvvv
    **View the blueprint diagram**vvvvvv
    **Create blueprints**v ***v ***v ***v ***xx
    **Edit blueprints**vvx *x *xx
    **Reserve blueprints**vvvxxv
    **Export blueprint packages**vvv **v **xx
    - -## Sandboxes - -The permissible actions in a sandbox are determined by a combination of the user type, group's role (regular, domain, external), and the group's access level (whether the group is defined as View Only in the current domain), and the current sandbox status. - -### Permissible actions according to user type - -The following table shows which actions are available for each CloudShell user type in a sandbox (applies to sandbox consumers that are neither Owner nor Permitted User in the sandbox). Note that sandboxes of other users in the domain can be hidden from regular users using the `ShowOtherUserInDomainReservations` key. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ActionSystem Administrator userDomain administrator userRegular userView-only accessExternal user
    View the list of sandboxesvvvvx
    View the sandbox diagramvvxxx
    Edit the sandbox (form)vvxxx
    Extend the sandboxvvxxx
    End the sandboxvvxxx
    Delete the sandboxvvxxx
    Terminate the sandboxvvxxx
    Execute commandsvvxxx
    Interact with the sandbox during setupvvxxx
    Launch applicationsvvxxx
    Save sandbox as blueprintvvxxx
    Save the sandboxvvxxx
    - -### Permissible actions for Owner/Permitted User - -The following table shows which actions are available for the sandbox's owner or permitted users (users that were added by the sandbox owner to the sandbox as **Permitted Users**). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Sandbox actionsOwnerPermitted - regularPermitted - view onlyPermitted - externalPermitted - extended external
    View the list of sandboxesvvvvv
    View the sandbox diagramvvvvv
    Edit the sandbox (form)vvxxv
    Extend the sandboxvvxxv
    End the sandboxvvxxv
    Delete the sandboxvxxxx
    Terminate the sandboxvxxxx
    Execute commandsvvxvv
    Interact with the sandbox during setupvvxxv
    Launch applicationsvvxvv
    Save sandbox as blueprintvvxxx
    Save the sandboxvvxxv
    - -### Permissible actions according to sandbox status - -The following table shows the available actions in a sandbox for each sandbox status. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ActionPendingSetupActiveTeardownCompletedOvertimeSaving
    View the list of sandboxesvvvvvvv
    View the sandbox diagramvvvvvvv
    Edit the sandbox (form)vvvxxvv
    Extend the sandboxvvvxxvv
    End the sandboxxvvxxvv
    Delete the sandboxvxxxvxx
    Terminate the sandboxxxxvxvx
    Execute commandsxxvxxvx
    Interact with the sandbox during setupxvvxxxx
    Launch applicationsxxvvxvx
    Save the sandboxxxvxxxx
    - -## Saved Sandboxes - -The following table shows which actions are available for each CloudShell user type in a saved sandbox. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ActionSystem adminDomain adminRegular userView-only accessExternal userExtended external user
    Restore a saved sandboxvvvxxv
    Delete a saved sandboxvvvxxv
    View my saved sandboxesvvvxxv
    View list of all saved sandboxesvvxxxx
    - -## Job Scheduling dashboard - -The following table shows which actions are available for each CloudShell user type in the **Job Scheduling** dashboard. Note that admins can allow regular users to edit and create suite templates using the `AllowRegularUsersToEditSnQ` key. -:::note -For brevity, the "Edit" action indicates the user type can create, edit and delete the element. -::: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ActionSystem Administrator userDomain administrator userRegular userView-only accessExternal/extended user
    Edit suite templatevvxxx
    Customize suite templatevvvxx
    View execution reportsvvvxx
    Run suite template executionvvvxx
    Extend suite template executionvvvxx
    Stop suite template executionvvvxx
    AdHoc suitevvvxx
    - -## Inventory dashboard - -The following table shows which actions are available for each CloudShell user type in the Inventory dashboard. -:::note -For brevity, the "Edit" action indicates the user type can create, edit and delete the element. -::: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ActionSystem Administrator userDomain administrator userRegular userView-only accessExternal/extended user
    View resourcesvvvvx
    Edit resourcesvvxxx
    Reserve resourcesvvvxx
    Search within resourcesvvvvx
    View abstract resource templatesvvvvx
    Edit abstract resource templatesvvxxx
    View servicesvvvvx
    - -## Insight dashboard - -If Sisense is configured to work with SSO from CloudShell, the first time a CloudShell user (any user role) logs in to **Insight**, a user is created in Sisense with **Viewer** permissions (CloudShell user must have an email). For designer or admin privileges, customize the user’s role in Sisense or contact [Quali Support](https://support.quali.com/). - -For information about Sisense user permissions, see [Sisense Documentation](https://documentation.sisense.com/). - -## Manage dashboard - -The following table shows which actions are available for each CloudShell user type in the **Manage** dashboard. This only applies to system administrators and domain administrators as other user types cannot access this dashboard. Note that system admins can allow domain admins to manage drivers using the `HideDriversTabInManage` key. -:::note -For brevity, the "Edit" action indicates the user type can both view and edit the element. -::: -\*\* indicates that the user type can only access the element in their own domain. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ActionSystem Administrator userDomain administrator userRegular userView-only accessExternal/extended user
    Edit Appsvv **xxx
    Edit Categoriesvxxxx
    Edit Shells (See [Shells](../../../admin/cloudshell-identity-management/managing-cloudshell-permissions/cloudshell-user-permission-levels-rbac.md#shells) below)vxxxx
    View Licensingvxxxx
    Edit Domainsvv **xxx
    Edit Execution Serversvxxxx
    Edit JavaScript Extensionvxxxx
    Edit Blueprint Templatesvvxxx
    Edit Scriptsvv **xxx
    Edit Driversvv **xxx
    - -## Shells - -The following tables show which Shell management actions are available for each CloudShell user type. - -### 1st Gen Shells - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ActionSystem Administrator userDomain administrator userRegular userView-only accessExternal/extended user
    Importvvvvx
    Modify (Resource Manager Client)vvxxx
    - -### 2nd Gen Shells - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ActionSystem Administrator userDomain administrator userRegular userView-only accessExternal/extended user
    Importvxxxx
    Add custom attributesvxxxx
    Upgradevxxxx
    Download from CloudShellvxxxx
    Deletevxxxx
    diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-cloudshell-permissions/folder-permissions-for-shared-studio-tests.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-cloudshell-permissions/folder-permissions-for-shared-studio-tests.md deleted file mode 100644 index bda5ddd1fb..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-cloudshell-permissions/folder-permissions-for-shared-studio-tests.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Folder Permissions for Shared Studio Tests - -Admin users can set permissions for Shared tests. - -By default: - -- Folder permissions are inherited from the root Shared folder. -- The admin user can configure specific permissions per user or group for any folder or test in the Shared repository -- Any user can open tests from any Shared folder or sub-folder. -- Any user can add new folders and tests to the Shared repository. -- Only the admin owner or owner can rename, modify or delete folders or folder contents. Admin users cannot remove owner permissions on Shared tests. For additional information, see Creating folders. - -**To set permissions for a shared tests folder:** - -- Right-click the folder and choose **Properties** from the context menu. - -![](/Images/Admin-Guide/User-Management/Folder-permissions.png) - -**To set permissions for a specific user or group:** - -1. Open permissions for a folder or test in the **Shared** repository. -2. Clear the Inherit **Permissions From Parent** checkbox. -3. Click the toolbar's **New** icon choose a user or group from the list. -4. Select or unselect the checkbox next to each permission that you wish to change and click **OK** to apply the new settings. - ![](/Images/Admin-Guide/User-Management/Folder-permissions_1_230x345.png) - -**Note that unlike Local tests, tests that are deleted from the Shared repository cannot be restored.** diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-cloudshell-permissions/index.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-cloudshell-permissions/index.md deleted file mode 100644 index 9e713ec3d1..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-cloudshell-permissions/index.md +++ /dev/null @@ -1,7 +0,0 @@ -# Managing CloudShell Permissions - -The System Administrator specifies which resources and blueprints are available to each domain. - -Permissible actions in a blueprint for users other than the blueprint owner are determined by a combination of the user type, group membership, and the group's access level in the current domain. - -Permissible actions in a sandbox are determined by a combination of the user type, group membership, the group's access level in the current domain, and the current sandbox status. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/_category_.json deleted file mode 100644 index ec78b48bc5..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Managing Users", - "position": 1 -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/cloudshell-users-and-groups-overview.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/cloudshell-users-and-groups-overview.md deleted file mode 100644 index 3d19d14332..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/cloudshell-users-and-groups-overview.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -sidebar_position: 1 ---- - -# CloudShell Users and Groups Overview - -User permissions in CloudShell are based on the user's group memberships. The System Administrator grants user permissions by adding users to groups. - -Each group in the system is assigned with a group role. The group role defines the permissions for all the users added to the group. - -The available group roles are: - -- System admins -- Domain admins -- Regular users – default role for new group. -- External users - -The group with System admins role is created by the system, the group role can not be changed. only one group can hold the System admins role. the group contains the admin user. - -Any user can be added or removed from the group, with the exception of the admin user. The admin user is added by default and cannot be removed from the group. - -All group roles, except for the system administrator, can be changed at any time. - -**To allow a user to perform admin operations:** - -- Specify the user as a system administrator when creating the user, or use the **Groups** tab to add the user to the System Administrators group. - -**To prevent users from performing admin operations:** - -- Create one or more groups, assign a role other than admins to these groups and add CloudShell users to these groups. - :::note - User and group settings are common to all CloudShell applications. - ::: - -**Adding CloudShell users** - -There are various ways to create CloudShell users: - -1. Add users manually -2. Import users from the Active directory, a CSV file, or a list -3. Build a driver to import users from a CSV file and automatically add them to groups -4. Using TestShell API diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/index.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/index.md deleted file mode 100644 index c59bb48a58..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/index.md +++ /dev/null @@ -1,13 +0,0 @@ -# Managing Users - -User permissions in CloudShell are based on the user's group memberships. The System Administrator grants user permissions by adding users to groups. System administrators can be defined by other system administrators when creating a user profile, as explained in [Managing CloudShell Users](../../../admin/cloudshell-identity-management/managing-users/managing-cloudshell-users.md). - -Each group in the system is assigned with a group role. The group role defines the permissions for all the users added to the group. - -The available group roles are: - -- Domain admins -- Regular users – default role for new group. -- External users - -For details about each role, see [Managing CloudShell Groups](../../../admin/cloudshell-identity-management/managing-users/managing-cloudshell-groups.md). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/managing-cloudshell-groups.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/managing-cloudshell-groups.md deleted file mode 100644 index 56e880b24d..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/managing-cloudshell-groups.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Managing CloudShell Groups - -## Adding groups - -There are various ways to define CloudShell groups: - -- Create groups manually by adding new groups via the **Groups** tab. -- Build a driver to import groups from a file and automatically specify the domain access for each group. -- Use TestShell APIs. - -**To add a new group manually:** - -1. Click the **Admin** tab's **Groups** icon. - - ![](/Images/Admin-Guide/User-Management/GroupsButton.png) - -2. In the **Groups** tab, click the **New** button in the **Groups** list pane toolbar. - - ![](/Images/Admin-Guide/User-Management/GroupsTabUsersTabAddButton.png) - -3. In the **New Group** window, enter the name and description, and select a role for the new group. - - - **Domain admins** can access all domain assets, create inventory resources and apps, and perform administrative tasks in the domain via CloudShell Portal's **Manage** dashboard. - - **Regular users** are the default role for new groups. Regular users can access and use public blueprints in their domain and become owners of blueprints, which allows them to modify the blueprint’s properties and elements. - - **External users** are very limited users that can view blueprints but not use them. They can view and export public blueprint diagrams but cannot create or modify blueprints and sandboxes. Using the `ExternalUserHasExtendedPermissions` configuration key, external user permissions can be extended to allow them to see blueprint resource structures and commands and reserve blueprints. - :::note - System administrators are defined per user in the user's profile. For additional information, see [Managing CloudShell Users](../../../admin/cloudshell-identity-management/managing-users/managing-cloudshell-users.md). - ::: - - ![](/Images/Admin-Guide/User-Management/NewGroupWindow1.png) - :::note - To edit an existing group's details, in the Groups tab, double click the desired group - ::: -4. Click **OK** to add the new group. - -## Adding users to groups - -The System Administrator grants user permissions by adding users to groups. - -Users can be added to several groups. - -**To add users to a group:** - -1. Select the target group from the list in left pane. -2. Select the **Users** tab. - - ![](/Images/Admin-Guide/User-Management/GroupsTabGroupListNamesPane.png) - -3. Click the **Add** button to open the **Users Selection** window. - - ![](/Images/Admin-Guide/User-Management/UsersSelectionWindow1.png) - -4. Select users from the list and click **OK** to add them to the group. - - Multi-selection is supported. - - Use the Search field to search for specific users. - - -## Removing users from a group - -**To remove a user from the group:** - -- Select the user in **Users** list and click the **Remove** button. - - ![](/Images/Admin-Guide/User-Management/GroupsTabUsersTabRemoveButt.png) - - -## Associating groups with a domain - -Associating a group with a specific domain provides users of that group with access to all resources and blueprints associated with that domain. - -Groups can be added to multiple domains: - -- Group access to a domain can be either active or view only. -- Group access to a domain is specific to that domain. -- Group access to a domain can be configured via the group's **Domains** tab or via the domain's **Groups** tab. - -Here are some options for setting up view only domains: - -- Assign a group to an active domain where users can reserve resources and perform resource operations. Add the group to all the other domains - or to the Global domain - on a view-only basis. -- Allocate groups to domains to support current work-flow processes. Limit user access to lab equipment by selectively add groups to domains on a view-only basis. -- Associate all groups with the global domain, allowing all users full access to the entire lab. -:::note -A user can be a member of multiple groups and thus have multiple roles and permissions. If a user has more than one role in a domain, the user’s permissions in the domain are determined according to the most privileged role. -::: -**To associate groups with a domain:** - -1. Click the **Admin** tab's **Domains** icon to open the **Domains Explorer** window. - - ![](/Images/Admin-Guide/User-Management/DomainsButton.png) - - -2. In the **Domains Explorer**, double-click a domain or right-click a domain and choose **Open** from the context menu to open the domain's tab. -3. Click the **Groups** tab. -4. Click the **Add** button to select the groups. -5. In the **Groups Selection** window, select the groups that you wish to associate with the domain. -6. Specify the permissions level for each selected group. Check the **View Only** checkbox if you wish to grant view-only access to that group. -7. Click **OK** to add the selected groups. - -## Removing groups from a domain - -**To remove groups from the domain**: - -1. Click the **Admin** tab's **Domains** icon to open the **Domains Explorer** window. - - ![](/Images/Admin-Guide/User-Management/DomainsButton.png) - - -2. In the **Domains Explorer**, double-click a domain or right-click a domain and choose **Open** from the context menu to open the domain's tab. -3. Open the **Properties** page from the **Page** drop down. -4. Click the **Groups** tab. -5. Select the groups that you wish to remove and click the **Delete** button. diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/managing-cloudshell-users.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/managing-cloudshell-users.md deleted file mode 100644 index 089024ef54..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/managing-cloudshell-users.md +++ /dev/null @@ -1,151 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Managing CloudShell Users - -The following user management options are performed in the **Users** tab in the Resource Manager. To access the **Users** tab, in the **Admin** ribbon, click the **Users** button. - -## Adding new users manually - -**To add a new user manually:** - -1. Log in to **Resource Manager Client** as administrator. -2. In the **Admin** ribbon, click **Users**. -3. Click **New**. The **New User** dialog box is displayed. -4. Fill in the settings: - - - **Username** - - **Password** - - **Email**: user's email that will receive email notifications and messages from other users regarding sandboxes. - - :::note Notes - - The user can change their email in CloudShell Portal. - - To enable email notifications, [SMTP mail configuration](../../../install-configure/cloudshell-suite/configure-products/admin-config-settings.md#smtp-mail-configuration) is required. - ::: - - **Administrator**: Select to grant the user System Administrator permissions. - - System administrators are the most privileged users in CloudShell. They can access and modify all assets in their domain(s), including private blueprints, create inventory resources and Apps, perform administrative tasks in CloudShell, like managing users, groups and domains, modifying resource families and models, creating and configuring resources in **Resource Manager Client**, and viewing CloudShell activity logs and utilization reports. Other, less privileged user types are defined by their group's role - see [Managing CloudShell Groups](./managing-cloudshell-groups.md). - - - **Active**: Clear to add the user as an inactive user. This will prevent the user from accessing and using CloudShell but keep the user profile in the system. - - **Reservation Duration limit**: Select the maximum allowed sandbox duration for the user. The default is 1 day, which can be changed using the `DefaultUserMaxReservationDuration` configuration key. - - **Max Concurrent Reservations**: Set the maximum number of sandboxes the user can own at any time. - - The default is 10 scheduled sandboxes for new users, which can be changed using the `DefaultUserMaxConcurrentReservations` configuration key. - - - **Max Scheduled Sandboxes**: Set the maximum number of scheduled (planned/future) sandboxes the user can have at any time. - - By default, new users are allowed to have up to 10 scheduled sandboxes while users migrated from a pre-9.3 Patch 2 CloudShell version (via upgrade) have an empty value (unlimited). Value "0" means the user can only start immediate reservations (no scheduled). Admins can change the default using the `DefaultUserMaxScheduledSandboxes` configuration key. - - - **Max Owned Blueprints**: (Applies to admins, domain admins and regular users only) Set the maximum of blueprints the user can own at any given time. Unlimited by default. - - **Max Saved Sandboxes**: (Applies to customers using the **Save and Restore** add-on) Set the maximum number of saved sandboxes the user can have at any time. - - This overrides the default, which is unlimited, and can be changed using the `DefaultUserMaxSavedSandboxes` configuration key. - -5. Click **OK**. - -## Importing users into CloudShell from an active directory - -The following procedures explain how to import users from your active directory into CloudShell. To enable user import, the `ActiveDirectory.Domain` configuration key needs to be set - see [Configuring CloudShell to import user definitions from an active directory](../../setting-up-cloudshell/cloudshell-configuration-options/advanced-cloudshell-customizations.md#configuring-cloudshell-to-import-user-definitions-from-an-active-directory). - -Once imported and associated to the relevant CloudShell groups and domains, imported users log into CloudShell using their active directory username and password, and the desired CloudShell domain. In addition, the password of an imported user can only be changed from the active directory itself. - -In **Resource Manager Client**, in the **Users** tab, imported users have the **Imported** check box selected (illustrated for user "Mika-y" in the image below). - -![](/Images/Admin-Guide/User-Management/UsersTabCheckboxes.png) - -### Importing users from an active directory group - -**To import users from a specific active directory group**: - -1. Log in to **Resource Manager Client** as administrator. -2. In the **Admin** ribbon, click **Users**. -3. Click the **Import Users** button. -4. In the **Import Users** dialog box, select the **Group** option. - - ![](/Images/Admin-Guide/User-Management/ImportUsersFromGroup_491x468.png) - -5. Click **Refresh** to get a full list of groups that exist in the current domain. -6. Select the required group from the **Group** drop down list or leave **All Groups** to get all users in the active directory. -7. Click **Run Query** to get the list of users. -8. Select the users to import. Press the **\[CTRL\]+\[A\]** keys to select all users in the list or press the **\[CTRL\]** key to select specific users. - - :::note Active Directory users are added as follows: - - AD First Name field maps to the CloudShell Username (in user list and auto-import dialog) - - AD Display Name field maps to the CloudShell Display Name (in auto-import dialog) - - AD Pre-win2000 field (SamAccountName) maps to Cloudshell Username. - ![](/Images/Admin-Guide/User-Management/SamAccountName.png) - ::: - -9. Click **OK**. - -### Importing active directory users from a file - -You can also import users from an external text file. The file must contain a list of valid email addresses in the active directory, separated with a comma or semicolon. - -**To import users from a file**: - -1. Log in to **Resource Manager Client** as administrator. -2. In the **Admin** ribbon, click **Users**. -3. Click the **Import Users** button. -4. In the **Import Users** dialog box, select the **Import from file** option. - - ![](/Images/Admin-Guide/User-Management/ImportUsersFromFile.png) - -5. Click **Browse** and select the txt file. The email addresses must be comma or semicolon-separated. For example: `jane.d@company.com,john.j@company.com,steve.b@company.com,deb.h@company.com` - - The file contents are displayed in the text box. - -6. Click the **Run Query** button to get the list of users from the loaded file. - - The users are listed in the dialog box. Nonexistent users in the file are not listed. - -7. Select the users to import: Press the **\[CTRL\]+\[A\]** keys to select all users in the list or press the **\[CTRL\]** key to select specific users. -8. Click **OK**. - - The users are added to the **Users Management** list from the current domain. - - -### Enabling CloudShell to automatically import Active Directory users when they first log in - -For additional information, see [Configuring CloudShell to automatically import users from an external system at login](../../setting-up-cloudshell/cloudshell-configuration-options/advanced-cloudshell-customizations.md#configuring-cloudshell-to-automatically-import-users-from-an-external-system-at-login). - -## Updating user settings - -This section explains how to edit a user's settings. The user's name cannot be edited. To edit a user's password, see [Changing a user's password](../../../admin/cloudshell-identity-management/managing-users/managing-cloudshell-users.md#changing-a-users-password). - -**To edit a user's settings:** - -1. Log in to **Resource Manager Client** as administrator. -2. In the **Admin** ribbon, click **Users**. -3. Select a user from the list and click **Edit**. -4. If this user was imported from an Active Directory of a Windows Domain, the **Imported** check box is selected and the **Email** field is disabled. -5. The **Edit User** window also displays all of the user's group memberships. -6. Perform the required changes and click **OK**. - -## Changing a user's password - -Imported user passwords are managed from the active directory itself. - -**To change a user's password**: - -1. Log in to **Resource Manager Client** as administrator. -2. In the **Admin** ribbon, click **Users**. -3. Select a user from the list and click **Change Password** . -4. Enter the new password in the **Password** and **Confirm** fields. -5. Click **OK**. - -## Deleting users - -Before deleting a user, you must either deactivate the user (by unselecting the **Active** check box in the user's profile) or delete all sandboxes (current, historic, future) that are associated with this user. -:::note -To see a user's associated sandboxes, open the Sandboxes dashboard in CloudShell Portal, preferably in the Global domain, select the correct time range and then filter the sandboxes by entering the username in the Search sandboxes field. -::: -:::important -Deleting the sandboxes affects BI data (such as resource utilization and blueprint consumption), while deactivating the user keeps the BI data consistent. -::: -**To delete an existing user:** - -1. Log in to **Resource Manager Client** as administrator. -2. In the **Admin** ribbon, click **Users**. -3. Select the user that you wish to remove from the list and click **Delete**. To select multiple users, press the **\[CTRL\]** key and select the users. diff --git a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/updating-user-settings.md b/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/updating-user-settings.md deleted file mode 100644 index 97904db8e3..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-identity-management/managing-users/updating-user-settings.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Updating User Settings - -You can modify the user's email and change the user's status in **Resource Manager Client**, and, if enabled, from **CloudShell Portal**. This procedure explains how to do so in Resource Manager Client. For information about modifying user settings in CloudShell Portal, see [Logging into CloudShell](../../../portal/overview/logging-in.md). - -**To edit an existing user:** - -1. In **Resource Manager Client**, click the **Admin** tab's **Users** icon. -2. In the **Users** tab, select the user from the list and click the **Edit** button. -If this user was imported from an Active Directory of a Windows Domain, the Imported checkbox will be selected and the Email field will be disabled. -The **Edit User** window also displays all of the user's group memberships. -3. Perform the required changes and click **OK** to apply. - -**To change a user's password:** - -1. Select the user in the list and click the **Change Password** button. - - ![](/Images/Admin-Guide/User-Management/UsersTabChangePassButt.png) - -2. Enter the new password. -3. Populate the **Confirm** field with same string as **Password** field - otherwise the **OK** button stays disabled. -4. Click **OK** to confirm. diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/_category_.json deleted file mode 100644 index 85bb48b45d..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/_category_.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "label": "CloudShell Manage Dashboard", - "position": 4, - "link": { - "slug": "admin/cloudshell-manage-dashboard", - "type": "generated-index", - "description": "The following CloudShell administration operations are available from CloudShell Portal's Manage dashboard." - } -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/blueprint-templates.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/blueprint-templates.md deleted file mode 100644 index 2e302aa162..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/blueprint-templates.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -sidebar_position: 8 ---- - -# Blueprint Templates - -## About blueprint templates - -Blueprint templates enable your organization to define a uniform standard for new blueprints. A blueprint template consists of a predefined set of elements (resources, connections, inputs, properties etc.). Users can repeatedly create new blueprints based on existing templates, in a quick and easy way, effortlessly maintaining the organization’s standard. - -Blueprint templates can be viewed and created by system and domain administrators. Domain administrators can view and create templates for their permitted domains only. - -CloudShell includes a default out-of-the-box blueprint template, **CloudShell Sandbox Template**, on which all new blueprints are based. You can create additional blueprint templates, according to your needs. For more information, see [Creating a new blueprint template](../../admin/cloudshell-manage-dashboard/blueprint-templates.md#creating-a-new-blueprint-template). - -You can enable users to create empty blueprints that are not based on a template and do not include orchestration scripts. For more information, see [Allowing users to create new empty blueprints](../../admin/cloudshell-manage-dashboard/blueprint-templates.md#allowing-users-to-create-new-empty-blueprints). - -## CloudShell Sandbox Template - -The **CloudShell Sandbox Template** is provided out-of-the-box by CloudShell and is configured to run CloudShell's **Default Sandbox Setup**, **Default Sandbox Teardown**, **Default Sandbox Restore**, and **Default Sandbox Save** scripts during the sandbox lifecycle. **Save and Restore** is a paid add-on that requires a license. - -The CloudShell Sandbox Template performs the following important operations as part of the sandbox lifecycle: - -- Deploy and tear down Apps and their VMs from the cloud provider -- Enable the use of Apps based on public clouds (like AWS EC2 and Azure) by running connectivity procedures that set up the cloud network and subnet for the sandbox -- Connect and disconnect virtual network and physical connectivity routes (L1 and L2 ) between resources and/or Apps -- Enable the save and restore functionality, which is part of the **Save and Restore** paid add-on -:::note -Starting with CloudShell 2022.1, the out-of-the-box **CloudShell Sandbox Template** includes orchestration scripts that support the deployment of Apps with multiple configuration management scripts/playbooks. If you're upgrading from an older CloudShell version, your existing blueprints will continue using the old orchestration scripts while new blueprints will be created with the new template and therefore will have the new script versions. -::: -## Managing blueprint templates - -### Creating a new blueprint template - -**To create a blueprint template**: - -1. Open the **Manage** dashboard. -2. In the page navigation bar, click **Blueprint Templates**. -3. In the toolbar, click the **\+ Add New** button.  - The **Add New Template** dialog box is displayed. -4. Enter the required information in the new blueprint template.  - :::note - To expose the template to all domains, select the **Global** domain. - ::: -5. Click **Save**.  - The new blueprint template is displayed in the **Templates** list. -6. Use the **Diagram** and **Blueprint** links to set up the template's canvas and properties, same as with a regular blueprint. - -### Associating a blueprint template with a domain - -Users can only see and use blueprint templates that are either global or are associated with their domain. - -**To associate a blueprint with a domain:** - -1. Click the **Manage** dashboard. -2. In the page navigation bar, click **Blueprint Templates**. -3. Click the template's name. - - The **Edit Template** dialog box is displayed. - -4. In the **Domains** drop-down list, select the required domain and click **Save**. - -### Editing a blueprint template -:::important -The **CloudShell Sandbox Template** is provided by default and is updated by CloudShell from time to time. DO NOT edit this template. -::: -**To edit a blueprint template's general settings:** - -1. Click the **Manage** dashboard. -2. In the page navigation bar, click **Blueprint Templates**. -3. Click the name of the blueprint template. Alternatively, click the blueprint template's More Actions button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton.png) and select **Edit**. - - The **Edit Template** dialog box is displayed. - -4. Edit the settings as appropriate. -5. Click **Save**. - -**To update the elements of the blueprint template:** - -1. Click the **Manage** dashboard. -2. In the page navigation bar, click **Blueprint Templates**. -3. In the relevant template row, click the **Diagram** link. - - The diagram of the blueprint template is displayed. - -4. Update the blueprint template. - - The changes you perform are saved automatically. - - -**To update the properties of the blueprint template:** - -1. Click the **Manage** dashboard. -2. In the page navigation bar, click **Blueprint Templates**. -3. In the relevant template row, click the **Properties** link. - - The **Properties** page of the blueprint template is displayed. - -4. Update the properties and click **Save**. - -All non-administrator users can now create blueprints from the templates(s) you created. For step-by-step instructions on how to create a blueprint from a template, see the help topic: [Creating a blueprint from a template](../../portal/blueprints/creating-blueprints/create-blueprint.md#creating-a-blueprint-from-a-template). -:::note -The owner of the blueprint template is the administrator who created the template. -::: -### Saving an existing blueprint as a blueprint template - -**To create a template from an existing blueprint**: - -1. In the **Blueprints Catalog**, open the blueprint. -2. Click the **Blueprint** menu. -3. Select **Save as a Template**.  - - A new blueprint template is created and the diagram of the template opens for editing. - -4. Rename the template. -5. Update the blueprint template’s components as required. Update the blueprint template’s components as required. - -Changes you perform on the diagram of the template are saved automatically.  -For administrators, the blueprint template is listed in the **Manage** dashboard in the **Blueprint Templates** page.  -For users, the blueprint template is now available for creating a new blueprint based on the new template. - -All non-administrator users can now create blueprints from the templates(s) you created. For step-by-step instructions on how to create a blueprint from a template, see the help topic: [Creating a blueprint from a template](../../portal/blueprints/creating-blueprints/create-blueprint.md#creating-a-blueprint-from-a-template). -:::note -The owner of the blueprint template is the administrator who created the template. -::: -### Allowing users to create new empty blueprints - -By default, when creating a new blueprint, it will be based on the CloudShell Sandbox Template. If multiple templates were defined, users must select a template on which to base the blueprint. However, the Admin can enable users to create blueprints that are not based on a template. For more information, see [Enabling the creation of empty blueprints](../../admin/setting-up-cloudshell/cloudshell-configuration-options/advanced-cloudshell-customizations.md#enabling-the-creation-of-empty-blueprints) -:::note -Changes to the configuration file affect the entire system. -::: -### Filtering the display of the blueprint templates list - -**To filter the display of the blueprint templates list by domain:** - -- In the toolbar, click the **Domain** drop-down list and select the required domain. - -### Deleting blueprint templates - -This section explains how to delete blueprint templates from CloudShell. -:::note -It is not possible to delete the **CloudShell Sandbox Template** that comes out of the box with CloudShell. If you no longer need it, edit the template and disassociate it from any domains. -::: -**To delete blueprint templates:** - -1. Open the **Manage** dashboard. -2. In the page navigation bar, click **Blueprint Templates**. -3. Select the check box next to the template(s) to delete. -4. In the toolbar, click ![](/Images/CloudShell-Portal/Manage/Management_3.png) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/javascript-extensions.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/javascript-extensions.md deleted file mode 100644 index 76fad52754..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/javascript-extensions.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -sidebar_position: 9 ---- - -# JavaScript Extensions - -JavaScript Extensions allow administrators to write custom client-side code in JavaScript that can execute any logic as a part of the suite creation, update, removal, and so on. These scripts can give additional functionality to the user input parameters defined in the tests or for a blueprint resource, for example you can use [Using JavaScript Extensibility to configure dependencies between test parameters](../../admin/cloudshell-manage-dashboard/javascript-extensions.md#using-javascript-extensibility-to-configure-dependencies-between-test-parameters). - -You can use the JavaScript Extensions to control the different sets of user input parameters in a Blueprint or Test (modules) by adding JavaScript code in the **Manage** dashboard, in the **Custom JavaScript Modules** extensions page. Modifying the code for the JavaScript extension modules triggers an event when the user performs a particular action in the **Create Suite Template/Edit Suite Template/Run Suite** page. The code can either validate the user inputs, or make changes to them. - -For example: - - - - - - - - - - - - - - - - - - - - - - - - -
    - When you modify the code in the following module - - Changes will be made to the inputs when the user performs the following tasks -
    - Blueprint input – all parameters - -
      -
    • - Creates a new suite (Create Suite Template) page (in the Job Scheduling dashboard) with blueprint inputs published in the blueprint -
    • -
    • - Edits a suite in the Edit Suite Template page with blueprint inputs published in blueprint -
    • -
    • - Opens the Run Suite page - All Inputs tab with blueprint inputs published in the blueprint -
    • -
    • - Opens the Run Custom page (by clicking the Customize button in the Run Suite page) with blueprint inputs published in the blueprint -
    • -
    • - Reserves a blueprint -
    • -
    -
    - Blueprint input - published parameters - -
      -
    • - Opens the Run Suite page with blueprint inputs published in the blueprint and in the suite. -
    • -
    -
    - Test input - all parameters - -
      -
    • - Creates a new suite (Create Suite Template) page -
    • -
    • - Edits a suite in the Edit Suite Template page -
    • -
    • - Opens the Run Suite page – All Inputs tab -
    • -
    • - Opens the Run Custom page (by clicking the Customize button in the Run Suite page) -
    • -
    -
    - Test input - published parameters - -
      -
    • - Opens the Run Suite page -
    • -
    • - Opens the Run Suite page – Customize tab -
    • -
    -
    - - -## Using JavaScript Extensibility to configure dependencies between test parameters - -As an administrator can configure the possible parameters displayed to the user in a test, and define dependencies between the variable fields. For example, in the code samples presented in the **Custom JavaScript Modules extensions** page, in the **Test input - all parameters** module, the possible values for the **log\_level** parameter field are only available after selecting the values in the **test\_type** parameter field. Since the script defines a set of possible log level values for each test type, the code updates the **log\_level** field's possible values according to the selected value for the **test\_type**. - -**To configure possible values for a test parameter:** - -1. Create a test with a **test\_type** string input. -2. Create a suite template with a single job and add the test to the job. - - The **test\_type** parameter displays in the suite. - -4. In your script, for this parameter, add the following code, which assigns possible values to the variables: - - ```javascript - data.getParameterByName(t, 'test_type').possibleValues = ["-select-","type 1","type 2"]; - ``` - - -**To configure dependencies between test parameters:** - -1. In the **Custom JavaScript Modules extensions** page, from the **Select module** dropdown list, select **Test input – all parameters**. -2. In the **Test input – all parameters** module, enter a code based on the following example. Make sure to include the required parameters: - - ```python - if (test_type.value == 'type 1') - log_level.possibleValues = ["-select-", "1A", "1B", "1C", "1D"]; - - else if (test_type.value == 'type 2') - log_level.possibleValues = ["-select-", "2A", "2B"]; - ``` - - -You can find a complete sample of the code in the code sample panes at the bottom of the **JavaScript Extension** module pages. - -## Related Topics - -- Creating Tests -- [Adding Automation Suites](../../portal/job-scheduling/manage-automation-suites/add-suites.md) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/licensing.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/licensing.md deleted file mode 100644 index 5370e977d6..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/licensing.md +++ /dev/null @@ -1,166 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Licensing - -CloudShell's licensing mechanism is based on the amount of concurrent sandboxes. For better management of the licenses, the system administrator can create license pools – the total capacity is equal to the amount of purchased sandboxes. Licenses in CloudShell are managed in **Licensing** page, which is available to Admins only. - -## License types - -Licenses are required for each of the following: - -| License name | Description | Type | -| --- | --- | --- | -| CloudShell Team / Premium Tier | Quali server.
    CloudShell Premium Tier supports High Availability, SSO, sandbox environment automation and enhanced orchestration. | 1 per Quali Server | -| Concurrent Environment for Team / Premium Tier | Concurrent Sandboxes | 1 per active sandbox | -| Concurrent Authoring | TestShell Studio, CloudShell Authoring | 1 per open application | -| Concurrent Execution | TestShell Runner, Execution Server (Running TestShell Tests) | 1 per open application | -| Remote Agent | TestShell Remote Runner | 1 per open application | -| Staging Environment | Additional permanent Quali Server for dev/staging activities (doesn’t include Concurrent Environment licenses). More than one may be purchased. | 1 per Quali Server | -| CloudShell Runtime | Required by all Quali Product components, and included out-of-the-box with every license package | | - -| Licensed features | Description | -|---|---| -| Save and Restore | Save and Restore plugin | -| Job Scheduling | Job Scheduling. This holds true for both the original Job Scheduling used for TestShell Studio test suites and the New Job Scheduling that works with Robot tests. | - -**Each license can be one of the following types:** - -- **Floating**: Configured in the License Server, which is accessible to each product component. This license types requires an ongoing connection to the License Server. Disconnection will result in a temporary loss of the license, until the connection is resumed. -- **Seat**: Configured separately on each machine. -- **Commuter**: (Applies to the Studio, Runner and Authoring applications) Configured to temporarily use a floating license as a seat license on a single machine. This license allows you to continue working with the application in cases you have no access to the License Server (e.g. when you are out-of-office and your PC is not connected to any domain). - -A new license is required when installing CloudShell, or upgrading to a major (8.0, 9.0, etc.) or minor (8.1, 8.2, etc.) version. Patches do not require a new license. - -All license types have an expiration date. - -A license is provided in one of the following formats:  - -- **License file**: This format requires the fingerprint of the machine on which the license is configured. For a Floating license, the fingerprint of the License Server required. For a Seat license, the fingerprint of the machine on which the license in configured, is required. -- **Activation token**: This format requires an internet connection only. The license locks for the specific machine from which you activate the license. - -## Configuring a license - -**To configure a Floating license:** - -1. If the License Server has an internet connection, a token will be provided for you. - 1. Run CloudShell License Server's configuration wizard. - 2. In the **Welcome** page, click **Next** and in the **License server settings** page click **Next**. - 3. In the **Configure a License** page, click **Specify Token**, enter the activation code, and click **Send**. - 4. Click **Next** and then **Finish**. -2. If the License Server doesn’t have an internet connection, - 1. Acquire the fingerprint of the Quali Server: - 1. Run CloudShell License Server's configuration wizard. - 2. In the **Welcome** page, click **Next** and in the **License server settings** page click **Next**. - 3. In the **Configure a License** page, click **Specify Token** and under **Email Fingerprint**, click **Generate and Copy Fingerprint to Clipboard**. - 2. Provide the copied fingerprint via a Quali Support License request ticket. - - You will receive a `.lsn` file containing your license entitlement. - - 3. Save the file in a location accessible to the CloudShell License Server. - 4. To load the license file, in the **Configure a License** page, click **Browse** and point to the provided `.lsn` file. -3. Once the license is loaded, run the configuration wizard of each installed product component and do the following: - 1. In the **Select a License** page, select the **License Server** checkbox. - 2. In the **License server (enter address of your license server)** field, enter the server's IP address or name. - 3. Click **Next** and then **Finish**. - -**To configure a Seat license:** - -1. If the machine has an internet connection: - 1. Run the Configuration Wizard of the relevant product component: - 2. In the **Select a License** page, click **Get License File**. - 3. Enter the activation code and click **Send**. - 4. Confirm the rest of the process. -2. If the machine hasn’t an internet connection: - 1. Run the configuration wizard of the relevant product component: - 2. In the **Select a License** page, click **Get License File**, under **Email Fingerprint** click **Generate** and then click **Copy Fingerprint to Clipboard**. - 3. Provide the copied fingerprint via a Quali support license request ticket. - - You will receive a `.lsn` file which contains your license entitlement. - - 4. Save the file in a location accessible to the relevant machine. -3. To load the license file, in the configuration wizard of the relevant product component, in the **Configure a License** page, click **Browse** and point to the provided `.lsn` file. -4. Click **Next** and then **Finish**. - -**To configure a Commuter license:** -:::note -Commuter license is available for the following product components only: CloudShell Authoring, TestShell Studio TestShell Runner and Remote Runner. -::: -1. In the client, on which the relevant product component is installed, browse to the following folder: `C:\Program Files(X86)\Qualisystems\CloudShell\LicenseServer\Commute`. -2. Run the **WCommute.exe** utility on the relevant product component machine. -3. Connect to the License Server in one of the following ways : - 1. Click **Single Server** and enter the License Server's address (DNS or IP). - - -or- - - 2.  Click **Search Subnet** to scan the network for it. -4. In the left pane, select the feature relevant to the license you require: - - | Feature | Description | - | --- | --- | - | QS\_Procedure\_Editor | For TestShell Studio or CloudShell Authoring licenses | - | QS\_RemoteRunner | For a Remote Runner (execution) license | - | QS\_Studio\_Runner | For a TestShell Runner license | - | QS\_TestShellRuntime | Required license for any product component | -:::note -The QS\_TestShell\_Runtime is required. Make sure to configure this license along with any other required license. -::: -5. Click **Check Out**. -6. On the same client, access the Configuration Wizard and in the **Select a license** page, select the **Commuter License** checkbox. -7. Click **Refresh**. -8. A validation message displays, indicating which commuter license was configured. Click **OK** to close the message box. -9. In Select a License page, click **Next**. -10. In the **Folder and file migration** page, click **Close**. - -To convert the license back to floating: - -1. Run the **WCommute.exe** utility on the relevant product component machine. -2. Connect to the License Server in one of the following ways : - 1. Click **Single Server** and enter the License Server's address (DNS or IP). - - -or- - - 2. Click **Search Subnet** to scan the network for it. - -3. In the left pane, select the relevant checked-out feature and then click **Check In**. - -## Monitoring the license usage - -In the **Licensing** page, the system administrator can monitor the current usage in each pool – how many concurrent sandboxes are in use in each pool. - -![](/Images/CloudShell-Portal/Manage/LcnsManagement_611x170.png) - -It includes the following information, which refers to the image above: - -1. Active concurrent sandboxes allowed - total number of sandboxes in the system -2. Current usage – total number of active sandboxes in the system that are in one of the following statuses: active/setup/teardown/overtime -3. License expiration date -4. For each license pool: - - - Pool name - - Domains using this pool - - Pool size - - Pool usage (total number of active sandboxes) - -The status page is automatically refreshed at a set period. However, you can use the **Refresh** button to immediately refresh the **Licensing** page. - -## Release license after idle time has elapsed - -The applications specified below automatically release the license after the idle time has elapsed. The idle time is specified by the administrator by updating the `IdleLicenseReleaseWatchdog.IdleTimeInMinutes` key in the `customer.config` file. The application remains open and when focus is returned to the application, a new license is retrieved. However, if no licenses are available, a message is issued to notify the user that the license is missing. By default, when the application has been lying idle for 65 minutes, the license is released. - -In the following conditions, idle time is not counted: - - - When TestShell Runner is under external control. - - When a Test or function is either running or has paused. - - When a seat license is being used. - -The relevant applications are: - - - TestShell Studio - - TestShell Runner - - CloudShell Authoring - -## Related Topics - -- [Manage Dashboard Overview](../../admin/cloudshell-manage-dashboard/manage-dashboard-overview.md) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/maintenance-window.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/maintenance-window.md deleted file mode 100644 index 9b2958033c..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/maintenance-window.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -sidebar_position: 7 ---- - -# Maintenance Window - -## About the maintenance window - -**Maintenance Window** allows system admins to schedule and notify users of an immediate or upcoming system-wide maintenance. For example, to perform an upgrade or any other preventive maintenance that could cause disruption of service. During the maintenance window, only system administrators and domain administrators can log in to CloudShell, schedule and work in sandboxes, and launch jobs. - -The maintenance window is system-wide and applies to all domains. - -If a non-admin user attempts to log in during this period, they will get a canned message. If they are logged in when the maintenance window starts, they will be logged-out and redirected to the login page and presented with the **Message on Login** message. - -Additional points to consider when a maintenance window is defined: - -- Sandboxes scheduled before the maintenance window will run as usual even if they overlap with the maintenance window. Admin users can view all sandboxes scheduled for the maintenance window duration, by clicking the **Go to Sandboxes** button. See the [Navigating the maintenance window](../../admin/cloudshell-manage-dashboard/maintenance-window.md#navigating-the-maintenance-window) section. -- If a regular user reserves or restores a sandbox that starts or ends outside the maintenance window, the sandbox will be reserved or restored as usual. Users are warned that they will not have access to the sandbox during the maintenance period. -- Admins can run automation suites during the maintenance window. -- Reserving a recurring sandbox is blocked if all the occurrences start or end during the maintenance window. Otherwise, the sandbox will start as usual. -- You cannot change the timeslot of a reservation that falls within the maintenance window. -- Automation suite jobs moved to the scheduled queue after the maintenance window was created will run as usual unless they overlap the maintenance window. If this occurs, they will run after the maintenance window. -- Automation suite jobs that were set to run automatically before the maintenance window was created or during the period in which the maintenance window was extended will fail if they overlap with the maintenance window. -- API: non-admin users cannot create a new session during a maintenance window. If they are in the middle of a session, the session will not be terminated, but they will be logged out on the session timeout. - -## Setting a maintenance window - -The **Maintenance Window** page is only displayed for system administrators in the **Global** domain. - -**To set a maintenance window:** - -1. As system administrator, access the **Global** domain. -2. Open the **Manage** dashboard. -3. In the page navigation bar, click **Maintenance Window**. -4. Click the **Add New Maintenance Window** button. - - The maintenance window is created. - -5. Enter the required information in the dialog box, as explained below. - -6. Click **Save**. - -## Navigating the maintenance window - -In the image below, hover over an area or option to learn more about it, or use the table that follows. You can edit any of the messages presented in the **Maintenance Window**. Click **Save** to apply your changes. - -![](/Images/CloudShell-Portal/Manage/MaintenanceWindow_624x501.png) - -The maintenance window's areas are arranged as follows: - -|   | Field | Description | -| --- | --- | --- | -| 1 | Add New Maintenance Window | Click this button to define a maintenance window. You can have only one active maintenance window at any time. | -| 2 | Status | A maintenance window can be:
    • **NEW** - new maintenance window which was not saved yet
    • **ACTIVE** - maintenance window has started but has not ended
    • **PLANNED** - maintenance window is scheduled to start at a future time
    | -| 3 | Schedule | Define the maintenance period. You can start the maintenance window now or at a future time, and set the duration.
    You can extend or stop a maintenance window by editing this section. | -| 4 | Go to Sandboxes | Click this button to show the sandboxes that are scheduled to run during the maintenance timeframe. Feel free to inform the sandbox owners that they will not have access to these sandboxes. | -| 5 | Show Notification | Define how long before the maintenance window's start time to show the **Notification message**.
    If you do not configure this setting, CloudShell Portal will not notify users prior to the beginning of the maintenance window. | -| 6 | Notification Message | The message shown to all users for the period defined in **Show notification** prior to the maintenance window start time.
    The notification is shown in the upper right hand corner of the screen as follows during the defined period:
    ![](/Images/CloudShell-Portal/Manage/NotificationMessage.png)
    **Note:** During the maintenance window, the contents of the tooltip change to the **Message on login**, and are visible only to system and domain admins. | -| 7 | Message on Login | The message shown to all users who try to log in to CloudShell Portal during the maintenance window. For system and domain admin users, CloudShell Portal also shows this message during the maintenance period. | -| 8 | Error on Reserve | The message shown to non-admin users who try in advance to create a sandbox that starts or ends within the maintenance window. | -| 9 | Warning on Reserve | The message shown to non-admin users who try in advance to create a sandbox that starts and ends outside the maintenance window. The user is presented with the option to either **Continue** or **Cancel**. If they select to continue, the sandbox will be created and remain active during the maintenance period, but it will be inaccessible.
    In the API, there is no warning, and the action is allowed. | -| 10 | Delete button |
    • **PLANNED** or **NEW** state: deletes the maintenance window
    • **ACTIVE** state: ends and deletes the maintenance window
    | - -## Related Topics - -- [Manage Dashboard Overview](../../admin/cloudshell-manage-dashboard/manage-dashboard-overview.md) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/_category_.json deleted file mode 100644 index 334530cf8d..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Managing App Templates", - "position": 2 -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/_category_.json deleted file mode 100644 index 9fdd50cac9..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Adding App Templates", - "position": 2 -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/adding-app-template.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/adding-app-template.md deleted file mode 100644 index 35ec7ca333..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/adding-app-template.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Adding a new App Template - -When adding a new App template, you need to configure the settings of the virtual machine and application you want to deploy. To add App templates, at least one cloud provider resource must be defined. To define private cloud provider resources, see [Private Cloud Provider Support in CloudShell](../../../supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/index.md), and for public cloud providers, see [Public Cloud Provider Support in CloudShell](../../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/index.md). - -If your CloudShell deployment includes multiple sites, it is recommended to configure the deployment process of the App to be carried out in the domain that is physically closest to the cloud provider. For additional information, see [Managing Private Cloud Apps in Domains](../../../supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md) or [Managing Public Cloud Apps in Domains](../../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/managing-public-cloud-apps-in-domains.md). - -:::note Notes for public cloud Apps -- By default, all public cloud Apps of the same type in the same sandbox are deployed within the same subnet and therefore are connected to each other and isolated from other sandboxes. However, using the Subnet service, blueprint designers can set up multiple subnet networks in the sandbox, instead of having one default subnet for all the Apps of the same cloud provider. For details, see [Subnet Connectivity](../../../setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/index.md). -- Public cloud App deployment requires the management network and subnet(s) to be prepared in advance as part of the sandbox Setup process. CloudShell's out-of-the-box Setup process does this. However, the blueprint must include at least one public cloud App to initiate the Setup script's connectivity preparation process for deployment in that public cloud. -::: - -1. Click **\+ Add**. - - The **Create New App** wizard is displayed. - - ![](/Images/CloudShell-Portal/Manage/CreateNewApp.png) - -2. From the **Select Deployment Type** pane, select the desired deployment type. For example, "**vCenter VM From Template**" deploys a vCenter virtual machine from a template while "**AWS EC2 Instance**" deploys an AWS EC2 instance from an AMI image. -3. Enter a **Name** for the App template. - - :::note - The App template's name has a limit of 100 characters and can only contain alpha-numeric characters, spaces, and the following characters: | . - \_ \] \[ - ::: - -4. Click **Create**. - - The App template is created and the **App** wizard's **General** page is displayed. - - ![](/Images/CloudShell-Portal/Manage/AppGeneralPage.png) - -5. In the **General** page, define the App template's display settings and category. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldRequiredDescription
    NameRequiredApp name that is displayed in the catalog.
    DescriptionOptionalDescription of the App.
    IconOptional - Add an image to the catalog definition. The recommended size for the image is 190x120 pixels (image size is limited to 400x400 pixels or 200 KB). -
    CategoriesOptional -

    Service categories are a method to classify Apps. The Apps are displayed in the **Add App / Service** side pane in the blueprint and sandbox diagram, arranged in categories. Only users who are permitted to view the category can access the App. Apps without a category are not displayed.

    -

    By default, the **Applications** category is selected.

    -

    Select a category from the dropdown list. You can select additional categories. Examples of categories are: applications, networking and VLAN.

    -:::note Notes -- The category must be associated with the domain in which the required cloud provider resides. For information about domain categories, see [Managing domain categories](../../../cloudshell-manage-dashboard/managing-categories.md#managing-domain-categories). -- It is recommended to use up to a 2-level hierarchy when organizing the **Add App / Service** catalog (i.e. root and sub-category). -- In the **Add App / Service** side pane, Apps are displayed in the root category only. This includes services associated to sub-categories. -::: -
    - -6. In the left pane, click **Deployment Paths** and configure the App template's deployment path. - - A deployment path consists of (1) the selected deployment type (the method to be used to deploy the VM, for example, from a vCenter VM template or AWS AMI image, (2) the VM’s settings such as storage size, CPU and image file, and (3) the CloudShell cloud provider resource that enables CloudShell to access the cloud provider and deploy the VM on it. - - Note the deployment path's name (highlighted in the image below). The path's name is dynamic and consists of the selected **Cloud Provider** resource and **Deployment** type. You can change the name of the path by clicking the field. - - ![](/Images/CloudShell-Portal/Manage/AppDeploymentPathsPage.png) - - 1. From the **Deployment** drop down list, select the deployment type. - - The selected deployment type's attributes are displayed. - - :::note - Deployment types related to 2nd Gen cloud provider shells include "2G" in the title (for example: "vCenter VM From Template 2G"). - ::: - - 2. Enter the required information based on the selected deployment path: - 1. For AWS EC2 Instance attributes - [Read here](./deployment-path/aws-ec2-dp-attributes). - 2. For Azure VM From Custom Image attributes - [Read here](./deployment-path/azure-custom-image-dp-attributes.md). - 3. For Azure VM From Marketplace attributes - [Read here](./deployment-path/azure-marketplace-dp-attributes.md). - 4. For Azure VM From Gallery Image 2nd Gen attributes - [Read here](./deployment-path/azure-galery-dp-attributes.md). - 5. For OpenStack Deploy Glance Image 2G attributes - [Read here](./deployment-path/openstack-glance-dp-attributes.md). - 6. For vCenter Clone VM From VM attributes - [Read here](./deployment-path/vcenter-clone-vm-dp-attributes.md). - 7. For vCenter Deploy VM From Linked Clone attributes - [Read here](./deployment-path/vcenter-link-clone-vm-dp-attributes.md). - 8. For vCenter VM From Image attributes - [Read here](./deployment-path/vcenter-clone-image-dp-attributes.md). - 9. For vCenter VM From Template attributes - [Read here](./deployment-path/vcenter-clone-template-dp-attributes.md). - -7. To add additional deployment paths to the App template, click the **Add New Deployment Path** link at the bottom of the wizard and fill in the required information. - - Note that for Apps with multiple deployment paths, the user who adds the App to the blueprint or sandbox diagram will be prompted to select the suitable deployment path to use out of the deployment paths that are based on cloud provider resources in that user’s domain. - - ![](/Images/Admin-Guide/Inventory-Operations/AppsNumberOfDeploymentTypes.png) - -8. In the left pane, click **Configuration Management** and configure the application to be installed on the VM. - - Read about the different options [here](./configuration-management.md). - - -9. In the left pane, click **App Resource** to optionally set the VM's operating system user credentials (for example, to connect to the VM via RDP or SSH). You can also change the deployed App's Shell. - - Read about the different options [here](./app-resource.md). - -10. Click **Done**. - - The new App template is displayed in the Apps page. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/app-resource.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/app-resource.md deleted file mode 100644 index a6fbb32e81..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/app-resource.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Setting up the App Resource - -When adding or editing an App, click **App Resource** in the left page, to optionally set the VM's operating system user credentials (for example, to connect to the VM via RDP or SSH). You can also change the deployed App's Shell. - -![](/Images/CloudShell-Portal/Manage/AppResource.png) - -:::tip -To help sandbox end-users connect to the VM, it is recommended to include the **User** and **Password** in the blueprint's instructions. For additional information, see [Add Instructions](../../../../portal/blueprints/creating-blueprints/add-instructions.md). -::: - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Shell -

    The Shell on which the App's VMs are based. When an App is deployed in a sandbox, it changes into a "deployed App resource", which is based on the selected Shell. By default, the "Generic App Model" Shell is used.

    -

    - Deployed Apps include a default set of commands such as Power On and Refresh IP, and the VM's User and Password attributes, as explained below. -

    -:::note -Changing the Shell might cause additional fields to become visible and you may need to enter further information. -::: -
    User -

    User defined in the App's image. The **User/Password** credentials are used by QualiX to create in-browser connections to the VM from within the sandbox.

    -:::note Notes -- For AWS instances,make sure to set the User of a user that already exists on the Amazon machine image. For custom images, the image owner should know the credentials, while community/marketplace images have the image's credentials listed in their documentation. -- Azure VM username and password restrictions apply. For details, see [Frequently asked question about Windows Virtual Machines](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/faq). -- For Azure Marketplace images, CloudShell will create a user on the VM based on the User/Password credentials you specify. -- For Azure Marketplace VMs, if the user is not set, CloudShell will set adminuser as the default user name. -::: -
    Password - VM user's password. -:::note Notes -- For AWS Marketplace images, leave the Password empty. The AWS shell generates a new key-pair for each sandbox, which QualiX will use to establish the in-browser connection. -- For Azure Marketplace images: - - If the password is not set, only the user name will be required. For Linux VMs, CloudShell will create an SSH key-pair to enable a secure connection. - - If the password is set, it will be displayed as asterisks (\*\*\*\*\*\*) in the blueprint or sandbox. -::: -
    - \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/configuration-management.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/configuration-management.md deleted file mode 100644 index a21b90e0af..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/configuration-management.md +++ /dev/null @@ -1,175 +0,0 @@ ---- -sidebar_position: 3 -hide_table_of_contents: true ---- - -# App Configuration Management Settings - -When adding or editing an App, click **Configuration Management** and configure the application to be installed on the VM - -![](/Images/CloudShell-Portal/Manage/ConfigurationManagement.png) - -:::tip -To learn how to develop custom scripts and Ansible playbooks, including examples, and set up support for the desired configuration management tool, see [Developing Configuration Management Scripts for Apps](../../../../devguide/develop-config-management-scripts-for-apps/index.md). -::: - -:::note Notes -- To run configuration management on an Azure App, make sure the App's VM size is Basic\_A2 or larger. -- For configuration management operations, CloudShell uses an available Execution Server (for Ansible, it's a Linux Execution Server that has the **Supports Ansible** flag). - - If the cloud provider resource has an **Execution Server Selector** configured, it will use that selector. If the selector is empty, CloudShell will use the selector defined in the appropriate **Resource Manager Client \>Configuration Services** model (**Ansible Configuration** or **Custom Script Configuration**). - -- Execution Server selectors specified on the deployed App shell/resource are not used to execute configuration management operations. -::: - -1. Define the script or playbook to install. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Select Tool -Select the application's installation and configuration tool. -- **None**: Do not use any Configuration Management option. Use this option if, for example, the image or template already contains the application to install. -- **Script**: Select the custom script to run (PowerShell, bash or sh). -- **Ansible**: (Intended for customers who are already using Ansible) Select the Ansible playbook to run. -:::note -The playbook runs once during the Setup phase for all of the sandbox's Apps that use that playbook, after CloudShell has finished deploying their VMs. This is done both to improve performance and support cross-server logic where multiple applications need to be installed and configured in a certain way. -::: - -Depending on the selection, additional options may become available. -
    Connection Method -The method to use to connect to the VM. - -Select: - -- **SSH** if the VM has a Linux OS -- **Windows Remote Management** if the VM has a Windows OS - -:::note -To run configuration management on a Windows VM, the VM must have WinRM enabled. For details, see [Enable WinRM on Windows VMs to Support Configuration Management](../../../../devguide/enable-winrm-on-win-vm-for-cfg-mng.md). -::: -
    Playbook / Script Location -Details of the Ansible playbook or custom script. - -- URL: Raw URL of the Ansible playbook or ZIP file, or custom script on the online repository (GitHub, GitLab and BitBucket are supported). URL must be accessible to the Execution Servers. - -:::tip -The URL can accept parameters defined on the App, enabling you to test new versions of scripts without affecting consumer-ready versions. For example, you can have an App everyone is using, but if you want to test a version you're developing, simply change the value of the URL parameter in the test blueprint. - -- To use parameters, specify the parameter name in curly brackets (for example: `{branch}`). -- If the App has this parameter, CloudShell will replace the `{branch}` with its value during execution. -- If the parameter is missing, CloudShell will replace `{branch}` with an empty string. -- If you are using a global input, customers would be well advised to set a default value on the global input -::: - -**For GitHub, specify the raw URL. For example:** - -```javascript -https://raw.githubusercontent.com/.../site.yml -``` - -**For GitLab, specify the API endpoint in the format:** - -```javascript -https://gitlab.com/api/v4/projects/{Project ID}/repository/files/testsharding%2Eyml/raw?ref=master -``` - -Where: - -- Each special character that the file contains has to be encoded. In the example above - "%2E” is an encoded point (".”) - -- The ref value is the branch name (master for this example) - - -**For BitBucket Data Center (on premise), use the following URL format:** - -```javascript -http://{datacenter server IP}/rest/api/1.0/projects/{projectKey}/repos/{repository name}/raw/testsharding.yml -``` - -**For BitBucket Cloud, use one of the following:** - -- For source code files, specify the API endpoint: - - ```javascript - https://api.bitbucket.org/2.0/repositories/{workspace}/{repository name}/src/{GUID- the Commit hash string}/testsharding.yml - ``` - -- For download files (files residing in the repository's "Downloads" folder), specify this endpoint: - - ```javascript - https://api.bitbucket.org/2.0/repositories/{workspace}/{repository name}/downloads/site.yml - ``` - -:::note Important -If the URL is private (HTTPS), the VM will need to have a valid SSL certificate. To disable the certificate check, open Resource Manager Client>Resource Families>Configuration Services (Ansible Configuration or Custom Script Configuration) and set the **Verify Certificate** attribute to **False**. -::: - -- User/Password: (For private repositories) Access credentials or token to the script/playbook's online repository. - -- Token: (For private repositories) Access token to the script/playbook's online repository. - - For GitHub and GitLab, specify the API token. For BitBucket Cloud, set the repo's "App Password" in the App template's Password field. For BitBucket Data Center, specify the personal access token. - -:::note Notes -- For Custom Script configurations: In SSH mode, only bash and sh scripts are allowed. In WinRM mode, only PowerShell scripts are allowed. WinRM over HTTPS only applies to custom scripts at this time. If WinRM is configured to run over HTTPS, the execution server will first try to run the custom script over HTTPS and then fall back to HTTP if HTTPS is unsuccessful. To prevent the fallback, set the winrm\_transport parameter to ssl. -- For Ansible configurations: The Ansible playbook must be a YML or YAML file. To specify multiple playbooks or a hierarchy of an Ansible project, you can specify multiple Ansible playbooks or a ZIP package. For example: `https://raw.githubusercontent.com/QualiSystemsLab/private-repo-zip-download/master/README.zip` -- If a ZIP containing 2 or more playbooks is specified, CloudShell will use the playbook file titled site.yml or site.yaml. If the file is missing, the App's deployment will fail. -::: -
    Inventory Groups -(For Ansible) Specify the host groups for the application to be installed, separated by semicolons (;). The newly deployed VM will be associated to these groups, thus allowing plays that target these groups to run on the VM. - -For example: `Servers/AppServers;Servers/DBServers` -
    Parameters -Parameters to be passed to the Ansible playbook or custom script. Specify the parameters and their default values. - -In the blueprint or sandbox diagram, privileged users can also set the parameter to receive the value that is specified for a global input when reserving a sandbox containing the App. This is done by selecting the global input when editing the App in the blueprint or sandbox diagram. For example, a global input that specifies the build number of a product to be tested or which components of a product to install. - -(For Ansible) To customize the port to be used to communicate with the VM, add the `Ansible_port` parameter. Default: `SSH` / `Port: 22` / `WinRM: 5985`. -
    Additional Arguments -(For Ansible) Define arguments to be passed to the execution of the playbook (`Ansible-playbook` command). For example, `-v` will set verbose mode on while `-f` will set the maximum number of VMs to be handled in parallel. Multiple arguments can be given, separated by spaces. For additional information on possible arguments, see the official Ansible documentation. - -The arguments must be specified in Resource Manager Client > Configuration Services family > Ansible Configuration model > Ansible Additional Arguments attribute. - -Note: The arguments are defined globally for all Apps using Ansible. - -Important: To configure Ansible to connect to certified hosts only (Linux VMs with a valid 'known\_hosts' key), include the following additional arguments: `--ssh-extra-args='-o StrictHostKeyChecking=yes'` -
    - - -2. To enable the end-user to rerun the App's configuration management on the deployed App in the sandbox, select **Allow rerunning configuration management for resources deployed from the App**. Once the App's deployment completes, a Rerun Configuration Management command is included in the deployed App's Application Commands pane. For details, see [Run App Commands](../../../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md). This is useful for rolling back the App's VM to its original state. - -3. To enable blueprint and sandbox owners to modify the App's Configuration Management details, select Allow blueprint/sandbox owners to modify the App's Configuration Management. The following details can be modified: playbook/script, authentication details, inventory groups, and parameters. Note that the modifications only apply to the blueprint or sandbox of the instance. -4. Optionally click the Add New Script/Playbook link at the bottom right to add additional custom scripts/Ansible playbooks to the App. The scripts will run in their display order, from top to bottom. You can drag scripts up or down to rearrange. - -5. To change the script's alias, click the script's name and change as appropriate. - - ![](/Images/CloudShell-Portal/Manage/RenameConfigManageScript.png) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/_category_.json deleted file mode 100644 index 853336a851..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Deployment Paths Options", - "position": 2 -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/aws-ec2-dp-attributes.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/aws-ec2-dp-attributes.md deleted file mode 100644 index 944b966c86..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/aws-ec2-dp-attributes.md +++ /dev/null @@ -1,219 +0,0 @@ ---- -sidebar_position: 1 -sidebar_label: AWS EC2 Instance -hide_table_of_contents: true ---- - -# AWS EC2 Instance Deployment Path Attributes - -The following attributes would be used to define the AWS EC2 Instance deployment: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeAWS shell versionDescription
    Cloud ProviderAllName of the AWS EC2 cloud provider resource to be used
    AWS AMI IDAll - AWS AMI ID to launch the instance from. For example, "ami-6869aa05". -:::note -The AMI must be accessible in the selected cloud provider's AWS region. -::: -
    Allow All Sandbox TrafficAll - Determines if the App allows inbound traffic from all other AWS EC2 Apps in the sandbox. If set to **False**, the instance will be isolated. Access from specific Apps or subnets can be defined using the **Inbound Ports** attribute or API. -:::note -By default, this attribute is **True**. This means that all access is allowed to all ports from all Apps in the sandbox and all ports are open for traffic within the sandbox. -::: -
    Instance TypeAll -AWS EC2 instance type. The instance type determines the CPU, memory, storage and networking capacity of the instance. For example, "t2.large". - -Leave empty to use the default instance type specified in the AWS EC2 cloud provider resource. - -For built-in or Marketplace images, make sure the instance type is supported by the image you defined in the App. -
    IAM Role NameAll - (Optional) Name of the IAM role to associate to the App's AWS EC2 instance. The instance will use this role to access AWS. -:::note Notes -- The role must have the AWS permissions required for the actions the instance is expected to perform. -- If the role does not exist, or there are other issues with launching the instance with the role, App deployment will fail. -::: -
    Inbound PortsAll -Semi-colon separated list of ports and protocols to open for inbound traffic. Note that by default all ports are open for traffic between AWS EC2 App instances within the sandbox, but this can be changed using the **Allow All Sandbox Traffic** attribute. - -In addition, all outbound traffic is allowed. - -The syntax is: - -`port[single/range]:protocol[tcp(default)/udp]` - -For example: "80;443:tcp;200-220:udp". - -:::note -If not specified, the protocol defaults to TCP. -::: - -:::tip Tips -- To allow QualiX in-browser connections to the VM from the sandbox, include port "22". -- To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/2023.3/TestShell-API/TestShell%20XML%20RPC%20API.html) method instead. Unlike the Inbound Ports attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md). -::: -
    Public IP OptionsAll - Enables access to the instance from the internet. Options are: - -- **No Public IP** - default option -- **Public IP (single subnet)** - (for Apps connected to a single subnet \[private or public\]) allocates a public IP -- **Elastic IPs** - (for Apps connected to multiple subnets) allocates an elastic IP for the App in each of the public subnets that it is connected to - -:::note -In AWS EC2 Apps, this setting is mandatory if the App is connected to more than one network (private or public). -::: -
    Storage Size2nd Gen only - The root volume size. The value must be greater or equal to the size of the root snapshot used. If set to 0, the default defined in the image will be used. For example: 30. -
    Storage IOPS2nd Gen only - The default number of I/O operations per second that the root volume can support. This parameter is used only for storage of type *io1*, in which you can provision up to 30 IOPS per GiB. If set to 0, the default in the image is used. For example: 240. -
    Storage Type2nd Gen only - The type of storage volume. In AWS, there are several EBS Volume types that can be used, *gp2* and *io1* for SSD, *st1* and *sc1* for HDD or the standard type which is the old generation EBS volume type. If auto is selected, the storage type defined in the image is used. -
    Root Volume Name2nd Gen only - The device names available for the volume. Depending on the block device driver of the selected AMI's kernel, the device may be attached with a different name than what you specify. If left empty, the default defined in the AMI is used. For example: /dev/xvda -
    Autoload2nd Gen only - Enables the automatic execution of the Autoload command during reservation Setup. -
    Wait for IP2nd Gen only - If set to **False**, the deployment will not wait for the VM to get an IP. -
    Wait for Status Check2nd Gen only - If set to **True**, the App's deployment will end successfully only after instance status checks have passed. The status checks include network connectivity, physical host status, system status and more. -
    Wait for Credentials2nd Gen only - Enable in order to retrieve credentials from a Windows machine. Note that if this parameter is enabled and the credentials are not retrieved within 15 minutes, the deployment will fail. -
    Custom TagsAll - Custom tags to be set on CloudShell-deployed AWS EC2 instances for billing, like the details of the project or team that deployed the instance. - -For multiple tags, specify a comma-separated list of the key-value pairs. For example: - -`tag_name1:ec2_instance,tag_name2:ec2_instance2` -
    User Data URLAll - (Optional) URL to the raw version of the script to execute (PowerShell, bash, sh, etc.). -
    User Data ParametersAll - (Optional) Parameters to pass to the user data script. For example, specifying `param1 param2` will result in the command running as follows: - -`./file.sh param1 param2` -
    Private IPAll - When the VPC is in static mode (defined on the AWS EC2 cloud provider resource's **VPC Mode** attribute), this attribute is used to set a static private IP for the deployed App. - -To set a static private IPs in multi-subnet mode, specify a json string that maps the subnet request CIDR to the requested static private IP. For example: `{"10.0.0.0/28": "10.0.0.6"}` -
    Enable Source Dest Check2nd Gen only - Set to **True** to enable source/destination checks. Source/destination checks allow users to create custom routing inside the VPC. It is applied to all vNICs of a certain instance. If enabled, you can reconfigure routing to go through that instance. This value must be **False** for Virtual Appliance instances like virtual firewalls/routers. - -:::note Important -This value must be False for Virtual Appliance instances like virtual firewalls/routers. The reason for this is that some virtual appliances may take a while to fully deploy and AWS will show them as impaired from 20 minutes until they fully deploy. Setting **Enable Source Dest Check** to **False** ensures the instances are not stopped when they become impaired. -::: -
    Status Check Timeout2nd Gen only - Timeout, in seconds, for AWS status checks to pass. Some virtual appliances may take a while to fully deploy and AWS will show them as impaired from 20 minutes until they fully deploy. Therefore, to ensure virtual appliance instances are not stopped when they become impaired, use this attribute to provide a long enough timeout for the instance to complete its status check. - -:::note -The default timeout is 600 seconds (10 minutes). However, instance deployment will fail once the instance status becomes "impaired". Specifying a status check timeout period will configure CloudShell to ignore the "impaired" status and instead wait for the instance deployment to complete or the timeout period to pass. -::: -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-custom-image-dp-attributes.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-custom-image-dp-attributes.md deleted file mode 100644 index fce217531d..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-custom-image-dp-attributes.md +++ /dev/null @@ -1,260 +0,0 @@ ---- -sidebar_position: 2 -sidebar_label: Azure VM From Custom Image -hide_table_of_contents: true ---- - -# Azure VM From Custom Image Deployment Path Attributes - -The following attributes would be used to define the Azure VM From Custom Image: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeAzure shell versionDescription
    Cloud ProviderAllName of the Azure cloud provider resource to be used
    Azure ImageAllName of the custom image. The image name is listed in the **Images** blade of the Azure portal.
    Azure Resource GroupAllName of the resource group in which the custom image resides.
    VM SizeAll - (Optional) Size of the Microsoft Azure computing resources, including CPU, memory and networking capacity of the VM. Leave it empty to use the default VM Size that was set in the cloud provider resource. For example: "Standard\_A1\_v2”. - - Make sure the VM size you specify is supported by the image you defined in the App. -:::important - For Azure Apps that will run configuration management operations, specify a VM size of Standard\_A2\_v2 or larger. -::: - For additional information, see the Azure help page [Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes) or use Azure CLI to get a list of your region's supported sizes. -
    Disk TypeAll - Type of disk to use for the VM's operating system. Possible options depend on the shell version: - - Azure 1G shell: -- **HDD (default)** -- **SSD** - -Azure 2G shell: -- **Standard HDD** -- **Standard SSD** -- **Premium SSD** -- **Standard SSD (zone-redundant storage)** -- **Premium SSD (zone-redundant storage)** -
    Disk SizeAll - (Optional) Disk size (in GB) of the VM's operating system. For example, "17” or "35”. - - If you leave it empty, CloudShell will determine the disk size according to the App's VM Size. -
    Data Disks2G - Semicolon-separated list of data disks that will be added to the VM. - -The syntax is: `disk_name:disk_size,disk_type` - -For example: - -`disk1:10;disk2:20,Premium SSD;disk3:20,Standard SSD (zone-redundant storage)` - -Supported disk types are: - -- **Standard HDD (default)** -- **Standard SSD** -- **Premium SSD** -- **Ultra SSD** -- **Standard SSD (zone-redundant storage)** -- **Premium SSD (zone-redundant storage)** -
    License Type2G - Optionally apply an OS license you own to the VM. - -Options are: - -- **No License**: None -- **Windows OS**: Windows\_Client -- **Windows Server OS**: Windows\_Server -- **Red Hat Enterprise Linux (RHEL)**: RJE:\_BYOS -- **SUSE Linux Enterprise Server (SLES)**: SLES\_BYOS -
    Enable Boot Diagnostics2G - Enable Boot diagnostics for the VM. For additional information, see Microsoft Docs' [Azure boot diagnostics](https://docs.microsoft.com/en-us/azure/virtual-machines/boot-diagnostics) article. -
    Boot Diagnostics Storage Account2G - The name of a storage account where boot diagnostic artifacts will be stored. Enter "Sandbox Storage" to use the storage account created by the sandbox. By default: the managed storage account is used if **Enable Boot Diagnostics** is enabled. -
    Resource Group Name2G - (Optional) The name of the predefined resource group where the VM will be deployed. This resource group will contain all cloud resources created for the VM (such as network interfaces, security groups, disks and the VM itself). When the VM tears down, its cloud resources will be deleted from the resource group but the resource group will remain. -
    Add Public IPAll - Set to **True** to use a public IP address to communicate with the VM from outside the virtual network. - - In most cases the public IP address is associated with the VM until the VM is stopped or terminated, after which the IP is no longer available. To ensure that the IP is available to your subscription at any time, reserve it by setting the **Public IPType** attribute to **Static**. -
    Wait for IPAll - Determines if the App deployment process waits for the VM to get an IP. Default is **False**. -
    Extension Script File / ConfigurationAll - (Optional) Custom extension script (PowerShell, Python, batch, etc.) to execute on the deployed VM. - -- **Extension Script File**: Raw URL of the script file -- **Extension Script Configuration**: Space-separated value containing the tool to be used to execute the script, such as Python or PowerShell, the script's file name and extension, and any inputs that need to be passed to the script. For example: `python my_script.py input1` `input2` - - :::note Notes - - For non-PowerShell scripts, the tool to be used to execute the script must be installed on the VM. - - For Linux VMs, you must specify the tool to be used. For Windows VMs, PowerShell is used by default, unless a different tool is specified. - - Extension scripts are not supported on Kali Linux images in Azure Marketplace. To fix this issue, you will need to use a modified version of the Marketplace image: - - 1. Deploy a VM based on the **Kali Linux** Marketplace image. - - 2. Run the following command: - - ```javascript - sudo nano /usr/lib/python3/dist-packages/azurelinuxagent/common/osutil/factory.py - ``` - - 3. Find the line: - - ```javascript - from .debian import DebianOSModernUtil - ``` - - 4. Replace with: - - ```javascript - from .debian import DebianOSModernUtil,DebianOSBaseUtil - ``` - - 5. Press **\[CTRL\]** + **\[O\]** and **\[Enter\]** keys. - 6. Press **\[CTRL\]** + **\[X\]** and **\[Enter\]** keys. - 7. Restart the **walinuxagent.service** service. - 8. Create a custom image out of the VM. - ::: - -:::note -To support the execution of extension scripts, custom images created outside of Azure Marketplace must include the **ProvisionGuestAgent** agent. For additional information, see [Virtual machine extensions and features for Windows](https://docs.microsoft.com/en-us/azure/virtual-machines/extensions/features-windows). -::: -
    Public IP TypeAll - Set to **Static** to ensure that the VM always uses the same public IP. By default, public IPs are **Dynamic** and the address associated to them may change when the VM is powered off. -
    Inbound PortsAll - (Optional) Semi-colon separated list of ports and protocols to open for inbound traffic. Note that by default access from the management VPC is allowed and all ports are open for traffic between Azure App VMs within the sandbox, but this can be changed using the **Allow All Sandbox Traffic** attribute. - -In addition, all outbound traffic is allowed. - -The syntax is: - -`port[single/range]:protocol[tcp(default)/udp]` - -For example: "80;443:tcp;200-220:udp". -:::note -If not specified, the protocol defaults to TCP. -::: -:::tip Tips -- To allow QualiX in-browser connections to the VM from the sandbox, include port "22". -- To set more specific security groups, it is recommended to use the TestShell API's [SetAppSecurityGroups](pathname:///api-docs/2023.3/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Ports** attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md). -::: -
    Custom Tags2G - Semi-colon separated list of up to 9 tags to be applied to all related Azure objects created during the App deployment, such as the sandbox's resource group, VNETs, subnets, NSGs and VMs. Attribute supports the following syntax: [TagName]=[TagValue]; [TagName]=[TagValue]. For example: "Tag1=Val1;Tag2=Val2” -
    Allow All Sandbox TrafficAll - Determines if the App allows inbound traffic from all other Azure Apps in the sandbox. If set to **False**, the App's VM will be isolated. Access from specific Apps or subnets can be defined using the **Inbound Ports** attribute or API. -:::note -By default, this attribute is True, and access is allowed to all ports from all Apps in the sandbox. By default, all ports are open for traffic within the sandbox. -::: -
    Enable IP Forwarding2G - Enables IP forwarding on all network interfaces of the app in order to support virtual appliances like routers and firewalls that are connected to multiple subnets. -
    Autoload2G - Enables the automatic execution of the Autoload command during reservation Setup. -
    Availability Zones2G - Specify the Availability Zone (1, 2, or 3) in which the App’s VM, managed disk and public IP (if available) will be deployed. Leave empty to inherit the Availability Zones defined on the cloud provider resource. For details and supported regions, see [Regions and availability zones](https://learn.microsoft.com/en-us/azure/availability-zones/az-overview). -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-galery-dp-attributes.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-galery-dp-attributes.md deleted file mode 100644 index 16a8ec1a87..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-galery-dp-attributes.md +++ /dev/null @@ -1,224 +0,0 @@ ---- -sidebar_position: 4 -sidebar_label: Azure VM From Gallery Image 2G -hide_table_of_contents: true ---- - -# Azure VM From Gallery Image 2G Deployment Path Attributes - -The following attributes would be used to define the Azure VM From Gallery Image 2nd Gen: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Cloud ProviderName of the Azure cloud provider resource to be used
    Shared Image GalleryName of the shared image gallery to be used to create a VM. The image gallery is listed in the **Shared image galleries** blade of the Azure portal.
    Image DefinitionThe image definition is listed in the **Image definitions** blade of the Azure portal.
    Image VersionName of the image version to be used to create Azure VMs. Use "latest" if version is unavailable.
    Shared Gallery Resource GroupResource group in which the shared image gallery resides.
    Shared Gallery Image Subscription IDThe subscription ID of the shared image gallery. Use "current" if not set.
    VM Size - (Optional) Size of the Microsoft Azure computing resources, including CPU, memory and networking capacity of the VM. Leave it empty to use the default VM Size that was set in the cloud provider resource. For example: "Standard\_A1\_v2”. -:::important -For Azure Apps that will run configuration management operations, specify a VM size of Standard\_A2\_v2 or larger. -::: -For additional information, see the Azure help page [Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes) or use Azure CLI to get a list of your region's supported sizes. -
    Disk Type - Type of disk to use for the VM's operating system. - -- **Standard HDD** -- **Standard SSD** -- **Premium SSD** -- **Standard SSD (zone-redundant storage)** -- **Premium SSD (zone-redundant storage)** -
    Disk Size - (Optional) Disk size (in GB) of the VM's operating system. For example, "17” or "35”. - -If you leave it empty, CloudShell will determine the disk size according to the App's **VM Size**. -
    Data Disks - Semicolon-separated list of data disks that will be added to the VM. - -The syntax is: `disk_name:disk_size,disk_type` - -For example: - -`disk1:10;disk2:20,Premium SSD;disk3:20,Standard SSD (zone-redundant storage)` - -Supported disk types are: - -- **Standard HDD** (default) -- **Standard SSD** -- **Premium SSD** -- **Ultra SSD** -- **Standard SSD (zone-redundant storage)** -- **Premium SSD (zone-redundant storage)** -
    License Type - Optionally apply an OS license you own to the VM. - -Options are: - -- **No License**: None -- **Windows OS**: Windows\_Client -- **Windows Server OS**: Windows\_Server -- **Red Hat Enterprise Linux (RHEL)**: RJE:\_BYOS -- **SUSE Linux Enterprise Server (SLES)**: SLES\_BYOS -
    Enable Boot DiagnosticsEnable Boot diagnostics for the VM. For additional information, see Microsoft Docs' [Azure boot diagnostics](https://docs.microsoft.com/en-us/azure/virtual-machines/boot-diagnostics) article.
    Boot Diagnostics Storage AccountThe name of a storage account where boot diagnostic artifacts will be stored. Enter "Sandbox Storage" to use the storage account created by the sandbox. By default: the managed storage account is used if **Enable Boot Diagnostics** is enabled.
    Resource Group Name(Optional) The name of the predefined resource group where the VM will be deployed. This resource group will contain all cloud resources created for the VM (such as network interfaces, security groups, disks and the VM itself). When the VM tears down, its cloud resources will be deleted from the resource group but the resource group will remain.
    Add Public IP - Set to **True** to use a public IP address to communicate with the VM from outside the virtual network. - -In most cases the public IP address is associated with the VM until the VM is stopped or terminated, after which the IP is no longer available. To ensure that the IP is available to your subscription at any time, reserve it by setting the **Public IP Type** attribute to **Static**. -
    Wait for IPDetermines if the App deployment process waits for the VM to get an IP. Default is **False**.
    Extension Script File / Configuration - (Optional) Custom extension script (PowerShell, Python, batch, etc.) to execute on the deployed VM. - -- **Extension Script File**: Raw URL of the script file -- **Extension Script Configuration**: Space-separated value containing the tool to be used to execute the script, such as Python or PowerShell, the script's file name and extension, and any inputs that need to be passed to the script. For example: `python my_script.py input1` `input2` - - :::note Notes - - For non-PowerShell scripts, the tool to be used to execute the script must be installed on the VM. - - For Linux VMs, you must specify the tool to be used. For Windows VMs, PowerShell is used by default, unless a different tool is specified. - - Extension scripts are not supported on Kali Linux images in Azure Marketplace. To fix this issue, you will need to use a modified version of the Marketplace image: - - 1. Deploy a VM based on the **Kali Linux** Marketplace image. - - 2. Run the following command: - - ```javascript - sudo nano /usr/lib/python3/dist-packages/azurelinuxagent/common/osutil/factory.py - ``` - - 3. Find the line: - - ```javascript - from .debian import DebianOSModernUtil - ``` - - 4. Replace with: - - ```javascript - from .debian import DebianOSModernUtil,DebianOSBaseUtil - ``` - - 5. Press **\[CTRL\]** + **\[O\]** and **\[Enter\]** keys. - 6. Press **\[CTRL\]** + **\[X\]** and **\[Enter\]** keys. - 7. Restart the **walinuxagent.service** service. - 8. Create a custom image out of the VM. - ::: -:::note -To support the execution of extension scripts, custom images created outside of Azure Marketplace must include the ProvisionGuestAgent agent. For additional information, see [Virtual machine extensions and features for Windows](https://docs.microsoft.com/en-us/azure/virtual-machines/extensions/features-windows). -::: -
    Public IP TypeSet to **Static** to ensure that the VM always uses the same public IP. By default, public IPs are **Dynamic** and the address associated to them may change when the VM is powered off.
    Inbound Ports - (Optional) Semi-colon separated list of ports and protocols to open for inbound traffic. Note that by default access from the management VPC is allowed and all ports are open for traffic between Azure App VMs within the sandbox, but this can be changed using the **Allow All Sandbox Traffic** attribute. - -In addition, all outbound traffic is allowed. - -The syntax is: - -`port[single/range]:protocol[tcp(default)/udp]` - -For example: "80;443:tcp;200-220:udp". -:::note -If not specified, the protocol defaults to TCP. -::: -:::tip Tips -- To allow QualiX in-browser connections to the VM from the sandbox, include port "22". -- To set more specific security groups, it is recommended to use the TestShell API's [SetAppSecurityGroups](pathname:///api-docs/2023.3/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Ports** attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md). -::: -
    Custom TagsSemi-colon separated list of up to 9 tags to be applied to all related Azure objects created during the App deployment, such as the sandbox's resource group, VNETs, subnets, NSGs and VMs. Attribute supports the following syntax: [TagName]=[TagValue]; [TagName]=[TagValue]. For example: "Tag1=Val1;Tag2=Val2”
    Allow All Sandbox Traffic - Determines if the App allows inbound traffic from all other Azure Apps in the sandbox. If set to **False**, the App's VM will be isolated. Access from specific Apps or subnets can be defined using the **Inbound Ports** attribute or API. -:::note -By default, this attribute is **True**, and access is allowed to all ports from all Apps in the sandbox. By default, all ports are open for traffic within the sandbox. -::: -
    Enable IP ForwardingEnables IP forwarding on all network interfaces of the app in order to support virtual appliances like routers and firewalls that are connected to multiple subnets.
    AutoloadEnables the automatic execution of the Autoload command during reservation Setup.
    Availability ZonesSpecify the Availability Zone (1, 2, or 3) in which the App’s VM, managed disk and public IP (if available) will be deployed. Leave empty to inherit the Availability Zones defined on the cloud provider resource. For details and supported regions, see [Regions and availability zones](https://learn.microsoft.com/en-us/azure/availability-zones/az-overview).
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-marketplace-dp-attributes.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-marketplace-dp-attributes.md deleted file mode 100644 index aea9b4fbcf..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/azure-marketplace-dp-attributes.md +++ /dev/null @@ -1,256 +0,0 @@ ---- -sidebar_position: 3 -sidebar_label: Azure VM From Marketplace -hide_table_of_contents: true ---- - -# Azure VM From Marketplace Deployment Path Attributes - -The following attributes would be used to define the Azure VM From Marketplace: -:::note -Every VM deployed from a Marketplace image is created with a managed disk, which is deleted when the sandbox ends. -::: -:::important -If you want to deploy a third party application from a Marketplace image, make sure Programmatic Deployment is enabled for the image in the subscription. To enable, log in to Azure and open the Marketplace, find the image and click it, select the Want to deploy programmatically? Get started link at the bottom of the blade that appears. Then, in the Configure Programmatic Deployment blade, scroll down to the bottom, select Enable for the appropriate subscription and click Save. For additional information, see the following Azure help page: [Working with Marketplace Images on Azure Resource Manager](https://azure.microsoft.com/en-us/blog/working-with-marketplace-images-on-azure-resource-manager/). -::: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeAzure shell versionDescription
    Cloud ProviderAllName of the Azure cloud provider resource to be used
    Image PublisherAll - Define the VM image's **Publisher**, **Offer** and **SKU**. -:::note -The Publisher, Offer and SKU must exist in the Azure region where the VM will be deployed. -::: -For typical image properties, see the following Azure help pages: [Linux VM images](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/cli-ps-findimage) and [Windows VM images](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/cli-ps-findimage). -
    Image OfferAllImage Offer
    Image SKUAllImage SKU
    VM SizeAll - (Optional) Size of the Microsoft Azure VM. This parameter determines the CPU, memory and networking capacity of the VM. Leave it empty to use the default VM Size that was set in the cloud provider resource. For example: "Standard\_A1\_v2”. -:::important -For Azure Apps that will run configuration management operations, specify a VM size of Standard\_A2\_v2 or larger. -::: -
    Disk TypeAll - Type of disk to use for the VM's operating system. Possible options depend on the shell version: - -Azure 1G shell: - -- **HDD (default)** -- **SSD** - -Azure 2G shell: - -- **Standard HDD** -- **Standard SSD** -- **Premium SSD** -- **Standard SSD (zone-redundant storage)** -- **Premium SSD (zone-redundant storage)** -
    Disk SizeAll - (Optional) Disk size (in GB) of the VM's operating system. For example, "17” or "35”. - -If you leave it empty, CloudShell will determine the disk size according to the App's **VM Size**. -
    Data Disks2G - Semicolon-separated list of data disks that will be added to the VM. - -The syntax is: `disk_name:disk_size,disk_type` - -For example: - -`disk1:10;disk2:20,Premium SSD;disk3:20,Standard SSD (zone-redundant storage)` - -Supported disk types are: - -- **Standard HDD** (default) -- **Standard SSD** -- **Premium SSD** -- **Ultra SSD** -- **Standard SSD (zone-redundant storage)** -- **Premium SSD (zone-redundant storage)** -
    License Type2G - Optionally apply an OS license you own to the VM. - -Options are: - -- **No License**: None -- **Windows OS**: Windows\_Client -- **Windows Server OS**: Windows\_Server -- **Red Hat Enterprise Linux (RHEL)**: RJE:\_BYOS -- **SUSE Linux Enterprise Server (SLES)**: SLES\_BYOS -
    Enable Boot Diagnostics2G - Enable Boot diagnostics for the VM. For additional information, see Microsoft Docs' [Azure boot diagnostics](https://docs.microsoft.com/en-us/azure/virtual-machines/boot-diagnostics) article. -
    Boot Diagnostics Storage Account2GThe name of a storage account where boot diagnostic artifacts will be stored. Enter "Sandbox Storage" to use the storage account created by the sandbox. By default: the managed storage account is used if **Enable Boot Diagnostics** is enabled.
    Resource Group Name2G(Optional) The name of the predefined resource group where the VM will be deployed. This resource group will contain all cloud resources created for the VM (such as network interfaces, security groups, disks and the VM itself). When the VM tears down, its cloud resources will be deleted from the resource group but the resource group will remain.
    Add Public IPAll - Set to **True** to use a public IP address to communicate with the virtual machine from outside the virtual network. - -In most cases the public IP address is associated with the VM until the VM is stopped or terminated, after which the IP is no longer available. To ensure that the IP is available to your subscription at any time, reserve it by setting the **Public IP Type** attribute to **Static**. -
    Wait for IPAllDetermines if the App deployment process waits for the VM to get an IP. Default is **False**.
    Extension Script File / ConfigurationAll - (Optional) Custom extension script (PowerShell, Python, batch, etc.) to execute on the deployed VM. - -- **Extension Script File**: Raw URL of the script file -- **Extension Script Configuration**: Space-separated value containing the tool to be used to execute the script, such as Python or PowerShell, the script's file name and extension, and any inputs that need to be passed to the script. For example: `python my_script.py input1` `input2` - -:::note Notes -- For non-PowerShell scripts, the tool to be used to execute the script must be installed on the VM. -- For Linux VMs, you must specify the tool to be used. For Windows VMs, PowerShell is used by default, unless a different tool is specified. -- Extension scripts are not supported on Kali Linux images in Azure Marketplace. To fix this issue, you will need to use a modified version of the Marketplace image: - - 1. Deploy a VM based on the **Kali Linux** Marketplace image. - - 2. Run the following command: - - ```javascript - sudo nano /usr/lib/python3/dist-packages/azurelinuxagent/common/osutil/factory.py - ``` - - 3. Find the line: - - ```javascript - from .debian import DebianOSModernUtil - ``` - - 4. Replace with: - - ```javascript - from .debian import DebianOSModernUtil,DebianOSBaseUtil - ``` - - 5. Press **\[CTRL\]** + **\[O\]** and **\[Enter\]** keys. - 6. Press **\[CTRL\]** + **\[X\]** and **\[Enter\]** keys. - 7. Restart the **walinuxagent.service** service. - 8. Create a custom image out of the VM. -::: -
    Public IP TypeAllSet to **Static** to ensure that the VM always uses the same public IP. By default, public IPs are **Dynamic** and the address associated to them may change when the VM is powered off.
    Inbound PortsAll - (Optional) Semi-colon separated list of ports and protocols to open for inbound traffic. Note that by default access from the management VPC is allowed and all ports are open for traffic between Azure App VMs within the sandbox, but this can be changed using the **Allow All Sandbox Traffic** attribute. - -In addition, all outbound traffic is allowed. - -The syntax is: - -`port[single/range]:protocol[tcp(default)/udp]` - -For example: "80;tcp:443;udp:200-220". -:::note -If not specified, the protocol defaults to TCP. -::: -:::tip Tips -- To allow QualiX in-browser connections to the VM from the sandbox, include port "22". -- To set more specific security groups, it is recommended to use the TestShell API's [SetAppSecurityGroups](pathname:///api-docs/2023.3/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the Inbound Ports attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md). -::: -
    Custom Tags2GSemi-colon separated list of up to 9 tags to be applied to all related Azure objects created during the App deployment, such as the sandbox's resource group, VNETs, subnets, NSGs and VMs. Attribute supports the following syntax: [TagName]=[TagValue]; [TagName]=[TagValue]. For example: "Tag1=Val1;Tag2=Val2”
    Allow All Sandbox TrafficAll - Determines if the App allows inbound traffic from all other Azure Apps in the sandbox. If set to False, the App's VM will be isolated. Access from specific Apps or subnets can be defined using the Inbound Ports attribute or API. - -:::note -By default, this attribute is True, and access is allowed to all ports from all Apps in the sandbox. By default, all ports are open for traffic within the sandbox. -::: -
    Enable IP Forwarding2GEnables IP forwarding on all network interfaces of the app in order to support virtual appliances like routers and firewalls that are connected to multiple subnets.
    Autoload2GEnables the automatic execution of the Autoload command during reservation Setup.
    Availability Zones2GSpecify the Availability Zone (1, 2, or 3) in which the App’s VM, managed disk and public IP (if available) will be deployed. Leave empty to inherit the Availability Zones defined on the cloud provider resource. For details and supported regions, see [Regions and availability zones](https://learn.microsoft.com/en-us/azure/availability-zones/az-overview).
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/openstack-glance-dp-attributes.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/openstack-glance-dp-attributes.md deleted file mode 100644 index 69dff66825..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/openstack-glance-dp-attributes.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -sidebar_position: 5 -sidebar_label: OpenStack Deploy Glance Image 2G -hide_table_of_contents: true ---- - -# OpenStack Deploy Glance Image 2G Deployment Path Attributes - -The following attributes would be used to define the OpenStack Deploy Glance Image 2nd Gen: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Cloud ProviderName of the OpenStack cloud provider resource to be used
    Image IDUUID of the image to be used to create the App's Openstack instance. Can be found on Portal in **Compute>Images**>select the image>**ID** value.
    Instance Flavor - (Optional) OpenStack instance Flavor. The instance flavor determines the CPU, memory and networking capacity of the instance. For example: "m1.tiny" or "m1.xlarge". - -Can be found on Portal in **Compute**>**Flavors**>select the flavor>**Flavor Name**. -
    Add Floating IP - Set to **True** to use a static (public) IP address to communicate with the instance from outside the virtual network. Default value is **False**. - -In most cases the floating IP address is associated with the instance until the instance is stopped or terminated, after which the floating IP is no longer available. You can reserve a floating IP in OpenStack to ensure that the IP is available to your subscription at any time. -
    Affinity Group ID - (Optional) UUID of the affinity group ("nova server-group") to which the instance will be associated. Affinity groups determine on which compute nodes to place instances. -:::note -To support the deployment of 'all' OpenStack instances using the same hypervisor, affinity groups with the 'affinity' policy are used. -::: -
    Availability Zone(Optional) Name of the availability zone to which the instance will be associated. Availability zones are used to group network nodes to enhance the availability of network resources.
    Floating IP Subnet IDUUID of the subnet to use for Floating IPs.
    Auto UDEVEnable Linux udev rules to allow new interfaces to be recognized by the OS automatically. When using Windows machines, this attribute should be set to **False**.
    User DataCustom user data to pass to the deployed App instance. For example, some metadata or post-installation script. For details, see this official OpenStack documentation page: [https://docs.openstack.org/nova/rocky/user/user-data.html](https://docs.openstack.org/nova/rocky/user/user-data.html).
    Inbound Ports - Semi-colon separated list of CIDRs, ports and protocols on which to open inbound traffic from outside of the sandbox. -The syntax is `[cidr:][protocol:]port-or-port-range`. For example: `0.0.0.0/0:tcp:80;443;udp:200-220`. -Default CIDR is "0.0.0.0/0". Default protocol is "tcp". -
    Private IPThe IP will be set for the management interface. The IP should be inside the management network ranges. OpenStack doesn't allow to use the same IP address for different instances.
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/vcenter-clone-image-dp-attributes.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/vcenter-clone-image-dp-attributes.md deleted file mode 100644 index 8a0970cfb5..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/vcenter-clone-image-dp-attributes.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -sidebar_position: 8 -sidebar_label: vCenter VM From Image -hide_table_of_contents: true ---- - -# vCenter VM From Image Deployment Path Attributes - -The following attributes would be used to define the vCenter VM From Image: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributevCenter shell versionDescription
    Cloud ProviderAllName of the vCenter cloud provider resource to be used
    vCenter ImageAll - Full path to the vCenter OVF image file, relative to the datacenter. For example: `My-OVF-Images/Image.ovf` -:::note -Path must be accessible to all execution servers. OVF tool must be installed on all execution servers. -::: -
    vCenter NameAllName of the vCenter resource to be used
    vCenter Image ArgumentsAll - (Optional) vCenter-specific arguments to use when deploying the virtual machine. - -Example for OVF: - -`--allowExtraConfig --prop:Hostname=ASAvtest --prop:HARole=Standalone --prop:SSHEnable=True --prop:DHCP=True --net:Management0-0='Office LAN 41' --net:GigabitEthernet0-0='VLAN_access_101'` -
    Behavior During SaveAll - (Applies to the **Save and Restore** paid add-on) The VM's state while the sandbox is being saved. Options are **Remain Powered On** and **Power Off**. - -- **Inherit**: (Default) Uses the setting defined on the vCenter cloud provider resource -- **Remain Powered On**: The VM will remain powered on during the saving state. -- **Power Off**: If the VM was powered on before the sandbox entered the saving state, the VM will shut down (power off) for the duration of the save. - -:::note Notes -- The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](../../../../supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md). -- After save has ended, the VM returns to its state prior to saving, regardless of the behavior during the save. -::: -
    Saved Sandbox StorageAll - (Applies to the **Save and Restore** paid add-on) During the saving process, CloudShell creates a clone of the sandbox's App VMs in this vCenter storage, which CloudShell will later use to restore the VM when the user restores the saved sandbox. See [Save a Sandbox](../../../../../portal/sandboxes/sandbox-workspace/save-sandbox.md) for more information. - -For storage purposes, these VM clones can be stored in a different data storage than the one configured in the **VM Storage** attribute defined on the vCenter cloud provider resource. The storage can be either a datastore or a datastore cluster. For example: datastore1 or clustername/datastore1. -:::note -The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](../../../../supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md). -::: -
    Customization Spec2nd Gen onlyName of the vSphere VM Customization Specification to apply to the App's VM.
    Hostname2nd Gen only - (Only applies to Windows and Linux VMs) The hostname to set on the VM. -:::note -If **Customization Spec** is specified, the value specified in the **Hostname** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a password in the App resource page -::: -
    Private IP2nd Gen only - (Only applies to Windows and Linux VMs) The private static IP to set on the first vNIC of the VM. If there's a default gateway, specify it after the private IP. For example: "192.168.4.124:80.114.1.87" where 80.114.1.87 is the default gateway - -:::note Notes -- If there is no gateway, the .1 IP of the same subnet will be used as the gateway. So, for private IP "192.168.4.124", gateway "192.168.4.1" will be used. -- It is also possible to provide a subnet mask here. For example: "192.168.4.124/24:80.114.1.87" -- If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. -- If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. -- If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. -::: -
    CPU2nd Gen onlyNumber of CPU core s to configure on the VM.
    RAM2nd Gen onlyAmount of RAM (GB) to configure on the VM.
    HDD2nd Gen onlyAllows to add/edit hard disk size to the VM. The syntax is semi-colon separated disk pairs 'Hard Disk Label: Disk Size (GB)'. For example: 'Hard Disk 1:100;Hard Disk 2:200'. Short-hand format is also valid: '1:100;2:200'.
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/vcenter-clone-template-dp-attributes.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/vcenter-clone-template-dp-attributes.md deleted file mode 100644 index 111d655729..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/vcenter-clone-template-dp-attributes.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -sidebar_position: 9 -sidebar_label: vCenter VM From Template -hide_table_of_contents: true ---- - -# vCenter VM From Template Deployment Path Attributes - -The following attributes would be used to define the vCenter VM From Template: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributevCenter shell versionDescription
    Cloud ProviderAllName of the vCenter cloud provider resource to be used
    vCenter TemplateAllPath to the vCenter template to use in the virtual machine's creation. Path is relative to the datacenter and must include the template name, for example: `My-Templates/Template1`
    Behavior During SaveAll - (Applies to the Save and Restore paid add-on) The VM's state while the sandbox is being saved. Options are **Remain Powered On** and **Power Off**. - -- **Inherit**: (Default) Uses the setting defined on the vCenter cloud provider resource -- **Remain Powered On**: The VM will remain powered on during the saving state. -- **Power Off**: If the VM was powered on before the sandbox entered the saving state, the VM will shut down (power off) for the duration of the save. - - -:::note Notes -- The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](../../../../supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md). -- After save has ended, the VM returns to its state prior to saving, regardless of the behavior during the save. -::: -
    Saved Sandbox StorageAll - (Applies to the **Save and Restore** paid add-on) During the saving process, CloudShell creates a clone of the sandbox's App VMs in this vCenter storage, which CloudShell will later use to restore the VM when the user restores the saved sandbox. See [Save a Sandbox](../../../../../portal/sandboxes/sandbox-workspace/save-sandbox.md) for more information. - -For storage purposes, these VM clones can be stored in a different data storage than the one configured in the **VM Storage** attribute defined on the vCenter cloud provider resource. The storage can be either a datastore or a datastore cluster. For example: datastore1 or clustername/datastore1. -:::note -Setting a value in the App template’s attribute will override the value in the Saved Sandbox Storage attribute on the vCenter resource. See [Add VMware vCenter Cloud Provider Resource](../../../../supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md). -::: -
    Customization Spec2nd Gen onlyName of the vSphere VM Customization Specification to apply to the App's VM.
    Hostname2nd Gen only - (Only applies to Windows and Linux VMs) The hostname to set on the VM. -:::note -If **Customization Spec** is specified, the value specified in the **Hostname** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a password in the App resource page -::: -
    Private IP2nd Gen only - (Only applies to Windows and Linux VMs) The private static IP to set on the first vNIC of the VM. If there's a default gateway, specify it after the private IP. For example: "192.168.4.124:80.114.1.87" where 80.114.1.87 is the default gateway - -:::note Notes -- If there is no gateway, the .1 IP of the same subnet will be used as the gateway. So, for private IP "192.168.4.124", gateway "192.168.4.1" will be used. -- It is also possible to provide a subnet mask here. For example: "192.168.4.124/24:80.114.1.87" -- If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. -- If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. -- If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. -::: -
    CPU2nd Gen onlyNumber of CPU core s to configure on the VM.
    RAM2nd Gen onlyAmount of RAM (GB) to configure on the VM.
    HDD2nd Gen onlyAllows to add/edit hard disk size to the VM. The syntax is semi-colon separated disk pairs 'Hard Disk Label: Disk Size (GB)'. For example: 'Hard Disk 1:100;Hard Disk 2:200'. Short-hand format is also valid: '1:100;2:200'.
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/vcenter-clone-vm-dp-attributes.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/vcenter-clone-vm-dp-attributes.md deleted file mode 100644 index 58bce4fb10..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/vcenter-clone-vm-dp-attributes.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -sidebar_position: 6 -sidebar_label: vCenter Clone VM From VM -hide_table_of_contents: true ---- - -# vCenter Clone VM From VM Deployment Path Attributes - -The following attributes would be used to define the vCenter Clone VM from VM: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributevCenter shell versionDescription
    Cloud ProviderAllName of the vCenter cloud provider resource to be used
    vCenter VMAllFull path to the VM that will be used to clone a new VM, relative to the datacenter. For example: `My-Folder/My-VM`
    Behavior During Save (optional)All - (Applies to the **Save and Restore** paid add-on) The VM's state while the sandbox is being saved. Options are **Remain Powered On** and **Power Off**. - -- **Inherit**: (Default) Uses the setting defined on the vCenter cloud provider resource -- **Remain Powered On**: The VM will remain powered on during the saving state. -- **Power Off**: If the VM was powered on before the sandbox entered the saving state, the VM will shut down (power off) for the duration of the save. - -:::note Notes -- The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](../../../../supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md). -- After save has ended, the VM returns to its state prior to saving, regardless of the behavior during the save. -::: -
    Saved Sandbox StorageAll - (Applies to the **Save and Restore** paid add-on) During the saving process, CloudShell creates a clone of the sandbox's App VMs in this vCenter storage, which CloudShell will later use to restore the VM when the user restores the saved sandbox. See [Save a Sandbox](../../../../../portal/sandboxes/sandbox-workspace/save-sandbox.md) for more information. - -For storage purposes, these VM clones can be stored in a different data storage than the one configured in the **VM Storage** attribute defined on the vCenter cloud provider resource. The storage can be either a datastore or a datastore cluster. For example: datastore1 or clustername/datastore1. - -- **Note**: The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](../../../../supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md). -
    Customization Spec2nd Gen onlyName of the vSphere VM Customization Specification to apply to the App's VM.
    Hostname2nd Gen only - (Only applies to Windows and Linux VMs) The hostname to set on the VM. -:::note -If **Customization Spec** is specified, the value specified in the **Hostname** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a password in the App resource page. -::: -
    Private IP2nd Gen only - (Only applies to Windows and Linux VMs) The private static IP to set on the first vNIC of the VM. If there's a default gateway, specify it after the private IP. For example: "192.168.4.124:80.114.1.87" where 80.114.1.87 is the default gateway - -:::note Notes -- If there is no gateway, the .1 IP of the same subnet will be used as the gateway. So, for private IP "192.168.4.124", gateway "192.168.4.1" will be used. -- It is also possible to provide a subnet mask here. For example: "192.168.4.124/24:80.114.1.87" -- If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. -- If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. -- If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. -::: -
    CPU2nd Gen onlyNumber of CPU core s to configure on the VM.
    RAM2nd Gen onlyAmount of RAM (GB) to configure on the VM.
    HDD2nd Gen onlyAllows to add/edit hard disk size to the VM. The syntax is semi-colon separated disk pairs 'Hard Disk Label: Disk Size (GB)'. For example: 'Hard Disk 1:100;Hard Disk 2:200'. Short-hand format is also valid: '1:100;2:200'.
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/vcenter-link-clone-vm-dp-attributes.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/vcenter-link-clone-vm-dp-attributes.md deleted file mode 100644 index 558dce34c0..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/app-template/deployment-path/vcenter-link-clone-vm-dp-attributes.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -sidebar_position: 7 -sidebar_label: vCenter Deploy VM From Linked Clone -hide_table_of_contents: true ---- - -# vCenter Deploy VM From Linked Clone Deployment Path Attributes - -The following attributes would be used to define the VCenter Deploy VM From Linked Clone: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributevCenter shell versionDescription
    Cloud ProviderAllName of the vCenter cloud provider resource to be used
    vCenter VMAllFull path to the VM containing the snapshot that will be used to clone a new VM, relative to the datacenter.
    vCenter VM SnapshotAll - Full path to the virtual machine snapshot that will be used to clone a new VM. For example Snapshot1/Snapshot2 - -This snapshot should be associated with the VM defined in the **vCenter VM** input. -
    Behavior During SaveAll - (Applies to the **Save and Restore** paid add-on) The VM's state while the sandbox is being saved. Options are **Remain Powered On** and **Power Off**. - -- **Inherit**: (Default) Uses the setting defined on the vCenter cloud provider resource -- **Remain Powered On**: The VM will remain powered on during the saving state. -- **Power Off**: If the VM was powered on before the sandbox entered the saving state, the VM will shut down (power off) for the duration of the save. - - -:::note Notes -- The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](../../../../supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md). -- After save has ended, the VM returns to its state prior to saving, regardless of the behavior during the save. -::: -
    Saved Sandbox StorageAll - (Applies to the **Save and Restore** paid add-on) During the saving process, CloudShell creates a clone of the sandbox's App VMs in this vCenter storage, which CloudShell will later use to restore the VM when the user restores the saved sandbox. See [Save a Sandbox](../../../../../portal/sandboxes/sandbox-workspace/save-sandbox.md) for more information. - -For storage purposes, these VM clones can be stored in a different data storage than the one configured in the **VM Storage** attribute defined on the vCenter cloud provider resource. The storage can be either a datastore or a datastore cluster. For example: datastore1 or clustername/datastore1. -:::note -The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](../../../../supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md). -::: -
    Customization Spec2nd Gen onlyName of the vSphere VM Customization Specification to apply to the App's VM.
    Hostname2nd Gen only - (Only applies to Windows and Linux VMs) The hostname to set on the VM. -:::note -If **Customization Spec** is specified, the value specified in the **Hostname** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a password in the App resource page -::: -
    Private IP2nd Gen only - (Only applies to Windows and Linux VMs) The private static IP to set on the first vNIC of the VM. If there's a default gateway, specify it after the private IP. For example: "192.168.4.124:80.114.1.87" where 80.114.1.87 is the default gateway - -:::note Notes -- If there is no gateway, the .1 IP of the same subnet will be used as the gateway. So, for private IP "192.168.4.124", gateway "192.168.4.1" will be used. -- It is also possible to provide a subnet mask here. For example: "192.168.4.124/24:80.114.1.87" -- If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. -- If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. -- If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. -::: -
    CPU2nd Gen onlyNumber of CPU core s to configure on the VM.
    RAM2nd Gen onlyAmount of RAM (GB) to configure on the VM.
    HDD2nd Gen onlyAllows to add/edit hard disk size to the VM. The syntax is semi-colon separated disk pairs 'Hard Disk Label: Disk Size (GB)'. For example: 'Hard Disk 1:100;Hard Disk 2:200'. Short-hand format is also valid: '1:100;2:200'.
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/index.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/index.md deleted file mode 100644 index 256806dc41..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-app-templates/index.md +++ /dev/null @@ -1,94 +0,0 @@ -# Managing App Templates - -This article describes the administrative actions needed to configure App templates in CloudShell that are based on a cloud provider resource. For additional information, see [Apps Overview](../../../intro/features/apps-overview.md). - -## Viewing App templates - -In the **Apps** page, you can view the App templates you are permitted to access. - -To view existing App templates: - -- In the **Manage** dashboard, in the left sidebar, click **Apps**. - The **Apps** page is displayed, listing the App templates that were previously added to CloudShell. - -You can use the toolbar to sort the App templates according to **Name** or Modified time (last modified App at the top), and to filter them according to a specific **Category** or **Domain**. - -## Adding App templates - -When adding a new App template, you need to configure the settings of the virtual machine and application you want to deploy. To add App templates, at least one cloud provider resource must be defined. To define private cloud provider resources, see [Private Cloud Provider Support in CloudShell](../../../admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/index.md), and for public cloud providers, see [Public Cloud Provider Support in CloudShell](../../../admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/index.md). - -If your CloudShell deployment includes multiple sites, it is recommended to configure the deployment process of the App to be carried out in the domain that is physically closest to the cloud provider. For additional information, see [Managing Private Cloud Apps in Domains](../../../admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md) or [Managing Public Cloud Apps in Domains](../../../admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/managing-public-cloud-apps-in-domains.md). - -:::note Notes for public cloud Apps -- By default, all public cloud Apps of the same type in the same sandbox are deployed within the same subnet and therefore are connected to each other and isolated from other sandboxes. However, using the Subnet service, blueprint designers can set up multiple subnet networks in the sandbox, instead of having one default subnet for all the Apps of the same cloud provider. For details, see [Subnet Connectivity](../../../admin/setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/index.md). -- Public cloud App deployment requires the management network and subnet(s) to be prepared in advance as part of the sandbox Setup process. CloudShell's out-of-the-box Setup process does this. However, the blueprint must include at least one public cloud App to initiate the Setup script's connectivity preparation process for deployment in that public cloud. -::: - -**To add a new App template:** - -Follow the instructions [here](./manage-app-templates/app-template/adding-app-template). - - -## Cloning App templates - -This section explains how to clone an existing App template in the Apps page. You can use this method, for example, if you want to create an App template that is largely based on an existing one but requires several modifications. - -To clone an App template: - -1. In the Manage dashboard, in the left sidebar, click Apps. - - The Apps page is displayed. - -2. Click the App template's menu button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton.png) and select Clone. - - The cloned App template is added to the Apps page under the original App template. For example: - - ![](/Images/Admin-Guide/Inventory-Operations/AppsClone.png) - - -## Editing App templates - -This option is enabled using the `RestrictEditToCreatingDomain` key. - -To edit an App template: - -1. In the Manage dashboard, in the left sidebar, click Apps. - - The Apps page is displayed. - -2. Click the Name of the App template. - - Or- - - Click the App template's menu button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton.png) and select Edit. - - The App template's configuration wizard is displayed in the General page. - -3. Edit the App template’s settings. For more information, see [Adding App templates](../../../admin/cloudshell-manage-dashboard/manage-app-templates/index.md#adding-app-templates). -4. Click Save. - - -## Deleting App templates - -This option is enabled using the `RestrictEditToCreatingDomain` key. - -To delete App templates: - -1. In the Manage dashboard, in the left sidebar, click Apps. - - The Apps page is displayed. - -2. Select the check boxes of the required App templates. -3. Click the **Delete** button in the toolbar. - - Or- - - Click the App template's menu button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton.png) and select Delete. - - -## Related Topics - -- [Manage Dashboard Overview](../../../admin/cloudshell-manage-dashboard/manage-dashboard-overview.md) -- [Managing Public Cloud Apps in Domains](../../../admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/managing-public-cloud-apps-in-domains.md) -- [Managing Private Cloud Apps in Domains](../../../admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md) -- [Apps in Blueprints](../../portal/blueprints/creating-blueprints/apps/) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-dashboard-overview.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-dashboard-overview.md deleted file mode 100644 index cbc71493ac..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/manage-dashboard-overview.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Manage Dashboard Overview - -The **Manage** dashboard enables CloudShell system administrators and domain administrators to carry out various administrative tasks. This includes creating categories to help organize items in catalogs, viewing and managing execution servers, creating blueprint templates, adding orchestration scripts and drivers to be used in blueprints, and viewing licensing information. - -## Navigating the Manage dashboard - -In the image below, hover over an area or option to learn more about it, or use the table that follows. - -![](/Images/CloudShell-Portal/Manage/ManageDashboard_1_.png) - -The dashboard's areas are arranged as follows: - -| Area | Description | -| --- | --- | -| 1 | Run a free text search for items in the dashboard. | -| 2 | Switch between the different pages in the **Manage** dashboard. | -| 3 | Depending on the dashboard, the toolbar may include filtering and sorting options, as well as buttons to add, delete and rearrange the items in the dashboard. | -| 4 | View and manage the dashboard items. | - - -## Related Topics - -- [Managing Shells](../../admin/cloudshell-manage-dashboard/managing-shells.md) -- [Managing App Templates](../../admin/cloudshell-manage-dashboard/manage-app-templates/index.md) -- [Managing Categories](../../admin/cloudshell-manage-dashboard/managing-categories.md) -- [Licensing](../../admin/cloudshell-manage-dashboard/licensing.md) -- [Setting Up Execution Servers to Run Commands](../../admin/cloudshell-execution-server-configurations/setting-up-execution-servers-to-run-commands.md) -- [Maintenance Window](../../admin/cloudshell-manage-dashboard/maintenance-window.md) -- [Blueprint Templates](../../admin/cloudshell-manage-dashboard/blueprint-templates.md) -- [Automation Overview](../../admin/cloudshell-manage-dashboard/managing-automation/automation-overview.md) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/_category_.json deleted file mode 100644 index 977b48d362..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Managing Automation", - "position": 10 -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/associating-automation-to-domains.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/associating-automation-to-domains.md deleted file mode 100644 index 1a7d3aae8f..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/associating-automation-to-domains.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Associating Automation to Domains - -CloudShell supports multi-tenancy for CloudShell components (scripts, resources, services, and Apps), allowing users in other domains to also use them. However, in the Global domain, you can manage all components regardless of their association to any particular domain. - -## Scripts in multiple domains - -When you add a script, it is associated to the domain you are currently in. - -- To expose a script to all domains, add the script to the Global domain. -- If you added a script it to a blueprint or resource that has additional domains, the script will be accessible in those domains as well. - -## Resources in multiple domains - -To enable users of a specific domain to access and use a resource, you must associate that resource to the domain. - -- If you add a resource to a blueprint that is associated with multiple domains, the resource will be accessible in those domains as well. -- You can add a resource directly to an additional domain through Resource Manager. See [Adding resources to a domain](../../../admin/cloudshell-identity-management/cloudshell-domains/addingremoving-resources-from-a-domain.md#adding-resources-to-a-domain). - -## Services and Apps in multiple domains - -### Services - -When you import a service shell, most shells are automatically assigned a default service category which is associated with the Global domain. For custom shells, this may not be true. - -To expose a service to users of a non-Global domain, either associate the service to a category that is assigned to that domain or associate the service's category to that domain. - -- For 1st gen service shells: modify the category(s) in the shell project’s configuration files to add a new category(s). See the CloudShell Dev Guide's [Migrating Shells to Python 3](../../../devguide/reference/migrate-shells-to-py3.md). - -- For 2nd gen service shells: See the CloudShell Dev Guide's [Associating categories to a service shell](../../../devguide/developing-shells/customize-shells.md#associating-categories-to-a-service-shell). - - -### Apps - -By default, all Apps are associated with the **Applications** category, which exposes those Apps in the Global domain.To expose an App in a non-Global domain, associate the App to a category in that domain. However, you also need to associate the App's deployment to that domain. To learn how to do this, see [Managing Public Cloud Apps in Domains](../../../admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/managing-public-cloud-apps-in-domains.md) or [Managing Private Cloud Apps in Domains](../../../admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md). diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/automation-overview.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/automation-overview.md deleted file mode 100644 index 76cd98ef70..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/automation-overview.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Automation Overview - -The Automation process is enabled in the **Sandbox** workspace and is invoked during: - -- **Blueprint Orchestration**: You can use automation at the blueprint level when setting up and cleaning up the sandbox. You can also define automation that the user can use during the lifetime of the blueprint. -- **Resource Automation**: You can use the resource commands to integrate the same capabilities within the resource that can be reused in multiple blueprints. - -Scripts and drivers are used in the automation process, and their functions vary. For more details, see: - -- [Managing Assets](./managing-assets.md) -- [Managing Drivers](./managing-drivers.md) (hidden by default, applies to 1st Gen shells only) -:::warning Important -The **Drivers** management page is only visible if you set the HideDriversTabInManage key. This tab is only relevant when developing 1st Gen Shells. For details, see [Customer Configuration Keys Repository](../../setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/general.md#show-the-drivers-management-page). -::: -CloudShell supports associating scripts and drivers with different domains. For more details, see: - -- [Associating Automation to Domains](./associating-automation-to-domains.md) - -## Related Topics - -- [Run Commands](../../../portal/sandboxes/sandbox-workspace/run-commands.md) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/index.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/index.md deleted file mode 100644 index 548885f11c..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/index.md +++ /dev/null @@ -1,20 +0,0 @@ -# Managing Automation - -The Automation process is enabled in the **Sandbox** workspace and triggered during: - -- **Blueprint Orchestration**: You can use automation at the blueprint level when setting up and tearing down the sandbox. You can also define automation that the user can use during the lifetime of the sandbox. -- **Resource Automation**: You can run resource commands that perform different actions on the resource, including power on, power off, and deploy. - -Scripts and drivers are used in the automation process, and their functions vary. For more details, see: - -- [Managing Assets](../managing-automation/managing-assets.md) -- [Managing Drivers](../managing-automation/managing-drivers.md) (hidden by default, applies to 1st Gen shells only) - - :::warning Important - The Drivers management page is only visible if you set the HideDriversTabInManage key. This tab is only relevant when developing 1st Gen Shells. For details, see [Customer Configuration Keys Repository](../../setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/general.md#show-the-drivers-management-page). - ::: - - -CloudShell supports associating scripts and drivers with different domains. For more details, see: - -- [Associating Automation to Domains](./associating-automation-to-domains.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/managing-assets.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/managing-assets.md deleted file mode 100644 index a20d51c7cc..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/managing-assets.md +++ /dev/null @@ -1,421 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Managing Assets - -## Assets overview - -An asset is a script that runs automation in CloudShell sandboxes. CloudShell supports two types of scripts: - -- **Python scripts** that run on the resource/App/blueprint level: A script is a single command on the blueprint or resource/App level. You can add many scripts to your blueprint or resources. CloudShell runs the scripts, which actually are processed in an external environment such as Python, which then returns the results to CloudShell. - -*Sandbox environment automation and enhanced orchestration is available with CloudShell Premium Tier.* - -- **Repository Assets** are Configuration Management scripts (bash/PowerShell) or Ansible playbooks that run on resources. For Configuration Management that runs on deployed Apps, see [Adding App templates](../../../admin/cloudshell-manage-dashboard/manage-app-templates/app-template/adding-app-template.md). -:::note -For brevity, the term "script" denotes both Python scripts and repository assets, unless indicated otherwise. -::: -### Out-of-the-box orchestration scripts - -CloudShell provides the following orchestration scripts out-of-the-box. These scripts are included in the [CloudShell Sandbox Template](../../../admin/cloudshell-manage-dashboard/blueprint-templates.md#cloudshell-sandbox-template) but can also be added and removed from blueprints as appropriate. - -- Default Sandbox Setup -- Default Sandbox Teardown -- Default Sandbox Save -- Default Sandbox Restore - -To learn how to develop scripts for CloudShell, see [Getting Started with Orchestration Scripts](../../../devguide/develop-orch-scripts/getting-started-with-orch-scripts.md). - -## Viewing scripts - -In the **Manage** dashboard, you can view a repository of the blueprint and resource scripts that were uploaded in your domain. You can filter, sort, and search the repository for scripts. -:::tip -Global admins can see all scripts in CloudShell, including scripts that were added to other domains, while domain admins can only see scripts that were added to the domain they're currently in. -::: -**To view existing blueprint and resource scripts:** - -1. In the **Manage** dashboard, from the left sidebar, select **Assets \> Blueprint**, or **Assets \> Resource**. - - The respective script catalog opens, displaying the blueprint or resource scripts/assets that were previously added to CloudShell, and related details, including: **Name**, **Type**, **Version**, **Blueprints** or resource **Models**, **Type**, **Domains**, and **Modified** by date and time. - :::note - Clicking **Manage \> Assets** opens the **Script/Blueprint** catalog by default. - ::: -2. To filter the list by domain, from the **Domain** dropdown list, select **All Domains** or a particular domain. -3. To sort the list, from the **Sort By** dropdown list, select **Modified** to sort the list by date and time in chronological order, or select **Name** to sort the list by script name in alphabetical order. -4. To search for particular scripts, type the relevant text in the search box ![](/Images/CloudShell-Portal/Manage/Manage-Scripts-Drivers/Searching-for-a-script-or_2_114x27.png) at the top of the left sidebar. For example, you can search by name, type, model, or owner. - -## Adding scripts - -Scripts give you the flexibility to customize a blueprint and make extra features available, for example, adding specialized commands that can be run in a sandbox. You can add commands through Python scripts and upload them to CloudShell Portal to be used when configuring blueprint orchestration, including PY, PYC, and ZIP files containing several Python files. - -Use the steps in the following procedure to add blueprint and resource scripts to the CloudShell Portal. - -:::note Notes -- The script is added to the domain you are currently in. To expose the script to all domains, add the script in the Global domain -- By default, new scripts are added into CloudShell as Python 3 scripts. Therefore, if you're adding a Python 2 script, make sure to change the script's **Type**, as explained in [Editing scripts](../../../admin/cloudshell-manage-dashboard/managing-automation/managing-assets.md#editing-scripts). -::: -**To add blueprint and resource scripts:** - -1. In the **Manage** dashboard, from the left sidebar, select **Assets \> Blueprint** or **Assets \> Resource** to open the respective script catalog. - :::note - Repository assets only apply to resource-level components. - ::: -2. In the toolbar, click **\+ Add Python Script** to add a Python script or **\+ Add Repository Asset** to add a Configuration Management script/playbook. - - A dialog box is displayed, prompting you to select a script to upload. - -3. Browse and select a script file to upload to CloudShell, and click **Open**. - - The **Uploading Completed** message is displayed at the top of the script catalog, indicating the upload status. When completed, the **Edit** button is displayed on the right. For more information, see [Editing scripts](../../../admin/cloudshell-manage-dashboard/managing-automation/managing-assets.md#editing-scripts). - - -## Editing scripts - -This section explains how to edit a Python script or repository asset's default parameters. -:::note -Global admins can edit any script in CloudShell while domain admins can only edit scripts that were added to the domain they are currently in. -::: -**To edit Python scripts:** - -1. In the **Manage** dashboard, from the left pane, select **Assets \> Blueprint** or **Assets \> Resource** to open the respective script catalog. - -2. Click the **Name** of the script you want to edit. - - Or- - - Click the script's More actions button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton_22x20.png) and select **Edit**. - - The **Edit Script** dialog box for the respective blueprint or resource script is displayed. - -3. Edit the relevant fields, as described in the following table: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescription
    Script FileThe script file. To replace the current script file with another one, browse to the location where the required PY or PYC file is located, select the file, and click **Open**.
    NameThe name of the script. Edit as required.
    Script Type - From the dropdown list, select an option: - -- Default -- Setup -- Teardown -- Save -- Restore - -If you select **Setup**, **Teardown**, **Save**, or **Restore**, you cannot specify Category, Alias or parameters for the script. - -:::note -This field is relevant for blueprint scripts only. -::: -
    VersionType the script version number. Remember to increment the number the next time you upload a new version of the script.
    Visibility - (Hidden for blueprint scripts that have a Script Type defined) Determines who can see the script in the diagram's **Commands** pane: - -- **Admin Only**: Only domain admins and system admins -- **Everyone**: (Default) All user types -
    Type - Select the Python version of the script. Options are **Python 2** or **Python 3**. - -The default setting is Python 3, but the CloudShell admin can change it via the `DefaultPythonVersion` configuration key. - -:::note Notes -- This does not affect existing scripts, whose Python version remains as is. -- Python 3 automation requires Microsoft Visual C++ Redistributable 2015 x86 and x64 to be installed on the Execution Server(s). -::: -
    DescriptionType the relevant text to clearly describe the script.
    Models - (Relevant for resource scripts) From the dropdown list, select the relevant resource models associated with the resource script. - -Associate App installation scripts to the relevant **Installation Options** model(s). -
    Blueprints(Relevant for blueprint scripts) Lists the blueprints that use the script. This field is only visible if the script is included in any blueprints.
    CategoryType the category name. In an active sandbox, in the **Blueprint Commands** pane, the scripts are arranged according to these categories.
    AliasThe alias for the script. Edit as required. In an active sandbox, in the **Blueprint Commands** pane, the scripts appear under this alias.
    - -4. To add additional parameters to the script, click the **Add Parameter** link at the bottom of the dialog box, and type the **Name**, **Default Value**, and **Description** of the parameter. Make sure you add parameters that are relevant for your script. - - These parameters will be available for editing when running the script in an active sandbox. - - To edit and delete the script parameters, click the adjacent **Edit** or **Delete** button. - -5. Click **Apply** to apply the changes and keep the window open. -6. Click **Save** to save the changes and close the window. - - The updated details of the edited script are displayed in the relevant blueprint or resource script catalog. - - -**To edit repository assets:** - -1. In the **Manage** dashboard, from the left pane, select **Assets \> Resource** to open the Resource Assets catalog. - -2. Click the **Name** of the repository asset you want to edit. - - Or- - - Click the asset's More actions button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton_22x20.png) and select **Edit**. - - The **Edit Script** dialog box is displayed. - -3. Edit the relevant fields, as described in the following table: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescription
    NameThe name of the asset. Edit as required.
    Visibility - Determines who can see the asset in the diagram's **Commands** pane: - -- **Admin Only**: Only domain admins and system admins -- **Everyone**: (Default) All user types -
    DescriptionType the relevant text to clearly describe the asset.
    Select Tool - Select the resource's installation and configuration tool. - -- **Script**: Select the custom script to run (PowerShell, bash or sh). -- **Ansible**: (Intended for customers who are already using Ansible) Select the Ansible playbook to run. - - -Depending on the selection, additional options may become available. -
    Connection Method - The method to use to connect to the resource. - -Select: - -- **SSH** if the resource has a Linux OS -- **Windows Remote Management** if the resource has a Windows OS -:::note -To run configuration management on a Windows machine, the machine must have WinRM enabled. For details, see [Enable WinRM on Windows VMs to Support Configuration Management](../../../devguide/enable-winrm-on-win-vm-for-cfg-mng.md). -::: -
    URL - Details of the Ansible playbook or custom script. Unlike for Apps, resources support only one Configuration Management script or playbook. - -- **URL**: Raw URL of the Ansible playbook or ZIP file, or custom script on the online repository (GitHub, GitLab and BitBucket are supported). URL must be accessible to the Execution Servers. -:::tip -The URL can accept parameters defined on the App, enabling you to test new versions of scripts without affecting consumer-ready versions. For example, you can have an App everyone is using, but if you want to test a version you're developing, simply change the value of the URL parameter in the test blueprint. - -- To use parameters, specify the parameter name in curly brackets (for example: \{branch\}). -- If the App has this parameter, CloudShell will replace the \{branch\} with its value during execution. -- If the parameter is missing, CloudShell will replace \{branch\} with an empty string. -- If you are using a global input, customers would be well advised to set a default value on the global input -::: -
    - -For GitHub, specify the raw URL. For example: - -```javascript -https://raw.githubusercontent.com/.../site.yml -``` -
    -
    - -For GitLab, specify the API endpoint in the format: - - -```javascript -https://gitlab.com/api/v4/projects/{Project ID}/repository/files/testsharding%2Eyml/raw?ref=master -``` - -Where: - -- Each special character that the file contains has to be encoded. In the example above - "%2E” is an encoded point (".”) - -- The ref value is the branch name (master for this example) -
    - -
    - -For BitBucket Data Center (on premise), use the following URL format: - - -```javascript -http://{datacenter server IP}/rest/api/1.0/projects/{projectKey}/repos/{repository name}/raw/testsharding.yml -``` -
    -
    - -For BitBucket Cloud, use one of the following: - - -- For source code files, specify the API endpoint: - -```javascript -https://api.bitbucket.org/2.0/repositories/{username}/{repository name}/src/{GUID- the Commit hash string} /testsharding.yml -``` - -- For download files (files residing in the repository's "Downloads" folder), specify this endpoint: - -```javascript -https://api.bitbucket.org/2.0/repositories/{username}/{repository name}/downloads/site.yml -``` -
    -
    User/Password(For private repositories) Access credentials or token to the script/playbook's online repository.
    Token - (For private repositories) Access token to the script/playbook's online repository. - -For GitHub and GitLab, specify the API token. For BitBucket Data Center, specify the personal access token. -
    Inventory Groups - (For Ansible) Specify the host groups for the Configuration Management to be installed, separated by semicolons (;), thus allowing plays that target these groups to run on the resource. - -For example: `Servers/AppServers;Servers/DBServers` -
    ModelsFrom the dropdown list, select the relevant resource models associated with the asset.
    CategoryType the category name. In an active sandbox, in the **Resource Commands** pane, the resource is arranged according to these categories.
    AliasThe alias for the repository asset. Edit as required. In an active sandbox, in the **Resource Commands** pane, the asset appears under this alias.
    - -4. To add additional parameters to the asset, click the **Add Parameter** link at the bottom of the dialog box, and type the **Name**, **Default Value**, and **Description** of the parameter. Make sure you add parameters that are relevant for your asset. - - These parameters will be available for editing when running the asset in an active sandbox. - - To edit and delete the asset parameters, click the adjacent **Edit** or **Delete** button. - -5. Click **Apply** to apply the changes and keep the window open. -6. Click **Save** to save the changes and close the window. - - The details of the update asset are displayed in the Resource Assets catalog. - - -## Downloading scripts - -You can download uploaded scripts to save them in your system. -:::note -Global admins can download any script in CloudShell while domain admins can only download scripts that were added to the domain they are currently in. -::: -**To download blueprint and resource scripts:** - -1. In the **Manage** dashboard, from the left pane, select **Assets \> Blueprint** or **Assets \> Resource**. - - The respective blueprint or resource script catalog is displayed. - -2. Click the script's More actions button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton_27x26.png) and select **Download**. - - A dialog box is displayed, prompting you to open or save the file. - - -## Deleting scripts - -You can delete scripts you no longer require. -:::note -Global admins can delete any script in CloudShell while domain admins can only delete scripts that were added to the domain they are currently in. -::: -**To delete scripts:** - -1. In the **Manage** dashboard, from the left pane, select **Assets \> Blueprint** or **Assets \> Resource**. - - The respective blueprint or resource script catalog is displayed. - -2. Select the check boxes next to the relevant scripts that you want to delete. -3. In the toolbar, click the **Delete Selected** button. - - Or- - - Click the script's More actions button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton_27x26.png) and select **Remove**. - - A message is displayed, prompting you to confirm the deletion. - - The selected scripts are removed from the respective blueprint or resource script catalog. - - -## Requirements, script dependencies, virtual environments - -Each Python script's dependencies are listed in the `requirements.txt` file that is included in the zip file that contains the script. The dependencies are installed on the execution server by the pip installation when CloudShell prepares the Python virtual environment for the script. To use offline execution servers, the admin will need to perform several additional configurations. - -For additional information, see [What are Python Virtual Environments?](../../cloudshell-execution-server-configurations/setting-up-python-virtual-environments/what-are-python-virtual-environments.md). - -## Related Topics - -- [Creating Blueprints](../../../portal/blueprints/creating-blueprints/index.md) -- [Create Blueprint Commands](../../../portal/blueprints/creating-blueprints/create-blueprint-commands.md) -- [Configure Blueprint Orchestration](../../../portal/blueprints/creating-blueprints/configure-orchestration.md) -- [Run Commands](../../../portal/sandboxes/sandbox-workspace/run-commands.md) -- [Run App Commands](../../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md) -- [CloudShell Sandbox Template](../blueprint-templates.md#cloudshell-sandbox-template) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/managing-drivers.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/managing-drivers.md deleted file mode 100644 index cad59e163f..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-automation/managing-drivers.md +++ /dev/null @@ -1,163 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Managing Drivers -:::warning Important -The **Drivers** management page is only visible if you set the HideDriversTabInManage key. This tab is only relevant when developing 1st Gen Shells. For details, see [Customer Configuration Keys Repository](../../setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/general.md#show-the-drivers-management-page). -::: -## Drivers overview - -In CloudShell, a driver is a group of commands that can be associated with a blueprint or resource. Each blueprint or resource can have one driver associated with it. Blueprint drivers are developed in CloudShell Authoring while resource drivers can also be developed in Python, on their own or within Shells. To learn more about Shells, see [Managing Shells](../managing-shells.md). -:::note -Resource drivers are supported for backwards compatibility only. -::: -CloudShell manages the life cycle of the driver, where it: - -- **Initializes** the driver, whereby it allows the driver to do some setup initialization -- Performs **Cleanup** at the end of driver life cycle, whereby it allows the driver to free system resources for which the driver is no longer required -- Preserves the **State** of the driver commands - -## Viewing drivers - -In the **Manage** dashboard, you can view a repository of the blueprint and resource drivers that were uploaded in your domain. You can filter, sort, and search the repository for drivers. - -**To view existing blueprint and resource drivers:** - -1. In the **Manage** dashboard, from the left sidebar, select **Drivers \> Blueprint**, or **Drivers \> Resource**. - - The respective driver catalog opens, displaying the blueprint or resource drivers that were previously added to CloudShell, and related details, including: **Name**, **Type**, **Version**, **Blueprints** or resource **Models**, **Domains**, and **Modified** by date, time, and user name. - :::note - Clicking Manage > Drivers opens the Driver/Blueprint catalog by default. - ::: -2. To filter the list by domain, from the **Domain** dropdown list, select **All Domains** or a particular domain. -3. To sort the list, from the **Sort By** dropdown list, select **Modified** to sort the list by date and time in chronological order, or select **Name** to sort the list by driver name in alphabetical order. -4. To search for particular drivers, type the relevant text in the search box ![](/Images/CloudShell-Portal/Manage/Manage-Scripts-Drivers/Searching-for-a-script-or_2.png) at the top of the left sidebar. For example, you can search by name, type, model, or owner. - -## Adding drivers - -You can add drivers to resources or blueprints to add commands that can be run in a sandbox. Drivers can be developed using CloudShell Authoring or Python scripts that comply with the rules defined by CloudShell. To learn how to create Python scripts, see the [Getting Started with Orchestration Scripts](../../../devguide/develop-orch-scripts/getting-started-with-orch-scripts.md). -:::note -Python drivers may have dependencies they need to use in order to run. For additional information, see [Requirements, driver dependencies, virtual environments](../../../admin/cloudshell-manage-dashboard/managing-automation/managing-drivers.md#requirements-driver-dependencies-virtual-environments). -::: -You can also automate the execution of Python scripts using the API. For details about automating scripts, see [CloudShell Automation API](../../../api-guide/shell-dev-blueprint-design-api/cs-automation-api). - -You can upload the following CloudShell Authoring and Python drivers to the CloudShell Portal: - -- For resources, you can add DLL CloudShell Authoring drivers and ZIP files with Python drivers - :::note - Python drivers may have dependencies they need to use in order to run. For additional information, see [Requirements, driver dependencies, virtual environments](../../../admin/cloudshell-manage-dashboard/managing-automation/managing-drivers.md#requirements-driver-dependencies-virtual-environments). - ::: -- For blueprints, you can add DLL CloudShell Authoring drivers - :::note - The driver will be added to the domain you are currently in. To expose the driver to all domains, add the driver to the Global domain. - ::: -**To add blueprint and resource drivers:** - -1. In the **Manage** dashboard, from the left sidebar, select **Drivers \> Blueprint** or **Drivers \> Resource** to open the respective driver catalog. -2. In the toolbar, click **\+Add New Driver**. - - A dialog box is displayed, prompting you to select a driver to upload. - -3. Browse and select a driver file to upload to CloudShell, and click **Open**. - - The **Uploading Completed** message is displayed at the top of the driver catalog, indicating the upload status. When completed, the **Edit** button is displayed on the right. For more information, see [Editing drivers](#editing-drivers). - :::note - In the driver catalog, you can easily identify the driver type. The driver names are marked by the respective **Python** or **CloudShell Authoring** icon, and the **Type** column displays the driver type. - ::: - -## Editing drivers - -You can edit a driver to modify its default parameters. - -**To edit blueprint and resource drivers:** - -1. In the **Manage** dashboard, from the left sidebar, select **Drivers \> Blueprint** or **Drivers \> Resource** to open the respective driver catalog. -2. Click the **Name** of the driver you want to edit. - - Or- - - Click the driver's More actions button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton.png) and select **Edit**. - - The **Edit Driver** dialog box for the respective blueprints or resource driver is displayed. - -3. Edit the relevant fields, as described in the following table. For each driver, additional read-only fields are displayed and vary per driver type and related functions. - - | Field | Description | - | --- | --- | - | Driver File | The driver file. To replace the current driver file with another one, browse to the location where the required file is located, select the file (DLL file for blueprint drivers, or zip, py, or pyc file for resource drivers), and click **Open**. | - | Name | The name of the driver. Edit as required. | - | Version | The driver version number is automatically generated by the system. The number will be automatically incremented with every new version of the driver. | - | Description | Type the relevant text to clearly describe the driver. | - | Models | (Relevant for resource drivers) From the dropdown list, select the relevant resource models to associate the resource driver to. After you upload the resource driver, you will need to associate it to its intended resource models.
    To associate drivers to resource models via Resource Manager, see [Associating a driver to a resource model](../../../admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/defining-the-resource-data-model.md#associating-a-driver-to-a-resource-model). | - -4. Click **Apply** to apply the changes and keep the window open. -5. Click **Save** to save the changes and close the window. - - The updated details of the edited driver are displayed in the relevant blueprint or resource driver catalog. - - -## Activating resource drivers - -After you upload the resource driver and you specify the resource models for it, you can then associate this driver with the existing inventory resources that do not have drivers. - -**To activate a resource driver:** - -1. In the **Manage** dashboard, from the left sidebar, select **Drivers \> Resource**. - - The resource driver catalog is displayed. - -2. Click the driver's More actions button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton.png) and select **Set as active**. - - A dialog box is displayed, prompting you to confirm. - - A confirmation message is displayed, indicating the number of resources updated with this driver. - - -## Downloading drivers - -**To download blueprint and resource drivers:** - -1. In the **Manage** dashboard, from the left sidebar, select **Drivers \> Blueprint** or **Drivers \> Resource**. - - The respective blueprint or resource driver catalog is displayed. - -2. Click the driver's More actions button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton.png) and select **Download**. - - A dialog box is displayed, prompting you to open or save the file. - - -## Deleting drivers - -**To delete drivers:** - -1. In the **Manage** dashboard, from the left sidebar, select **Drivers \> Blueprint** or **Drivers \> Resource**. - - The respective blueprint or resource driver catalog is displayed. - -2. Select the check boxes next to the relevant drivers that you want to delete. -3. In the toolbar, click the **Delete Selected** button. - - Or- - - Click the script's More actions button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton.png) and select **Remove**. - - A message is displayed, prompting you to confirm the deletion. - - The selected drivers are removed from the respective blueprint or resource driver catalog. - - -## Requirements, driver dependencies, virtual environments - -Each Python driver's dependencies are listed in the `requirements.txt` file that is included in the zip file that contains the driver. The dependencies are installed on the execution server by the pip installation when CloudShell prepares the Python virtual environment for the driver. To use offline execution servers, the admin will need to perform several additional configurations. - -For additional information, see [What are Python Virtual Environments?](../../../admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/what-are-python-virtual-environments.md). - -## Related Topics - -- [Creating Blueprints](../../../portal/blueprints/creating-blueprints/index.md) -- [Create Blueprint Commands](../../../portal/blueprints/creating-blueprints/create-blueprint-commands.md) -- [Configure Blueprint Orchestration](../../../portal/blueprints/creating-blueprints/configure-orchestration.md) -- [Run Commands](../../../portal/sandboxes/sandbox-workspace/run-commands.md) -- [Run App Commands](../../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md) -- [CloudShell Sandbox Template](../../../admin/cloudshell-manage-dashboard/blueprint-templates.md#cloudshell-sandbox-template) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-categories.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-categories.md deleted file mode 100644 index 0d7114ae78..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-categories.md +++ /dev/null @@ -1,151 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Managing Categories - -Categories enable system and domain administrators to organize CloudShell inventory items in logical groups, and expose specific items to members of a particular domain. - -## System Categories - -The system categories are stored as a pool of categories that can be used in a single domain or multiple domains. The categories are used to create catalogs. Two types of categories are supported. - -- Blueprint categories -- Service categories - -Categories are managed in the **Manage** dashboard and require the following user permissions: - -- System administrators can create and customize the system categories and also specific domain categories -- Domain administrators can create and customize categories only in the domain in which they are the administrator. - -### Managing system categories - -**To manage the system categories:** - -1. In the **Manage** dashboard, in the left sidebar, click **Categories**. -2. Select the desired category type, either **Blueprints Categories** or **Services Categories**. - ![](/Images/CloudShell-Portal/Manage/CatManagement1.png) - -### Creating a new system category - -**To create a new category:** - -1. In the left sidebar, click **Categories**. -2. Select the desired category type, either **Blueprints Categories** or **Services Categories**. - -3. Click **\+ Add New Category**. -4. In the **Add New Category** dialog box, enter the required information: - - | Field | Required | Description | - | --- | --- | --- | - | NAME | Required | Category name that displays in the catalog. | - | DESCRIPTION | Optional | Description of the category. | - | CATALOG | View only | The type of category, selected automatically according to categories view selection | - | LOCATION | Optional | Determines if the current definition is a category or sub-category:
    If you leave the selection with slash (‘/’), then this definition is a Category.
    If you select a value, then this definition becomes a sub-category of the selected category. | - | DOMAINS | Optional | Select the domain or domains where the category will be available.
    If you are a domain administrator, the selected domain is displayed but cannot be changed.
    If this category is a sub-category, this field inherits the domain values that were selected for the main category. The sub-category can be displayed in less domains than the main category. However, additional domains cannot be added. | - | IMAGE | Optional | You can add an image to the catalog definition. The recommended size for the image is 190x120 pixels (image size is limited to 400x400 pixels or 200Mb). | - -5. Click **Save**. - -In the **Categories** list, sub-categories have a line in front of the category name, as displayed in the following image: - -![](/Images/CloudShell-Portal/Manage/CatManagement1-_1.png) - - -### Editing system categories - -**To edit a system category:** - -1. In the left sidebar, click **Categories**. -2. Select the desired category type, either **Blueprints Categories** or **Services Categories**. -3. In the list of categories, click the name of the required category. -4. In the **Edit Category** dialog box, edit the required fields. -5. Click **Save**. -:::note -The category's Location is not editable. -::: -### Deleting system categories - -**To delete a system category**: - -1. In the left sidebar, click **Categories**. -2. Select the desired category type, either **Blueprints Categories** or **Services Categories**. -3. In the list of categories, select the checkbox next to the category to delete. -4. Click the **Delete** button. - -or- - At the end of the row of the required category, click the menu icon and select Delete . -:::note -If you delete a category that has sub-categories, they are automatically deleted. Connections between blueprints and deleted categories and sub-categories are removed. -::: -## Managing domain categories - -You can create, add or remove categories from a domain. - -The system administrator can, but is not limited to, use system categories in the specific domain while the domain administrator can only create new categories in their specific domain. -:::note -Categories created in a specific domain are also added as system categories. -::: -![](/Images/CloudShell-Portal/Manage/CatManagement1_2.png) - -### Adding domain categories - -Domain categories are accessible for users of the specified domain and of course to the system administrator. - -**To add a category to a domain:** - -1. In the left sidebar, click **Domains**. -2. Click the required domain. -3. Select the desired category type, either **Blueprints Categories** or **Services Categories**. -4. Click **Add Category to Domain**. -5. In the **Select Categories for This Domain** dialog box, select the categories to add (this step is available only for system administrators). -6. To create a new category, click **Create New Category** (opens by default to domain administrator), define the new category and click **Save**. -7. Click **Done**. - - -### Editing domain categories - -Editing a domain category as a system administrator will update the system category as well. Domain users cannot edit system categories that were added as domain categories. - -**To edit a domain category:** - -1. In the left sidebar, click **Domains**. -2. Click the required domain. -3. Select the desired category type, either **Blueprints Categories** or **Services Categories**. -4. In the list of categories, click the name of the required category. -5. In the **Edit Category** dialog, edit the required fields. -6. Click **Save**. -:::note -Location of **Category** and **Domain** are not editable. -::: -### Deleting categories from domains - -**To delete a category from a domain:** - -1. In the left sidebar, click **Domains**. -2. Click the required domain. -3. Select the desired category type, either **Blueprints Categories** or **Services Categories**. -4. In the list of categories, select the required category/categories. -5. Click the **Delete** button. - -or- - At the end of the row of the required category, click the menu icon and select **Delete** . -:::note -If you delete a category that has sub-categories, they are automatically deleted. Connections between blueprints and deleted categories and sub-categories are removed. Deleting a category from a domain removes the category from that domain but keeps the category in the system. -::: -## Rearranging order of categories - -You can change the order in which categories and sub-categories are displayed in the **Blueprint Catalog** (blueprints categories) or in the **Add App / Service** window (services categories). - -**To rearrange the categories' order:** - -- Drag the required category up or down within the list to the desired position. - - -or- - - Select a category and use the position controls (on top bar or inside the More Actions menu ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton.png)) to move the category up or down. - -:::note -When moving a category, its sub-categories are also moved. When moving a sub-category, it changes order only under the main category. Only one category can be moved at a time. -::: -## Related Topics - -- [Manage Dashboard Overview](../../admin/cloudshell-manage-dashboard/manage-dashboard-overview.md) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/_category_.json b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/_category_.json deleted file mode 100644 index 6f8fb42d5d..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/_category_.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "label": "Managing Execution Servers", - "position": 6, - "link": { - "slug": "admin/manage-dashboard/execution-servers", - "type": "generated-index", - "description": "This article explains how to track and manage the execution servers, and the command and job executions in CloudShell." - } -} diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/execution-servers-commands-queue-page.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/execution-servers-commands-queue-page.md deleted file mode 100644 index 6072b8e189..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/execution-servers-commands-queue-page.md +++ /dev/null @@ -1,144 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Execution Servers - Commands Queue Page - -The **Commands Queue** page lists the command executions that are currently in the queue. In addition, it displays the reason why each command is in the queue. This applies to all types of commands in CloudShell, including resource/App/service commands coming from the shell's driver and orchestration commands. For details on developing such commands, see [Driver Deep Dive](../../../devguide/developing-shells/driver-deep-dive.md) and [Script Deep Dive](../../../devguide/develop-orch-scripts/script-deep-dive.md). - -![](/Images/CloudShell-Portal/Manage/ExecutionServersCommandsQueue.png) - -The information available for each command execution in the **Commands Queue** page includes: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    PropertyDescription
    Command NameName of the command in CloudShell
    Type**Blueprint** or **Resource**
    Sandbox NameLink to the sandbox
    Resource NameName of the CloudShell resource. This field is empty for blueprint commands.
    Enqueue TimeTime when the command execution entered the queue, set to the time zone defined in CloudShell Portal.
    Status - Reason why the command is in the queue. -:::important -If additional information is available, an exclamation mark (!) is displayed next to the command's status. Hover over the exclamation mark to see a table of matching execution servers. Each row in the table displays an execution server's name and the status, or reason why the command is not running on it. The statuses are explained in the Statuses section below. -::: -
    - -## Statuses - -### If no compatible execution server exists: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    StatusDescription
    "New, Waiting to be processed"The command has not been processed by CloudShell. CloudShell typically processes new commands within a few seconds, so the command should be processed shortly.
    "Pending, Concurrent commands not enabled" - A command is already running on the resource but the command's shell does not support running multiple commands at the same time, or, if it's a blueprint command, a command is already running on the sandbox but CloudShell is configured to not support multiple blueprint commands at the same time. - -To fix this issue, do one of the following: - -- Wait for the current command to complete. The enqueued command will run as soon as a command slot is available on the execution server. -- Stop the currently running command that is preventing the enqueued command to run. -- Enable concurrent commands for the resource or blueprints, as follows: - - For resources based on 1st Gen Shells, in **Resource Manager Client**, open the Shell's model and in the **Parameters** area, select **Supports Concurrent Commands**. For 2nd Gen Shells, you need to add support concurrent commands in the `shell-definition.yaml` file, as explained in [Drivers and concurrency](../../../devguide/developing-shells/driver-deep-dive.md#drivers-and-concurrency). To enable concurrent blueprint script commands, set the `AllowConcurrentTopologyScriptCommands` configuration key to `true`. -
    "No installed execution servers" - CloudShell cannot find any registered execution servers. In this case, while the command was in the queue, all your execution servers were deleted, possibly through the **Execution Servers - Executions** page. - -To fix this issue, install the execution server(s) using the **TestShell Execution Server Configuration Wizard**. -
    "No execution servers matching attribute requirements (!)" - The command's resource or App is defined to select an execution server by **Execution Server Selector** attributes but no execution server matches the criteria. - -To link the element to an execution server, see the appropriate "Controlling execution server selection" section in [Setting Up Execution Servers to Run Commands](../../cloudshell-execution-server-configurations/setting-up-execution-servers-to-run-commands.md). -
    "Execution server with existing driver instance doesn't match attribute requirements (!)" - When a resource command is executed, an instance of the shell's driver is created on the execution server that is running the command. - -This is a very specific scenario in which the instance on the execution server is still alive, but the user links the resource's Shell to a different execution server and attempts to run another command on that resource. However, the new command will enter the queue since multiple instances of the same driver cannot co-exist, and the original instance is associated to a different execution server. - -To fix the issue, do one of the following: - -- Wait for the idle timeout of the original driver instance to pass, which will terminate the instance and enable the new command to run. -- Terminate the original driver instance in the **Execution Servers - Executions** page. -- Add the missing attribute value to the execution server hosting the driver instance. -
    - -### If compatible execution servers exist: - - - - - - - - - - - - - - - - -
    StatusDescription
    "Pending, Waiting to be processed"CloudShell typically processes enqueued commands within a few seconds, so the command will either be processed shortly or executed on a compatible execution server, as soon as one is available.
    "No Available Execution Server (!)" - CloudShell has execution servers that can run the command, but none are available at the moment. To see why the execution servers are unavailable, hover over the more info icon. - -Possible reasons are that the execution servers are: - -- Excluded -- Offline -- Set to have a zero command slots capacity -- All command slots are being used. -
    - -## Related Topics - -- [Execution Servers - Overview Page](../managing-execution-servers/execution-servers-overview-page.md) -- [Execution Servers - Servers Page](../managing-execution-servers/execution-servers-servers-page.md) -- [Execution Servers - Executions Page](../managing-execution-servers/execution-servers-executions-page.md) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/execution-servers-executions-page.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/execution-servers-executions-page.md deleted file mode 100644 index 504a3f6ab7..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/execution-servers-executions-page.md +++ /dev/null @@ -1,147 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Execution Servers - Executions Page - -The **Executions** page enables you to both view the real time status and general information of active driver instances and job executions and manage their executions. - -Regarding drivers, the **Executions** page displays the instances of the active drivers, not their commands. For additional information, see [Instance](../../../intro/Term.md#instance). - -:::note Notes -- Starting with CloudShell 9.3, CloudShell runs orchestration scripts directly without needing the **Python Setup & Teardown** blueprint driver. This out-of-the-box behavior can be changed using the ExecutePythonOrchestrationScriptsDirectly configuration key. -- The blueprint driver is still included with CloudShell and running orchestration scripts manually from the sandbox's **Blueprint Commands** pane will invoke it, creating an instance for the driver in the **Executions** page. -::: -![](/Images/CloudShell-Portal/Manage/ExecutionServersExecutionsPage.png) - -The information available for each driver or test in the **Executions** page includes: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    PropertyDescription
    NameDisplays the name of the resource or blueprint containing the driver, and for tests, the path of the current test.
    Type - Indicates the type of driver: - -- **Blueprint** for sandbox-level drivers -- **Resource** for resource/service/App drivers -
    ServerThe name of the execution server running the execution.
    Status - Current status of the execution. - -For drivers: - -- **Active**: driver instance has command executions -- **Idle**: driver instance has no command executions - -For jobs: - -- **Running**: tests are currently running -
    menu icon ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton_20x19.png) - The following options are available: - -- **Stop**: Stop all command executions of a specific driver/script instance. Applies to both CloudShell Authoring and Python drivers. -- **Remove**: Remove a CloudShell Authoring driver instance and its command executions. -- **Terminate**: Remove a Python driver instance and any command executions that are running on the instance. -- **Details**: Show the job details page in the **Job Scheduling** dashboard. - -For example: - -![](/Images/CloudShell-Portal/Manage/ExecutionServersStopTerminate.png) -
    - -## Stopping all command executions of a specific driver instance - -This procedure shuts down the command executions of a driver's instance but leaves the instance alive. This also applies to script executions. -:::tip -To stop a specific command execution, in the sandbox workspace, open the appropriate commands pane and click Stop. For additional information, see [Stopping commands during execution](../../../portal/sandboxes/sandbox-workspace/run-commands.md#stopping-commands-during-execution). -::: -**To stop a driver's commands:** - -1. In the **Execution Servers** page, click **Executions**. - - The **Executions** view of the page is displayed. - -2. Click the execution's menu button and select **Stop**. - - ![](/Images/CloudShell-Portal/Manage/ExecutionServersStopTerminate.png) - - The execution is stopped and removed from the page. If there are any commands in the queue for this resource, they will run now in the instance. - :::note - If errors occur when attempting to stop a command or a test, please contact Quali Support at: [support.quali.com](https://support.quali.com/). Quali Support can assist you in testing your network and in adjusting your configuration to help solve these issues.. - ::: - -## Terminating a driver's instance or script execution - -*This procedure applies to Python drivers and scripts. For CloudShell Authoring drivers, see [Removing a driver's instance](../managing-execution-servers/execution-servers-executions-page.md#removing-a-drivers-instance).* -:::note -Driver instances may include multiple command executions while script executions only have one. For brevity, the term "instance" is used for both driver instances and script executions. -::: -Terminating a driver's instance immediately cancels all running commands on that instance, without waiting for them to complete. Therefore, it is recommended to either stop a command or let it run its course instead of terminating. - -In some cases, however, terminating an instance is required. For example, if you associate the resource or App to an execution server, but already have an instance of the driver running on a different execution server, that instance will prevent new commands from running on the resource. This is because the instance is associated to the wrong execution server and multiple driver instances of the same component cannot co\-exist in CloudShell. In this case, terminating the driver instance will enable the new commands to run on the correct execution server. - -:::note Notes -- Terminating running commands may cause unexpected behavior. For example, terminating a Teardown command execution on a sandbox with Azure VMs may prevent CloudShell from deleting the sandbox's resource group and VMs from the cloud provider. -- In some cases, terminating a driver's instance in one sandbox may apply to other sandboxes if the resource is shared and is being used in different sandboxes, or in a scenario where concurrent commands are running on the resource. -::: -**To terminate a driver's instance or script execution:** - -1. In the **Execution Servers** page, click **Executions**. - - The **Executions** view of the page is displayed. - -2. Click the execution's menu button and select **Terminate**. - - ![](/Images/CloudShell-Portal/Manage/ExecutionServersStopTerminate.png) - -3. In the confirmation window, click **OK**. If there are any commands in the queue for this resource, they will run now in a new instance. - -## Removing a driver's instance - -*This procedure applies to CloudShell Authoring drivers. For Python drivers, see [Terminating a driver's instance or script execution](../managing-execution-servers/execution-servers-executions-page.md#terminating-a-drivers-instance-or-script-execution).* - -In some scenarios, you may need to remove a driver's instance. - -For example, if you associate the resource or App to an execution server, but already have an instance of the driver running on a different execution server, that instance will prevent new commands from running on the resource. This is because the instance is associated to the wrong execution server and multiple driver instances of the same component cannot co\-exist in CloudShell. In this case, terminating the driver instance will enable the new commands to run on the correct execution server. -:::note -Before you remove an Authoring driver instance, make sure you stop all of the instance's command executions and exclude the execution server on which the instance resides. To exclude an execution server, see [Including/excluding execution servers](../managing-execution-servers/execution-servers-servers-page.md#includingexcluding-execution-servers). -::: -**To remove a driver instance:** - -1. In the **Execution Servers** page, click **Executions**. - - The **Executions** view of the page is displayed. - -2. In the row of the required execution, click the menu icon and select **Remove**. - - ![](/Images/CloudShell-Portal/Manage/ExecutionServersRemove.png) - - -## Related Topics - -- [Execution Servers - Overview Page](../managing-execution-servers/execution-servers-overview-page.md) -- [Execution Servers - Servers Page](../managing-execution-servers/execution-servers-servers-page.md) -- [Execution Servers - Commands Queue Page](../managing-execution-servers/execution-servers-commands-queue-page.md) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/execution-servers-overview-page.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/execution-servers-overview-page.md deleted file mode 100644 index 8487a834c3..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/execution-servers-overview-page.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Execution Servers - Overview Page - -The **Overview** page displays the total number of running/scheduled/pending jobs and commands, and the availability status of the execution servers, job slots and command slots. - -![](/Images/CloudShell-Portal/Manage/ExecutionServersOverviewPage.png) - -## Related Topics - -- [Execution Servers - Servers Page](../managing-execution-servers/execution-servers-servers-page.md) -- [Execution Servers - Executions Page](../managing-execution-servers/execution-servers-executions-page.md) -- [Execution Servers - Commands Queue Page](../managing-execution-servers/execution-servers-commands-queue-page.md) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/execution-servers-servers-page.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/execution-servers-servers-page.md deleted file mode 100644 index b2e5bbbcc6..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-execution-servers/execution-servers-servers-page.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Execution Servers - Servers Page - -In the **Servers** page, you can view and manage the execution servers in CloudShell. - -![](/Images/CloudShell-Portal/Manage/ExecutionServersServersPage.png) - -The information available for each execution server in the **Servers** page includes: - -| Property | Description | -| --- | --- | -| Server | Name and description | -| Type | (Relevant if you are using **Job Scheduling** and a custom-developed execution server)
    Indicates if the Execution Server is a CloudShell Execution Server (Windows or Linux-based) or a custom-developed Execution Server. For example, "TestShell" indicates standard CloudShell execution servers that run commands and TestShell tests. | -| Status | **Included** or **Excluded** | -| Connection | **Online** or **Offline**
    If you are experiencing network-related issues between Quali Server and the Execution Server, for example, the Execution Server's connection status changes frequently from online to offline, please contact Quali Support at: [support.quali.com](https://support.quali.com/). Quali Support can assist you in testing your network and in adjusting your configuration to help solve these issues. | -| Activity | Indicates if the execution server is doing anything at the moment. For example, **Idle** (no tests/commands are running) or **3 Running** (3 executions are currently running) | -| Job Slots | Displays the permitted number of concurrent jobs | -| Command Slots | Displays the permitted number of concurrent commands | -| Host Name | Displays the host name of the machine on which the execution server is installed. Hover over the host name to see the machine's operating system. | - -## Including/excluding execution servers - -Execution servers need to be excluded in certain situations. For example, when doing maintenance work on a particular machine and you don't want anybody to use it. - -In addition, the execution server may exclude itself in the event of a runtime error. - -:::note Important -Excluding an execution server basically means that we're excluding it from new assignments, so when you exclude an execution server, it will complete any running jobs/commands but new ones will be handled by an available execution server. -::: -**To change the status of the execution server:** - -1. In the **Execution Servers** page, click **Servers**. - - The **Servers** view of the page is displayed. - -2. Click the execution server's menu button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton.png) and select the appropriate option.![](/Images/CloudShell-Portal/Manage/ExecutionServersIncludeExclude.png) - -## Viewing the current execution activity of an execution server - -**To view the execution activity of an execution server:** - -1. In the **Execution Servers** page, click **Servers**. - - The **Servers** view of the page is displayed. - -2. Click the execution server's menu button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton.png) and select **View Executions**. Alternatively, click **Executions** from the left menu. - -## Setting attribute values - -In order to improve performance and stability in CloudShell deployments that include multiple geographically distributed sites, it is recommended to configure the deployment process of resource and App commands to run on execution servers that are physically closest to those elements. This is also used to restrict CloudShell's blueprint commands to run on a dedicated execution server or group of execution servers. - -This is done by associating an attribute that has the **Execution Server Selector** rule to the resource or App. And setting the same attribute value on that resource or App and on the execution server or execution servers that will deploy the element's commands. For blueprint commands, the attribute needs to be created, and linked to blueprint command executions using the `EnvironmentCommandsESRestrictions` configuration key. For additional information, see the "Controlling execution server selection" sections in [Setting Up Execution Servers to Run Commands](../../cloudshell-execution-server-configurations/setting-up-execution-servers-to-run-commands.md). - -**To set an attribute value on an execution server:** - -1. In the **Execution Servers** page, click **Servers**. - - The **Servers** page is displayed. - -2. Click the name of the execution server or click the execution server's menu button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton.png) and select **Attributes**. - - The **Attributes** dialog box is displayed, showing the **Execution Server Selector** attributes in CloudShell. - - ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersAttributes.png) - -3. Select the check box of the appropriate attribute and specify the value that is set on the resource's attribute. For example, the domain name. - -4. Click **Done**. - -## Deleting an execution server - -**To delete an execution server from CloudShell:** - -1. In the **Execution Servers** page, click **Servers**. - - The **Servers** view of the page is displayed. - -2. Click the execution server's menu button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton.png) and select **Delete**. - -## Related Topics - -- [Execution Servers - Overview Page](../managing-execution-servers/execution-servers-overview-page.md) -- [Execution Servers - Executions Page](../managing-execution-servers/execution-servers-executions-page.md) -- [Execution Servers - Commands Queue Page](../managing-execution-servers/execution-servers-commands-queue-page.md) diff --git a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-shells.md b/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-shells.md deleted file mode 100644 index d290ddcdc8..0000000000 --- a/versioned_docs/version-2023.3/admin/cloudshell-manage-dashboard/managing-shells.md +++ /dev/null @@ -1,150 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Managing Shells -:::note -The procedures in this article apply to 2nd Gen Shells, unless stated otherwise. For information about 1st Gen Shells, contact CloudShell Support. -::: -This article explains how to add, update and remove Shells from CloudShell. Note that Shell management operations are performed by system administrators in the **Global** domain. For additional information, see [Shells Overview](../../intro/features/shells.md). - -## Viewing Shells - -The **Shells** page is only displayed for system administrators in the **Global** domain. - -**To view Shells:** - -1. As system administrator, access the **Global** domain. -2. In the **Manage** dashboard, in the left sidebar, click **Shells**. - - The **Shells** page is displayed. - - -You can use the toolbar to only display official Quali shells, sort the Shells according to **Name** or date of modification, and filter them according to Shell **Type**. - -## Importing Shells -:::warning -A shell update is not reversible(in other words, you cannot downgrade to an earlier shell version). Therefore, update the template version in the shell's `shell-definition.yaml` ONLY when something in the data model changes (new attributes added to `shell-definition.yaml`). Any changes in just the driver or underlying packages you can keep the template version number the same and then freely "roll back" to a previous version if the shell presents unexpected behavior. -::: -**To import a new Shell into CloudShell:** - -- From the **Add Shells** drop-down list, select the appropriate option: - - - **Get From Community** to download a compatible Shell from [Quali Repositories](https://github.com/orgs/QualiSystems/discussions/categories/integrations) page. After you download the Shell, Click **Add Shells>Add From File** to import the Shell into CloudShell. - - **Add From File** if you already have the Shell ZIP file and want to import it into CloudShell - :::note - To import a 1st Gen Shell, see [Import a Blueprint Package into CloudShell](../../portal/blueprints/creating-blueprints/import-package.md). - ::: - - The Shell is displayed in the **Shells** page and can be used by domain administrators in all CloudShell domains to create new inventory resources, as explained in [Adding Inventory Resources](../../portal/inventory/managing-resources/adding-inventory-resources/index.md). - - :::note Notes - - If you are planning on running CloudShell in offline mode, and the Shell has dependencies, make sure to update the dependencies repository - see [Updating Python Dependencies for Shells, Drivers and Scripts](../../admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/updating-python-dependencies-for-shells-drivers-and-scripts.md). - - Python 3 automation requires Microsoft Visual C++ Redistributable 2015 x86 and x64 to be installed on the Execution Server(s). - ::: - -## Adding custom attributes to a Shell - -This section explains how to add an attribute from the pool of global attributes to the Shell and set the attribute's defaults. Note that this capability applies to the Shell's root model and sub-models. - -:::note Notes -- This capability applies to attributes that already exist in CloudShell. If the attribute you want to add is missing, make sure to add it in Resource Manager Client's **Attributes** tab. -- Custom attributes that are added to already-installed service shells are defined as "user input". As such, when adding the service into the blueprint/sandbox diagram, these attributes are displayed in the service's details form. In addition, when upgrading CloudShell to 9.1 or a later version, CloudShell will set all custom service attributes as user input. -::: -**To add a custom attribute to a Shell:** - -1. Click the Shell's row or menu button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton_28x27.png) and select **Details/Edit**. - - The **Details/Edit Resource** dialog box is displayed. - -2. Click the **Add Custom Attribute** link at the bottom. - - A New Attribute is added to the list of attributes. - -3. Select the **Attribute Name**. -4. Select the **Model Name** that will contain the attribute. -5. Optionally specify a **Default Value** (Mandatory for Lookup and Numeric attributes). -6. (For Lookup attributes) Use the **Restricted Values** field to optionally determine the attribute's possible values in this resource. - :::tip - To link the attribute’s possible values to the global attribute, remove all restricted values. This way, any updates made to the global attribute in Resource Manager Client are automatically applied to the shell’s attribute. - ::: - -## Updating Shells - -Shell update overrides that existing Shell's settings with the new Shell. -:::warning -A shell update is not reversible(in other words, you cannot downgrade to an earlier shell version). Therefore, update the template version in the shell's `shell-definition.yaml` ONLY when something in the data model changes (new attributes added to `shell-definition.yaml`). Any changes in just the driver or underlying packages you can keep the template version number the same and then freely "roll back" to a previous version if the shell presents unexpected behavior. -::: -:::note Points to consider -- You can only update Shells with a compatible version. -- Updating an uncertified Shell may cause backward compatibility issues. -::: - -**To update a Shell:** - -1. Click the Shell's menu button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton_27x26.png) and select **Update**. - - A dialog box is displayed. - -2. In the dialog box, navigate to the updated Shell's ZIP file, select it and click **Open**. - :::note - If you are planning on running CloudShell in offline mode, and the Shell has dependencies, make sure to update the dependencies repository - see [Updating Python Dependencies for Shells, Drivers and Scripts](../cloudshell-execution-server-configurations/setting-up-python-virtual-environments/updating-python-dependencies-for-shells-drivers-and-scripts.md). - ::: - -## Downloading Shells from CloudShell - -CloudShell enables you to download Shells from the Shells page. This can be useful if you or a developer in your organization wants to make changes or updates to a specific Shell, as explained in the CloudShell Dev Guide's [Getting Started with Shell Development](../../devguide/developing-shells/getting-started.md). You can then update the existing Shell in CloudShell with the updated one. - -**To download a Shell from CloudShell:** - -1. Click the Shell's menu button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton_26x24.png) and select **Download**. - - Depending on your web browser, a dialog box prompting you to save the Shell's ZIP file or a "downloading" indication is displayed. - -2. Save the file. - -## Deleting Shells - -Shells that have inventory resources cannot be deleted. -:::note -To delete a 1st Gen Shell, you must use the `DeleteResourceTemplate` method in the [TestShell API](../../api-guide/shell-dev-blueprint-design-api/testshell-api.md). -::: -**To delete Shells:** - -- Click the Shell's menu button ![](/Images/CloudShell-Portal/Manage/ExecutionServersServersMenuButton_29x28.png) and select **Remove**. - - If the Shell cannot be deleted, an error message is displayed, prompting you to download a CSV file. - - ![](/Images/CloudShell-Portal/Manage/ShellDependenciesMessage.png) - - The file lists the Shell's dependencies that need to be removed before deleting the Shell, and contains the following details: - - - - - - - - - - - - - - - - - - - - - - - - -
    Entity NameNames of the elements in CloudShell
    Entity TypeType of elements (Resource, Service, App, Abstract Resource, Abstract Template)
    Blueprint NamesNames of the blueprints containing the elements
    Blueprint Template NamesNames of the blueprint templates containing the elements
    Sandbox NamesNames of sandboxes containing the elements
    - - -## Related Topics - -- [Adding Inventory Resources](../../portal/inventory/managing-resources/adding-inventory-resources/index.md) diff --git a/versioned_docs/version-2023.3/admin/index.md b/versioned_docs/version-2023.3/admin/index.md deleted file mode 100644 index a116e684a1..0000000000 --- a/versioned_docs/version-2023.3/admin/index.md +++ /dev/null @@ -1,15 +0,0 @@ -# CloudShell Administration - -Admin responsibilities include: - -- Setting up CloudShell -- Assigning users to groups and groups to domains -- Adding resources to the CloudShell inventory -- Adding Apps and services, and associating them to domains -- Adding users, groups, and domains -- Associating resources with domains -- Setting up the CloudShell license server - -:::note -Some of these actions are performed in **Resource Manager Client** and others in **CloudShell Portal**. -::: \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/_category_.json b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/_category_.json deleted file mode 100644 index b0a5808e5c..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Setting Up CloudShell", - "position": 2, - "link": { - "type": "generated-index", - "description": "The following articles explain how to set up and configure CloudShell" - } -} diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/_category_.json b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/_category_.json deleted file mode 100644 index 5dbdaa4bee..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "CloudShell Configuration Options", - "position": 4 -} diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/advanced-cloudshell-customizations.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/advanced-cloudshell-customizations.md deleted file mode 100644 index ea3eb662db..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/advanced-cloudshell-customizations.md +++ /dev/null @@ -1,2313 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Advanced CloudShell Customizations - -## Introduction - -This topic describes how to use CloudShell configuration keys to customize and configure CloudShell. For the complete repository of our customer configuration keys, see [Customer Configuration Keys Repository](../../setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/index.md). - -## How to use configuration keys - -Some configurations involve setting configuration keys. This means copying the key into the appropriate `customer.config` file, as a new line anywhere in the file before the closing `` tag, and restarting the relevant component: - -- For Server configurations, restart the **Quali Server** service in the **Windows Services** dialog box or run the **Quali Server Configuration Wizard**. -- For Portal configurations, restart the CloudShell Portal website via the IIS Manager or run the **CloudShell Portal Configuration Wizard** if the CloudShell Portal website is running on IIS Express. - -## How to use this article - -In this article, you will find CloudShell keys, logically arranged in categories. For example, the Setting home page `key = HomePageUrl` is found under the General category both in the table (see [Set the default home page (HomePageUrl)](./customer-configuration-keys-repository/general.md#set-the-default-home-page) in the list of keys) and in the General category [Setting the default home page](#setting-the-default-home-page). - -The following categories are used to organize the configuration keys: - -- [Abstract resources](./advanced-cloudshell-customizations.md#abstract-resources) -- [API](./advanced-cloudshell-customizations.md#api) -- [Apps](./advanced-cloudshell-customizations.md#apps) -- [Connectivity management and route configuration](./advanced-cloudshell-customizations.md#connectivity-management-and-route-configuration) -- [Custom live status icons](./advanced-cloudshell-customizations.md#custom-live-status-icons) -- [Blueprint Catalog](./advanced-cloudshell-customizations.md#blueprint-catalog) -- [Blueprint Workspace](./advanced-cloudshell-customizations.md#blueprint-workspace) -- [Execution Server](./advanced-cloudshell-customizations.md#execution-server) -- [General](./advanced-cloudshell-customizations.md#general) -- [Inventory dashboard](./advanced-cloudshell-customizations.md#inventory-dashboard) -- [New Job Scheduling](./advanced-cloudshell-customizations.md#new-job-scheduling) -- [LDAP Integration](./advanced-cloudshell-customizations.md#ldap-integration) -- [Monitoring](./advanced-cloudshell-customizations.md#monitoring) -- [Online Help](./advanced-cloudshell-customizations.md#online-help) -- [Registration, passwords, emails, and licenses](./advanced-cloudshell-customizations.md#registration-passwords-emails-and-licenses) -- [Sandboxes](./advanced-cloudshell-customizations.md#sandboxes) -- [Scheduling and Queuing](./advanced-cloudshell-customizations.md#scheduling-and-queuing) -- [Scheduling commands](./advanced-cloudshell-customizations.md#scheduling-commands) -- [Search](./advanced-cloudshell-customizations.md#search) -- [Single Sign On (SSO)](./advanced-cloudshell-customizations.md#single-sign-on-sso) -- [TestShell Studio](./advanced-cloudshell-customizations.md#testshell-studio) - -## Abstract resources - -### Advanced: Randomized abstract resource selection - -By default, the abstract resource selection process is randomized in order to reduce clashes when blueprints are resolved in parallel. Disabling randomization will cause abstract resources and network connections to be resolved in the same order each time. - -**To make abstract resolution non-randomized:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Changing the number of matches that are considered for abstract sub-resource requirements - -For performance reasons, when resolving sub-resource requirements, CloudShell only considers the first 1000 matches it finds. This default can be changed using the `AbstractSubResourceResultsPageSize` configuration key. -:::note -This key only applies to the matches that are considered for resolution of the abstract resource and is unrelated to the matches indicator in the abstract resource's dialog box. -::: -**To change the default for possible abstract sub-resource requirements:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file. -2. Add the following key: - - `` - -3. Change the value as appropriate. - -4. Save the file. -5. Restart the **Quali Server** service. - -## API - -For configuration keys related to API SSO, see [SSO Login to CloudShell APIs](../../../devguide/available-cs-api/sso-login-to-cs-api.md). - -### Setting the response page size for the Sandbox API live documentation pages - -The administrator can set the maximum amount of entries included in each response page, when running the `sandbox output` and `sandbox events` methods. By default, the response includes up to 1000 entries. - -**To set maximum entries per response page:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key, and set the relevant value: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Extending the API authorization token validity period - -The authorization token is valid for 5 hours by default, but the validity period can be changed using the `AuthToken.ExpirationSpanMinutes` configuration key. - -**To change the token validity period:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file. -2. Add the following key: - - `` - -3. Set the desired validity period, in minutes -4. Save the file. -5. Restart the **Quali Server** service. - -## Apps - -### Setting the default category for new Apps - -This configuration key enables you to specify the default category that will be selected for new Apps. The default category is "Apps". -:::note -Only users that have permissions to the category's domain will have access to the App. -::: -**To set the default category for new Apps:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file. -2. Add the following key: - - `` - -3. Replace "`app category`" with the new default category. - - To set a sub-category, use "/". For example, `Apps/My App Category`"(where "My App Category" is the sub-category). - -4. Save the file. -5. Restart the **Quali Server** service. - -### Enabling the modification and deletion of App templates only from the template's domain - -This key disables the options to edit or delete an App template when the admin is not in the domain in which the App was created. By default, Apps templates can be modified from any CloudShell domain. - -:::note Notes -- This key does not restrict system admins from editing Apps in other domains. -- This key does not apply to the "clone App" option. -::: -**To enable this restriction:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, add the following key, and set the value accordingly: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -## Connectivity management and route configuration - -For more information about the connection types, see [Add Physical Network Connectivity Requirements](../../../portal/sandboxes/sandbox-workspace/add-connectivity/add-physical-network/add-phy-net-req/index.md). - -### Setting max hops for routes - -You can set the maximum allowed hops for route resolution to cap the number of chassis connections that can be used when resolving a route. For details, see [Configure Physical Network Connectivity Requirements](../../../portal/sandboxes/sandbox-workspace/add-connectivity/add-physical-network/config-physical-conn-req.md). - -The default value is 6 hops (or 7 switches). - -**To change the max hops settings for routes:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key, and set the value accordingly (for example, 10 hops): - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Setting default max hops for routes - -This key defines the default value to display in the connection line's **Max Hops** property in the **Resource Connections** dialog box. The default value is 2 hops. - -**To change the default max hops settings for routes:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key, and set the value accordingly (for example, 10 hops): - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Enabling automatic route configuration - -You can enable the server to automatically configure the L1 connections to support the maximum possible speed for the selected route, based on the end point port and their connected L1 speed capabilities. Once enabled, CloudShell will look for an attribute called **Speed** on both endpoints of the L1 route, and when the route gets connected in a sandbox, the server will change the attribute’s value on both endpoints to the highest mutually supported speed. - -**To enable automatic route configuration:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key, and set the value accordingly: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Set the supported connection types for new connections - -You can set the supported connection types for new connections from these default values: Route, Cable, Tap, Connector. This key allows you choose the connection types to include in CloudShell, disabling any values you don't specify. To set these connection types, just specify their name, comma separated, as the key value. - -**To set the supported connection types for new connections:** - -1. Open the ``C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config`` file, add the following key, and set the value accordingly by specifying the connection types you want to include: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -## Custom live status icons - -### Modifying the list of custom live statuses - -The system supports custom statuses for resources which can also be visualized using different icons. - -**To define the custom statuses and their icons:** - -1. Open the `%programdata%\QualiSystems\Settings\Global\ServerUniversalSettings.xml` file, and in the `ResourcesLiveStatus`section, add a new key (where the name is the status name and value is the icon path), for example: - - ```javascript - - … - C:\ProgramData\QualiSystems\Portal\Content\Images\cust.png - - ``` - -2. Save the file. - -## Blueprint Catalog - -The main page of the **Blueprint Catalog**, when no specific category is selected, can be customized to contain any or none of the following sections. This is done by adding the relevant configuration key in the `customer.config` file in the CloudShell Server installation directory. Note that each of the sections described below do not appear if there are no relevant blueprints to display. - -### All blueprints - -This key controls whether to display all blueprints in the main **Blueprint Catalog**, when no category is selected. - -**To enable displaying all blueprints:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -There are two supported modes for displaying the blueprints: as one group, or categorized alphabetically (default). - -**To disable alphabetic sub-grouping:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file. - -2. Add the following key: - - `` - -3. Save the file. -4. Restart the **Quali Server** service. - -### New Blueprints section (Featured section) - -The **Blueprint Catalog**'s **Featured** view includes a **New** section, which displays blueprints that were recently added to the domain. - -**To display new published blueprints, ordered by date of creation:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -**To control the maximum number of new blueprints:** - -1. Add the following key and set the value (the default is 5): - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -**To restrict the maximum number of days a blueprint can be considered ‘new’:** - -1. Add the following key and set the value to specify the number of days (the default is `-1` for no restriction): - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Recently modified blueprints (Featured section) - -This **Blueprint Catalog**'s **Featured** view includes a **Recently Modified** section, which displays recently-modified private and public blueprints owned by the user, ordered by the modification date. This makes it convenient to quickly find a blueprint after creating/modifying it. -:::note -This section will not appear if no blueprints are owned by the user. -::: -**To enable displaying recently modified blueprints:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -**To control the maximum number of recently modified blueprints:** - -1. Add the following key and set the value (the default is 5): - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Recently reserved blueprints (Featured section) - -The **Blueprint Catalog**'s **Featured** view includes a **Recently Reserved** section, which displays recently reserved blueprints in which you are either the owner or a permitted user. If you never reserved blueprints, this section will be hidden. Using the below keys, you can choose to show/hide this section and set the maximum number of recently reserved blueprints to include. - -**To enable displaying recently reserved blueprints:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key:  - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -**To control the number of recently reserved blueprints to appear in "Recently Reserved" within the Featured section of the Blueprint Catalog:** - -1. Add the following key and set the value (the default is 5) - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Featured categories (Featured section) - -This key can be used to set one or more blueprint categories whose blueprints will be displayed in the **Featured** section of the **Blueprint Catalog** To set these categories, just specify their name, comma separated, as the key value. - -**To enable displaying featured categories:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Set the desired categories s the value (comma-separated). - -3. Save the file. -4. Restart the **Quali Server** service. - -### Hiding the Featured section - -These keys control whether to display the **Featured** section in the **Blueprint Catalog**. When disabled, all blueprints will appear in a single section in the catalog. - -**To disable the Featured section:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and change the following keys' values to False: - - `` - - `` - - `` - -2. In addition, make sure to either remove the `TopologyDashboardFeaturedCategories` key from the `customer.config` file or set it to an empty value. -3. Save the file. -4. Restart the **Quali Server** service and the **CloudShell Portal IIS** service. - -### Hiding the "Status” filter - -As of CloudShell 6.2.3, an administrator can show/hide the **Status** filter from the **Blueprint Catalog**. - -**To show/hide the "Status" filter:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. To show the option, set the value to `False`. To hide the option, set the value to `True`. -3. Save the file. -4. Restart the **CloudShell Portal IIS** service. - -### Enabling blueprints of "view” type - -An administrator can enable users to set blueprints to type "view”. Blueprints of type "view” cannot be edited, deleted or reserved by users with view permissions. - -**To enable View blueprints:** - -1. Open the folder `C:\Program Files (x86)\QualiSystems\CloudShell\Server`. -2. Open the `customer.config` file. -3. Add the following key:  - - `` - -4. Save the file. -5. Restart the **Quali Server** service. - -### Enabling the creation of empty blueprints - -As an administrator you can enable users to create empty blueprints, which are not based on any predefined template and do not include out-of-the-box setup and teardown scripts. - -**To enable users to create blank blueprints:**  - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -Note that this will change the behavior of the **\+ Create Blueprints** button. - -The following table describes all the possible behaviors:  - -| Activity | Key value set to 'False'  | Key value set to 'True' | -| --- | --- | --- | -| A single template is defined | Clicking **\+ Create Blueprint** opens the drop-down list which includes the default out-of-the-box CloudShell Sandbox Template. The **Create Empty Blueprint** button is available. | Clicking **\+ Create Blueprint** creates a new blueprint based on the default out-of-the-box [CloudShell Sandbox Template](../../cloudshell-manage-dashboard/blueprint-templates.md#cloudshell-sandbox-template). The Create Empty Blueprint button is not available. | -| Multiple templates are defined | Clicking **\+ Create Blueprint** opens the drop-down list containing all available templates. The **Create Empty Blueprint** button is available. | The **Add New Blueprint** button is available. Clicking **\+ Create Blueprint** opens the drop-down list containing all available templates. The **Create Empty Blueprint** button is not available. | - -## Blueprint Workspace - -### Setting the maximum allowed teardown time for blueprints - -The default maximum value for teardown time for blueprints is 48 hours. - -**To change the maximum allowed teardown time:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Setting the maximum allowed setup time for blueprints - -The default maximum value for setup time for blueprints is 48 hours. - -**To change the maximum allowed setup time:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - ` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Hiding the "More Info” option - -An administrator can enable the option to show/hide the **More Info** option from blueprints. - -**To show/hide the More Info option:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key:  - - `` - -2. To show the option, set the value to `False`. To hide the option, set the value to `True`. -3. Save the file. -4. Restart the **CloudShell Portal IIS** service. - -This change applies to all the blueprints in the catalog, in both **Tile** and **List View** modes.  - -When hiding the **More Info** option, it still remains available in the **Blueprint** menu of the blueprint's workspace.  - -### Specifying which side panes should be open by default (blueprints) - -It is possible to specify that either the instructions side pane or the blueprint commands side pane be opened by default in the **Blueprints** pages. - -**To specify which side panes should be open by default:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the appropriate key: - - `` - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Blocking non-admin users from exporting a blueprint package - -As an administrator you can block non-admin users from exporting a blueprint package. This option is disabled by default. - -**To block non-admin users from exporting a blueprint package:**  - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Changing the time allocated for exporting the blueprint diagram - -By default, CloudShell allocates 2 seconds for the **Export Diagram (pdf)** process. For most blueprints, this is enough time to accurately render the diagram's components and connection lines. However, in large blueprints, this period may not be enough and some components/connection lines may be missing. If this is the case, you can increase the period to give CloudShell the time necessary to properly complete the action. - -**To change the time allocated for exporting the blueprint diagram:** - -1. Go to ``C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config`` file, and add the following key: - - `` - - Where the value is the period, in milliseconds. - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Enabling the Check Blueprint Routes option - -Use this key to show the **Check Blueprint Routes** option in the **Blueprint** menu. For additional information, see [Check Blueprint Routes](../../../portal/blueprints/creating-blueprints/check-blueprint-routes.md). - -**To enable the Check Blueprint Routes option:**  - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Setting the route grouping policy - -You can change the route grouping policy in the blueprint or sandbox diagram. By default, 3 or more connection lines between any two endpoints are grouped together. For example: - -![](/Images/CloudShell-Portal/Lab-Management/Environments/GroupedRoutes.png) - -**To change the route grouping policy:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - - Where the value is the minimum number of connections to be grouped. - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -## Execution Server - -For Python package handling keys, see [Advanced CloudShell Customizations](./advanced-cloudshell-customizations.md). For execution server configurations and customizations, see [Optimizing Execution Provisioning](../../cloudshell-execution-server-configurations/optimizing-execution-provisioning.md). - -## General - -### Controlling the visibility of the main navigation bar components - -You can control which components will be visible to the user using the main menu bar. This removes some features from the user’s view. - -**To remove/hide the Scheduling and Queuing component:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -**To remove/hide the Sandboxes component:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -**To remove/hide the Blueprints component:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -**To remove/hide the Inventory component:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Configuring the CloudShell Portal virtual front - -This key is used for two reasons: - -- To set the CloudShell Portal virtual front in a high availability configuration. For details, see [Creating a Configuration Role in Windows Failover Cluster](../../../install-configure/ha-installation/install-configure-cs-server/install-configure-cs-portal/create-config-role.md). -- To include a sandbox link in email notifications. - -**To configure the CloudShell Portal:** - -1. Go to the `C:\Program Files (x86)\QualiSystems\CloudShell\Server` folder and open the `customer.config` file. -2. Add the following key to the file. This key sets the virtual front address to be used in emails sent from CloudShell to users. - - `` - -3. Modify the key's values: - - | Parameter | Parameter details | - | --- | --- | - | protocol | http or https if CloudShell Portal is set to use SSL | - | PublicServerName | The DNS name or IP address of the CloudShell Portal virtual front | - | PortalPort | The port which CloudShell Portal is using (If the port is 80 or 443, which are the default http and https ports, remove this parameter and the colon from the key). | - -4. Save the file. -5. Restart the **Quali Server** service. - -### Setting the default home page - -The web application directs the user to the last dashboard that was visited upon login. You can determine the default page that users are directed to upon first time login. - -**To set the default home page:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - :::note - The value of the configuration key should be the relative path of the first page the user needs to be directed to, which can be taken from the address bar of each dashboard. - ::: -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Adding the "Contact Us" option to the user menu in CloudShell Portal - -It is possible to add a "contact us" option to the user menu in CloudShell Portal. When clicked, it opens the webpage you configure in this key. You could use this feature, for example, to receive feedback and feature requests from your customers. - -This option is disabled by default. - -**To add a "Contact Us" option to CloudShell Portal:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - - Where `` is the URL to your contact form. - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -**To disable the "Contact Us" option:** - -1. Remove the key from the `customer.config` file. -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Setting a page to redirect to after logout from CloudShell Portal - -By default, when users log out of CloudShell Portal, they are redirected to your custom login page. You can change this setting to redirect users to another page, such as your main homepage or a page that offers additional information. - -**To set the redirected login page to a custom location:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Configuring CloudShell to import user definitions from an active directory - -The following procedures explain how to enable the import of users from your corporate Microsoft Active Directory into CloudShell. To import user definitions, see [Importing users into CloudShell from an active directory](../../cloudshell-identity-management/managing-users/managing-cloudshell-users.md#importing-users-into-cloudshell-from-an-active-directory). Note that the passwords of imported users are managed by the active directory itself. - -:::note Prerequisite -The computer that will be used to import the users must be in your corporate domain. -::: -**To enable the import of active directory users:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Set the key to the name of the domain of the active directory, for example, `Router_UK`. -3. Save the file. -4. Restart the **Quali Server** service. -5. Import the users into **Resource Manager Client**, as explained in [Importing users into CloudShell from an active directory](../../cloudshell-identity-management/managing-users/managing-cloudshell-users.md#importing-users-from-an-active-directory-group). - -### Configuring CloudShell to automatically import users from an external system at login - -This key enables CloudShell to automatically import users from an active directory or LDAP when they log in to CloudShell for the first time. Note that the passwords of imported users are managed by the directory service provider itself. - -This option is disabled by default. - -**To enable CloudShell to auto-import users when they log in:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Defining the Instructions pane size - -You can control the width, in pixels, of the **Instructions** pane in a blueprint or sandbox. The default value is 540 pixels. - -**To set the width of the Instructions pane:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. -:::note -This setting applies to all blueprints in the system. -::: -### Disabling DBCC TRACEON (sql_sysadmin_membership_exists) - -Set to **False** to disable DBCC TRACEON (sql query execution performance). This requires membership in the sysadmin fixed server role. Default is **True**. - -**To disable DBCC TRACEON:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Showing the Drivers management page (Manage dashboard) - -This key determines if the **Manage** dashboard's **Drivers** tab is visible. By default, the **Drivers** tab is hidden. This tab is relevant only when developing or customizing 1st Gen shells. - -**To display the Drivers tab:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Setting the default python version for new Python scripts - -This key determines which Python version will be used by default for new Python scripts the admin loads into CloudShell. Python 3 is the default. - -:::note Notes -- You can change the default setting for a script in the **Scripts** management page, as explained in [Editing scripts](../../cloudshell-manage-dashboard/managing-automation/managing-assets.md#editing-scripts). -- Python 3 automation requires Microsoft Visual C++ Redistributable 2015 x86 and x64 to be installed on the Execution Server(s). -::: - -**To set the default Python version for new scripts:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Replace `` with the appropriate option: **Python 2** or **Python 3**. -3. Save the file. -4. Restart the **Quali Server** service. - -### Hiding the CloudShell Portal footer - -This key enables you to hide the CloudShell Portal footer. The footer is displayed by default on all pages and dashboards in CloudShell Portal, except the login page. - -To hide the footer: - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Allowing the execution of orchestration scripts without the need for a blueprint driver - -This key determines if sandbox scripts (Setup, Teardown, Save and Restore) are run directly in the sandbox as orchestration scripts or require a .NET orchestration driver to invoke them. - -By default, Quali Server runs orchestration scripts directly in the sandbox, ignoring the blueprint driver if one is defined for the sandbox. Note that manually running orchestration scripts with the key enabled will still run them with the default **Python Setup & Teardown** driver. - -**To require the use of a blueprint driver when running sandbox orchestration scripts:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. -4. Make sure a driver is added to all blueprints in CloudShell. For details, see [Add Setup and Teardown scripts](../../../portal/blueprints/creating-blueprints/configure-orchestration.md#add-setup-and-teardown-scripts). - -### Increasing the time allowed for Quali Server to stop gracefully - -When upgrading Quali Server, one of the steps is to stop the **Quali Server** service. By default, the step has 30 seconds to complete. This period is enough for most cases. However, if the service does not stop gracefully within the allotted period, the upgrade process will shut down. This can be resolved by stopping the **Quali Server** service before running the upgrade, or, for scenarios in which Quali Server is performing some critical process and must be running during the upgrade, it is possible to increase the timeout period to allow the Quali Server stop step more time to complete. - -This configuration key also applies to non-upgrade scenarios in which a graceful shutdown is required. For example, in high availability mode where two or more Quali Servers work against the same DB and you need to change node, stopping the Quali Server in a timely manner is important. - -**To increase the timeout period:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Change the period, in seconds, as appropriate. -3. Save the file. -4. Restart the **Quali Server** service. - -### Changing the default Quali API port (9000) - -By default, Quali API runs over TCP/9000. - -**To change the Quali API port:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Change the port, as appropriate. For example: "9002". -3. Save the file. -4. Restart the **Quali Server** service. - -### Hiding Approval Request content from CloudShell Portal - -If you don't intend to use Approval Request flows, you can disable the EnableApprovals key to remove all Approval Request content from CloudShell Portal. This will do the following: - -- Hide the **Require Approval** section in the blueprint properties page -- Hide the **Approval Requests** page that lists end-user requests for approval. -- Revert the **Request** button on approval blueprints back to **Reserve**. - -**To hide Approval Request content:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - - Default is "True". - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Setting approval request expiration policy - -There are three configuration keys relating to approval request expirations. - -- `ApprovalsCleanup.EnableOldExpiredRequests`: If set to True (default), this key enables the automatic removal of approval requests that have expired. -- `ApprovalsCleanup.OldExpiredRequestsTimeoutInHours`: The default timeout for expired approval requests is 168 hours (one week). Once the request end time has passed, the request is considered expired and will be automatically deleted. -- `ApprovalsCleanup.OldExpiredRequestsCheckIntervalInHours`: Interval (in hours) for checking the expired approval requests. The default value is 24. - -All three keys are defined in the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file. - -## Inventory dashboard - -### Allowing regular users to reserve resources from the Inventory dashboard - -By default, only admins can reserve resources from the **Inventory** dashboard. For additional information about this option, see [Reserving Resources from the Inventory](../../../portal/inventory/managing-resources/reserving-from-inventory.md). - -![](/Images/CloudShell-Portal/Lab-Management/Working-with-the-Inventory/InventResResFromInventory.png) - -**To allow regular users to reserve resources from the Inventory dashboard:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -## New Job Scheduling - -### Switching between Sandbox Services - -The CloudShell Server installation includes a Sandbox Service component which is used to handle sandbox reservations. In addition, when deploying the New Job Scheduling infrastructure, a separate Sandbox Service is deployed on the New Job Scheduling Kubernetes cluster. This Sandbox Service can communicate both with Quali Server and the Kubernetes-based New Job Scheduling. Therefore, in deployments that include New Job Scheduling, the Kubernetes-based Sandbox Service needs to be used instead of the out-of-the-box one. - -**To switch to the Kubernetes-based Sandbox Service:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Run the Quali Server configuration wizard. - - -### Allowing Quali Server to access the Kubernetes-based Sandbox Service - -Following the successful deployment of the New Job Scheduling infrastructure, you need to allow Quali Server to communicate with the **sandbox-service-svc**. - -To allow Quali Server to access the Kubernetes-based Sandbox Service: - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following keys: - - `` - - `` - -2. Edit the values as appropriate. Note that the default Sandbox Service port is 8888. - -3. Save the file. -4. Restart the **Quali Server** service. - -### Allowing Quali Server to access the Kubernetes-based RabbitMQ Service - -Following the successful deployment of the New Job Scheduling infrastructure, you need to allow Quali Server to communicate with the **cloudshell-rabbitmq-ha**. - -**To allow Quali Server to access the Kubernetes-based RabbitMQService:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following keys: - - `` - - `` - -2. Edit the values as appropriate. Note that the default RabbitMQ port is 15671. - -3. Save the file. -4. Restart the **Quali Server** service. - -## LDAP Integration - -For information about integration with an LDAP server, see [LDAP Integration](../../cloudshell-identity-management/access-control-and-authentication/ldap-integration.md). - -## Monitoring - -### Setting the retention period for old logs - -By default, old logs are retained for 2 weeks. When this time elapses, these files are automatically purged. -:::note -Logs are considered old if they were note created or modified over the last 24 hours. This period is configurable using the `QsPythonLogsCleanup.OldFilesCheckIntervalInHours` key. -::: -**To set the retention period for old logs:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key (value in days): - - `` - -2. In the key's `value`, set the retention period, in hours. -3. Save the file. -4. Restart the **Quali Server** application. - -### Setting the retention period for CloudShell Monitor logs - -By default, CloudShell Monitor collects logs that were created or modified within the last 14 days. Using this key, you can change this period. For example, to limit the size of the logs. - -**To set the duration for CloudShell Monitor logs:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Monitor\monitor.config` file, and add the following key (value in days): - - `` - -2. Save the file. -3. Restart the **CloudShell Monitor** application. - -### Disabling the export of usage data to Quali - -By default, Quali exports CloudShell usage data to help us improve CloudShell. If you do not want to share this data, set the `EnableWatcher` key to **False**. - -Note that disabling this key does not prevent CloudShell from sending usage data to **CloudShell Monitor**, but you can prevent that from happening by disabling the `AddUsageDataToMonitoring` key. - -**To disable the export of usage data to Quali:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Disabling the export of usage data to CloudShell Monitor - -By default, **CloudShell Monitor** collects CloudShell usage data, which you can retrieve by saving CloudShell system logs, as explained in [Collecting Logs](../../../troubleshooting/troubleshooting-overview/collecting-logs.md). If you do not want CloudShell Monitor to collect this data, set the `AddUsageDataToMonitoring` key to **False**. - -Note that disabling this key does not prevent CloudShell from sending usage data to Quali, but you can prevent that from happening by disabling the `EnableWatcher` key. - -**To prevent CloudShell Monitor from collecting usage data:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -## Online Help - -### Switching between online and offline help - -CloudShell provides two help packages, an online package and an offline package. By default, the online package is used. - -This key applies to the CloudShell Portal, TestShell Studio, and CloudShell Authoring components. - -**To use the offline help instead of the online help:** - -1. If CloudShell has been upgraded from version 8.0 or below, delete the `KnowledgeBase` folders from: - - `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\` - - `C:\Program Files (x86)\QualiSystems\CloudShell\` - -2. Place the offline help files in the appropriate folder: - - 1. On the CloudShell Server machine, create a folder named `Knowledge Base` in the appropriate path: - - - For CloudShell Portal: `C:\Program Files (x86)\QualiSystems\CloudShell\Portal` - - For Resource Manager Client: `C:\Program Files (x86)\QualiSystems\CloudShell\ResourceManagement` - - For TestShell Studio and TestShell Runner: `C:\Program Files (x86)\QualiSystems\TestShell\Studio` - - For CloudShell Authoring: `C:\Program Files (x86)\QualiSystems\CloudShell\Authoring` - 2. If any of the clients are installed on a different machine, make sure to create the appropriate folder on the client machine. - 3. Create the following folders in that folder: - - - `DRB` - - `Portal` - - `RM` - - `RUN` - - `ST` - 4. Download the component's updated offline help package locally and unzip it. To download the offline help packages, see [All Help Versions](https://help-archive.quali.com/help%20versions/All%20Versions%20Help/Content/Versions.htm). - 5. Place the unzipped folder's contents in the appropriate sub-folder. The folder structure is as follows: - - - `DRB` - CloudShell Authoring help folder - - `Portal` - CloudShell Portal help folder - - `RM` - Resource Manager Client - - `RUN` - TestShell Runner help folder - - `ST` - TestShell Studio help folder -3. Configure CloudShell to use the offline help instead of the online help: - - 1. Open the relevant installation folder: - - `C:\Program Files (x86)\QualiSystems\CloudShell\Authoring` - - `C:\Program Files (x86)\QualiSystems\CloudShell\Portal` - - `C:\Program Files (x86)\QualiSystems\CloudShell\ResourceManagement` - - `C:\Program Files (x86)\QualiSystems\TestShell\Studio` (for TestShell Studio and Runner) - - 2. In each installation folder, do the following: - - 1. Open the `customer.config` file, and enter this key: - - `` - - 2. Save the file. - - 3. Restart the service of the updated components. You can do this by restarting the actual service or running the component's configuration wizard. - - -### Using your own help files in CloudShell portal - -You can use your own help content instead of CloudShell’s. You can switch back to CloudShell help at any time. - -**To use your own help content:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, add the following key: - - `` - - Where `` is the website URL to your web help content - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -**To switch back to CloudShell help content:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, remove the above key or replace it with: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -## PyPi Server - -### Setting the online computer for downloading Python dependencies -:::note -This applies to CloudShell deployments using PyPi Server to retrieve and serve Python dependencies from a dedicated online computer. -::: -**To set the online computer:** - -1. Go to `C:\Program Files (x86)\QualiSystems\TestShell\ExecutionServer\customer.config` file, and add the following key: - - `` - - Where the value is the online computer's hostname/IP address and port - -2. Restart the **TestShell Execution Server** service. - -### Defining the online computer as a trusted host - -This key adds an additional fallback online repository to search if the local PyPi Server and online PyPi repository don't have the missing package(s). -:::note -This applies to CloudShell deployments using PyPi Server to retrieve and serve Python dependencies from a dedicated online computer. -::: -**To define the online computer as a trusted host:** - -1. Go to `C:\Program Files (x86)\QualiSystems\TestShell\ExecutionServer\customer.config` file, and add the following key: - - `` - - Where the value is the hostname or IP address specified in the `RequirementsRepository` configuration key - -2. Restart the **TestShell Execution Server** service. - -### Setting a secondary online Python packages repository - -This key adds an additional fallback online repository to search if the local PyPi Server and online PyPi repository don't have the missing package(s). For example, let's say you have an internal artifactory where you manage your packages, and you would prefer to just pull packages from there instead of our local PyPi repo. -:::note -Make sure to set this key on all execution servers. -::: -To set secondary online Python repo: - -1. Go to `C:\Program Files (x86)\QualiSystems\TestShell\ExecutionServer\customer.config` file, and add the following key: - - `` - - Where the value is the online computer's hostname/IP address and port. For example: - - `https://testpypi.python.org/simple//` - -2. Restart the **TestShell Execution Server** service. - -## Registration, passwords, emails, and licenses - -### Enabling regular users to change their email address - -Email defaults are read-only to all users, except administrators and domain administrators, who can allow regular users to change their email address, when the following key is turned on. - -**To enable regular users to change their email address:** - -1. Go to **C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config** file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Enabling password reset - -This key hides or shows the **Forgot your password?** link in the login page. To get the password reset option to work, you need to also configure the [SMTP mail configuration](../../../install-configure/cloudshell-suite/configure-products/admin-config-settings.md#smtp-mail-configuration) when installing or configuring the Quali Server. By default, this option is disabled. - -![](/Images/Admin-Guide/Setting-Up-CloudShell/PasswordReset.png) - -**To enable password reset:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Hiding the Change Password option - -This key enables users to change their password from the user login menu in CloudShell Portal. By default, this option is enabled. - -![](/Images/Admin-Guide/Setting-Up-CloudShell/ChangePassword.png) - -**To hide the "Change Password" option:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Enabling registration - -Before a new user can register, you need to create the default group and configure the following keys. - -**To enable registration:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following keys: - - `` - - `` - - As well as configure the default role using the following key: - - `` - :::note - DefaultRole is relevant when the group does not exist. - ::: - In this case, the default group is called "Registered Users”. - -2. Save the file and restart the **CloudShell Portal IIS** service. -3. In the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, define the default role, the group’s name, the domain of the group, and the admin’s email address (according to the address set for a system administrator level user in the Resource Manager): - - `` - - `` - :::note - The default additional group is External Users. If you want users to be added to a different group, change the value of the key to another group name. To disable this option, leave this key's value empty. - ::: -4. Save the file. - -5. Restart the **Quali Server** service. - - In order to get to the registration page, you need to post a few parameters to it. Depending on your use case, you can either provide the user and email values (if you already know them) or leave them empty to let the user provide them. You must provide the group name that this user will be added to. You can use the following procedure to create a link that redirects the user to the registration form without providing the user and email details: - -6. Add the following javascript function to the page from where you would like to redirect new users, and modify the default group value: - - ```javascript - function NewUser() { - var redirect = function(url, method) { - var group = document.createElement('input'); - group.name = 'Group'; - group.value = 'Regular Users'; //the group name to add the user to - group.type = 'text'; - var form = document.createElement('form'); - form.method = method; - form.action = url; - form.appendChild(group); - form.submit(); - }; - redirect('http://CloudShellPortal/Account/Register', 'post'); - } - ``` - :::note - The group name that you provide does not have to exist and it will be created upon the first registration. - ::: -7. The link that redirects to the registration form needs to call the above function and might look like this: - - `
    New user?` - - Then, when the user clicks on the link to the registration in his client’s website, he is directed to the CloudShell Registration page and is required to supply only a password. - - After this, a new user should appear in the **Users** tab. - - A different approach would be to create a registration form of your own. In this case your registration form might look like this: - - ```css -
    -
    - UserName - -
    -
    - Email - -
    -
    - -
    - -
    - ``` - - When the user submits this form he will be redirected to the CloudShell Registration page where he will need to provide only the password. - - -### Enabling brute-force protection for logins - -To prevent a brute-force attack trying to find a user/password match that can log in to CloudShell, the Administrator can enable a delay between failed log in attempts. -This adds an extra layer of security by applying exponential delays after defined failed login attempts, with resets on successful login, password change via Resource Manager or Forgot password, or when the MaxDelay time has passed. - -**To enable the delay between failed login attempts:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. To set the maximum failed log in attempts before a user account gets locked, add the following key (the default is 3 attempts): - - `` - -3. To set the lock time for a user that reached the maximum failed log in attempts, add the following key (value is in hours, the default is 10 hours): - - `` - -4. Save the file. -5. Restart the **Quali Server** service. - -### Setting password policies for CloudShell user accounts - -To increase the security with who access CloudShell and reduce easy password guessing, you can set the following password policies that will be enforced upon user creation or password change: -:::note -This does not apply to Single-Sign-On (SSO) users or existing users (until their password changes). -::: -**To enable the password policies:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following keys: - - `` - - `` - - `` - - `` - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -**Update the error message a user gets if their password does not match the policy:** - -1. An error message will be displayed to the users when they try to set a password which is not complying to the configured policies. To update the message to explain to the user what is the required policy, you can update the localization file at `C:\Program Files (x86)\QualiSystems\CloudShell\Server\Localization\LanguageServer.xml` and set a new value to the PasswordPolicyErrorMessage key. - - -### Configuring the workspace to release the license after lying idle for a specified time - -An administrator can configure the relevant applications (detailed below) to automatically release the license by updating a key in the `customer.config` file. The application remains open and when focus is returned to the application, a new license is retrieved. If none is available, a message is issued to notify the user that the license is missing. - -By default, when the application has been lying idle for 65 minutes, the license is released. - -In the following conditions, idle time is not counted: - -- When TestShell Runner is under external control. -- When a Test or function is either running or has paused. -- When a seat license is being used. - -Relevant applications: - -- TestShell Studio -- TestShell Runner -- CloudShell Authoring - -**To change the default idle time for releasing the license in TestShell Studio and TestShell Runner:** - -1. Open the `C:\Program Files (x86)\QualiSystems\TestShell\Studio\customer.config` file, and add the following key: - - `` - -2. Specify the value `0` to disable the idle check. -3. Save the file. -4. Run the **TestShell Studio Configuration Wizard**. - -**To change the default idle time for releasing the license in CloudShell Authoring:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Authoring\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Run the **CloudShell Authoring Configuration Wizard**. - -**To disable the idle check:** - -- In the above key, set `value=0` and run the **CloudShell Authoring Configuration Wizard**. - -### Setting the email validation pattern - -You can specify the email validation pattern to limit the characters the user can enter for the email address (for example, to limit to a company-provided email address per specified string). The default email validation allows the user to insert any email, where the strings can be any character in any language or symbol (separated by "@" and "."). - -**To set the email validation pattern:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, add the following key, and set the relevant value (for example, to limit users to enter email addresses that are specific to a particular company, such as Quali): - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Enabling regular users to change email notifications - -Administrators and domain administrators can allow users to change notifications about their sandboxes when the following key is turned on. - -**To enable regular users to change notifications about their sandboxes:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Setting email notification defaults for sandboxes - -:::note Notes -- The time stamps on sandbox events are in the time zone of the recipient. In the event of multiple recipients in different time zones, CloudShell will send a different email to each time zone's recipients. -- Email notifications require [SMTP mail configuration](../../../install-configure/cloudshell-suite/configure-products/admin-config-settings.md#smtp-mail-configuration). -- It's possible to customize email notification templates. For details, see [Email Notifications Overview](../../../intro/features/email-notifications.md). -::: -**To set the email event defaults for sandboxes, for the sandbox's lifecycle events:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the appropriate keys: - - To send an email notification when the sandbox starts (**On setup** option): - - `` - - To send an email notification when the sandbox is active (**On setup** complete option): - - `` - - To send an email notification when teardown starts (**Before end** option): - - `` - - To send an email notification x minutes before the teardown phase starts: - - `` - - To send an email notification when the sandbox ends (**On end** option): - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -**To include a link to the sandbox in notification emails:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - -`` - -3. Modify the key's values: - - | Parameter | Parameter details | - | --- | --- | - | protocol | http or https if CloudShell Portal is set to use SSL | - | PublicServerName | The DNS name or IP address of the CloudShell Portal virtual front | - | PortalPort | The port which CloudShell Portal is using (If the port is 80 or 443, remove this parameter and the colon from the key value). | - -4. Save the file. -5. Restart the **CloudShell Server** service. - -### Enabling calendar events for future sandboxes - -As an administrator you can configure CloudShell to send calendar invitations for future sandboxes via email. The invitations are suitable for both Outlook and Google calendars. All calendar invitations are sent to the owner of the sandbox only. - -Email notifications can be created for sandboxes that were created either manually or via an API. - -If you extend or end the sandbox, a new event notification will be sent, changing the event time or canceling the event. For more information about extending and ending sandboxes, see [Extend and End Sandboxes](../../../portal/sandboxes/sandbox-workspace/extend-and-end-sandbox.md). -:::note -Email notifications require [SMTP mail configuration](../../../install-configure/cloudshell-suite/configure-products/admin-config-settings.md#smtp-mail-configuration). -::: -**To enable the calendar event:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - -`` - -3. Save the file. -4. Restart the **Quali Server** service. - -### Disabling admin calendar event when user extends/cancels a sandbox - -By default, whenever a user extends the duration of a sandbox or cancels a future one, the system administrator receives a calendar invite. - -**To disable the calendar event:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following keys: - - `` - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Adding additional recipients for sandbox notifications, in addition to the owner - -There are two supported methods to specifying additional recipients that are to be emailed on all sandbox events in addition to the owner. The two methods can be used in conjunction. - -**To specify a hard-coded list of email addresses (the list items should be separated by a semi-colon):** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -**To set more general policies to inform admins and non-admins globally:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following keys: - - `` - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Ensuring admin notifications even if a user disables them - -The admin can specify that he wants to always get a notification for some sandbox events, regardless whether the user disables them in the sandbox. Set the below keys to **True** to have CloudShell send a notification email to the admin/domain admin when the event occurs, or **False** to only send notifications based on the sandbox end-user's settings. - -By default, admin notifications are sent. - -**To ensure admin notifications even if user disables them:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following keys: - - `` - - `` - - `` - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Disabling admin email notifications - -Setting the keys `ReservationEmail.NotifySystemAdmins` and `ReservationEmail.NotifyDomainAdmins` to **False** determines that the admin/domain admin should not receive email notifications for notifications that were enabled in sandboxes by the users that launched them (when reserving the sandboxes). However, the `ReservationEmail.Override` keys, which are enabled by default, will override the admin notification setting and ensure that CloudShell will send email notifications for the specified sandbox events even if these notifications were disabled in a specific sandbox. - -**As such, to completely disable notifications from reaching the admin:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following keys: - - `` - - `` - -2. Disable the appropriate `ReservationEmail.Override` keys. - - For example, disabling the "on start" notification override: - - `` - -3. Save the file. -4. Restart the **Quali Server** service. - -## Sandboxes - -### Allowing users to reserve existing blueprints only - -In some cases, it can be undesirable to allow regular users to create new blank sandboxes. For example, sandboxes that are not based on blueprints cannot run setup scripts that perform important configuration steps on the sandbox, such deploying App VMs and preparing connectivity for public cloud Apps, such as AWS EC2 and Azure. - -**To enforce the rule that users reserve existing blueprints only:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Unlocking sandboxes for use during the Setup process - -*This applies to sandboxes that either use the Default Sandbox Setup script or a modified version of the script. Note that these restrictions do not apply to API methods.* - -During the Setup process, CloudShell prevents users from performing certain actions in the sandbox. This restriction both protects the Setup process from unexpected changes and avoids situations where the user makes changes to the sandbox and the Setup process overrides them. - -The following actions cannot be performed in the sandbox during Setup: - -- Run commands -- Add or remove resources, services and Apps -- Remotely connect to sandbox elements via QualiX - -**To enable users to interact with sandboxes during setup:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Enabling extended permissions for external users - -An external user is limited in the ways they are able to interact with CloudShell Portal. By default, an external user is not allowed to create new sandboxes, for example. - -An external user with extended permissions can also perform actions such as: - -- Resources and Apps: Viewing and controlling the resources in a blueprint or sandbox. This includes managing connections and moving elements in the diagram, viewing resource attributes and commands, and connecting to devices and VMs from the sandbox diagram (using remote connection protocols such as Telnet, SSH, and RDP). -- Blueprints: Using advanced settings when reserving a blueprint and resolving reservation conflicts. -- Sandboxes: Controlling the duration of the sandbox, changing the sandbox properties and input values, exporting diagrams and connections, downloading file attachments, and viewing the sandbox's **Instructions** and **Activity feed**. - -**To enable extended permissions for external users:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** and **CloudShell IIS Portal** services. - -### Allowing sandboxes to be shared only with users in the same group - -By default, the user can share their own sandbox with anyone in the same domain. If you enable this key, only users in the same CloudShell group as the user who created a particular sandbox can use it. - -**To restrict the possible users to users in the same group:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Preventing users reserving a blueprint from viewing Owner and Permitted Users details - -This key controls whether to display the **Owner** and **Permitted Users** details when creating a sandbox (in the **Reserve** dialog box). When enabled, the **Owner** and **Permitted Users** sections will display only the details of the logged in user. If the logged in user is not the designated owner, the **Owner** section will be empty. - -This option is disabled by default. - -**To prevent users reserving a blueprint from viewing Owner and Permitted Users details:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. -4. Then, restart the **CloudShell Portal IIS** service. - -### Preventing users from using the "Reserve Anyway" option to create sandboxes with conflicts - -In some cases, it may be undesirable to allow users to use the **Reserve Anyway** option to create a sandbox with conflicts. - -**To remove the Reserve Anyway option from the interface:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -:::note -When this key is enabled, an administrator will still be able to reserve with conflicts. -This is also the behavior when using the CloudShell automation api. -If however, the logged in admin is trying to create a reservation for a regular user (set the owner to a regular user), this will fail as well if there are conflicts. -::: - -### Allowing regular users to view sandboxes of other users in their domain - -By default, all users in the same domain have visibility of each other’s sandboxes. You can disable this with the following key. - -**To disable non admin users from viewing sandboxes other than their own:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Setting the default duration for new sandboxes - -The default value for all new sandboxes is two hours. - -**To change the default duration for new sandboxes:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key and set the value accordingly: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Disabling the "Recurrence" option when creating sandboxes - -When creating a sandbox, the sandbox can be set to repeat on a schedule. By default, this option is enabled. - -Note that this does not prevent users from modifying existing recurrence settings. - -**To disable the Recurrence option:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key and set the value accordingly: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. -4. Restart the **CloudShell Portal IIS** service. - -### Setting the default maximum concurrent sandboxes limit for CloudShell users - -This key enables you to set the default number of maximum number of live sandboxes any user can own in CloudShell. If this key is not used, users are allowed to own up to 10 scheduled sandboxes. Note that admins can change the default for specific users using Resource Manager Client or the API. - -**To apply this constraint for all new users:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key and set the value for the specified number of sandboxes: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Setting the default maximum scheduled sandboxes limit for CloudShell users - -This key enables you to set the default number of maximum scheduled sandboxes for all users in CloudShell. By default, new users can reserve up to 10 scheduled sandboxes while users migrated from a pre-9.3 Patch 2 version (during upgrade) have an empty value (unlimited). Value "0" means users can only start immediate reservations (no scheduled). Note that admins can change the default for specific users using Resource Manager Client or the API. - -**To apply this constraint for all new users:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key and set the value for the specified number of sandboxes: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Setting the default maximum number of blueprints a user can own - -By default, new users are allowed to own an unlimited number of blueprints. Using this key, the CloudShell administrator can change the number of blueprints new users can own at any given time. By default, new users can own an unlimited number of blueprints (empty value). - -**To apply this constraint for all new users:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key and set the value for the specified number of sandboxes: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Setting the default maximum number of saved sandboxes for CloudShell users -:::note -This only applies if you are using the **Save and Restore** paid add-on. -::: -By default, users are allowed to save as many sandboxes as they require. This is done using the `DefaultUserMaxSavedSandboxes` key. This key applies only to new users or users created in a CloudShell version prior to 9.0 that are migrated for the first time. The default value is empty (unlimited). -:::note -Admins can override the default for specific users in **Resource Manager Client**. -::: -**To set the default maximum number of saved sandboxes:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key and set the value: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Setting the default maximum sandbox duration limit for each user - -By default, users are not restricted to sandboxes up to a certain duration. Using this key, you can apply a maximum duration limit for all new users. It is possible to change the value for specific users later using the application or the API. - -**To apply this constraint for all new users:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key and set the number of minutes as the value (for example, 2 days): - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Setting the maximum number of permitted users per reservation - -Use this key to set the maximum number of permitted users that a single reservation can have. The default is 20. - -**To specify which side panes should be open by default:** - -1. `Open the C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add this key with the appropriate value: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Specifying which side panes should be open by default (sandboxes) - -It is possible to specify that either the instructions side pane or the blueprint commands side pane be opened by default in the **Sandboxes** pages. - -**To specify which side panes should be open by default:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the appropriate key: - - `` - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Controlling whether sandboxes should end automatically - -The server can end sandboxes automatically when their end time arrives, or allow them to go into overtime. Sandboxes that have resources that are marked "in use” can go into overtime when their time ends. Using this configuration key, you can enable sandboxes to go into overtime when their time ends. By default, sandboxes end automatically without going into overtime. -:::note Important -It is not recommended to enable Overtime since it makes managing and troubleshooting conflicts more difficult. -::: -**To enable overtime (have sandboxes not end automatically if "in use" resources are present):** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Showing the **Mark "in use"** option for resources - -This key determines whether the mark in use option is available for sandbox resources. For details see [Mark Resources "in use"](../../../portal/sandboxes/sandbox-workspace/resources/mark-in-use.md). - -To display the Mark "in use" option: - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Preventing regular users from reserving shared resources exclusively - -Administrators can specify that resources marked as "Shared by default" cannot be "unshared" by a regular user. The intent is to apply a policy that prevents exclusive access to some devices, which are meant as shared. - -**To prevent regular users from reserving shared resources exclusively:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Preventing non admin users from viewing the physical sandbox layer - -Administrator can prevent non-admin users from using the **Show Physical Layer** functionality in the web portal, which exposes him to the L1, patch panel, and other physical layer devices. - -**To prevent users from viewing the physical sandbox layer:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Enabling HTML formatting in system and command messages - -HTML formatting such as rich text and hyperlinks is displayed by default in the **Output** console, **Activity Details**, and **Commands** side panes. For security reasons, \ tags are disabled by design. -:::note -Before you begin writing your scripts, you must determine your required output format. If you require a special format other than HTML (for example, XML), you need to set this key to `False` in order to prevent unexpected behavior and erroneous output. -::: -**To disable HTML formatting:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, add the following key, and set the value to `False`: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Limiting the time to keep sandbox Activity Feed/Output data - -This key enables you to set the time, in days, to retain sandbox events data. - -By default, CloudShell keeps sandbox events data for 49+ years (Value "17910"). Setting a retention limit ensures that the CloudShell database is smaller and as a result can improve performance in high throughput deployments. However, a smaller retention period also means that older reservations may not have the entire original Activity Feed data. - -**To change the sandbox Activity Feed/Output retention period:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Set the desired value. -3. Save the file. -4. Restart the **Quali Server** service. - -### Preventing the Output console from opening when new sandbox events occur - -Starting with 2022.1, the **Output** console opens whenever a new sandbox event occurs. This default behavior can be changed using the `AutoOpenCommandOutputOnNewEvents` configuration key. - -**To prevent the Output console from opening automatically:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Enabling users to create ad-hoc sandboxes - -Administrators can enable CloudShell users to start a new sandbox from scratch (ad-hoc). Ad-hoc sandboxes can be based on existing blueprints or by starting a blank sandbox, to which components such as resources and services can be added. - -By default, sandboxes can only be created from existing blueprints. -:::note -Apps based on a public cloud provider, such as AWS EC2 and Azure, cannot be used when creating an ad-hoc sandbox. For additional information, see [Apps in Blueprints](../../../portal/blueprints/creating-blueprints/apps/). -::: -**To enable users to create ad-hoc sandboxes:** - -1. Open the C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. -4. restart the **CloudShell Portal IIS** service. - -### Preventing CloudShell from switching to the domain of a sandbox/blueprint when accessing via URL - -By default, when trying to open a URL to a sandbox from a domain you can access but are not currently logged into, CloudShell prompts the user to switch to the domain (assuming the blueprint is public and the user is permitted to access the sandbox/blueprint). If the user confirms the switch, CloudShell will then open the sandbox/blueprint in its domain. However, you can choose to prevent this domain switch by setting the `AutoSwitchDomain` key. For additional information, see [Opening Sandboxes](../../../portal/sandboxes/opening-sandboxes.md). -:::note -When opening a blueprint from a URL, the domain switch only works if the blueprint URL includes the domain ID. To obtain a blueprint URL with the domain ID, use the CloudShell Automation API's [GetTopologyUrls](pathname:///api-docs/2023.3/python-api/cloudshell.api.html?#cloudshell.api.cloudshell_api.CloudShellAPISession.GetTopologyUrls) method. -::: -**To disable the domain switch when accessing a sandbox/blueprint link:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Showing/hiding user/sandbox details of currently shared resources in CloudShell Portal - -The `ShowSharedResourceUsage` key determines whether to display the list of users and sandboxes that are currently using a shared resource, when viewing the resource's information in the **Inventory** dashboard or **Add Resources** catalog in a blueprint/sandbox. - -By default, this information is displayed, as illustrated in this image: - -![](/Images/Admin-Guide/Setting-Up-CloudShell/UserDetailsOnSharedResource.png) - -**To hide user/sandbox details on a shared resource:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Set List view as the default for sandbox workspaces - -By default, when you open a sandbox, the sandbox's elements are displayed in **Diagram** view. However, you can choose to change the default display mode to **List** view, using this key. For additional information, see [Sandbox List View](../../../portal/sandboxes/sandbox-workspace/sandbox-list-view.md). - -**To set List view as the default:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Preventing regular users from adding/removing resources in sandboxes - -By default, CloudShell enables regular users to add and remove resources in the sandbox. To block this option, enable the following key. As a result, the **Resource** button in the sandbox toolbar will be hidden in the active sandbox. - -Note that this does not apply to admins (who have full access permissions), or external users (who are unable to modify the sandbox diagram). - -**To prevent regular users from adding/removing resources in the sandbox:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Allowing sandboxes with shorter duration than Before end notification - -This section applies to sandboxes that have a **Before end** notification. By default, it is not possible to launch such a sandbox if the sandbox's duration is shorter than the **Before end** notification period. Using this key, you can allow users to launch such sandboxes. - -**To allow launching sandboxes with a shorter duration than the Before end period:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - -`` - -3. Save the file. -4. Restart the **CloudShell Portal IIS** service. - -### Setting the lowest role that can create and use persistent sandboxes (MinimalRoleForPersistentSandbox) - -This does not apply to "External" users, which do not have blueprint "Create" and "Reserve" permissions. External Extended users can reserve persistent sandboxes as long as this key is set to "None". In addition, by definition, users who have "View only" permission in the domain can only create but not reserve blueprints. - -**To set the lowest role for persistent sandboxes:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Set the role. Options are: - - **None (default)** - - - **Regular** - - - **DomainAdmin** - - - **SystemAdmin** - -3. Save the file. -4. Restart the **Quali Server** service. - -### Block non-admin users from ending persistent sandboxes (BlockNonAdminEndingPersistentSandbox) - -To avoid unintended stops of a persistent sandbox by non-admin users, while still permitting them to create or be designated as permitted users in such sandboxes, you can activate the following key. Enabling this key restricts the ability to stop a persistent sandbox solely to domain admin and system admin users. As a result, other users, including sandbox owners, won't have the permission to stop it. - -**To block non-admin users (even owners) from ending persistent sandboxes:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -## Scheduling and Queuing - -***Job Scheduling*** *is available as an add-on. For details, contact your account manager.* - -### Customizing the schedule-ahead buffer for pending jobs - -The scheduling and queuing engine continually tries to find open slots for pending jobs. By default, every 30 minutes. This configuration key enables you to determine the time interval at which the engine searches for available time slots. - -For example, if a job has completed running its tests but the job’s duration hasn’t ended, the job slot is available. However, the next job in queue will have to wait either for the current job's duration to end or the scheduling and queuing engine to run it. - -**To customize the time limits for the schedule-ahead buffer for pending jobs:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key, and set the relevant value: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -## Scheduling and Queuing - -***Job Scheduling*** *is available as an add-on. For details, contact your account manager.* - -### Customizing the schedule-ahead buffer for pending jobs - -The scheduling and queuing engine continually tries to find open slots for pending jobs. By default, every 30 minutes. This configuration key enables you to determine the time interval at which the engine searches for available time slots. - -For example, if a job has completed running its tests but the job’s duration hasn’t ended, the job slot is available. However, the next job in queue will have to wait either for the current job's duration to end or the scheduling and queuing engine to run it. - -**To customize the time limits for the schedule-ahead buffer for pending jobs:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key, and set the relevant value: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Setting allowed job overtime before termination - -The SNQ engine can allow jobs some to go overtime, instead of terminating them. - -This value, set by the admin, is used to add an additional overtime buffer for all jobs. Jobs that exceed their allocated time are considered overtime, and their owner receives a warning email. The buffer is specified as a percentage. - -**To set the job overtime buffer:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key, and set the relevant value: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Controlling the number of recently completed jobs displayed in the Job Scheduling page - -The **Job Scheduling** page in the CloudShell Portal displays the currently running jobs for each suite, as well as a limited number of recently ended jobs. By default, the last two completed jobs will be displayed. - -**To change the number of completed jobs displayed:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key, and set the relevant value: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Working with local tests - -By default, the **Create Suite Template (TestShell)** page in CloudShell Portal's **Job Scheduling** dashboard enables you to select only shared tests to add to the job. Adding this key enables you to select local tests as well. - -**To enable local test selection:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - -`` - -3. Save the file. -4. Restart the **CloudShell Portal IIS** service. - -You must get the latest parameters for the local tests per the execution server on which they are stored. - -**To get environment variables into the batch files:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - -`` - -Separate the relevant parameters with a comma as in the example above. - -4. Save the file. -5. Restart the **CloudShell Portal IIS** service. - -For additional information, see [Setting Up Execution Servers to Run Commands](../../cloudshell-execution-server-configurations/setting-up-execution-servers-to-run-commands.md). - -### Locking a test for editing - -This key enables you to configure if TestShell tests are locked for editing while they are being updated by other users. - -Note that while a test is being edited, other users can still edit this test and save changes, but their changes will not be applied. Setting this key to **True** will pop up an error message if a second user tries to save a locked test and block the action. - -Once the test is saved, all users with the required permission may edit the test. - -You can enable Admin users to unlock tests. See [Enabling TestShell admins to unlock tests in TestShell Studio](./advanced-cloudshell-customizations.md#enabling-testshell-admins-to-unlock-tests-in-testshell-studio). - -**To enable locking a test for editing in TestShell Studio:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - -`` - -3. Save the file. -4. Restart the **Quali Server** service. -5. Rerun the TestShell Configuration Wizard if your TestShell Studio client is installed on a different machine than **Quali Server**. - -### Enabling TestShell admins to unlock tests in TestShell Studio - -**To enable unlocking by an admin:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\TestShell\Studio\customer.config` file, and add the following key: - -`` - -2. Restart the TestShell Studio client. - -### Configurations for running local tests - -For additional information, see [Working with local tests](../../cloudshell-execution-server-configurations/setting-up-execution-servers-to-run-commands.md#working-with-local-tests). - -### Suite notification default severity level - -You can define the default notification severity level for your suite notification emails. - -**To set a default:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - -`` - -Other possible values are `None`, `SuiteAndErrors`, and `All`. - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -### Setting the Test Execution Report Template for Automation Suite Tests - -For additional information, see [Setting the Test Execution Report Template for Automation Suite Tests](../../../portal/job-scheduling/view-execution-history/view-test-reports/setting-test-execution-report-template.md). - -### Setting the maximum number of steps for test reports - -Reports of very large TestShell tests (over 10,000 steps) may take a long time to open and in some cases, may not open at all. To prevent this from happening, it is recommended to set a limit on the maximum number of steps allowed in a test report. - -The default is 10,000. - -**To set the maximum number of steps for test reports:** - -1. Open the appropriate file: - - - For reports created in TestShell Studio and Runner: `C:\Program Files (x86)\QualiSystems\TestShell\Studio\customer.config` file. - - For reports created in CloudShell Portal automation suites: `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file. -2. Add the following key: - - `` - -3. Set the value, as appropriate. -4. Save the files. -5. Run the **TestShell Studio Configuration Wizard** for Studio or Runner, or restart the **CloudShell Portal IIS** service for CloudShell Portal. - -### Setting the default Reporting Profile for automation suite jobs - -This key sets the default logging profile for automation suite tests. For tests that are executed in TestShell Studio and Runner, the default logging profile is defined globally in the application itself . - -The default value is: Results - -**To set the default Reporting Profile for jobs:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - - Possible values are: - - - **Results** logs only the execution results (results of following tools: Pass, Fail, Text To Report, Criteria, Attributes). - - **Measurements and Results** logs execution results and measures of all tools with output. - - **All** logs all results and outputs of the test execution (including tools without outputs). - - **None** runs the test without logging any output or result. - -2. Set the value, as appropriate. -3. Save the file. -4. Restart the **CloudShell Portal IIS** service. - -### Enabling non-admin users to edit and create suite templates - -**To enable non-admins to edit and create suite templates:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -## Scheduling commands - -### Controlling the time a command can stay in "pending" state - -This key determines the period a resource or blueprint command can be in the commands queue before it is automatically canceled. - -**To set the timeout period:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Set the timeout period, in minutes. The default is 10. -3. Save the file. -4. Restart the **Quali Server** service. - -### Enabling concurrent blueprint scripts - -Set this key to **True** to enable multiple blueprint script commands to run at the same time in a sandbox. This enables the **Default Sandbox Setup** script to run other scripts as part of its own execution. - -This option is disabled by default. - -:::note -To enable a resource driver's commands to run concurrently, in **Resource** **Manager** **Client**, open the **Resource** **Families** explorer and in the resource model's **Drivers** tab, select **Supports** **Concurrent** **Commands**. -::: -**To enable blueprint scripts to run concurrently:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -## Search - -It is possible to customize the resource search experience and scope using several configuration keys. - -### Showing/hiding the bulk add resources option in the search side pane - -The functionality to add a bulk of resources at once to a sandbox can be useful, especially in cases where the user needs to add hundreds of ports, storage LUNs or any other type of device to a sandbox. In such a scenario, dragging them in one-by-one might not be relevant. - -However, if that scenario is not relevant, you can disable this option for the user. - -**To disable the bulk add resources option:** - -1. Open the C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Controlling the resource types the user can drag into the sandboxes - -This can be useful if the admin wants to hide certain resources from the search pane results only, when the user is selecting which resource to add to his/her sandbox. In this manner, for example, it is possible to ensure that the user only uses the chassis/port level for certain device types, and avoid the confusing of many sub slot/blade/port group hierarchies. - -**To control the resource types the user can drag into sandboxes:** - -1. Open the C:\\Program Files (x86)\\QualiSystems\\CloudShell\\Server\\customer.config file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. -4. In the **Resource Manager client**, in the **Resource Families** explorer, click a resource family. In the **Parameters** area, set the **Searchable** property according to the required visibility.  - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/ConfigurationScreen.png) - - -### Controlling which attributes to display as filters - -As the user searches the database, automatic filtering attributes appear in the search panel and can be used to further focus the search. To avoid clutter, you can specify which attribute should be used for filtering in the **Resource Manager Client**. - -**To control which attributes to display as filters:** - -- Open the **Resource** **Manager** **Client**'s **Attributes** tab and add the **Displayed in Search Results** rule to the relevant attributes. - -### Advanced: Controlling the number of attributes and values filters retrieved for search results - -As the user searches the resources database, automatic attribute filters appear based on the search results. It is possible to configure the maximal number of these attribute filters and the maximal number of values for filtering. This can be useful if your resources have numerous relevant attributes which you want the user to be able to filter by, or if you want to reduce clutter and focus the user only on the most common attributes. - -**To control the maximum number of filtering attributes:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key and set the value (the default is 10 attributes): - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -**To control the maximum number of possible values per attribute:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key and set the value (the default is 5): - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -## Single Sign On (SSO) - -*SSO/SLO configuration is available with CloudShell Premium Tier.* - -For information about configuring Single Sign-On and SAML, see [Configuring Single Sign-On (SSO)](../../cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configure-sso/index.md). - -## TestShell Studio - -### Preventing regular users (non-admins) from creating tests and folders in the Shared test folder - -By default, non-admins can create tests and folders (in TestShell Studio) under the `Shared` root. To only allow domain admins and global admins to create tests and folders in the `Shared` test folder, disable the `AllowNonAdminToCreateTestsUnderSharedRoot` key. - -:::note -Shared tests and assets are stored in the MS SQL database -::: -**To prevent regular users from creating tests and folders:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, and add the following key: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -### Hiding the "Shared" test folder from Job Scheduling - -(This key applies to the original Job Scheduling) By default, the `Shared` test folder is accessible from Job Scheduling. However, you can hide the `Shared` test folder, preventing automation suite designers from using its tests in their automation suites. - -**To hide the "Shared" test folder:** - -1. Open the C:\Program Files (x86)\QualiSystems\CloudShell\Portal\customer.config file, and add the following key: - - `` - -2. Save the file. -3. Restart the **CloudShell Portal IIS** service. - -## Related topics - -- [Customer Configuration Keys Repository](./customer-configuration-keys-repository) diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/_category_.json b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/_category_.json deleted file mode 100644 index fafeb434dc..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Customer Configuration Keys Repository", - "position": 4 -} diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/abstract-resources.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/abstract-resources.md deleted file mode 100644 index 73aab174be..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/abstract-resources.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Abstract Resources - -## Randomized abstract resource selection - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## Change the number of matches that are considered for abstract sub-resource requirements - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value1000
    Affected CloudShell ComponentCloudShell Portal
    Version2021.1 and above
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/api.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/api.md deleted file mode 100644 index 8e4ff8ca51..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/api.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -sidebar_position: 2 ---- - -# API - -For configuration keys related to API SSO, see [SSO Login to CloudShell APIs](../../../../devguide/available-cs-api/sso-login-to-cs-api.md). - -## Setting the response page size - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value1000
    Affected CloudShell ComponentCloudShell API
    Version8.1 and above
    - -## Extending the API authorization token validity period - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in minutes)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value300
    Affected CloudShell ComponentCloudShell API
    Version6.4 and above
    diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/apps.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/apps.md deleted file mode 100644 index 266723269f..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/apps.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Apps - -## Set the default category for new Apps - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible values\ = the new default category
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueApplications
    Affected CloudShell ComponentCloudShell Portal
    Version7.0 and above
    - -## Enable the modification and deletion of App templates only from the template's domain - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version8.2 and above
    diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/blueprint-catalog.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/blueprint-catalog.md deleted file mode 100644 index d61f884c5c..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/blueprint-catalog.md +++ /dev/null @@ -1,426 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Blueprint Catalog - -## New blueprints section: visibility - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## New blueprints section: number of blueprints to display - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (suggested 1-20)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value5
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## New blueprints section: maximum age for new blueprints - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (number of days)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value-1 (to not restrict to any timeframe)
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## Recently modified section: visibility - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## Recently modified section: number of blueprints to display - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (suggested 1-20)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value5
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## Display most recently reserved blueprints in the **Blueprint Catalog**'s **Featured** view, in which you are either the owner or a permitted user - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/changecustomer.config CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## Blueprint Catalog: Set the maximum number of recently reserved blueprints to display in the **Featured** view's **Recently Reserved** section - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value5
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## Specify categories of the blueprints to display in the **Featured** section of the **Blueprint Catalog** - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesCategory names, separated by comma
    Where to add/changecustomer.config CloudShell Server installation directory
    Default valueN/A
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## Display all blueprints in the main Blueprint Catalog - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## Blueprint display modes - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## Hide the **Status** filter - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    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
    - -## Enable **View** type blueprints - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version6.2.3 and above
    - -## Enable reference architecture flows - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version6.2 and above
    - -## Hide templates that require order to disable creating blueprints using those templates - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.2 and above
    - diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/blueprint-workspace.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/blueprint-workspace.md deleted file mode 100644 index 1bd11b8a53..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/blueprint-workspace.md +++ /dev/null @@ -1,305 +0,0 @@ ---- -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
    diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/connectivity-management-and-route-configuration.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/connectivity-management-and-route-configuration.md deleted file mode 100644 index f377266df2..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/connectivity-management-and-route-configuration.md +++ /dev/null @@ -1,216 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Connectivity Management and Route Configuration - -## Set the maximum number of hops allowed per route - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value6
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## Enable automatic route configuration (automatically configures L1 connections) - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## Enable regular users to change their email address - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version7.0 and above
    - -## Enable regular users to change email notifications - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## Set the default number of max hops displayed for routes (in the connection’s Max Hops field in the Resource Connections dialog box) - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in hops)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value2
    Affected CloudShell ComponentCloudShell Portal
    Version6.1 and above
    - -## Set the default connection type when creating a connection - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesText
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueRoute
    Affected CloudShell ComponentCloudShell Portal
    Version6.2 and above
    - -## Set the supported connection types for new connections - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesConnection type, separated by comma
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueRoute, Cable, Tap, Connector
    Affected CloudShell ComponentCloudShell Portal
    Version6.2 and above
    - diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/execution-server.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/execution-server.md deleted file mode 100644 index 8a73c1e13f..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/execution-server.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -sidebar_position: 7 ---- - -# Execution Server - -- For Python package handling keys, see [PyPi Server](./pypi-server). - -- For execution server configurations and customizations, see [Optimizing Execution Provisioning](../../../cloudshell-execution-server-configurations/optimizing-execution-provisioning.md). diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/general.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/general.md deleted file mode 100644 index e76605625d..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/general.md +++ /dev/null @@ -1,664 +0,0 @@ ---- -sidebar_position: 8 ---- - -# General - - ## Show/hide the main navigation bar components - -Show/hide the main navigation bar components (HideSnQ, HideReservations, HideTopologies, HideInventory) - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key - `` - -`` - -`` - -`` -
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueFalse for all keys
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - - -## Set the default home page - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible values - Scheduling and queueing: "SnQ/Scheduler/" - -Topologies: "RM/Topology" - -Reservations: "RM/" - -Any other page relative address. -
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueThe topologies dashboard URL ("/RM/Topology")
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## Add the Contact option to the user menu in CloudShell Portal - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesurl
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueN/A (disabled)
    Affected CloudShell ComponentCloudShell Portal
    Version7.0 and above
    - -## Specify the number of resource driver executions that can run in parallel - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value20
    Affected CloudShell ComponentQuali Server
    Version6.0
    - -## Enable user definitions to be imported from an active directory - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesDomain names
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueN/A
    Affected CloudShell ComponentCloudShell Portal
    Version6.3 and above
    - -## Manual import of users using LDAP or Active Directory - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible values - `ActiveDirectoryPlugin` - -`LdapPlugin` - requires additional configurations - see [LDAP Integration](../../../cloudshell-identity-management/access-control-and-authentication/ldap-integration.md) -
    Where to add/changecustomer.config CloudShell Server installation directory
    Default value`ActiveDirectoryPlugin`
    Affected CloudShell ComponentCloudShell Portal
    Version7.0 and above
    - -## Import user from external system (Active Directory, LDAP) if it does not exist in TestShell - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.1 and above
    - -## Disable **DBCC TRACEON** - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False (True = DBCC TRACEON is enabled)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.1 and above
    - -## Set the user cache timeout value in seconds - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in seconds)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value600
    Affected CloudShell ComponentCloudShell Portal
    Version6.1 and above
    - -## Specify the path for the packaging logs - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesText
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueInstallation path:=`:\Program Files(x86)\QualiSystems\CloudShell\Server\Packaging Logs`
    Affected CloudShell ComponentCloudShell Portal
    Version6.2.3 and above
    - -## Define the Instructions pane size - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in pixels)
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default value540
    Affected CloudShell ComponentCloudShell Portal
    Version7.1 and above
    - -## Set the default Python version for new Python scripts - -Python 3 automation requires Microsoft Visual C++ Redistributable 2015 x86 and x64 to be installed on the Execution Server(s). - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible values - `Python 2` - -`Python 3` -
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valuePython 3
    Affected CloudShell ComponentExecution Server
    Version9.2 and above
    - -## Show the **Drivers** management page - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False (True = Hide **Drivers** tab is enabled)
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version9.2 and above
    - -## Hiding the CloudShell Portal footer - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False (False = hide the footer)
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version2021.3 and above
    - -## Allowing the execution of orchestration scripts without the need for a blueprint driver - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False (False = disable the ability to run orchestration scripts directly from Quali Server and require the use of a blueprint driver)
    Where to add/changetemp
    Default value`customer.config` CloudShell Server installation directory
    Affected CloudShell ComponentCloudShell Server
    Version9.3 and above
    - -## Increasing the time allowed for Quali Server to stop during upgrade - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in seconds)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value30
    Affected CloudShell ComponentCloudShell Server
    Version2021.3 and above
    - -## Change the default Quali API port - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (port number)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value9000
    Affected CloudShell ComponentQuali API
    Version6.4 and above
    - -## Hide Approval Request content from CloudShell Portal - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version2023.1 and above
    - -## Enabling the automatic removal of expired approval requests - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version2023.1 and above
    - -## Setting the expiration timeout for approval requests - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in hours)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value168
    Affected CloudShell ComponentCloudShell Portal
    Version2023.1 and above
    - -## Setting the interval for detecting for expired approval requests - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in hours)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value24
    Affected CloudShell ComponentCloudShell Portal
    Version2023.1 and above
    diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/index.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/index.md deleted file mode 100644 index 45182a5fa6..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/index.md +++ /dev/null @@ -1,27 +0,0 @@ -# Customer Configuration Keys Repository - -The customer configuration keys repository is arranged in the following categories: - -- [Abstract resources](./customer-configuration-keys-repository/abstract-resources) -- [API](./customer-configuration-keys-repository/api) -- [Apps](./customer-configuration-keys-repository/apps) -- [Connectivity management and route configuration](./customer-configuration-keys-repository/connectivity-management-and-route-configuration) -- [Blueprint Catalog](./customer-configuration-keys-repository/blueprint-catalog) -- [Blueprint Workspace](./customer-configuration-keys-repository/blueprint-workspace) -- [Execution Server](./customer-configuration-keys-repository/execution-server) -- [General](./customer-configuration-keys-repository/general) -- [Inventory dashboard](./customer-configuration-keys-repository/inventory-dashboard) -- [New Job Scheduling](./customer-configuration-keys-repository/new-job-scheduling) -- [LDAP Integration](./customer-configuration-keys-repository/ldap-integration) -- [Monitoring](./customer-configuration-keys-repository/monitoring) -- [Online Help](./customer-configuration-keys-repository/online-help) -- [PyPi Server](./customer-configuration-keys-repository/pypi-server) -- [Registration, passwords, emails, and licenses](./customer-configuration-keys-repository/registration-passwords-emails-and-licenses) -- [Sandboxes](./customer-configuration-keys-repository/sandboxes) -- [Scheduling and Queuing](./scheduling-and-queuing.md) -- [Scheduling commands](./customer-configuration-keys-repository/scheduling-commands) -- [Search](./customer-configuration-keys-repository/search) -- [Single Sign On (SSO)](./single-sign-on-sso.md) -- [TestShell Studio](./customer-configuration-keys-repository/testshell-studio) - -For more information on the use of each configuration key and for examples, see [Advanced CloudShell Customizations](../advanced-cloudshell-customizations.md). diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/inventory-dashboard.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/inventory-dashboard.md deleted file mode 100644 index 386dcb65e2..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/inventory-dashboard.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -sidebar_position: 9 ---- - -# Inventory Dashboard - -## Allow regular users to reserve resources from the **Inventory** dashboard - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False (True = allow this option for regular users)
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version9.1 and above
    - diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/ldap-integration.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/ldap-integration.md deleted file mode 100644 index b11e2ae613..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/ldap-integration.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -sidebar_position: 11 ---- - -# LDAP Integration - -See [LDAP Integration](../../../cloudshell-identity-management/access-control-and-authentication/ldap-integration.md). diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/monitoring.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/monitoring.md deleted file mode 100644 index 16a9fd279c..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/monitoring.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -sidebar_position: 12 ---- - -# Monitoring - -## Set the duration for CloudShell Monitor logs - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric
    Where to add/change`monitor.config` Monitor installation directory
    Default value14 (in days)
    Affected CloudShell ComponentCloudShell Monitor
    Version9.1 and above
    - -## Disable the export of usage data to Quali - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Server
    Version9.2 GA and above
    - -## Disable the export of usage data to **CloudShell Monitor** - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Monitor
    Version9.2 GA and above
    - diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/new-job-scheduling.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/new-job-scheduling.md deleted file mode 100644 index b925594ee1..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/new-job-scheduling.md +++ /dev/null @@ -1,116 +0,0 @@ ---- -sidebar_position: 10 ---- - -# New Job Scheduling - -## Switching between Sandbox Services - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible values - True: Use Quali Server's out-of-the-box Sandbox Service - -False: Use Kubernetes-based Sandbox Service -
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Server
    Version2020.2 and above
    - -## Allowing Quali Server to access the Kubernetes-based Sandbox Service - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key - `` - -`` -
    Possible values - SandboxServiceHost - Ip address/hostname - -SandboxServiceRestPort - port number -
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value8888 - default port number
    Affected CloudShell ComponentCloudShell Server
    Version2020.2 and above
    - -## Allowing Quali Server to access the Kubernetes-based RabbitMQ Service - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key - `` - -`` -
    Possible values - RabbitHostname - Ip address/hostname - -RabbitPort - port number -
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value15671 - default port number
    Affected CloudShell ComponentCloudShell Server
    Version2020.2 and above
    - diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/online-help.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/online-help.md deleted file mode 100644 index 90bf523157..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/online-help.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -sidebar_position: 13 ---- - -# Online Help - -## Determine if to use online help or offline help - -For additional information, see [Switching between online and offline help](../advanced-cloudshell-customizations.md#online-help). - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False (True = online help)
    Where to add/change`customer.config` CloudShell Portal / TestShell Studio / CloudShell Authoring / Resource Manager Client installation directory (as appropriate)
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal / TestShell / Authoring / Resource Manager Client
    Version6.4 and above
    - -## Use non-CloudShell help content - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible values - "Empty" = CloudShell help content - -\ = different help content -
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueEmpty
    Affected CloudShell ComponentCloudShell Portal
    Version6.4 and above
    - diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/pypi-server.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/pypi-server.md deleted file mode 100644 index ad4bdefc1f..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/pypi-server.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -sidebar_position: 14 ---- - -# PyPi Server - -## Set the online computer's name and port -:::note -This applies to CloudShell deployments using PyPi Server to retrieve and serve Python dependencies from a dedicated online computer. -::: - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valueshostname or IP address and port
    Where to add/change`customer.config` CloudShell Execution Server installation directories
    Default valueN/A
    Affected CloudShell ComponentExecution Server
    Version8.2 and above
    - -## Define the online computer as a trusted host -:::note -This applies to CloudShell deployments using PyPi Server to retrieve and serve Python dependencies from a dedicated online computer. -::: - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valueshostname or IP address specified in the `RequirementsRepository` configuration key
    Where to add/change`customer.config` CloudShell Execution Server installation directories
    Default valueN/A
    Affected CloudShell ComponentExecution Server
    Version8.2 and above
    - -## Set a secondary online python packages repository -:::note -Make sure to set this key on all execution servers. -::: - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible values - hostname or IP address and port. For example: - -`` -
    Where to add/change`customer.config` CloudShell Execution Server installation directories
    Default valueN/A
    Affected CloudShell ComponentExecution Server
    Version8.2 and above
    - diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/registration-passwords-emails-and-licenses.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/registration-passwords-emails-and-licenses.md deleted file mode 100644 index f0091b62cb..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/registration-passwords-emails-and-licenses.md +++ /dev/null @@ -1,345 +0,0 @@ ---- -sidebar_position: 15 ---- - -# Registration, Passwords, Emails, and Licenses - -## Enable registration - -Enable registration (Requires also setting the Registration.AdminEmail key, as explained below) (Registration.Enabled) - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Set email address for a system administrator level user - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key - `` - -Where `admin@company.com` is the email address of a **Resource Manager Client** system administrator -
    Possible valuesEmail address, separated by semi-colons (;)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueN/A
    Affected CloudShell ComponentCloudShell Server
    Version6.0 and above
    -## Configure registered user permissions - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesDefault domain
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueN/A
    Affected CloudShell ComponentCloudShell Server
    Version6.0 and above
    -## Configure registered user permissions - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesText
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueExternal Users
    Affected CloudShell ComponentCloudShell Server
    Version6.0 and above
    -## Configure the default role when a user is registered - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesText
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueRegular
    Affected CloudShell ComponentCloudShell Portal
    Version6.1 and above
    -## Enable password reset - -This also requires configuring the SMTP mail. See [Enabling password reset](../advanced-cloudshell-customizations.md#enabling-password-reset). - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Hide the "Change Password" option from the user menu - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Enable delaying failed login attempts/brute-force protection - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Server
    Version2023.3 and above
    -## Change the default idle time for releasing the license - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in minutes)
    Where to add/change`customer.config` CloudShell Portal / CloudShell Authoring / TestShell Studio installation directory
    Default value65
    Affected CloudShell ComponentTestShell Studio/TestShell Runner/CloudShell Authoring
    Version6.3 and above
    -## Change the email validation pattern - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key - `` - -Where the email address strings can include any character in any language or symbol (separated by "@" and "."). For example, to limit the email address to a particular company, set value="[^\s@]+@company\.com" -
    Possible valuesText, email address string
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueEmail address format (*@*.*)
    Affected CloudShell ComponentCloudShell Portal
    Version7.0 and above
    -## Include a link to the sandbox in notification emails - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key - `` - -| Parameter | Parameter details | -| --- | --- | -| `protocol` | http or https if CloudShell Portal is set to use SSL | -| `PublicServerName` | The DNS name or IP address of the CloudShell Portal virtual front | -| `PortalPort` | The port which CloudShell Portal is using (If the port is 80 or 443, remove this parameter and the colon from the key value). | -
    Possible valuesText, email address string
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueN/A
    Affected CloudShell ComponentCloudShell Portal
    Version7.0 and above
    diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/sandboxes.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/sandboxes.md deleted file mode 100644 index 06285c6c93..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/sandboxes.md +++ /dev/null @@ -1,1385 +0,0 @@ ---- -sidebar_position: 16 ---- - -# Sandboxes - -## Controlling the time a command can stay in "pending" state - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in minutes)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value10
    Affected CloudShell ComponentCloudShell Portal
    Version6.4 and above
    -## Enable users to share a sandbox only with other users of the same groups - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Prevents users reserving a blueprint from viewing **Owner** and **Permitted Users** details - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version9.0 and above
    -## Unlock sandboxes for use during the Setup process - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version8.1 and above
    -## Enable extended permissions for external users - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change - `customer.config` CloudShell Server installation directory - -\* Requires restarting both the **Quali Server** and **CloudShell Portal IIS** services. -
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Prevent users from using the **Reserve Anyway** option - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config CloudShell Server installation directory`
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -:::note -When this key is enabled, an administrator will still be able to reserve with conflicts. -This is also the behavior when using the CloudShell automation api. -If however, the logged in admin is trying to create a reservation for a regular user (set the owner to a regular user), this will fail as well if there are conflicts. -::: - -## Enable regular users to view sandboxes of other users in their domain - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Set the default duration for new sandboxes - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in hours)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value2
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Disable the "Recurrence" option when creating sandboxes - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version8.2 and above
    -## Set the default maximum number of sandboxes a user can have at the same time - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value10
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Set the default maximum number of scheduled sandboxes a user can have at the same time - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible values - Numeric - -empty value - unlimited number of scheduled sandboxes allowed - -0 - no scheduled sandboxes allowed -
    Where to add/changecustomer.config CloudShell Server installation directory
    Default value10/empty (unlimited) for users migrated from a pre-9.3 Patch 2 CloudShell
    Affected CloudShell ComponentCloudShell Portal
    Version9.3 Patch 2 and above
    -## Set the default maximum number of blueprints a user can own at any given time - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric
    Where to add/change`customer.config` Quali Server installation directory
    Default valueempty (unlimited)
    Affected CloudShell ComponentQuali Server
    Version2021.3 and above
    -## Set the default maximum number of saved sandboxes a user can create with the **Save and Restore** add-on - -This key applies only to new users or users created in a CloudShell version prior to 9.0 that are migrated for the first time. -:::note -Admins can configure the maximum number of saved sandboxes for a specific user in Resource Manager Client or via API, when updating user settings or when creating a new user. -::: - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric
    Where to add/change`customer.config` Quali Server installation directory
    Default valueempty (unlimited)
    Affected CloudShell ComponentQuali Server
    Version9.0 and above
    -## Set the default maximum sandbox duration limit for each user - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesdays:hours:minutes:seconds
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value1:00:00:00
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Set the maximum number of users per reservation - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value20
    Affected CloudShell ComponentCloudShell Portal
    Version7.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
    -## Determine whether sandboxes should end automatically - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible values - True/False (True - auto end sandbox at end time / False = allow sandbox to enter overtime -:::note Important -It is not recommended to enable Overtime since it makes managing and troubleshooting conflicts more difficult. -::: -
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Show the **Mark "in use"** option for resources - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False (True - hides the option) **Mark "in use"** option / False = displays **Mark "in use" option**
    Where to add/change`customer.config` Quali Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version9.2 and above
    -## Prevent non-admin users from reserving shared resources exclusively - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False (False = resources marked as ‘Shared by default’ cannot be ‘unshared’ by regular user)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Prevent non-admin users from viewing the physical connection layer in the sandboxes dashboard - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Set email notification defaults for sandboxes - notify when sandbox is reserved - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Server
    Version6.0 and above
    -## Set email notification defaults for sandboxes - notify when setup completes - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/changecustomer.config CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Server
    Version9.3 GA and above
    -## Set email notification defaults for sandboxes - notify when teardown is scheduled to start - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Server
    Version6.0 and above
    -## Set email notification defaults for sandboxes - notify x minutes before sandbox is scheduled to end - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in minutes)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value10
    Affected CloudShell ComponentCloudShell Server
    Version6.0 and above
    -## Set email notification defaults for sandboxes - notify when sandbox ends - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Server
    Version6.0 and above
    -## Add additional recipients for sandbox notifications - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesEmail addresses, separated by semi-colons
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueN/A
    Affected CloudShell ComponentCloudShell Server
    Version6.0 and above
    -## Set general policies to inform system admins - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Server
    Version6.0 and above
    -## Set general policies to inform domain admins - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Server
    Version6.0 and above
    -## Set general policies to inform domain admins - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Server
    Version6.0 and above
    -## Force admin notifications **On Start** even if user disables them - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible values - True - send an email notification to the admin/domain admin when the sandbox starts - -False - send an email notification according to the sandbox end-user's settings when booking the sandbox -
    Where to add/changecustomer.config CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Server
    Version6.0 and above
    -## Force admin notifications **On setup complete** even if user disables them - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Server
    Version9.3 GA and above
    -## Force admin notifications **Before End** even if user disables them - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible values - True - send an email notification to the admin/domain admin before the sandbox ends - -False - send an email notification according to the sandbox end-user's settings when booking the sandbox -
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Server
    Version6.0 and above
    -## Force admin notifications **On end** even if user disables them - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible values - True - send an email notification to the admin/domain admin when the sandbox ends - -False - send an email notification according to the sandbox end-user's settings when booking the sandbox -
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Server
    Version6.0 and above
    -## Enable users to create ad-hoc sandboxes - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.2 and above
    -## Enable HTML formatting in **Output** console, **Full Activity Feed** and **Commands** side pane - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version7.0 and above
    -## Limit the time to keep sandbox **Activity Feed/Output** data - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in days)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value17910
    Affected CloudShell ComponentCloudShell Server
    Version2020.2 EA and above
    -## Prevent the **Output** console from opening when new sandbox events occur - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version2021.3 EA and above
    -## Configure a calendar event for future sandboxes - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Server
    Version7.1 and above
    -## Disable admin calendar event when user extends (or cancels a future) sandbox - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key - `` - -`` -
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Server
    Version8.2 and above
    -## Prevent users from accessing sandbox links in a different domain - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version9.0 and above
    -## Show/hide user/sandbox details of currently shared resources in CloudShell Portal - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue (show user/sandbox details)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version8.2 and above
    -## Set **List** view as the default for sandbox workspaces - -For additional information, see [Sandbox List View](../../../../portal/sandboxes/sandbox-workspace/sandbox-list-view.md). - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/changecustomer.config CloudShell Portal installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version9.2 and above
    -## Prevent regular users from adding/removing resources in sandboxes - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Server
    Version9.2 GA and above
    -## Allow sandboxes with shorter duration than Before end notification - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/changecustomer.config CloudShell Portal installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Server
    Version2022.2 GA
    -## Set the lowest role that can create and use persistent sandboxes - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.2 and above
    diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/scheduling-and-queuing.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/scheduling-and-queuing.md deleted file mode 100644 index cb8bb41040..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/scheduling-and-queuing.md +++ /dev/null @@ -1,306 +0,0 @@ ---- -sidebar_position: 17 ---- - -# Scheduling and Queuing - -***Job Scheduling*** *is available as an add-on. For details, contact your account manager.* - -For local tests configurations, see [Working with local tests](../../../cloudshell-execution-server-configurations/setting-up-execution-servers-to-run-commands.md#working-with-local-tests). - -## Set allowed job overtime before termination - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in percentage)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value10
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Set number of recently completed jobs to display in the scheduler - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value2
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Set the default job time buffer for extra time for tests, per job - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in minutes)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value10
    Affected CloudShell ComponentCloudShell Portal
    Version6.1 and above
    -## Lock a test for editing - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version7.1 and above
    -## Admin unlock permission - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` TestShell Studio installation directory
    Default valueFalse
    Affected CloudShell ComponentTestShell Studio
    Version7.1 and above
    -## Set the default severity level for suite notification emails - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNone, ErrorsOnly, SuiteAndErrors, All
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueErrorsOnly
    Affected CloudShell ComponentCloudShell Portal
    Version7.1 and above
    -## Set the report template to use for tests executed in the Job Scheduling dashboard - -*To set the default execution report template for tests that were executed in Remote Runner, see Specifying the default report template.* - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTest Results, Test Steps, Detailed Report, Failure Report
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueTest Results
    Affected CloudShell ComponentCloudShell Portal
    VersionBefore 7.0
    -## Set the maximum number of steps for test reports - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric
    Where to add/change`customer.config` CloudShell Portal/TestShell installation directory
    Default value10000
    Affected CloudShell ComponentCloudShell Portal, TestShell Studio and Runner
    VersionBefore 7.0
    -## Set the default Reporting Profile for automation suite jobs - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible values - Results, Measurements and Results, All, None - -For details, see [Setting the default Reporting Profile for automation suite jobs](../advanced-cloudshell-customizations.md#setting-the-default-reporting-profile-for-automation-suite-jobs). -
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueResults
    Affected CloudShell ComponentCloudShell Portal
    VersionBefore 7.0
    -## Enable non-admin users to edit and create suite templates - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version6.3 and above
    diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/scheduling-commands.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/scheduling-commands.md deleted file mode 100644 index d64b8506e2..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/scheduling-commands.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -sidebar_position: 18 ---- - -# Scheduling Commands - -## Enable blueprint scripts to run concurrently - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Server
    Version8.0 and above
    -## Setting Quali Server's timeout period for L1 drivers -:::note -For more information, see [Set the timeout period for L1 drivers](../../../setting-up-cloudshell/inventory-operations/connectivity-control/l1-switches.md#set-the-timeout-period-for-l1-drivers). -::: - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric (in seconds)
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value1
    Affected CloudShell ComponentCloudShell Server
    Version7.1 and above
    diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/search.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/search.md deleted file mode 100644 index d8c20eeb70..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/search.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -sidebar_position: 19 ---- - -# Search - -## Show/hide the bulk add resources option - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Ensure the user only uses the chassis/port level for certain device types - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Specify the maximum number of filtering attributes - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value10
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Specify the maximum number of possible values per attribute - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesNumeric
    Where to add/change`customer.config` CloudShell Server installation directory
    Default value5
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/single-sign-on-sso.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/single-sign-on-sso.md deleted file mode 100644 index c2df60fa22..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/single-sign-on-sso.md +++ /dev/null @@ -1,540 +0,0 @@ ---- -sidebar_position: 20 ---- - -# Single Sign On (SSO) - -## SSO – Change the login page in case the user logs out - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesText
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueN/A
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## SSO – Enable or disable SSO - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesToken, Header, None
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueToken
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## SSO – Enable or disable using Token mode - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesToken, Header, None
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueToken
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## SSO – Configure token encryption using Rijndael symmetric encryption key (32 bytes) - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesAny multiple of 32 bits
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueAs set in the QsTeamServer.exe.config file in the Quali Server installation directory
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## SSO – Configure token encryption using Rijndael symmetric encryption key IV (16 bytes) - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesAny multiple of 16 bits
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueAs set in the QsTeamServer.exe.config file in the Quali Server installation directory
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    -## Header mode – used when the username is added to one of the HTTP headers - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesAny username that is added to one of the HTTP headers
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueToken
    Affected CloudShell ComponentCloudShell Portal
    Version6.0 and above
    - -## SAML Single Sign On (SSO) - -*SSO/SLO configuration is available with CloudShell Premium Tier.* - -For step-by-step instructions on how to use these configuration keys, see [Configuring SAML Single Sign-On (SSO)](../../../cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configure-sso/index.md#configuring-samlsingle-sign-on-sso). -:::note -CloudShell supports SAML v2.0. If you encounter an error, please contact your SAML administrator. -::: -## SAML SSO – Enable SAML SSO authentication - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version6.4 and above
    -## SAML SSO – Configure the Assertion Consumer Service URL - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesURL string with the address of the CloudShell Portal (including server IP address and port number)
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueN/A
    Affected CloudShell ComponentCloudShell Portal
    Version6.4 and above
    -## SAML SSO – Configure the URL of the Identity Provider - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesURL of the Identity Provide (IdP)
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueN/A
    Affected CloudShell ComponentCloudShell Portal
    Version6.4 and above
    -## SAML SSO – Configure the address of the login page (CustomAbsoluteLoginPage) - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesText, URL string with the address of the CloudShell Portal (including server IP address and port number)
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueN/A
    Affected CloudShell ComponentCloudShell Portal
    Version6.4 and above
    -## SAML SSO – Configure the deflate/inflate compression when processing SAML requests - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueTrue
    Affected CloudShell ComponentCloudShell Portal
    Version6.4 and above
    -## SAML SSO – Configure the name of the certificate key file (.pfx file) to sign the SAML request with - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesText, if the certificate is locked with a password use a semicolon and provide the password (as shown in the above example)
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueN/A
    Affected CloudShell ComponentCloudShell Portal
    Version6.4 and above
    -## SAML SSO – Configure the HTTP method to use when issuing the SAML request to the Identity Provider - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesGet, Post, Redirect
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueRedirect (which does not check for browser compatibility)
    Affected CloudShell ComponentCloudShell Portal
    Version6.4 and above
    -## SAML SSO – Redirect the user to a specified URL whenever the user browses the SAML consumer endpoint without a response - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesURL string or Null
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueNULL (which means the user will not be redirected and ultimately will get an error message saying the response is empty)
    Affected CloudShell ComponentCloudShell Portal
    Version6.4 and above
    -## SAML SSO – Redirect the user to a specified URL whenever the user browses the CloudShell Portal login page - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesURL string (In SAML and SSO context, this key is usually used to hide the login page and redirect incoming users to the SAML endpoint. Some environments (like Huawei) use it to redirect users when they log off of the portal back to their landing page.)
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueN/A
    Affected CloudShell ComponentCloudShell Portal
    Version6.4 and above
    -## SAML SSO – Redirect the user to a specified URL whenever the user browses the CloudShell Portal logout page - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesURL string , where [server] is the IdP server's IP or DNS
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueN/A
    Affected CloudShell ComponentCloudShell Portal
    Version6.4 and above
    -## SAML SSO – Enable direct access to CloudShell Portal - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version7.1 and above
    -## SAML SSO – Change the name of the Domain attribute which defines the CloudShell domain to associate the user to -:::note -This attribute may be added when setting up users in an IdP, to log a user into a specific domain if a user belongs to more than one domain. For more information, see [Set up an Identity Provider (IdP)](../../../cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configure-sso/index.md#set-up-an-identity-provider-idp). -::: - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesText
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueDomain
    Affected CloudShell ComponentCloudShell Portal
    Version8.2 and above
    diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/testshell-studio.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/testshell-studio.md deleted file mode 100644 index 1ce8789b4a..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customer-configuration-keys-repository/testshell-studio.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -sidebar_position: 21 ---- - -# TestShell Studio - -## Prevent regular users (non-admins) from creating tests and folders in the Shared test folder - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Server installation directory
    Default valueFalse
    Affected CloudShell ComponentTestShell Studio
    Version6.1.1 and above
    -## Hiding the "Shared" test folder from Job Scheduling - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Key``
    Possible valuesTrue/False
    Where to add/change`customer.config` CloudShell Portal installation directory
    Default valueFalse
    Affected CloudShell ComponentCloudShell Portal
    Version6.4 and above
    diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customizing-email-notification-templates.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customizing-email-notification-templates.md deleted file mode 100644 index f936254aeb..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customizing-email-notification-templates.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -sidebar_position: 7 ---- - -# Customizing Email Notification Templates - -CloudShell email notifications are based on HTML templates, which can be customized as appropriate. - -:::note Important -Make backup copies of any templates you want to customize just in case you need to revert back. Upgrading CloudShell will override any custom templates you have so make sure to keep backups. - -After modifying these files, restart the Quali Server service for the changes to take effect. -::: - -These templates reside on the Quali Server machine at `C:\Program Files (x86)\QualiSystems\CloudShell\Server\EmailTemplates` and use a combination of text and CloudShell variables that pass information from CloudShell. - -For example, the "Sandbox Ending" email template: - -![](/Images/Admin-Guide/Setting-Up-CloudShell/EmailNotificationTemplate.png) - -The "Sandbox Ending" email notification: - -![](/Images/Admin-Guide/Setting-Up-CloudShell/EmailNotificationExample.png) - -## Email templates - -### Job templates: - -- **JobExecutionEnded**: Emailed when a job's execution has finished. -- **JobExecutionEnding**: Emailed when a job's blueprint reaches overtime. -- **JobExecutionStarted**: Emailed when a job's execution starts. -- **JobSuiteEnded**: Emailed when all of a suite's jobs have finished their execution. -- **JobSuiteStarted**: Emailed when a suite's execution starts. - -### Reservation templates: - -- **MultipleServersAreUsingTheDatabase**: When Quali Server detects that another Quali Server is already using the Quali SQL database, CloudShell sends this email and disables itself to prevent data consistency issues. - -- **PermittedUserAddedToReservation**: Emailed to users when they are added as permitted users to an a sandbox. -- **ReservationCanceled**: Emailed when the sandbox is canceled. -- **ReservationEnded**: Emailed when the sandbox is torn down. Corresponds to the On end email notification defined on the sandbox. -- **ReservationEnding**: Emailed before a sandbox begins teardown. Corresponds to the Before end email notification defined on the sandbox. -- **ReservationPending**: Emailed when a future sandbox is reserved. -- **ReservationRescheduled**: Emailed when a sandbox's duration has been modified. -- **ReservationSetupCompleted**: Emailed when a sandbox's setup phase completes. Corresponds to the On setup complete email notification defined on the sandbox. -- **ReservationStarted**: Emailed when a sandbox is reserved. Corresponds to the On start email notification defined on the sandbox. - -### License templates: - -- **LicenseExtendedReservationLimitExceeded**: Emailed to users when their reservation request is rejected because they have reached their concurrent reservations limit. -- **LicensePoolLimitExceeded**: Emailed to users when their reservation request is rejected because the domain's concurrent reservations limit has been reached. -- **LicenseReservationLimitExceeded**: Emailed to users who have reached their concurrent reservations limit. - -## Available variables - -### Reservation variables: - -- **Now**: Time at which the email notification was sent. -- **ReservationName**: Sandbox name. -- **ReservationStartTime**: Time at which the sandbox was reserved. -- **TimeZone** -- **ReservationMainTopology**: Blueprint on which the sandbox is based. -- **ReservationLink / ReservationLinkHelp**: Used in the link to the sandbox workspace. For example: - - ```javascript - {{ReservationLinkHelp}} - ``` - -- **ReservationOwner**: Owner of the reservation. Reservation creator by default. -- **ReservationId**: Sandbox ID -- **ReservationEndTimeWithTimeZoneOrPersistent**: Planned end time. "No end time" is displayed for persistent sandboxes. -- **ReservationDescription**: Sandbox description. -- **ReservationResources**: Details of the sandbox's resources. -- **ReservationNumberOfResources**: Number of resources in the sandbox. -- **ReservationConflicts**: Resource conflicts that occurred when reserving the sandbox. - -### Job variables: -:::note -For some of these variables, the information provided depends on the type of execution - job or suite. -::: -- **SuiteName**: Automation suite name. -- **JobName** -- **StartDate**: Job/suite execution start date, depending on the notification. -- **EndDate**: Job/suite execution end date, depending on the notification. -- **Result**: Job/suite execution result, depending on the notification. -- **Owner**: Owner of the job or suite. -- **TriggeredBy**: Indicates how the Automation Suite was triggered: Manual ("User”), API or Scheduled. -- **Description** -- **TopologyName**: Blueprint attached to the job. -- **TotalNumberOfTests**: Number of tests in the job. -- **State**: Job's completion state. -- **Result**: Job/suite execution result. For details, see [Viewing Test, Job and Suite Execution Results](../../../portal/job-scheduling/view-tests-job-suite-execution-results.md). -- **FailureReason** -- **JobSuitePage**: Link to the suite's execution page. -- **JobPageLink**: Used to build the link to the job''s execution page. For example: - - ```javascript - To view job progress click here - ``` - - -### License variables: - -- **MessageTitle**: Title of the email notification. For example: "Reservations Limit Exceeded". -- **ReservationOwner** -- **ReservationName** -- **LimitExceededDate**: Date at which the concurrent reservation limit was reached. -- **LimitExceededTime**: Time at which the concurrent reservation limit was reached. -- **TimeZone** -- **Domain**: Domain in which the limit was reached. -- **LicensePoolName**: Name of the domain's license pool, which indicates the domain's number of allowed concurrent reservations. diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customizing-the-language-file.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customizing-the-language-file.md deleted file mode 100644 index 8ea126ebd6..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/customizing-the-language-file.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Customizing the Language File - -Language files are used to support various languages and locales. -:::note -Another way to customize CloudShell Portal is to change its design elements, such as the background color and logo. For more information, see [Rebranding CloudShell Portal (White Labeling)](./rebranding-cloudshell-portal-white-labeling.md). -::: -## Retitling CloudShell Portal GUI elements - -This procedure explains how to change the display text of GUI elements in CloudShell Portal. If you want to use text in a different language, see [Localizing CloudShell Portal](#localizing-cloudshell-portal). - -**To retitle the captions of specific GUI elements in CloudShell Portal:** - -1. Go to the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\Localization\CloudShell` folder, and add a new file named `LanguagePortal.Override.xml` if it is missing. - -2. Go to the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\Localization` folder, open `LanguagePortal.xml` (the regular portal language file), and copy any key into the new file, and override its value. - - If you would like to change a large number of keys it is possible to copy the complete content of `LanguagePortal.xml` into `LanguagePortal.Override.xml` and then edit only the necessary values in `LanguagePortal.Override.xml`. - -3. Be sure to preserve any XML hierarchy in the original file. - :::important - CloudShell upgrade will override the `LanguagePortal.Override.xml` file, so please make sure to keep a copy of your latest language file somewhere safe. - ::: -4. To apply, restart the **CloudShell Portal IIS** service or open CloudShell Configuration and perform the **CloudShell Portal** configuration. - - -## Localizing CloudShell Portal - -This procedure explains how to retitle certain GUI elements in CloudShell Portal to a different language. - -**To localize CloudShell Portal:** - -1. Go to the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\Localization` folder. -2. Create a copy of the `LanguagePortal.xml` file and add the language code before the file extension. For a list of supported file codes, click [here](/attachments/Locales.pdf). - - For example, changing GUI elements to be in Danish: - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/LanguageFileChangeLanguage.png) - -3. Edit the necessary values in the new file. -4. Restart the **CloudShell Portal IIS** service or open CloudShell Configuration and perform the **CloudShell Portal** configuration. - - Users can now change the language in CloudShell Portal. For additional information, see [Changing the Language in CloudShell Portal](../../../portal/overview/change-language.md). diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/index.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/index.md deleted file mode 100644 index 3fbd9260f8..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/index.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudShell Configuration Options - -The customer configuration keys enable you to customize different aspects of the CloudShell Portal, including look & feel, workflows, access privileges, connectivity and route configurations, and more. For identity management and access control, see [CloudShell Identity Management](../../../admin/cloudshell-identity-management/index.md). - -## Related Topics - -- [Customizing the Language File](./customizing-the-language-file.md) -- [Managing CloudShell Portal Tours](./managing-cloudshell-portal-tours.md) -- [Advanced CloudShell Customizations](./advanced-cloudshell-customizations.md) -- [Customer Configuration Keys Repository](./customer-configuration-keys-repository/index.md) -- [Rebranding CloudShell Portal (White Labeling)](./rebranding-cloudshell-portal-white-labeling.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/managing-cloudshell-portal-tours.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/managing-cloudshell-portal-tours.md deleted file mode 100644 index 4fa2cd31f8..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/managing-cloudshell-portal-tours.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Managing CloudShell Portal Tours - -CloudShell Portal includes some basic out-of the-box web tour (tutorial) templates (for the **Blueprint Catalog**, blueprint workspace, and **Sandboxes** dashboard). These web tours can be used as is, or customized as required. You can also create your own new custom tours. The component used for the tour is the 3rd party [Bootstrap tour API](http://bootstraptour.com/api/). Once a tour is configured, you can manually launch it via the **Tutorials** menu in CloudShell Portal. - -The tours configuration is defined in the `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\tours.config` file. -:::note -Do not modify the `tours.config` file directly. You should instead copy the `tours.config` file (with its XML structure) into a new file named `customertours.config` and make modifications in the new customized file. This will prevent overriding your changes when you upgrade CloudShell versions. -::: -Each tour has the following definitions: - -```javascript - - - - - - - - -``` - -## Special considerations - -- The file should be the JavaScript file name located in the folder `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\Scripts\lib\tours`. -- The auto-start is per user per browser (per unique CloudShell URL). It is possible to have more than one tour per CloudShell webpage, but only one tour should be defined as auto-start enabled (`autostart="true"`) for that URL. The `autostart` key is optional. -- The visibility selector allows to show a tour based on a CSS selector in a page. This may be useful when you wish to add a tour for a specific sandbox, blueprint, and so on. The `visibility-selector` key is optional. -- There is no need to restart QualiServer/IIS when updating the `tours.config` file. - -## Creating tours - -This procedure explains the steps required for creating custom CloudShell Portal tours. - -**To create CloudShell Portal tours:** - -1. Manually create the new configuration file. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\`, copy and paste the `tours.config` file into the same folder, and rename it to `customertours.config`. -2. The `customertours.config` file should contain the same XML structure as the original `tours.config` file. However, you need to replace all instances of `` with ``, as shown in the following sample template: - - ```javascript - - - - - - - ``` - -3. Add/update/remove steps from your tour using the 3rd party [Bootstrap tour](http://bootstraptour.com/). - -4. Once the new tour template is created, you can manage the web tours exactly as in the original `tours.config` file. The tours should be uploaded to CloudShell Portal in the same way. - - -The new `customertours.config` file will not be deleted during CloudShell upgrades, and the customer tours settings will remain intact. - -## Disabling tours - -To disable a tour, you can either remove it from the `tours.config` file or comment it out to hide it but save the tour's definition. - -**To disable a tour:** - -1. Go to `C:\Program Files (x86)\QualiSystems\CloudShell\Portal\` and open the `tours.config` file. - - The file has the following three tours by default. - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/ToursConfig.png) - -2. Comment out the lines of the tours you want to hide. For example: - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/ToursConfigComment.png) - -3. Save the file. -4. Restart CloudShell Portal and log in. - - The **Tutorials** menu is no longer visible in the CloudShell Portal pages of the disabled tours. diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/rebranding-cloudshell-portal-white-labeling.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/rebranding-cloudshell-portal-white-labeling.md deleted file mode 100644 index 19de50a53f..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/rebranding-cloudshell-portal-white-labeling.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Rebranding CloudShell Portal (White Labeling) - -*CloudShell white labeling is available with CloudShell Premium Tier via your Customer Success Manager.* - -It is possible to customize the look and feel of certain elements in CloudShell Portal to match your organization's branding and color scheme. This includes changing design elements such as the logo and the color of different elements including the main menu and dashboard toolbars. - -For Example: - -![](/Images/CloudShell-Portal/Portal-Main-Menu.png) -:::note -You can also apply branding per domain, to enable users from different domains to see different branding than the one defined globally. -::: -The elements that can be customized are: - -| Element | Description | -| --- | --- | -| Application body | Background color of the application body | -| Upper header (navigation bar) | Main menu of the application. Here you can change the colors of the background and the text | -| Logo box | Logo box in CloudShell Portal header, including its background color, border radius, and the logo image (42\*42 pixels maximum image size) | -| Secondary header | Color of the dashboard/catalog/workspace headers | -| Actions bar | Color of the toolbar under the dashboard/catalog headers | -| Busy indicator | Color of the loading screen | -| Dialog window background | Background color of CloudShell Portal when dialog boxes are open | -| Powered by Quali footer | Background color of the CloudShell Portal footer. It is also possible to hide the footer altogether. | -:::note -Another way to customize CloudShell Portal is to change the text of CloudShell Portal elements, such as button names and menu items. For example, you can change the text to your local language. For more information, see [Customizing the Language File](./customizing-the-language-file.md). -::: \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/resizing-the-value-box-of-text-global-inputs.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/resizing-the-value-box-of-text-global-inputs.md deleted file mode 100644 index 3beea6fc34..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/resizing-the-value-box-of-text-global-inputs.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Resizing the value box of "text" global inputs - -This is useful for global inputs that include json values. - -**To resize the global input value box:** - -1. Edit the appropriate `customer_override.css` file. -2. Add the following code block: - - ```javascript - #globalParametersView > ul > li > div:nth-child(1) > div.global-value.cell > div.qs-editable-input > div.qs-inputContainer > textarea - { - max-height: 200px !important; /* change the max height */ - min-height: 70px !important; /* change the default height */ - width: 450px !important; /* make it wider */ - left: -85px !important; /* if you make it wider you should also move the box to the left */ - } - ``` - -3. Save the file. -4. Restart the browser and open CloudShell Portal. diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/save-sandbox-configurations.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/save-sandbox-configurations.md deleted file mode 100644 index 69c3f6d3c4..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-configuration-options/save-sandbox-configurations.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -sidebar_position: 8 ---- - -# Save Sandbox Configurations - -The CloudShell **Save and Restore** paid add-on has a number of administrative elements that are important to the proper usage of this feature. - -## Save and restore license - -**Save and Restore** is a paid add-on. For details, contact your account manager. - -## Set the maximum number of saved sandboxes for a particular user - -**To set the maximum number of saved sandboxes for a particular user:** - -- See [Adding new users manually](../../cloudshell-identity-management/managing-users/managing-cloudshell-users.md#adding-new-users-manually). - - \- or - -- Use the **UpdateUserLimitations** method in the CloudShell Automation API. For more information visit the [CloudShell API Overview](../../../api-guide/cs-api-overview.md). - -## Set the default maximum number of saved sandboxes for CloudShell users - -By default, users are allowed to save as many sandboxes as they require. This is done using the `DefaultUserMaxSavedSandboxes` key. This key applies only to new users or users created in a CloudShell version prior to 9.0 that are migrated for the first time. The default value is empty (unlimited). -:::note -Admins can override the default for specific users in **Resource Manager Client**. -::: -**To set the default maximum number of saved sandboxes:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key and set the value: - - `` - -2. Save the file. -3. Restart the **Quali Server** service. - -See [Advanced CloudShell Customizations](./advanced-cloudshell-customizations.md) for additional information on the `DefaultUserMaxSavedSandboxes` configuration key. - -## Enable save in a blueprint - -You can only save a sandbox if its blueprint has the **Enable Sandbox Save** check box enabled. - -**To save a sandbox and later restore it, you must configure certain blueprint properties (General page):** - -- In the **Save Sandbox** area, ensure that the **Enable Sandbox Save** is checked. -- In the **Scripts** area, ensure that **Default Sandbox Save** and **Default Sandbox Restore** scripts are included in the blueprint properties. - -For more information, see [Add save and restore orchestration scripts](../../../portal/blueprints/creating-blueprints/configure-orchestration.md#add-save-and-restore-orchestration-scripts). - -## vCenter/OpenStack advanced saving configurations - -Several **Snapshot management** permissions are required on the role of the vCenter user defined in the cloud provider resource (See [Required vCenter User Permissions per Deployment Type](../../supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/required-vcenter-user-permissions-per-deployment-type.md)). For OpenStack, the save process is a bit different as the shell creates a snapshot of the App and it'll be located in the Image section in the OpenStack web portal. - -The following configurations can be made on vCenter cloud provider resources or App templates. Configurations made on an App template will override the vCenter cloud provider resource configuration and the settings will apply only to that specific App. - -- **Behavior during save**: The VM's state while the sandbox is being saved. Options are **Remain Powered On** (default) and **Power Off**. -- **Saved Sandbox Storage**: During the saving process, CloudShell creates a clone of the sandbox's App VMs in this vCenter storage, which CloudShell will later use to restore the VM when the user restores the saved sandbox. - -For more information see [Add VMware vCenter Cloud Provider Resource](../../supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md) and [Adding App templates](../../cloudshell-manage-dashboard/manage-app-templates/index.md#adding-app-templates). - -## Extending save and restore blueprint scripts - -See the CloudShell Dev Guide's [Save and Restore Orchestration](../../../devguide/develop-orch-scripts/cs-oob-orch/index.md#save-and-restore-orchestration) to learn more about how to extend save and restore blueprint scripts. diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-deployment-overview.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-deployment-overview.md deleted file mode 100644 index 34881c2748..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-deployment-overview.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -sidebar_position: 1 ---- - -# CloudShell Deployment Overview - -To manage a lab, you need to add all your equipment into CloudShell via **Resource Manager**. - -In CloudShell, the devices are considered resources. - -After adding your equipment into CloudShell, you will need to create your resources. Resources are based on what we call shells. A shell is a CloudShell entity that defines the resource's metadata, attributes, and automation, and resource structure. CloudShell supports two types of shells, 1st Gen and 2nd Gen resources. Learn more at [Shells Overview](../../intro/features/shells.md). - -CloudShell can only manage devices it knows about, so you will first need to import the shells into CloudShell and then create your resources. - -The admin user is responsible for populating CloudShell and ensuring that all devices are loaded to the lab. - -The admin user is responsible for setting up the resource repository. - -Set up the user groups and resource domains, and then add or import users to the system. diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-resource-management-client.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-resource-management-client.md deleted file mode 100644 index d234ef2d9a..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/cloudshell-resource-management-client.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -sidebar_position: 2.5 ---- - -# CloudShell Resource Manager Client - -The CloudShell Resource Manager Client is an administration tool for setting up and managing CloudShell deployment. - -Presently, Resource Manager Client enables CloudShell admins to: - -- Manage CloudShell identities and user permissions (users, groups and domains) -- Manage 1st Gen shells -- Manage global attributes -- Set up CloudShell license pools -- View all resources in CloudShell, regardless of domain (reserved for system admins) -- Gain visibility into CloudShell domains (view domain contents, share resources across multiple domains) - -Additional management and administrative actions are available in CloudShell Portal, including managing 2nd Gen shells, Apps and services, automation, domain categories, execution servers, blueprint templates and more. - -## Related Topics - -- [CloudShell Administration](../index.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/customizing-the-start-page-in-resource-manager-client/_category_.json b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/customizing-the-start-page-in-resource-manager-client/_category_.json deleted file mode 100644 index 381c467019..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/customizing-the-start-page-in-resource-manager-client/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Customizing the Start Page in Resource Manager Client", - "position": 5, - "link": { - "type": "generated-index", - "description": "The Resource Manager Client's start page can be customized to match your personal preferences. The following topics describe the customization options available. The Resource Manager Client's start page is built from an .xml file that comes installed with the application. It allows providing both local and remote information to the user, and supports offline and online modes." - } -} diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/customizing-the-start-page-in-resource-manager-client/about-the-start-page-in-resource-manager-client.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/customizing-the-start-page-in-resource-manager-client/about-the-start-page-in-resource-manager-client.md deleted file mode 100644 index c8810711f7..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/customizing-the-start-page-in-resource-manager-client/about-the-start-page-in-resource-manager-client.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -sidebar_position: 1 ---- - -# About the Start Page in Resource Manager Client - -The **Resource Manager Client**'s start page is built from an xml file that comes installed with the application. It allows providing both local and remote information to the user, and supports offline and online modes. - -In each application folder there is a StartPage sub folder that contains the local xml. - -This xml has the whole information that the application needs to display the start page to the user. - -Editing the file on one station will not affect the others. You'll have to publish/copy the new file to the other stations as well. - -Upgrading to a new version of CloudShell will overwrite the xml, so make sure you have a backup of the xml that you edit. - -There is no way to add links to the start page in between the QualiSystems links. You can only add new tabs or replace the current ones with your own. - -## Before you start - -Editing the file in a wrong way might cause some exceptions when you'll start the application (it will not harm the work with the application – but it's not designed to accept xml errors). - -Please make sure you have a backup of the original file and verify that it works on one station before sending it to the others. - -## XML structure - -The start page has few levels to organize the information: - -![](/Images/Admin-Guide/Setting-Up-CloudShell/The-start-page-is-built-from.png) - - - - - - - - - - - - - - - - - - - - - - - - -
    Tabdifferent kind of information comes in different tabs
    Subjectunder a tab, you can group the information into subjects
    Topicyou can then have different topics that each covers part of the subject
    Sub Topicfor each video/sample you can then specify the sub topic
    Linkand provide the different links for it
    - -## XML markup - -### Tab - -```markup -Subjects… -``` - -**Source –** - -You can specify this argument if you want to take the tab content from a remote/shared location. A remote xml file will have the same structure exactly, but it should contain only the relevant tab (with the same title). - -If you don't specify it, or if the remote file could not be accessed the tab will fall back to show the local information (subjects that you define inside the tab section). If there is no local information – the tab will not appear. - -**Title –** The title for the tab. - -### Subject - -```markup -Topics… -``` - -**Title –** The title for the subject. - -### Topic - -```markup -SubTopics… -``` - -**Title –** The title for the topic. - -**Description –** Description of the topic and what you can find in it. The description will appear below the title. - -**Image –** You can point to an image file that represents the topic. Provide a full path if the file is not located in the start page folder (could be an online link as well). When not providing any file name (or removing this attribute) a default image will be used. - -### Sub Topic - -```markup -Links… -``` - -**Title –** The title of the sub topic. - -### Link - -```markup - -``` - -**Type –** Can be one of: Video – Path to a video file/url to a video on the web. -Web – Opens a web browser with the provided target will open a test if it is located locally. - -**Title –** The title of the link. - -**Target –** File path or url, according to the Type. diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/customizing-the-start-page-in-resource-manager-client/annotated-start-page-example.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/customizing-the-start-page-in-resource-manager-client/annotated-start-page-example.md deleted file mode 100644 index 2b40eeaaa3..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/customizing-the-start-page-in-resource-manager-client/annotated-start-page-example.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Annotated Start Page Example - -## Example code will be used to show a Get Started tab - -```markup - - - - - - - - - - - -``` - -## Explanation - -First it will try to get the content of the tab from the provided source. - -```markup - -``` - -If it is not available it will use the fall back code (Studio subject). - -```markup - -… - -``` - -If it is not available it will use the fall back code. - -In this case, the fall back has one subject (Studio). - -```markup - -… - -``` - -And that subject has just one topic: ("Studio in action") with a description and an image file. - -```markup - -… - -``` - -In this topic there is only one sub topic, and this sub topic has two links: one for a test and one for a video. - -```markup - - - - -``` diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/defining-the-target-server.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/defining-the-target-server.md deleted file mode 100644 index 249d866d5c..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/defining-the-target-server.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Defining the Target Server - -Make sure that SQL is set up on the target server, and that all CloudShell clients have access to the QualiServer. - -Make sure that the IT department knows about the CloudShell deployment and that the CloudShell database is added to the scheduled backup routine. - -Ensure all relevant credentials for the database instance are available at the time of installation. - -Prepare any 3rd party applications for working with CloudShell. - -Prepare a list of all L1 switches and traffic generators, including the IP address and login information for each device. - -Prepare a list of all CloudShell users, including their email address and login information. - -Prepare a CSV file listing your lab equipment devices. This will allow you to automate most of the import process. - -Resource Manager domains are virtual subsets of lab equipment and devices. Define the target domains for your lab. Define the target user groups. Specify which groups of users will have access to each domain. Groups are allowed either active or view-only access to domains. - -It is recommended to start with a validation domain that contains a subset of representative resources. The representative subset can be reused in the future as a validation domain. diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/_category_.json b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/_category_.json deleted file mode 100644 index e9860b4753..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Inventory Operations", - "position": 7 -} diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/adding-and-configuring-resources/_category_.json b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/adding-and-configuring-resources/_category_.json deleted file mode 100644 index c25cbc8b12..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/adding-and-configuring-resources/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Adding and Configuring Resources", - "position": 2 -} diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/adding-and-configuring-resources/adding-and-configuring-resources-in-resource-manager.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/adding-and-configuring-resources/adding-and-configuring-resources-in-resource-manager.md deleted file mode 100644 index bc550d4296..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/adding-and-configuring-resources/adding-and-configuring-resources-in-resource-manager.md +++ /dev/null @@ -1,167 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Adding and Configuring Resources in Resource Manager - -:::note -This article only applies to resources based on 1st Gen shells. While CloudShell supports 1st Gen shells, we recommend using 2nd Gen shells, which offer enhanced shell management capabilities. For details, see [Shells Overview](../../../../intro/features/shells.md). -::: - -This article explains how to manually create resources in Resource Manager, including sub-resources (such as ports), connections, attributes, and resource settings. - -Drivers, groups and domains must be associated to the resources separately. For additional information, see [Associating a Driver with a Resource](./associating-a-driver-with-a-resource.md) and [Adding/Removing Resources from a Domain](../../../cloudshell-identity-management/cloudshell-domains/addingremoving-resources-from-a-domain.md) . - -:::note -It is recommended to add resources based on 2nd Gen Shells via the CloudShell Portal, to enjoy the full range of CloudShell capabilities. For additional information, see [Shells Overview](../../../../intro/features/shells.md). -::: - -## Adding resources to Resource Manager - -**To create a new resource:** - -1. In the **Resource Explorer** pane, right-click the folder where you want to add the new resource and select **New > Resource** from the context menu. - - Or - - - In the toolbar, click the down arrow of the folder button and select **Resource** from the context menu. - - ![](/Images/Admin-Guide/Inventory-Operations/Inven-Opers.png) - -2. In the **New Resource** dialog box, enter the resource name. - - Note: The resource's name has a limit of 100 characters and can only contain alpha-numeric characters, spaces, and the following characters: | . - \_ \] \[ - ![](/Images/Admin-Guide/Inventory-Operations/Inven-Opers_1.png) - -3. Fill in the address. Make sure there are no spaces before or after the address. - -4. Select the resource Family, Model, and Driver from the dropdown lists and click **OK** to add the new resource to the **Resource Explorer** pane. - - -## Adding sub resources to a resource - -**To add sub-resources to a resource:** - -1. In the **Resource Explorer** pane, right-click the resource and select **Configuration** from the context menu. - - The **Configuration** tab is displayed. - -2. Right-click the resource in the **Internal Resources** explorer, and select **New** from the context menu. - -3. In the **New Resource** dialog box, enter the resource name. - - **Note:** The resource's name has a limit of 100 characters and can only contain alpha-numeric characters, spaces, and the following characters: | . - \_ \] \[ - ![](/Images/Admin-Guide/Inventory-Operations/Inven-Opers_1.png). - -4. Fill in the address. -5. Select the resource Family, Model, and Driver from the dropdown lists and click **OK**. -6. Press **Ctrl + S** to save the changes. - -:::note -When you select a sub-resource in the Internal Resources Explorer, the Parameters and Details sections update to display resource details for the selected sub-resource. -::: - -## Configuring sub-resources - -**To configure a resource**: - -1. In the **Resource Explorer** pane, right-click a resource and select **Configuration** from the context menu. - - The Configuration tab is displayed. - -2. In the **Parameters** section of the resource's Configuration tab, you can update the resource name, description, and address. - - You can also select which driver to associate with the resource. - ![](/Images/Admin-Guide/Inventory-Operations/Inven-Opers_5_New.png) - - -- The list of available drivers for a resource is defined by the inheritance settings of the parent model or resource family. -- Select the **Details** tab to modify any overridable attribute values. -- Select the **Domains** tab to modify resource allocation settings. -- The **Groups** tab displays which groups are associated with the resource, and the access level for each group. -- In the **Resources Explorer** pane, you can add, edit, and remove internal resources. Additional actions are available from the resource's Settings and Configuration tabs from which you can exclude, include and sync/autoload the device's structure. - -## Updating resource details - -You can update the following details: resource name, description and address, attribute details, domains, sub resources, and internal mappings. - -**To update resource details**: - -1. In the **Resource Explorer** pane, right-click the resource and select **Configuration** from the context menu. - - The **Configuration** page is displayed. - -2. Make the necessary changes in the **Configuration** and **Settings** tabs. -3. Save your changes. - -## Updating attribute values - -**To update an attribute's values**: - -1. In the **Resource Explorer** pane, right-click the resource and select **Configuration** from the context menu. - - The Configuration tab is displayed. - -2. Click the **Details** tab. - -![](/Images/Admin-Guide/Inventory-Operations/Inven-Opers_9_New.png) - -4. Specify the attribute's values. -5. Press **Ctrl + S** to save the changes. - -:::note -Some attribute values will be read-only, depending on the inheritance and override rules that you defined for the resource family and model. -::: - -:::danger Important -The attribute inheritance feature will be deprecated in an upcoming release. Please do not use this setting. For additional information, see [Configuring attribute inheritance settings](../resource-data-modeling-for-1st-gen-shells/defining-the-resource-data-model.md#configuring-attribute-inheritance-settings) or contact [Quali Support](https://register.quali.com/). -::: - -You cannot update attribute values for active resources when they are being shared. - -## Defining resource connections - -**To define physical connections (usually cables) between resource ports**: - -1. In the **Resource Explorer** pane, right-click the resource and select **Configuration** from the context menu. - - The Configuration tab is displayed. - -2. Click the **Connections** button at the bottom of the Configuration tab. - -![](/Images/Admin-Guide/Inventory-Operations/Inven-Opers_11.png) - -The **Connections** page lists all of the ports for the selected resource. - -![](/Images/Admin-Guide/Inventory-Operations/Inven-Opers_12.png) - -- The **Path** column displays the full path of a specific port. -- The **Name** column displays the name of the port. -- The **Connected To** column contains the full path of the target port to which the source port is connected. -- The **Connection Weight** value is taken into account during abstract blueprint resolution. - -**To create a new connection between ports**: - -1. In the **Connections** page, hover over the **Connected To** cell of the relevant port, and click the **Ellipsis** icon to open the **Direction** menu. - -![](/Images/Admin-Guide/Inventory-Operations/Inven-Opers_13.png) - -1. In the **Resource connection** dialog box, select the Family and specific **Resource Parent** from the top dropdown lists. - -![](/Images/Admin-Guide/Inventory-Operations/Inven-Opers_14.png) - -5. Select the connecting port from the list. -6. Click **OK** to add the connection. - - The relevant ports are displayed on the bottom grid in the **Connected To** column. - - -**To remove existing connections**: - -- In the **Connections** page, select the required ports and click **Clear Selected**. - -**To apply the changes**: - -- In the Home ribbon, click the **Save** button. - -You cannot update connections for resources with conflicting active sandboxes. diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/adding-and-configuring-resources/associating-a-driver-with-a-resource.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/adding-and-configuring-resources/associating-a-driver-with-a-resource.md deleted file mode 100644 index 2c773cae43..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/adding-and-configuring-resources/associating-a-driver-with-a-resource.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Associating a Driver with a Resource - -:::note -This article only applies to resources based on 1st Gen shells. While CloudShell supports 1st Gen shells, we recommend using 2nd Gen shells, which offer enhanced shell management capabilities. For details, see [Shells Overview](../../../../intro/features/shells.md). -::: - -A driver provides commands that can be run on the resources to which it is associated. - -:::note -Resource drivers are supported for backwards compatibility only. -::: - -**To associate a driver with a resource:** - -1. Make sure the driver is associated to the resource model. For additional information, see [Associating a driver to a resource model](../resource-data-modeling-for-1st-gen-shells/defining-the-resource-data-model.md#associating-a-driver-to-a-resource-model). - -1. Right-click the resource and select **Configuration** from the context menu. - ![](/Images/Admin-Guide/Inventory-Operations/Inven-Opers_4_354x445.png) -2. In the **Parameters** pane, select the **Driver**. - -![](/Images/Admin-Guide/Inventory-Operations/Inven-Opers_10.png) - -4. Press **Ctrl + S** to save the changes. - diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/adding-and-configuring-resources/index.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/adding-and-configuring-resources/index.md deleted file mode 100644 index 970aba0099..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/adding-and-configuring-resources/index.md +++ /dev/null @@ -1,25 +0,0 @@ -# Adding and Configuring Resources - -:::info -This article only applies to resources based on 1st Gen shells. While CloudShell supports 1st Gen shells, we recommend using 2nd Gen shells, which offer enhanced shell management capabilities. For details, see [Shells Overview](../../../../intro/features/shells.md). -::: - -In Resource Manager Client, you can manually add and configure resources. This includes setting up the resource's data model, structure including sub-resources, associating a driver that provides automation commands to be executed on the resource in CloudShell, and associating domains to the resource to allow the domain's users to access and use it. - -## Adding and configuring resources in Resource Explorer - -Each resource in the **Resource Explorer** pane represents a resource, including the resource's model, address, internal resources such as ports, internal port mappings, and other settings. - -**To add or modify resources in Resource Explorer:** - -1. Define the relevant resource data model. For more details, see [Defining the Resource Data Model](../resource-data-modeling-for-1st-gen-shells/defining-the-resource-data-model.md). -2. Create the resources, associate the relevant attributes, and create the relevant resource connections. See [Adding and Configuring Resources in Resource Manager](./adding-and-configuring-resources-in-resource-manager.md). - - If you are populating your CloudShell inventory for the first time, we recommend to use the CloudShell Autodiscovery tool, which allows you to load multiple resources at the same time. For additional information, see the tool's [readme](https://github.com/QualiSystems/cloudshell-autodiscovery/blob/master/README.md). - -3. Associate the required resource driver. See [Associating a Driver with a Resource](./associating-a-driver-with-a-resource.md). -4. Associate the resource to the required domains. See [Adding/Removing Resources from a Domain](../../../cloudshell-identity-management/cloudshell-domains/addingremoving-resources-from-a-domain.md) . - -## Related Topics - -- [Import a Blueprint Package into CloudShell](../../../../portal/blueprints/creating-blueprints/import-package.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/configuring-services.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/configuring-services.md deleted file mode 100644 index 0dc704a900..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/configuring-services.md +++ /dev/null @@ -1,171 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Configuring Services -:::important -This article only applies to resources based on 1st Gen shells. While CloudShell supports 1st Gen shells, we recommend using 2nd Gen shells, which offer enhanced shell management capabilities. For details, see [Shells Overview](../../../intro/features/shells.md). -::: -## Creating a service catalog category - -To make the service available to users of a specific domain, you must create a service category for that domain and then associate the service family to this service category. This is a two step process: first create a service category that can access the domain, and then attach the service category to the service. - -### Creating a service category for a domain - -**To create a service category**: - -1. Log in to CloudShell Portal as system administrator. -2. In the main menu, click **Manage**. -3. In the left pane, click **Categories**. -4. To create a new category click **Add New Category**. - ![](/Images/Admin-Guide/Inventory-Operations/AddNewServiceCategoryCapture.png) - The **Add New Category** dialog box is displayed. - -5. Enter the required information: - - | Field | Required | Description | - | --- | --- | --- | - | NAME | Required | Category name that displays in the catalog. | - | DESCRIPTION | Optional | Description of the category. | - | CATALOG | View only | The type of category, selected automatically according to categories view selection | - | LOCATION | Optional | Determines if the current definition is a category or sub-category:
    If you leave the selection with slash (‘/’), then this definition is a Category.
    If you select a value, then this definition becomes a sub-category of the selected category. | - | DOMAINS | Optional | Select the domain or domains where the category will be available.
    If you are a domain administrator, the selected domain is displayed but cannot be changed.
    If this category is a sub-category, this field inherits the domain values that were selected for the main category. The sub-category can be displayed in less domains than the main category. However, additional domains cannot be added. | - | IMAGE | Optional | You can add an image to the catalog definition. The recommended size for the image is 190x120 pixels (image size is limited to 400x400 pixels or 200Mb). | - -6. Make sure to select the required domain. -7. Click **Save**. - -## Creating a service resource family - -A service family is a special type of resource family. A service family can hold one or more services of the same type. Service families, and the services under them, are created in the Resource Manager by the administrator. - -**To create a service resource family:** - -1. Open Resource Manager Client with administrator credentials. -2. In the **Admin** tab click **Resource Families**. - -3. In the **Resource Families** explorer, right-click **Resource Families**, select **New** and then click **Resource Family**. - -4. In the **New Resource Family** dialog box, in the **Name** field, enter the name of the resource family. - - ![](/Images/Admin-Guide/Inventory-Operations/NewResFamilyWindow_493x232.png) - -5. You can optionally enter a **Description** and provide an **Image** for the new resource family for services. The maximum allowed image size is 240 KB but it is recommended to use 32x32 pixel icons. -6. Select the **Service Template** check box and from the **Type** dropdown list that is displayed to the right of the check box, select **Regular**. - - ![](/Images/Admin-Guide/Inventory-Operations/NewServiceFamilyVM.png) - -7. Click **OK**. - -A new service resource family is created. - -The new service resource family displays in the **Resource Families** explorer. In the list of resource families, the service icon ![](/Images/Admin-Guide/Inventory-Operations/ServiceIcon.png) displays alongside the name of the service family, distinguishing it from other resource families. - -![](/Images/Admin-Guide/Inventory-Operations/List.png) - -## Managing attributes, rules and categories for service families - -In Resource Manager Client, in the **Parameters** workspace of a service family, you can manage the attributes, rules and categories and perform the following actions: - -- Associate attributes and rules to be inherited by all the services of this family. -- Link the service family to one or more categories. -:::note -Services only display in the services catalog in CloudShell Portal if the resource family of that service is linked to a service category. -::: -**To manage service families parameters**: - -1. In Resource Manager Client, in the **Admin** tab, click **Resource Families**. - -2. In the **Resource Families** explorer, select the required service family. For the purposes of this procedure, the Quali VM service family is selected. - - ![](/Images/Admin-Guide/Inventory-Operations/ResourceFamiliesPaneTree.png) - - The details of the service family display in the **Parameters** workspace. - - ![](/Images/Admin-Guide/Inventory-Operations/ServiceFamilyParameters_529x396.png "Parameters workspace of the service family") - -3. To associate an attribute, in the **Attributes** tab, click **Add/Remove From Bank**. - - ![](/Images/Admin-Guide/Inventory-Operations/ResourceFamilyAttributes.png) - -4. In the **Resource Family Attributes** dialog box, select the required attributes and click **OK**. -5. To apply rules to the attribute, select the attribute in the workspace. - - ![](/Images/Admin-Guide/Inventory-Operations/AttributeSelected.png) - -6. Click **Edit Rules**. - - ![](/Images/Admin-Guide/Inventory-Operations/AttributeRules_457x354.png) - -7. In the **Attribute Rules** dialog box, specify the required rules and click **OK**. - :::note Important - The attribute inheritance feature will be deprecated in an upcoming release. Please do not use this setting. For additional information, see [Configuring attribute inheritance settings](../inventory-operations/resource-data-modeling-for-1st-gen-shells/defining-the-resource-data-model.md#configuring-attribute-inheritance-settings) or contact [Quali Support](https://register.quali.com/). - ::: -8. To link the service family to a domain category, in the **Categories** tab click **Add**. - - ![](/Images/Admin-Guide/Inventory-Operations/AddCategory.png) - -9. In the **Select Category** dialog box, select the required categories and click **OK**. - ![](/Images/Admin-Guide/Inventory-Operations/SelectCategory.png) - - The selected categories display in the **Categories** dashboard. - - -## Creating a service - -Services are created under the service families to which they belong. New services are created in Resource Manager using the **New Resource Model** dialog box. - -**To create a new service:** - -1. In Resource Manager Client, in the **Admin** tab, click **Resource Families**. -2. In the **Resource Families** explorer, right-click the required service family within which to create the service. For the purposes of this procedure, the Quali VM service family is selected. - -3. Select **New** and then click **Resource Model**. - -4. In the **New Resource Model** dialog box, enter the name and description of the service. - -5. Click **OK**. - - The new service is created and displays in the **Resource Families** explorer under the service family to which it belongs. - - ![](/Images/Admin-Guide/Inventory-Operations/ServiceInTree.png) - - -## Configuring service attributes - -This section assumes you already added the attribute(s) to the service, as explained in [Managing attributes, rules and categories for service families](../inventory-operations/configuring-services.md#managing-attributes-rules-and-categories-for-service-families). To learn how to create attributes in CloudShell, see [Attributes](../inventory-operations/resource-data-modeling-for-1st-gen-shells/attributes.md). - -**To configure service attributes:** - -1. In the **Resource Families** explorer, select a service and in the **Parameters** pane select the **Attributes** tab. - ![](/Images/Admin-Guide/Inventory-Operations/ServiceAttributes_550x432.png) -2. To associate attributes or remove existing attributes, click **Add/Remove From Bank**. -3. To set a default attribute value or mark an attribute as user input, click **Edit Rules**. - User input attributes are presented to the user when adding a service to a blueprint or a sandbox. The user is then prompted to update the attribute values. - -![](/Images/Admin-Guide/Inventory-Operations/AttributeRulesUserInput_557x436.png) - -## Associating a driver to a service - -Service driver commands can be executed manually by the user while the sandbox is active, or automatically by the blueprint driver on blueprint setup and teardown. - -**To associate a driver to a service**: - -1. From the **Resource Families** explorer, select the required service. - -The service’s **Properties** pane is displayed. -![](/Images/Admin-Guide/Inventory-Operations/ServiceParameters.png) - -2. Select the **Drivers** tab. - - ![](/Images/Admin-Guide/Inventory-Operations/DriversTab.png) - -3. Click **Add/Remove from bank**. - ![](/Images/Admin-Guide/Inventory-Operations/SelectDriver_581x417.png) - -4. In the **Select Drivers** dialog box, select the drivers to associate with the service. -5. Click **OK**. - -## Associating a script to a service - -Scripts are associated to service models in the Resource Scripts page of the **Manage** dashboard of the **CloudShell Portal**. See [Managing Assets](../../cloudshell-manage-dashboard/managing-automation/managing-assets.md). diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connected-commands/_category_.json b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connected-commands/_category_.json deleted file mode 100644 index 0b428e9a0d..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connected-commands/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Connected Commands", - "position": 7 -} diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connected-commands/index.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connected-commands/index.md deleted file mode 100644 index 4dab3ea45d..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connected-commands/index.md +++ /dev/null @@ -1,10 +0,0 @@ -# Connected Commands - -In some scenarios, a command that runs on a specific resource logically requires the use of a different resource. These types of commands are called connected commands. They are executed on a resource in CloudShell but in reality run on the connected resource that performs the action. - -For example: - -- A command that powers on/off a router actually runs on a PDU power switch. For additional information, see [Power Management](./power-management.md). -- A command that modifies a resource's settings may run on the server that performs the modifications - -For instructions on setting up connected commands, see the CloudShell Dev Guide's [Defining a connected command (which runs on another resource)](../../../../devguide/developing-shells/common-driver-recipes.md#defining-a-connected-command-which-runs-on-another-resource). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connected-commands/power-management.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connected-commands/power-management.md deleted file mode 100644 index 5443117359..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connected-commands/power-management.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Power Management - -CloudShell provides its users the ability to control the power to devices in the lab through different power control devices such as PDUs (Power Distribution Units) which can be controlled remotely. This way, users of a particular resource in CloudShell Portal can use the power switch's commands from that target resource even though the commands reside in the power switch's driver. Such commands are called connected commands. For additional information, see Creating Connected Commands. - -By defining the required parameters in the system and associating drivers to the devices, users and administrators can turn devices on and off either manually through the UI or through automated procedures. -:::note -It is possible to run power management commands via [CloudShell Automation API](../../../../api-guide/shell-dev-blueprint-design-api/cs-automation-api.md) and [TestShell API](../../../../api-guide/shell-dev-blueprint-design-api/testshell-api.md) either by executing the `ExecuteResourceConnected` command method on the connected resource in the sandbox or by running the following dedicated API methods: `PowerCycleResource`, `PowerOffResource` and `PowerOnResource`. -::: -## How CloudShell power management works - -CloudShell allows users to control the power management of resources, using power switches. - -To enable control on a resource's power management, the resource has to be connected to a power controller through its power port(s). - -Once the resource is connected to a power controller, which is based on the PDU Shell, the resource can be switched on or off using the power management connected commands provided by the power switch. The resource must be exclusively reserved to activate power management commands. - -The PDU Shells are used by CloudShell to interact with the power switches. The interaction method can vary according to the device capabilities. Some examples include; SNMP, Telnet and SSH. For the Shell to operate correctly through built-in CloudShell UI the Shell needs to be based on the PDU Shell template. - -## Setting up Power Switches for power management operations - -Like with other Shells, first try finding a suitable Shell in [Quali Repositories](https://github.com/orgs/QualiSystems/discussions/categories/integrations). If you find one, import it into CloudShell, create a resource from it, and define the physical connections in CloudShell (just make sure to make a direct connection between the resources - if you have a switch or router resource in between, the connection will fail). Once defined, connected resources will have the power commands available in active sandboxes. - -If we don’t have what you’re looking for, create a new shell using the PDU Shell template and implement the required capabilities. For additional information, see the CloudShell Dev Guide's [Defining a connected command (which runs on another resource)](../../../../devguide/developing-shells/common-driver-recipes.md#defining-a-connected-command-which-runs-on-another-resource). - -## Related Topics - -- [Define the Resource Connections of the Switch or Patch Panel](../connectivity-control/define-the-resource-connections-of-the-switch-or-patch-panel.md) diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/_category_.json b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/_category_.json deleted file mode 100644 index b6ec01b22a..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Connectivity Control", - "position": 6 -} diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/define-the-resource-connections-of-the-switch-or-patch-panel.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/define-the-resource-connections-of-the-switch-or-patch-panel.md deleted file mode 100644 index 20929f5202..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/define-the-resource-connections-of-the-switch-or-patch-panel.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Define the Resource Connections of the Switch or Patch Panel - -*This section applies to patch panels, power switches, L1 switches and L2 switches. For brevity, the term "switch resource" is used for all four.* - -Once the resource structure of the switch is updated, you can define which devices are connected to the switch's ports by associating the CloudShell resources of those devices to the switch resource(s). -:::note -CloudShell cannot create connectivity paths involving both L1 and L2 networking devices. Only pure L1 or pure L2 paths are supported. For example, "DUT1 - L1 - L2 - DUT2" path is not supported. -::: -**To define resource connections:** - -1. In **Resource Manager Client**, open the **Resource Explorer** pane. -2. Right click the switch resource and click **Configuration**. - - The **Configuration** page is displayed. - -3. Click the **Connections** button at the bottom of the page. - - The **Resource connection** dialog box is displayed. - -4. Connect a resource's port to a different port in the switch resource by clicking each port's **Connected To** button, selecting the resource's **Family** and **Resource**, and selecting the port to connect. -5. For each connection, you can set the **Connection Weight**. To do so, double click the **Connection Weight** cell of the connection and specify the desired number. The default value is 10. - - The connection weight ensures that specific connections take priority over others when an L1 route can be resolved through multiple possible connections. Specifically, the more weight a connection has, the "heavier" it becomes, and CloudShell's route resolution will be less likely to choose it, and the opposite is true as well - a connection with less weight will have a higher likelihood of being chosen for a route. - - For example, in a hub and spoke formation that includes multiple switches, let's say DUT 1 resource normally uses Switch 1 and Switch 2 to connect to DUT 2. In cases where this route is jammed, you could have DUT 1 use the more expensive central switch instead by setting the sum of this route's connection weights to be lower than that of the normal route. - -6. Click **OK** in the **Resource connection** dialog box. -7. Repeat this step to connect all relevant resources to the switch resource. -8. Save your changes. - -## Related Topics - -- [Patch Panels](./patch-panels.md) -- [L1 Switches](./l1-switches.md) -- [VLAN Connectivity](./vlan-connectivity/index.md) diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/index.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/index.md deleted file mode 100644 index 0651955463..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/index.md +++ /dev/null @@ -1,10 +0,0 @@ -# Connectivity Control - -CloudShell provides connectivity support for physical and virtual resources. You can use Patch Panels and L1 switches for physical resources, and VLANs for virtual resources on a private cloud as well as physical resources, and subnets for Apps on a public cloud, such as AWS EC2. - -The following articles explain how to configure these: - -- [Patch Panels](patch-panels.md) -- [L1 Switches](./l1-switches.md) -- [VLAN Connectivity](./vlan-connectivity/index.md) -- [Subnet Connectivity](./subnet-connectivity/index.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/l1-switches.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/l1-switches.md deleted file mode 100644 index 934c66171a..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/l1-switches.md +++ /dev/null @@ -1,214 +0,0 @@ ---- -sidebar_position: 1 ---- - -# L1 Switches - -CloudShell includes dedicated specialized features for working with L1 switches. These are implemented using CloudShell Shells. To learn how to use L1 switches in CloudShell Portal, see [L1 switches in CloudShell Portal](./l1-switches.md#l1-switches-in-cloudshell-portal). - -This article explains how to update an L1 switch with a new shell. For details specific to a particular L1 switch, see the documentation set included with the switch's shell. - -## Why update an L1 switch? - -Every major CloudShell release includes updated resource configurations for the different L1 switches. After upgrading to a new L1 version, you should import the updated shells for that device in your lab. The shell includes the family, model, attributes, and driver. - -The steps for updating an L1 switch are as follows: - -1. [Import an L1 shell to CloudShell](./l1-switches.md#import-an-l1-shell-to-cloudshell) using the instructions in this article. -2. [Create the L1 switch resource](./l1-switches.md#create-the-l1-switch-resource) -3. [Update the L1 switch firmware](./l1-switches.md#update-the-l1-switch-firmware), if needed. -4. [Sync between the L1 switch and CloudShell](./l1-switches.md#sync-between-the-l1-switch-and-cloudshell) to load the switch's blades, ports, and settings. -5. [Define the resource connections of the L1 switch](./l1-switches.md#define-the-resource-connections-of-the-l1-switch) -6. (Optional) [Configure L1 switch runtime](./l1-switches.md#configure-l1-switch-runtime) and replace any incompatible mappings. -7. [Set the timeout period for L1 drivers](./l1-switches.md#set-the-timeout-period-for-l1-drivers), if needed. - -## Verify user privileges - -To deploy an L1 shell, make sure you have the following permissions: - -- User with Administrator privileges for **Resource Manager Client** -- Username and password for the L1 switch - -## Import an L1 shell to CloudShell - -An updated shell may add new options, while rendering others obsolete. Check the release notes for instructions on managing changed functionality. -:::note -To support physical endpoints, make sure your physical switches and routers use shells compatible with your version of CloudShell. -::: -**To import an L1 Shell:** - -1. Download the shell to a temporary location. See [Quali Repositories](https://github.com/orgs/QualiSystems/repositories). - :::tip - Before you import, open the zip file and verify that it includes an `install_driver.bat` file. - ::: -2. Copy the shell to the Quali Server’s `\Drivers` installation folder. - - If the folder is missing, create it in the Server installation directory. By default: `C:\Program Files (x86)\QualiSystems\CloudShell\Server\Drivers`. - -3. Extract the shell’s zip file here. Make sure the `.exe` and `.json` files are located directly under the `\Drivers` folder. - -4. In command-line, navigate to the extracted folder and run the `install_driver.bat` file. - - When the process completes, return to the Drivers folder and make sure you see an `.exe` file for the shell. - -5. Make sure the L1 shell's `.exe` file is unblocked. - - - 1. Right-click the file and select **Properties**. - 2. If you see an **Unblock** option, select it and click **OK**. - -6. In **Resource Manager Client**, open the **Admin** ribbon, and click **Resource Families**. -7. In the **Resource Families** explorer, right-click the root and select **Import**. - -![](/Images/Admin-Guide/Inventory-Operations/Imprt.png) - -8. Navigate to the shell’s download folder, open the data model folder, select the ...`ResourceConfiguration.xml` file and click **Open**. -9. In the confirmation window, click **OK**.  - - The driver, families and resource models of the L1 switch are added to CloudShell. - -10. Optionally refresh the **Resource Families** explorer to see the new L1 switch families and models. - :::note - There is no need to restart Quali Server to complete this procedure. - ::: -11. If you are upgrading an existing Layer 1 shell, stop all existing processes of this shell that have the same name as the shell's `.exe` files included in the shell’s downloaded folder. - -## Create the L1 switch resource - -**To create an L1 switch resource:** - -1. In **Resource Manager Client**, open **Resource Explorer**. -2. Add a new **Folder** that will house the L1 switch resources. -3. Right-click the folder and select **New>Resource**. - - The **New Resource** dialog box is displayed. - - 1. Enter a **Name** for the resource. - :::note - The resource's name has a limit of 100 characters and can only contain alpha-numeric characters, spaces, and the following characters: | . - \_ \] \[ - ::: - 2. Enter the device's **Address**. - - If you are creating a resource for an OnPath switch on Horizon, make sure the address includes the Horizon server's address and the name of the OnPath. For example, "192.168.10.214?Horizon=OnPath1" where 192.168.10.214 is the Horizon server's address and OnPath1 is the name of the OnPath. - - 3. Select the switch's **Family**, **Model** and **Driver**. - :::note - The updated Family, Model and Drivers are added when you import the shell to **Resource Manager Client**. The driver contains the device's relevant commands, enables connectivity, and enables you to autoload/synchronize the switch with the updated settings. More about autoload and synchronizations in [Sync between the L1 switch and CloudShell](./l1-switches.md#sync-between-the-l1-switch-and-cloudshell). - ::: - 4. Click **OK**. -4. In **Resource Explorer**, right-click the new resource and select **Configuration**. - - The resource's **Configuration** tab is displayed. - -5. Enter the switch's **User** and **Password** access credentials. -6. Save your changes. - -## Update the L1 switch firmware - -Drivers are designed to work with a limited range of firmware. Updating a driver may require you to update the L1 switch's firmware as well, and vice-versa. Make sure a compatible driver is available before updating the L1 switch's firmware. - -## Sync between the L1 switch and CloudShell - -**To sync between the L1 switch and CloudShell:** - -1. If you are configuring an L1 switch for the first time or if the device's structure has changed, use the **Auto Load** operation to create the resource structure of the resource in CloudShell, along with the switch's settings. - - If the resource was previously autoloaded, **Auto Load** will update the resource's structure and attributes to match the switch. This includes creating missing sub resources, removing sub resources that are missing from the device, replacing sub resources that are using the wrong model with the correct ones, and also copying mappings and attributes from the switch. - - Additional options include **Sync From** and **Sync To**: - - - - The **Sync From** operation updates the attributes of the CloudShell resource but does not override the resource structure like the **Auto Load** operation. **Sync From** updates attributes such as software version, switch address, port names and alarm states with the existing settings of the switch. - - The **Sync To** operation enables you to update the physical device's settings with the settings defined in the CloudShell resource. To change the values of specific attributes on the physical device, in the **Settings** document of the resource, edit the attribute values and click **Activate**. - :::note - **Sync From** and **Sync To** can also be performed on a specific sub-resource, such as a blade or a port, while **Auto Load** applies to the entire resource structure. For additional information about these operations, see [Inventory Drivers and Utilities](../inventory-drivers-and-utilities.md). - ::: - -2. Set port attributes. - - The resource configuration for a switch model includes default attributes and value sets for each type of switch. - - Significant attributes for using the switch in a blueprint route include: - - - **Protocol** \- a read-write attribute allows users to determine the protocol to be used by the port - - **Protocol Type** \- used to mark a port as Ethernet or Fibre channel - - **Speed** \- a read-write attribute that determines the transmission speed or rate for the port - - Admin users can modify the switch attributes and values in CloudShell and apply the new values to the device, but in most cases, an L1 switch allows a list of permitted protocols and speeds for its ports. - - Typically, the L1 switch is set as a shared resource that is available to multiple users while the L1 switch ports are set as exclusive per sandbox. If the protocol type and speed attributes are associated with the switch ports, each user can specify which connectivity settings to use for the selected ports. - - If protocol type and speed are not specified, the route uses the default protocol type and speed for the switch. - -3. Next, if you need to make adjustments to the port mappings (for example, to replace incompatible mappings), manually modify the ports and mappings and apply the changes to the device. - -## Define the resource connections of the L1 switch - -For detailed information on how to do this, see [Define the Resource Connections of the Switch or Patch Panel](../connectivity-control/define-the-resource-connections-of-the-switch-or-patch-panel.md). - -## Configure L1 switch runtime - -Switch runtime behavior is determined by a combination of settings in the driver's runtime configuration file and the values set for the port attributes. Each driver includes a runtime configuration that stores login information, logging preferences, and default actions to perform. - -It is possible to have different runtime configuration settings for each driver. However, if you have multiple switches using the same driver, they will share the runtime configuration settings. Runtime settings between the Host tags will override the default runtime settings for a specific switch. For an example `RuntimeConfig.xml` file: - -`` - -`` - -`` - -`` - -`` - -`` - -`` - -`` - -`` - -`` - -`` - -`` - -**To change logging preferences**: - -1. Navigate to the Shell’s server folder, select the ... `RuntimeConfig.xml` file and click **Open**. -2. Edit the `VERBOSE` key for each host. - - Verbose values range from 1, which documents only critical errors, to 7, which documents every action the driver takes. High verbosity creates large log files and can affect the time taken to resolve switch commands. - -3. Save the file. - -## Set the timeout period for L1 drivers - -CloudShell manages the execution of L1 resource commands using a dedicated process for each L1 driver on the **Quali Server** machine. The process is named after the driver and is created when running the first command of an L1 driver in the sandbox, after restarting **Quali Server** or if the driver's previous process was terminated during the sandbox's lifecycle. - -However, some drivers, especially Python-based drivers, may require a longer startup time than the default 2 seconds timeout period defined in CloudShell. If the driver does not respond within the defined period, the following error message is displayed: "No response received from agent". - -**To set a different timeout period for L1 drivers:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file, add the following key, and set the value in seconds: - - `` - -2. Restart the **Quali Server** service. - -## L1 switches in CloudShell Portal - -*This section applies to both patch panels and L1 switches. For brevity, the term "L1 device" is used for both.* - -When you reserve a blueprint that has resources with connectivity requirements, CloudShell will resolve those connections using the L1 device resource(s) you configured. -:::note -You can see an L1 device's resolved connections in real time in the **Resource Explorer**. Right-click the L1 device resource and select **Settings**. In the L1 resource's **Settings** tab, click the **Mappings** button. For example, a switch that connects the "Router2" and "Router1" resources to each other: - -![](/Images/Admin-Guide/Inventory-Operations/SwitchMappings.png) -::: -CloudShell Portal also enables you to reserve specific blades/ports for the duration of the sandbox. You can either drag the L1 resource into the sandbox (its default is shared) and then use the **Add sub resources** option to add some ports to the diagram (this will allocate the ports exclusively to sandboxes based on this blueprint), or you can use the **Unshare** option on the L1 device resource itself to get exclusive access to the entire resource for that sandbox. - -To learn how to add sub-resources and unshare a resource, see [Configure Sub-resources](../../../../portal/sandboxes/sandbox-workspace/resources/configure-sub-resources.md) and [Share Reserved Resources](../../../../portal/sandboxes/sandbox-workspace/resources/share-reserved-resources.md). diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/patch-panels.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/patch-panels.md deleted file mode 100644 index e47082013b..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/patch-panels.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Patch Panels - -Patch panels can be used in CloudShell as a replacement or in addition to L1 switches. They can represent real physical patch panels and store the connectivity information. - -A route can be requested between two devices that are connected to the same patch panel, and be activated by the user or automation. A patch panel driver will not do any active operation like an L1 driver does, but automation can refer to the connectivity information for various use cases. Such automation can, for example, send an email to the sandbox owner or to the lab admin with patching instructions. - -### Patch panel configuration - -To create a patch panel resource, make sure to use the provided resource families (this can be imported from the system.xml or when importing any L1 configuration): - -- A patch panel family (PatchPanel) -- A patch panel model (Generic PatchPanel) -- A patch panel jack family (Panel Jack) -- A patch panel jack model (Generic Jack) -- A resource structure that defines the patch panel hierarchy - -**To use the patch panel:** - -1. Download the latest Additional Files zip file (from [CloudShell Download Center - Earlier Releases](https://support.quali.com/hc/en-us/articles/231613287)) to a temporary location. -2. Extract the zip file. -3. In **Resource Manager Client**, open the **Resource Families** explorer. -4. Import the `system.xml` file from the extracted zip folder (located in the `Lab Management` sub folder). -5. Create a new resource using the patch panel family and model. Make sure the **Patch Panel Driver** is selected. -6. Right-click the new resource and click **Configuration** from the context menu. -7. The **Resource Configuration** page is displayed. -8. Add the patch panel's ports: - 1. In the **Internal Resources** pane, right-click the patch panel resource and select **New \> Resource** from the context menu. In the **New Resource** dialog box, enter the required information and click **OK**. -9. To define which devices are connected to the patch panel ports, see [Define the Resource Connections of the Switch or Patch Panel](./define-the-resource-connections-of-the-switch-or-patch-panel.md). -10. Save the changes. - - The patch panel can now be used for any route request, same as L1 routes. - - -### Patch panels in CloudShell Portal - -*This section applies to both patch panels and L1 switches. For brevity, the term "L1 device" is used for both.* - -When you reserve a blueprint that has resources with connectivity requirements, CloudShell will resolve those connections using the L1 device resource(s) you configured. -:::note -You can see an L1 device's resolved connections in real time in the **Resource Explorer**. Right-click the L1 device resource and select **Settings**. In the L1 resource's **Settings** tab, click the **Mappings** button. For example, a switch that connects the "Router2" and "Router1" resources to each other: - -![](/Images/Admin-Guide/Inventory-Operations/SwitchMappings.png) -::: -CloudShell Portal also enables you to reserve specific blades/ports for the duration of the sandbox. You can either drag the L1 resource into the sandbox (its default is shared) and then use the **Add sub resources option** to add some ports to the diagram (this will allocate the ports exclusively to sandboxes based on this blueprint), or you can use the **Unshare** option on the L1 device resource itself to get exclusive access to the entire resource for that sandbox. - -To learn how to add sub-resources and unshare a resource, see [Configure Sub-resources](../../../../portal/sandboxes/sandbox-workspace/resources/configure-sub-resources.md) and [Share Reserved Resources](../../../../portal/sandboxes/sandbox-workspace/resources/share-reserved-resources.md). diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/_category_.json b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/_category_.json deleted file mode 100644 index 4baabe7b68..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Subnet Connectivity", - "position": 5 -} diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/index.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/index.md deleted file mode 100644 index 09da79d288..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/index.md +++ /dev/null @@ -1,76 +0,0 @@ -# Subnet Connectivity - -*In CloudShell 9.1, subnets are supported out-of-the-box for AWS EC2 and Azure.* - -This article explains how to configure CloudShell's **Subnet** service to enable the creation of multiple subnets in a single sandbox. - -During the sandbox's setup, CloudShell creates the subnets in the public cloud and during App deployment, each App's VM is connected to the appropriate subnets. Subnet-based connectivity supports connections involving public cloud Apps (peer-to-peer and many-to-many). - -:::note Notes -- By default, CloudShell creates a subnet for every sandbox that has public cloud Apps. If additional subnets are required, the blueprint designer can add **Subnet** services to the blueprint and/or create peer-to-peer connections between AWS/Azure Apps. Note that if additional subnets are used, the default subnet will not be created in the sandbox. -- CloudShell creates the necessary route tables in AWS/Azure. -::: -To use subnets in CloudShell, the system administrator needs to perform the following configurations: - -1. [Associate the Subnet service family to the domain categories](./index.md#associate-the-subnet-service-family-to-the-domain-categories) -2. [Customize the Subnet service model](./index.md#customize-the-subnet-service-model) - -## How CloudShell creates subnet networks - -When a sandbox is deployed, CloudShell uses the cloud provider resource of the Apps to create the defined subnets. If no subnets are specified, a single default subnet is created for the sandbox's Apps. However, if the sandbox's blueprint includes Subnet services and/or peer-to-peer connections between Apps, CloudShell will create a dedicated subnet for each, allocating the service's defined IPs for the duration of the sandbox. Note that for each peer-to-peer connection, CloudShell will create a 16 IP subnet. - -## Associate the Subnet service family to the domain categories - -To expose the Subnet service in the **Apps / Services** catalog of a specific domain, you must associate the service family to each desirable domain's service category. For information about creating service categories for domains, see [Creating a service catalog category](../../../inventory-operations/configuring-services.md#creating-a-service-catalog-category). - -**To associate the Subnet service to the domain category:** - -1. As system administrator, log into **Resource Manager Client**. -2. In the **Admin** ribbon, click **Resource Families**. - - The **Resource Families** explorer is displayed. - -3. Click the **Virtual Network** service family. - - The family's **Parameters** pane is displayed. - -4. Click the **Categories** tab. -5. Click **Add**. - - The **Select Category** dialog box is displayed. - -6. Select the domain category. To select multiple categories, press the **\[Shift\]** key. -7. Save your changes. - -## Customize the Subnet service model - -This section explains how to customize the default settings of the Subnet service and control which settings can be changed by the user in the blueprint diagram. To learn how to add a subnet to a blueprint and set the service's attribute values, see [Services in Blueprints](../../../../../portal/blueprints/creating-blueprints/services.md). - -**To customize a Subnet preset's attributes:** - -1. In the **Resource Families** explorer, open the **Virtual Network** service family and click the Subnet service model. Alternatively, copy the service model to customize a separate preset. - - The **Parameters** pane is displayed to the right of the **Resource Families** explorer. - -2. Click the **Attributes** tab and configure the required attributes: - - | Attribute | Description | - | --- | --- | - | Allocated CIDR | (Read only attribute) This attribute stores the CIDR allocated to the subnet by the sandbox. The allocated CIDR is based on the service's Subnet Size. | - | Public | Determines if the subnet is connected to the internet. | - | QnQ | Sets the Subnet connection to be in QinQ mode. Default is **False**. | - | Subnet Id | Read only attribute that displays the allocated subnet ID. | - | Subnet Size | Defines the possible sizes of this subnet (block size of the subnet CIDR). Possible values: 16, 32, 64, 128 (corresponding to block sizes of /28, /27, /26 and /25). The maximum VPC IP range is 256 IPs (/24), and cannot be changed in CloudShell 8.2.
    **Note:** Since each cloud provider has a few IPs in each subnet reserved for networking services, the actual number of Apps that can be added to a subnet is lower than the number set in the subnet size attribute. Currently in AWS, 5 IPs are reserved. | - -3. Save your changes. - -## Related Topics - -- [Subnet Connectivity - Points to Consider](./subnet-connectivity--points-to-consider.md) -- [AWS Integration](../.././../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/index.md) -- [Microsoft Azure Integration](../.././../../supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/index.md) -- [Managing App Templates](../../../../cloudshell-manage-dashboard/manage-app-templates/index.md) -- [Services Overview](../../../../../intro/features/services.md) -- [Apps Overview](../../../../../intro/features/apps-overview.md) -- [Virtual Network Connectivity](../../../../../portal/sandboxes/sandbox-workspace/add-connectivity/add-virtual-network/index.md) -- [Connect Resources and Apps](../../../../../portal/sandboxes/sandbox-workspace/connect-resources-and-apps.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/subnet-connectivity--points-to-consider.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/subnet-connectivity--points-to-consider.md deleted file mode 100644 index 51fb9ebb01..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/subnet-connectivity--points-to-consider.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Subnet Connectivity - Points to Consider - -When adding a subnet to a blueprint diagram, take the following points under consideration. To learn how to add a subnet to a blueprint and set the service's attribute values, see [Services in Blueprints](../../../../../portal/blueprints/creating-blueprints/services.md). - -## General - -- By default, CloudShell creates a single subnet on the public cloud for the sandbox's public cloud Apps. However, blueprint designers can have CloudShell create additional subnets. - :::note - If both AWS and Azure Apps are included in the sandbox, CloudShell will create two subnets, one for each public cloud. - ::: -- There are two ways to create additional subnets, by adding **Subnet** services to the blueprint diagram or creating peer-to-peer connections by directly creating a **Connector** route between two AWS EC2 or Azure Apps. -- A sandbox that has additional subnets will create these subnets instead of the default one. - -## Out-of-the-box support - -- CloudShell provides out-of-the-box support for multiple subnets in the same sandbox for AWS EC2/Azure Apps. - -## Sandbox IP limit - -- The maximum number of IPs per sandbox is 255. Therefore, when adding multiple subnet services, make sure the total subnet size does not exceed this limit. -- For P2P connections between two AWS EC2 or Azure Apps, CloudShell creates a subnet with 16 IPs. - -## Private cloud Apps - -- Subnet services cannot be connected to private cloud Apps, such as vCenter. For additional information, see [Virtual Network Connectivity](../../../../../portal/sandboxes/sandbox-workspace/add-connectivity/add-virtual-network/index.md). - -## Cloud provider resource - -- All Apps connected to the same subnet must use the same cloud provider resource for their deployment. This prevents modeling a network with components in different clouds. -- CloudShell allows changing a connected deployed App's deployment type as long as the new deployment type uses the same cloud provider resource. - -## Connections - -- Deployed Apps cannot be connected or disconnected in the sandbox. - - However, if you need to disconnect a deployed App, you can remove it from the sandbox. This will both disconnect the App from the subnets or Apps it is connected to, and delete the App's VM from the cloud provider. For additional information, see [Apps in Sandboxes](../../../../../portal/sandboxes/sandbox-workspace/apps/). - -- It is possible to connect Azure Apps to predefined subnets residing on the Sandbox VNet. This capability is supported for Azure 2nd Gen cloud provider resources. For additional information, see [Connecting Azure Apps to predefined subnets](../../../../../portal/sandboxes/sandbox-workspace/connect-resources-and-apps.md#connecting-azure-apps-to-predefined-subnets). -- If the diagram has any subnet services, make sure all AWS EC2/Azure Apps in that diagram are connected to at least one subnet. For additional information, see [Apps in Sandboxes](../../../../../portal/sandboxes/sandbox-workspace/apps/). -- For AWS EC2 instances, the subnet range allocation is independent from the IP allocation. As a result, instance IPs may not be included in the defined range of their subnet. Please note that this is a display issue and does not affect connectivity. - - For example, the IPs allocated to the deployed instances are outside the subnet's range: - - ![](/Images/Admin-Guide/Inventory-Operations/AWSSubnetConnectivity.png) - - -## Modifying subnets - -- Subnet services cannot be added, edited or removed from a sandbox. For additional information, see [Services in Sandboxes](../../../../../portal/sandboxes/sandbox-workspace/services.md). - -## Related Topics - -- [Subnet Connectivity](./index.md) -- [Services in Blueprints](../../../../../portal/blueprints/creating-blueprints/services.md) -- [Apps in Blueprints](../../../../../portal/blueprints/creating-blueprints/apps/) -- [Virtual Network Connectivity](../../../../../portal/sandboxes/sandbox-workspace/add-connectivity/add-virtual-network/index.md) diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/vlan-connectivity/_category_.json b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/vlan-connectivity/_category_.json deleted file mode 100644 index 051ff1d2d5..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/vlan-connectivity/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "VLAN Connectivity", - "position": 3 -} diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/vlan-connectivity/index.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/vlan-connectivity/index.md deleted file mode 100644 index 0ec0cd0f89..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/vlan-connectivity/index.md +++ /dev/null @@ -1,312 +0,0 @@ -# VLAN Connectivity - -CloudShell provides dedicated VLAN services that enable the creation of Layer 2 connections between both physical and virtual endpoints (for example, physical servers and App-deployed virtual machines) by allocating a VLAN ID for each connection. VLAN-based connectivity supports both peer-to-peer and many-to-many connections. - -To use VLANs in CloudShell, the system administrator needs to perform the following configurations: - -1. Make sure the organization's L2 switches are properly modeled in CloudShell, and include the appropriate resource connections, as explained in [Define the Resource Connections of the Switch or Patch Panel](../define-the-resource-connections-of-the-switch-or-patch-panel.md). -2. [Associate the VLAN service family to the domain categories](../vlan-connectivity/index.md#associate-the-vlan-service-family-to-the-domain-categories) -3. [Customize the VLAN service models](../vlan-connectivity/index.md#customize-the-vlan-service-models) -:::note Important -Before setting up your L2 resources and connections, review [VLAN Connectivity - Points to Consider](../vlan-connectivity/vlan-connectivity--points-to-consider.md). -::: -:::tip -CloudShell supports connecting vCenter Apps to existing port groups. For details, see [Connecting vCenter Apps to an existing VLAN port group](../../../../../portal/sandboxes/sandbox-workspace/connect-resources-and-apps.md#connecting-vcenter-apps-to-an-existing-vlan-port-group). -::: -## How CloudShell creates VLAN connections - -When resolving a VLAN connection between sandbox resources/Apps, CloudShell assumes the devices can access one another on the L2 network. In other words, if the connection involves several interconnected switches, CloudShell only configures the edges of the layer 2 networks but doesn’t affect what happens inside. - -For example, the diagram below illustrates an L2 network using three L2 switches. Switch 1 is connected to your physical devices, while switches 2 and 3 comprise the fabric. - -![](/Images/Admin-Guide/Inventory-Operations/L2NetworkDiagram.png) - -When connecting any of the endpoints, whether its physical devices or virtual machines deployed in your vCenter server, CloudShell only cares about their immediate ports, and not what happens between them. - -## How CloudShell allocates VLAN IDs - -CloudShell allocates VLAN IDs for routes using several parameters that are defined by the administrator in the VLAN service. The parameters are **Pool Name**, **VLAN ID**, **Allocation Ranges**, and **Isolation Level**, which are explained below. - -CloudShell can check availability for a specific **VLAN ID** or find an available VLAN ID within the defined **Allocation Ranges**. - -When connecting a route that uses a VLAN service, CloudShell allocates the VLAN ID based on the availability of the VLAN ID in the pool specified, which is the domain by default. However, if the VLAN ID is **Shared** (defined in the **Isolation Level** attribute), it can be shared among multiple connections in the same sandbox and between sandboxes in the same domain/pool. - -## Associate the VLAN service family to the domain categories - -To expose the VLAN services in the **Apps / Services** catalog of a specific domain, you must associate the service family to each desirable domain's service category. For information about creating service categories for domains, see [Creating a service catalog category](../../../inventory-operations/configuring-services.md#creating-a-service-catalog-category). - -**To associate the VLAN services to the domain category:** - -1. As system administrator, log into **Resource Manager Client**. -2. In the **Admin** ribbon, click **Resource Families**. - - The **Resource Families** explorer is displayed. - -3. Click the service family containing the VLAN services. For example, **Virtual Network**. - - The family's **Parameters** pane is displayed. - -4. Click the **Categories** tab. -5. Click **Add**. - - The **Select Category** dialog box is displayed. - -6. Select the domain category. To select multiple categories, press the **\[Shift\]** key. -7. Save your changes. - -## Customize the VLAN service models - -This section explains how to customize the default settings of the VLAN service and control which settings can be changed by the user in the blueprint diagram. To learn how to add a VLAN service to a blueprint and set the service's attribute values, see [Services in Blueprints](../../../../../portal/blueprints/creating-blueprints/services.md). -:::note -Additional VLAN services can be created. For example, you could set up multiple VLAN Auto services in the same domain, each with a different allocation range. Simply duplicate an existing VLAN service and edit the settings, as appropriate. Then, in the Scripts - Resource management page, add the new VLAN service model to the Vlan Service Connect All script. -::: - - **VLAN Auto**: This preset automatically selects the VLAN ID for each endpoint connection out of a defined range according to availability in the domain's pool. **VLAN Auto** allocates VLAN IDs as exclusive by default. This means that the same VLAN ID cannot be used in two or more sandboxes in the same pool. - -:::note -**VLAN Auto** selects only one available VLAN ID, even if it is used in **Trunk** mode. -::: -
    - **Customizing a VLAN Auto preset** - - **To customize a VLAN Auto preset's attributes:** - - 1. In the **Resource Families** explorer, open the **Virtual Network** service family and click the **VLAN Auto** service model. Alternatively, copy the service model to customize a separate preset. - - The **Parameters** pane is displayed to the right of the **Resource Families** explorer. - - 2. Click the **Attributes** tab and configure the required attributes: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Access Mode - Determines if the VLAN is configured as Access or Trunk. Default is Access. -:::note -Only Access mode is supported for OpenStack instances deployed in CloudShell sandboxes. -::: -
    Allocation Ranges - Determines the ranges of VLAN IDs that can be used. CloudShell will select the first available ID from the allocation ranges specified. - -You can specify one or more ranges, and specific VLAN IDs. Multiple values are separated by a comma. Default range is 2-4094 for VLAN and 16777216 for VXLAN. - -For example: "3, 100-220, 300-350" -:::note -VXLAN ID ranges are only supported for OpenStack cloud provider. To use VXLAN IDs, the VLAN service must be connected to a virtual endpoint that supports VXLAN. VXLAN IDs are supported only for OpenStack. -::: - -:::important -Modifying a range will not affect VLANs that are currently in use. -::: -
    Isolation LevelDetermines if the allocated VLAN ID is **Exclusive** or **Shared**. Default is **Exclusive**.
    Virtual NetworkRead only field that stores the allocated VLAN ID. This can be published for users to see but cannot be edited.
    VLAN ID(Optional) Enables you to specify the VLAN ID (or range if **Access Mode** is set to **Trunk**) to use. The VLAN ID must be included in the specified allocation range. However, if the VLAN ID is already allocated exclusively to someone else, an error will be displayed.
    Pool Name - (Optional) Enables you to specify a value to be used as the pool name. This is especially useful for CloudShell configurations that involve multiple domains in different geographic sites. - -If empty, the domain name is used. -:::note -A VLAN service can allocate the same VLAN in different domains if the pool name is not set. -::: -
    QinQ - (Only in **Access** mode) Sets the VLAN connection to be in QinQ mode. This requires the L2 switch device to support QinQ. Default is **False**. -:::note -If QinQ mode is enabled on the VLAN service but cannot be established on the L2 switch (for example, because it is not supported on the switch or disabled on the port to be used), the connection will fail. -::: -
    - - 3. Save your changes. -
    -- **VLAN Manual**: This preset enables the user to specify the VLAN ID to use. **VLAN Manual** allocates VLAN IDs as shared by default. -
    - **Customizing a VLAN Manual preset** - - **To customize a VLAN Manual preset's attributes:** - - 1. In the **Resource Families** explorer, open the **Virtual Network** service family and click the **VLAN Manual** service model. Alternatively, copy the service model to customize a separate preset. - - The **Parameters** pane is displayed to the right of the **Resource Families** explorer. - - 2. Click the **Attributes** tab and configure the required attributes: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    **Access Mode** - Determines if the VLAN is configured as **Access** or **Trunk**. Default is Access. -:::note -Only **Access** mode is supported for OpenStack instances deployed in CloudShell sandboxes. -::: -
    **Isolation Level**Determines if the allocated VLAN ID is **Exclusive** or **Shared**. Default is **Shared**.
    **Virtual Network**Read only field that stores the allocated VLAN ID. This can be published for users to see but cannot be edited.
    **VLAN ID**(Mandatory) Enables you to specify the VLAN ID (or range if **Access** **Mode** is set to **Trunk**) to use. If the VLAN ID is already allocated exclusively to someone else, an error will be displayed.
    **Pool Name** - (Optional) Enables you to specify a value to be used as the pool name. This is especially useful for CloudShell configurations that involve multiple domains in different geographic sites. - -If empty, the domain name is used. -:::note -A VLAN service can allocate the same VLAN in different domains if the pool name is not set. -::: -
    **QinQ** - (Only in **Access** mode) Sets the VLAN connection to be in QinQ mode. This requires the L2 switch device to support QinQ. Default is **False**. -:::note -If QinQ mode is enabled on the VLAN service but cannot be established on the L2 switch (for example, because it is not supported on the switch or disabled on the port to be used), the connection will fail. -::: -
    - - 3. Save your changes. -
    - -- **P2P VLAN Default**: This preset enables you to set the default VLAN settings to be used by peer-to-peer connections. By default, it allocates an exclusive VLAN ID for each endpoint connection out of a defined range according to availability in the domain's pool. - -
    -**Customizing a P2P VLAN Default preset** - -The default VLAN service to be used for peer-to-peer connections can be defined by a **P2P VLAN Default** service model. Even if not configured, a peer-to-peer fallback is provided by CloudShell, as described in the note at the bottom of this section. -:::note -P2P VLAN Default is an admin-level service that is only visible to domain and system administrators in CloudShell Portal. -::: -**To customize a P2P VLAN Default preset's attributes:** - -1. In the **Resource Families** explorer, open the **Virtual Network \- Administrative** service family and click the **P2P VLAN Default** service model. Alternatively, copy the service model to customize a separate preset. - - The **Parameters** pane is displayed to the right of the **Resource Families** explorer. - -2. Click the **Attributes** tab and configure the required attributes: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Access Mode - Determines if the VLAN is configured as **Access** or **Trunk**. Default is **Access**. -:::note -Only **Access** mode is supported for OpenStack instances deployed in CloudShell sandboxes. -::: -
    Allocation Ranges - Determines the ranges of VLAN IDs that can be used. CloudShell will select the first available ID from the allocation ranges specified. - -You can specify one or more ranges, and specific VLAN IDs. Multiple values are separated by a comma. Default range is 2-4094 for VLAN and 16777216 for VXLAN. - -For example: "3, 100-220, 300-350" -:::note -VXLAN ID ranges are only supported for OpenStack cloud provider. To use VXLAN IDs, the VLAN service must be connected to a virtual endpoint that supports VXLAN. VXLAN IDs are supported only for OpenStack. -::: -:::important -Modifying a range will not affect VLANs that are currently in use. -::: -
    Isolation LevelDetermines if the allocated VLAN ID is **Exclusive** or **Shared**. Default is **Exclusive**.
    Virtual NetworkRead only field that stores the allocated VLAN ID. This can be published for users to see but cannot be edited.
    VLAN ID(Optional) Enables you to specify the VLAN ID (or range if **Access** **Mode** is set to **Trunk**) to use. The VLAN ID must be included in the specified allocation range. However, if the VLAN ID is already allocated exclusively to someone else, an error will be displayed.
    Default VLANDefines the Virtual Network service as a default service to use for peer-to-peer connections.
    Pool Name - (Optional) Enables you to specify a value to be used as the pool name. This is especially useful for CloudShell configurations that involve multiple domains in different geographic sites. - -If empty, the domain name is used. -:::note -A VLAN service can allocate the same VLAN in different domains if the pool name is not set. -::: -
    QinQ - (Only in **Access** mode) Sets the VLAN connection to be in QinQ mode. This requires the L2 switch device to support QinQ. Default is **False**. -:::note -If QinQ mode is enabled on the VLAN service but cannot be established on the L2 switch (for example, because it is not supported on the switch or disabled on the port to be used), the connection will fail. -::: -
    -1. Save your changes. -:::note Notes -When a peer-to-peer connection is being resolved, CloudShell selects a VLAN to use according to the following logic: - -1. CloudShell selects the P2P VLAN Default service that exists in the blueprint. - -2. Otherwise, it uses a P2P VLAN Default service in a category associated to the user's domain. - -3. Otherwise, it uses a P2P VLAN Default service in CloudShell. - -4. Otherwise, the VLAN Auto preset's settings are used. -::: -
    - - ## Related Topics - - - [VLAN Connectivity - Points to Consider](./vlan-connectivity--points-to-consider.md) - - [Services Overview](../../../../../intro/features/services.md) - - [Apps Overview](../../../../../intro/features/apps-overview.md) - - [Connections Legend](../../../../../portal/sandboxes/sandbox-workspace/add-connectivity/connections-legend.md) - - [Virtual Network Connectivity](../../../../../portal/sandboxes/sandbox-workspace/add-connectivity/add-virtual-network/index.md) - - [Connect Resources and Apps](../../../../../portal/sandboxes/sandbox-workspace/connect-resources-and-apps.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/vlan-connectivity/vlan-connectivity--points-to-consider.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/vlan-connectivity/vlan-connectivity--points-to-consider.md deleted file mode 100644 index e8f04514ec..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/connectivity-control/vlan-connectivity/vlan-connectivity--points-to-consider.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -sidebar_position: 1 ---- - -# VLAN Connectivity - Points to Consider - -When setting up your L2 resources, take these points into consideration. - -## Compatibility - -- CloudShell cannot create connectivity paths involving both L1 and L2 networking devices. Only pure L1 or pure L2 paths are supported. For example, "DUT1 - L1 - L2 - DUT2" path is not supported. - - -## Out-of-the-box support - -- CloudShell automatically deploys and tears down L2 connections when starting and ending the sandbox. -- CloudShell provides out-of-the-box support for multiple VLAN networks in the same sandbox. - -## Networking - -- CloudShell only controls and models the leaf switches (those connected to the endpoints). All L2 switches in the fabric must be fully trunked. -- To enable the use of VLANs between physical end points, make sure you connect the physical devices to the appropriate L2 switch resources, as explained in [Define the Resource Connections of the Switch or Patch Panel](../define-the-resource-connections-of-the-switch-or-patch-panel.md). -- To auto-discover an L2 switch resource and add it to the CloudShell inventory, you should use an appropriate CloudShell L2 Shell (from [Quali Repositories](https://github.com/orgs/QualiSystems/repositories)) that provides all the required VLAN connectivity capabilities. -- To enable connections for virtual machines deployed in a private cloud, make sure to configure networking in their cloud provider resource. For example, define the vCenter dvswitch or OpenStack management network when configuring the cloud provider resource. -- CloudShell supports L2 connections based on SDN. For details, see the [SDN Controller Shell Standard](https://github.com/QualiSystems/cloudshell-standards/blob/master/Documentation/SDN_controller_standard.md) and shells in the [Quali Repositories](https://github.com/orgs/QualiSystems/discussions/categories/integrations) page. - -## VLAN services - -- **VLAN service customizations**: Additional VLAN services can be created. For example, you could set up multiple VLAN Auto services in the same domain, each with a different allocation range. Simply duplicate an existing VLAN service and edit the settings, as appropriate. Then, in the **Scripts - Resource** management page, add the new VLAN service model to the **Vlan Service Connect All** script. -- Modifying a range on a VLAN service does not affect VLANs that are currently in use. -- Peer-to-peer (P2P) connections: - - - **P2P VLAN Default** is an admin-level service that is only visible to domain and system administrators in CloudShell Portal. - - When a peer-to-peer connection is being resolved, CloudShell selects a VLAN to use according to the following logic: - - 1. CloudShell selects the P2P VLAN Default service that exists in the blueprint. - 2. Otherwise, it uses a P2P VLAN Default service in a category associated to the user's domain. - 3. Otherwise, it uses a P2P VLAN Default service in CloudShell. - 4. Otherwise, the **VLAN Auto** preset's settings are used. - -## OpenStack - -- Only Access mode is supported for OpenStack instances deployed in CloudShell sandboxes. -- VXLAN ID ranges are only supported for OpenStack cloud provider, and configured in the Allocated Ranges attribute of the VLAN service. - :::note - To use VXLAN IDs, the VLAN service must be connected to a virtual endpoint that supports VXLAN. VXLAN IDs are supported only for OpenStack. - ::: -- VLAN Trunking: Starting with OpenStack Cloud Provider Shell version 1.2.0, CloudShell will create a new interface on the deployed App's VM for every connected VLAN service. For details, see [OpenStack Configuration Requirements](../../../../supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/openstack-configuration-requirements.md). - -## Related Topics - -- [VLAN Connectivity](./index.md) -- [Services Overview](../../../../../intro/features/services.md) -- [Apps Overview](../../../../../intro/features/apps-overview.md) -- [Connections Legend](../../../../../portal/sandboxes/sandbox-workspace/add-connectivity/connections-legend.md) -- [Virtual Network Connectivity](../../../../../portal/sandboxes/sandbox-workspace/add-connectivity/add-virtual-network/index.md) -- [Connect Resources and Apps](../../../../../portal/sandboxes/sandbox-workspace/connect-resources-and-apps.md) diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/index.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/index.md deleted file mode 100644 index fc43e62bcc..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/index.md +++ /dev/null @@ -1,17 +0,0 @@ -# Inventory Operations - -:::info -Some of the articles in this chapter apply to 1st Gen shells only. Even though CloudShell still supports 1st Gen shells, we recommend using 2nd Gen shells, which offer enhanced shell management capabilities. For details, see [Shells Overview](../../../intro/features/shells.md). -::: - -This chapter explains how to configure your resources and services in CloudShell. This includes setting up the families and models, associating attributes and drivers, and associating the resources and services to domains in order to enable the domain users to access and use them. - -## Related Topics - - - [Resource Data Modeling (for 1st Gen Shells)](./resource-data-modeling-for-1st-gen-shells/index.md) - - [Adding and Configuring Resources](./adding-and-configuring-resources/index.md) - - [Configuring Services](./configuring-services.md) - - [Inventory Drivers and Utilities](./inventory-drivers-and-utilities.md) - - [Viewing Resource Live Status](./viewing-resource-live-status.md) - - [Connectivity Control](./connectivity-control/index.md) - - [Connected Commands](./connected-commands/index.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/inventory-drivers-and-utilities.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/inventory-drivers-and-utilities.md deleted file mode 100644 index f097734b9e..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/inventory-drivers-and-utilities.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Inventory Drivers and Utilities -:::important -This article only applies to resources based on 1st Gen shells. While CloudShell supports 1st Gen shells, we recommend using 2nd Gen shells, which offer enhanced shell management capabilities. For details, see [Shells Overview](../../../intro/features/shells.md). -::: -## Autoloading resource configuration settings - -**Auto Load** is a process that discovers and creates the internal resources of the root resource (for example, switch cards and ports). The Auto Load process automatically updates the configuration of the CloudShell resource to match the structure, mappings and attributes of the device, adding missing sub resources in the process. - -If the resource already exists in CloudShell, Auto Load will exclude any sub resources that are either missing from the device or have the wrong model. However, on existing L1 switch resources, Autoload removes the sub resources from the L1 switch resource instead (as explained in [Sync between the L1 switch and CloudShell](../inventory-operations/connectivity-control/l1-switches.md#sync-between-the-l1-switch-and-cloudshell)). -:::note -**Auto Load** must be performed on new L1 switches not yet inventoried in CloudShell. -::: -**To perform Auto Load on a new L1 switch:** - -1. Create a new L1 switch resource in **Resource Manager Client**. -2. Right-click the switch resource and select **Configuration**. -3. Enter the user name and password - ![](/Images/Admin-Guide/Inventory-Operations/Inven-Opers_9.png) -4. If this is an existing L1 switch, in the **Internal Resources** pane, right-click the switch and select **Exclude** from the context menu. - ![](/Images/Admin-Guide/Inventory-Operations/InternalResExclude.png). -5. Make sure the L1 shell's `.exe` file is unblocked. - - 1. In the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\Drivers` folder, right-click the L1 shell's `.exe` file and select **Properties**. - - 2. If you see an **Unblock** option, select it and click **OK**. - - -5. Click the **Auto Load** button at the bottom of the **Configuration** tab. - - The Auto Load process completes. - -6. If you excluded the resource before running Auto Load, right-click the switch in the **Internal Resources** pane and select **Include** from the context menu. "Included" resources are available for reservation in a sandbox. Sandboxes are created in the CloudShell Portal (for details, see [Creating Sandboxes](../../../portal/sandboxes/creating-sandboxes.md)). - - ![](/Images/Admin-Guide/Inventory-Operations/InternalResInclude.png) - - At the end of the Auto Load process, all relevant auto-detected internal resources (blades, ports) are displayed in the **Internal Resources** pane, under the root resource node. - -7. For L1 switches, if the **Autoload** process made changes to the resource structure, you may need to redefine any lost device connections, see [Define the resource connections of the L1 switch](../inventory-operations/connectivity-control/l1-switches.md#define-the-resource-connections-of-the-l1-switch). - -### Sync To/From device operations - -You can re-synchronize a resource in the database without performing a full **Auto Load**. - -While **Auto Load** updates the resource structure with the structure of the device, **Sync** does not remove resources that were added manually, but only updates existing ones. - -Sync can be performed for a resource or any of its internal resources (e.g. whole chassis, a blade or a port). - -- **Sync From Device** updates the resource properties stored in **Resource Manager Client** with the current device settings. -- **Sync To Device** overrides device settings with the current state of the device as documented in **Resource Manager Client**. - -As synchronization requires the resource to be reserved, the process first initiates an active sandbox for the resource. If you do not reserve the resource before initiating a sync process, an automatic sandbox will be initiated. -:::note Important -Before running Sync To/From, make sure the CloudShell resource's structure does not include blades or ports that don't exist in the device. -::: -#### Sync From Device for existing resources - -This section explains how to update the resource properties stored in **Resource Manager Client** with the current device settings. - -**To update the resource properties stored in the Resource Manager with the current device settings:** - -1. Right-click the switch from the **Resource Explorer** tree and select **Configuration**. - -2. To avoid affecting sandboxes that are using this resource, in the **Internal Resources** pane, right-click the resource and select **Exclude** from the context menu. -3. Click the **Sync From Device** button at the bottom. - -4. When the Sync From Device process completes, in the **Internal Resources** pane, right-click the sub-resource and select **Include** from the context menu. - -#### Sync To Device for existing resources - -**To override device settings with the current state of the device as documented in Resource Manager Client:** - -1. Right-click the switch from the **Resource Explorer** tree and select **Configuration** from the context menu. -2. Click the **Sync To Device** button at the bottom. - - The L1 switch's attributes and mappings are updated according to the new data. - -:::note -To change the values of specific attributes on the physical device, in the resource's **Settings** tab, edit the attribute values and click **Activate**. -::: \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/_category_.json b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/_category_.json deleted file mode 100644 index 33898dd999..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Resource Data Modeling (for 1st Gen Shells)", - "position": 1 -} diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/attributes.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/attributes.md deleted file mode 100644 index da3fd1ea40..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/attributes.md +++ /dev/null @@ -1,265 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Attributes - -Attributes allow you to add information about resources, Apps, and services. This may include information intended for the user and/or data to be used by the shell, such as the firmware version of the physical device or cloud provider to be used for App deployments. CloudShell components inherit the attributes defined in their family and model. For example, a router resource has the Port attribute defined in that router's model. -:::note -Components based on 2nd Gen Shells inherit their settings from their Shells. For additional information, see [Shells Overview](../../../../intro/features/shells). -::: -## Creating an Attribute - -**To create an attribute:** - -1. Click the **Admin** ribbon. -2. In the **Configuration** section, click **Attributes**. - - The attributes list is displayed. - -3. To add a new attribute, in the toolbar, click **Add**. - ![](/Images/Admin-Guide/Resource-Data-Modeling/Add-Attribute.png) -4. Enter the following information: - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Name - Enter the attribute name. The name field is mandatory. - -Attribute name must begin with a letter and can contain alpha numeric characters, spaces and underscores. -
    Attribute Type - Select the attribute type from the drop down list. There are five types of attributes: **String**, **Password**, **Numeric**, **Boolean** (Yes/No), and **Lookup**. For additional information, see [Attribute Types and Values](./attributes.md#attribute-types-and-values) below. -
    Read-onlySelect this check box to prevent this attribute from being edited by the user.
    DescriptionEnter a description of the attribute. Add keywords to help identify the attribute and to use as search criteria.
    PropertiesEnter the required property values. Specify attribute values and default values. Each attribute has its own set of attributes
    - -5. Click **OK**. - -### Attribute Types and Values - -There are five types of attributes: Boolean, Numeric, Password, String and Lookup. - -The following table explains how to configure each attribute type: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Attribute TypeDescriptionValid Values
    StringIn the **Default Value** field, specify the initial attribute value and clear the **Read-only** check box.alphanumeric characters
    Password - In the **Default Value** field, specify the initial attribute value and clear the **Read-only** check box. - -Password text is displayed as hidden characters in functions. - alphanumeric characters
    NumericIn the **Default Value** field, specify the initial attribute value and clear the **Read-only** check box.numbers
    BooleanIn the **Default Value** field, specify the initial attribute value and clear the **Read-only** check box.True/False
    Lookup - Click the **Add lookup value** icon to specify a list of values. - -To add lookup values, click the **Add lookup value** button in the **Properties** area. - -It is possible to add only **String** lookup values. -:::note -The first added value automatically becomes the default. To specify a different value as the default, click it and select **Set Default**. -![](/Images/Admin-Guide/Resource-Data-Modeling/AttribTypesandVal.png) -::: - list of values
    -:::note -By default, all attributes are of type **String**. To change the type, select another type from the **Attribute Type** dropdown list. -::: - -## Defining attribute rules - -Attribute rules allow administrators to define different behaviors for attributes in the application. - -**To assign rules to an attribute**: - -1. Click the **Admin** ribbon. -2. In the **Configuration** section, click **Attributes**. - - The attributes list is displayed. - -3. Select an attribute from the list and click the toolbar's **Rules** button. - - The **Set Attribute Rules** dialog box is displayed. - -4. Select the required rules. - - ![](/Images/Admin-Guide/Resource-Data-Modeling/St_Atrbt_Rules.png) - -5. Click **OK**. - -The following table details the attribute rules: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    RuleDescription
    Configuration - Displays the attribute in the resource's **Configuration** tab in **Resource Manager Client**, for resources associated with the family or model. - -Configuration attributes are visible only to admins. -
    Setting - Enables any user that can view the resource to view and/or edit the attribute's value. In addition, attributes with this rule are displayed as filters in the search window in CloudShell Portal (both in the **Add Resources** pane and **Inventory** page). - -Displays the attribute in the Resource Manager Client's **Settings** tab and in CloudShell Portal. For example, in the Attribute drop down list of the Advanced Search (if the attribute has a value), and in the blueprint/sandbox diagram's **Attributes** pane for resources associated with the family or model. -
    Displayed In DiagramDisplays the attribute on the resource box in the blueprint and sandbox diagrams in CloudShell Portal and in the domain tab's **Diagram** page in Resource Manager Client. By default only the resource name, address and model are visible in the diagram.
    Link Configurations(Applies to L1 routes) Displays the attribute in the **Inventory** tab of the **Resource Connections** dialog box and in the **Connection Properties** side pane. This enables users to specify a specific attribute value (such as Speed) that will apply only to this specific route when it is connected in a sandbox. For details, see [Configure Physical Network Connectivity Requirements](../../../../portal/sandboxes/sandbox-workspace/add-connectivity/add-physical-network/config-physical-conn-req.md).
    Variable Capability - Defines an attribute with a number of potential values which should be taken into account when searching for a possible route. - -The final value is ultimately set by the system. -
    Constant CapabilityDefines an attribute that has a specific value which should be taken into account when searching for a possible route.
    Displayed in route creation - Displays the attribute as an additional column in the **Resource Connections** dialog box. You can use **Displayed in route creation** attributes to ensure that all ports in a route have the same protocol type and speed. - -![](/Images/Admin-Guide/Resource-Data-Modeling/DefAttribRules_2.png) -
    Available For Abstract ResourcesOnly attributes with the **Available For Abstract Resource** rule are available as possible requirements or additional information when creating or editing abstract resources.
    Displayed In Search FiltersEnables CloudShell users to search CloudShell elements by specific attribute values.
    Execution Server Selector - Enables admins to limit the execution of a resource or App to a specific execution server (or group of execution servers) instead of just using the first available execution server. For more information, see [Setting Up Execution Servers to Run Commands](../../../cloudshell-execution-server-configurations/setting-up-execution-servers-to-run-commands.md). - -:::note Notes -- If the Execution Server Selector attribute is missing from the execution server's details page, make sure the attribute has the **Execution Server Selector** rule attached to it, in Resource Manager Client's **Attributes** tab. -- Attributes with this rule are displayed in the Inventory dashboard's resource discovery form. -- This does not apply to job suites as they provide the option of associating specific execution servers to the execution of the job. For more information, see [Add jobs to an automation suite](../../../../portal/job-scheduling/manage-automation-suites/add-suites.md#add-jobs-to-an-automation-suite). -::: -
    Monitor Modifications - Enables admins to monitor the value of a specific **Numeric** attribute/s in real time. - -This requires setting the `MonitorTaggedAttributes` configuration key. -
    Admin OnlyEnables only CloudShell admins (domain admins and system admins) to edit the attribute's values in CloudShell Portal. The attribute is still visible to other users, but they may not be able to edit them.
    Displayed in Insight - Enables displaying attributes in CloudShell Insight BI, enable filtering dashboards data according to attribute values. - -See [Displaying attributes in BI](./attributes.md#displaying-attributes-in-bi). -
    - **Important:** The **Editable After Run** rules below apply to TestShell Studio and TestShell Runner but are associated to attributes in Resource Manager Client. Once configured, you must associate the attributes to test modules in either Studio or Runner, and enable the privileged user (depending on the rule that is used) to change the attribute's value, either from TestShell Studio or Resource Manager Client, after the test is executed. -
    Editable After Run (System Administrators)Enables system administrators to edit the attribute's value.
    Editable After Run (Everyone)Enables any TestShell user to edit the attribute's value.
    - -### Displaying attributes in BI - -**To display attributes in CloudShell Insight BI, and to enable filtering of dashboards data according to attribute values:** - -1. In the **Set Attribute Rules** dialog box, select the rule **Displayed in Insight**. -:::note -Attribute named "model" will be automatically assigned with the rule **Displayed in Insight**. -::: -1. After setting the attribute rule in Resource Manager, the attribute will be added to the insight database (Table: ResourceAttributesValuesSummary). To use it in BI dashboards you need to rebuild the elastic cube, as explained in [Build the Insight ElastiCube](../../../../install-configure/cs-insight-bi/install-insight/insight-configuration/build-elasticube.md). -:::tip -For performance reasons, the Insight database adds new attributes once every 24 hours, so you need to wait 24 hours before completing the next steps -::: -## Related Topics - -- [Associating an attribute to a family or model](./defining-the-resource-data-model.md#associating-an-attribute-to-a-family-or-model) -- [Restricting values for an associated attribute](./defining-the-resource-data-model.md#restricting-values-for-an-associated-attribute) -- [Configuring attribute inheritance settings](./defining-the-resource-data-model.md#configuring-attribute-inheritance-settings) -- [Configuring associated attribute rules](./defining-the-resource-data-model.md#configuring-associated-attribute-rules) diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/defining-the-resource-data-model.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/defining-the-resource-data-model.md deleted file mode 100644 index 9c6121d86d..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/defining-the-resource-data-model.md +++ /dev/null @@ -1,294 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Defining the Resource Data Model -:::important -This article only applies to resources based on 1st Gen shells. While CloudShell supports 1st Gen shells, we recommend using 2nd Gen shells, which offer enhanced shell management capabilities. For details, see [Shells Overview](../../../../intro/features/shells.md). -::: -## Introduction to data modeling - -Every resource in the resource repository inherits a collection of properties and behaviors from the data model on which it is based. - -For example, the resource data model describes which attributes and drivers to associate with each type of resource. Initial, default and runtime attribute values are determined by the parent family and model. - -Even if you choose to set up the resource data model and populate the resource repository automatically, it's important to understand the process in case you choose to customize the default settings and values. If you assign new attributes or modify the attribute values of a resource family or model, the updated properties will be applied to both new and existing resources. - -Defining the resource data model affects the whole system, including how resources are searched for, how abstract resources are created, how they are saved in the database and more. - -The data model and attributes should be standardized across the company therefore should get a proper design and review procedure prior to deployment. - -There are two ways to define the resource data model: importing or manually creating them. In practice, defining the data model usually requires a mix of both methods. - -Importing data modeling populates Resource Manager with pre-defined resource families, models and structures. You can import updated definitions by launching the configuration wizard, or by importing xml configuration files via the Resource Families tree. For additional information, see [Importing/Exporting Resource Family Updates](../../../../admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/importingexporting-resource-family-updates.md). - -You can use these configuration files to add new resource families, associated models, attributes and their complete structure, or to update existing family and model definitions for the current resource structure. - -Importing data modeling is a good starting point for setting up your resource data model, as it sets up common resource data models and configurations. - -However, it was not designed to cover every possible device brand and version. If you need additional resource data models, you can add them manually. You may want to customize the default properties for imported resource families and models. The available options are extensive. - -When you add a new resource family manually, in addition to defining its properties, you'll need to add associated models and structure manually. You can add new resource models to an existing resource family, or to one that you create. - -### Steps to defining your data model - -1. [Creating a resource family](../../../../admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/defining-the-resource-data-model.md#creating-a-resource-family) -2. [Creating a resource model](../../../../admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/defining-the-resource-data-model.md#creating-a-resource-model) -3. [Associating a driver to a resource model](../../../../admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/defining-the-resource-data-model.md#associating-a-driver-to-a-resource-model) -4. [Associating an attribute to a family or model](../../../../admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/defining-the-resource-data-model.md#associating-an-attribute-to-a-family-or-model) -5. [Define the resource structure](../../../../admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/defining-the-resource-data-model.md#define-the-resource-structure) - -## Creating a resource family - -1. Click the **Admin** ribbon. -2. In the **Configuration** section, click **Resource Families**. - - The **Resource Families** explorer is displayed. - -3. Right-click the root and select **New \> Resource Family**. - - ![](/Images/Admin-Guide/Resource-Data-Modeling/New-Resource-Family.png) - -:::note -The **Name** field is mandatory. The **Description** field is optional. Resource family names can include any combination of alpha numeric characters, including spaces, hyphens, periods, pipes, and square brackets. -::: -4. Click the **Image** button and select **Set Image** to browse for an icon for the new resource family. - - The icon will be displayed on the resource, Execution instance diagram, and Lab Monitor, for every family resource. The maximum allowed image size is 240 KB. It is recommended to use 32x32 pixel icons. - :::tip - It is recommended to add the relevant images to your data model so that users creating complex blueprints in CloudShell Portal will easily identify the resources. - ::: -5. Select the required properties for resources of this family: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    PropertyDescription
    ConnectableWhen selected, resources from this family can be connected to other resources. For example, a traffic generator port is usually connectable, while the parent chassis and blades are not
    Locked By Default - When selected, resources from this family are unshared by default, and therefore cannot be used in different sandboxes at the same time. - -For example, you can choose to share a server resource to allow it to serve multiple sandboxes at the same time, while a port is typically used exclusively and therefore should be locked by default. -:::note -To override the setting for a specific resource, edit the resource's default share level in the **Inventory** dashboard. For more details, see [Editing Resources from the Inventory Dashboard](../../../../portal/inventory/managing-resources/editing-resources-from-inventory-dashboard.md). -::: -
    Acts As Group - Tells CloudShell to reserve all sub-resources of a resource whose family is defined to act as a group, along with the resource itself. For example, when attempting to reserve a port within a blade that is defined to act as a group, the blade resource and all the blade’s ports will be reserved as well. - -This option is typically used to create a pair of neighboring ports. -:::note -**Acts As Group** is only defined when creating a new family. -::: -
    Admin Only - Hides this family's resources from all non-admin users. Admins can change this setting for a resource in CloudShell Portal - see [Editing Resources from the Inventory Dashboard](../../../../portal/inventory/managing-resources/editing-resources-from-inventory-dashboard.md). -:::note -You can only define a sub-resource as admin only, if the root family was defined as admin only. -::: -
    SearchableDisplays this family in advanced resource search results.
    Service Template - If you are creating a family for services or apps, select the type of service that will be included in this category. Select the **Service Template** check box. From the **Type** drop-down list that is displayed, select the type of service: - -- **Regular**: This is a regular service, not an app -- **Deployment**: Relevant for apps. This service deploys the app's virtual machine on the selected cloud provider. -- **Installation**: Relevant for apps. This service installs the application on the virtual machine. -- **Orchestration**: Relevant for apps. This is a built-in service that manages the execution of the app's services. Contact support before working with this type of service. -
    Type - The **Type** check box enables you to classify resources within this family into a category to help end-users search for this resource in the CloudShell Portal. - -The categories are: - -- **Resource** -- **Application** -
    Allow Remote Connection - Enables users to remotely connect to resources of this family from the sandbox and the **Inventory** dashboard. The option is enabled by default. -:::note -When importing packages into CloudShell or upgrading from CloudShell 8.0 or earlier, the option is enabled by default for root resource families only. To enable for sub-resource families, select the check box in the family's **Parameters** page. -::: -
    - -6. Click **OK**. - - The new resource family is added to the **Resource Families** explorer. - - -## Creating a resource model - -1. Click the **Admin** ribbon. -2. In the **Configuration** section, click **Resource Families**. -3. In the **Resource Families** explorer, select the relevant family. -4. Right-click the family name and select **Add \> New \> Resource Model**. - ![](/Images/Admin-Guide/Resource-Data-Modeling/Resource-Model.png) -5. Enter a **Name** and optionally enter a **Description** for your model. - :::tip - It is recommended to start with the device vendor and complete with the device model - ::: -6. Click the **Image** button and browse for an icon to represent the model. The maximum allowed image size is 240 KB. It is recommended to use 32x32 pixel icons. - :::tip - It is recommended to add the relevant images to your data model so that users creating complex blueprints in CloudShell Portal, will easily identify the resources. - ::: -7. Click **OK**. - - The new model is added under the relevant family. - - -## Associating a driver to a resource model -:::warning Important -The **Drivers** management page is only visible if you set the HideDriversTabInManage key. This tab is only relevant when developing 1st Gen Shells. For details, see [Customer Configuration Keys Repository](../../cloudshell-configuration-options/customer-configuration-keys-repository/general.md#show-the-drivers-management-page). -::: -This procedure explains how to associate a driver that exists in CloudShell to a resource model. Drivers provide commands that can be run on resources. - -Drivers are added to CloudShell in the CloudShell Portal's **Manage** dashboard, as explained in [Adding drivers](../../../cloudshell-manage-dashboard/managing-automation/managing-drivers.md#adding-drivers). - -**To associate a driver to a resource model:** - -1. Click the **Admin** ribbon. -2. In the **Configuration** section, click **Resource Families**. -3. In the **Resource Families** explorer, select the relevant resource model. - - The resource model's **Parameters** page tab is displayed. - -4. In the **Drivers** sub-tab, click **Add/Remove From Bank**. - - The **Select Drivers** dialog box is displayed. - -5. From the **Available Drivers** pane, select the driver you want to associate and click ![](/Images/Admin-Guide/Resource-Data-Modeling/RightArrow_45x30.png). -6. Click **OK**. -7. Optionally, select the **Supports Concurrent Commands** check box to enable multiple commands to run on the model's resources at the same time. -:::note -To use this driver, you will need to associate it to the resource(s) you create in the **Resource Explorer**. You can also associate a driver to a resource model in the **Manage** dashboard. For additional information, see [Editing drivers](../../../../admin/cloudshell-manage-dashboard/managing-automation/managing-drivers.md#editing-drivers). -::: -## Associating an attribute to a family or model - -For information on how to create attributes, see [Attributes](../../../../admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/attributes.md). - -**To associate an attribute with a resource family or model:** - -1. In the **Resource Families** explorer, select the required family/model. - - The **Parameters** pane is displayed. - -2. In the **Parameters** pane, in the **Attributes** tab, click **Add/Remove From Bank**. -3. In the **Resource Family Attributes** window, in the **Available Attributes** pane, select the required attributes. - 1. To add an attribute, in the **Available Attributes** pane, click ![](/Images/Admin-Guide/Resource-Data-Modeling/RightArrow_45x30.png). - 2. To remove attributes, in the **Selected Attributes** pane, click ![](/Images/Admin-Guide/Resource-Data-Modeling/LeftArrow_43x28.png). -4. Click **OK**. -:::note -If you don't see the attribute in the resource's **Configuration/Settings** tabs, make sure that the attribute has the **Configuration/Settings** rules selected. -::: -## Configuring associated attribute rules - -After associating an attribute with a family or model, you can modify the rules associated with that instance of the attribute. The settings that you specify for an attribute instance will affect all child resources of the selected family or model, but will not affect the attribute's source settings. - -**To edit attribute rules for an attribute instance:** - -1. Click the **Admin** tab's **Resource Families** icon to open the **Resource Families** explorer. -2. Select a resource family or model from the **Resource Families** tree. Any attributes associated with the selected family or model will be displayed in the **Attributes** pane on the right. -3. Select the attribute that you wish to configure, and click the **Edit Rules** button. - -**To edit rules for an attribute that is associated with a resource family:** - -1. Select a resource family and click the toolbar's **Edit Rules** button. - - The Attributes **Rules** window contains three tabs: **Attributes Details**, **Value Constraints**, and **Inheritance Rules**. - -### Setting new default value for an attribute instance - -**To modify the attribute's default value:** - -1. Click the **Attribute Details** tab. - - The attribute name, type, and description are global settings and cannot be changed. - -### Restricting values for an associated attribute - -**To define a set of valid attribute values for this specific family or model:** - -1. Click the **Value Constraints** tab. By default, no constraints are set -2. To add constraints, check the **Restricted Values** option. - 1. For **String** or **Numeric** type attributes, enter the list of valid values for the attribute instance, separated by a comma - 2. For **Lookup** type attributes, check each value that you wish to associate with the attribute -:::note -Value constraints cannot be set for **Password** or **Boolean** type attributes. -::: -### Configuring attribute inheritance settings -:::note Important -The attribute inheritance feature will be deprecated in an upcoming release. Please do not use this setting.For additional information, contact [Quali Support](https://register.quali.com/). -::: -**To specify inheritance settings for this instance of the attribute:** - -1. Click the **Inheritance Rules** tab. -2. Select **Default** rule: Not inherited to disable inheritance. - In this case, the attribute will apply to the selected family or model, but not to any resources of this type. -3. Select **Not overridable** to enable inheritance but to disable modifications to the attribute settings. - This attribute will be added to any child resources for the selected family or model with the current values and rules -4. Select **Inherited**, **overridable** to enable inheritance and property modifications. - - Child resources of the selected family or model can modify attribute values and settings. - :::note - Attributes inherited by a child resource cannot be removed from a family or model. You can however modify the default and restricted values of inherited attributes in a child resource. If you choose to modify the default or restricted values of an inherited attribute, the inheritance connection between the child resource and the parent family or model will be lost. Future changes to the family will no longer automatically apply to the modified child. Inherited attribute values that have been modified are marked with an asterisk - ::: - -## Duplicating an existing data model - -1. Click the **Admin** ribbon. -2. In the **Configuration** section, click **Resource Families**. - -**To duplicate an existing family along with the models included in it:** - -1. In the **Resource Families** tree, select the family you wish to duplicate. -2. Right-click the family name and select **Copy**. -3. Right-click the root of the **Resource Families** tree and select **Paste**. - -A new family and all its models is added to the **Resource Families** tree. - -**To duplicate a model:** - -1. In the **Resource Families** tree, select the model that you wish to duplicate. -2. Right-click the model name and select **Copy**. -3. Select the family of the model you just copied. -4. Right-click the family's name and select **Paste**. -:::note -You can only duplicate a model within the same family. -::: -A duplicate model, under a new name is added to the same family in the **Resource Families** tree. - -## Define the resource structure - -If the device you are modeling has sub-resources, such as ports or jacks, you can associate your resource model with the models of those sub-resources. This will enable you to add sub-resources, which use the associated models, to the actual resource you will create. For more information, see [Defining the Resource Structure](../../../../admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/defining-the-resource-structure.md). - -## Relate topics - -- [Importing/Exporting Resource Family Updates](../../../../admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/importingexporting-resource-family-updates.md) diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/defining-the-resource-structure.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/defining-the-resource-structure.md deleted file mode 100644 index 7949f8abc3..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/defining-the-resource-structure.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Defining the Resource Structure - -:::important -This article only applies to resources based on 1st Gen shells. While CloudShell supports 1st Gen shells, we recommend using 2nd Gen shells, which offer enhanced shell management capabilities. For details, see [Shells Overview](../../../../intro/features/shells.md). -::: - -If the device you are modeling has sub-resources, such as ports or jacks, you can associate the resource model of the device with the models of its sub-resources. This enables you to add sub-resources that are based on the associated models to the resource you are creating. - -The resource structure is created automatically for any imported resource definitions. -:::note -The **AutoLoad** process enables you to quickly create or update the internal resource structure of a resource to that of the physical device, For more information, see [Inventory Drivers and Utilities](../inventory-drivers-and-utilities.md). -::: -**To define the resource model structure**: - -1. Click the Admin tab's **Resource Structure** icon to open **Resource Structure**. - ![](/Images/Admin-Guide/Resource-Data-Modeling/DefineReStruct.png) - - The **Resource Structure** consists of two panes. - - ![](/Images/Admin-Guide/Resource-Data-Modeling/DefineReStruct_1.png) - - The left pane displays the current data model hierarchy. - - The right pane available models for the selected resource family. - -2. Choose the relevant family from the left panel and mark the model you would like to build. -3. Select any models that you wish to add to the resource structure and click **Add**. - :::important Example structure: - - OnPath Switch 3912 (Part of L1 Switch Family) - S-Blade (Part of L1 switch blade family) - Port S-Blade (Part of L1 switch port family) - ::: \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/importingexporting-resource-family-updates.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/importingexporting-resource-family-updates.md deleted file mode 100644 index 4dd1ce0b0f..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/importingexporting-resource-family-updates.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Importing/Exporting Resource Family Updates -:::important -This article only applies to resources based on 1st Gen shells. While CloudShell supports 1st Gen shells, we recommend using 2nd Gen shells, which offer enhanced shell management capabilities. For details, see [Shells Overview](../../../../intro/features/shells.md). -::: -## Importing resource family updates - -Changing and updating families has a significant impact on the QualiServer and should be done with care. - -The system.xml configuration file contains updates to the default families, models and attributes. - -**To update the Resource Families:** - -1. In the Admin ribbon, click **Resource Families**. - - The **Resource Families** explorer is displayed. - - -2. Right-click the **Resource Families** root and select **Import** from the context menu. - - ![](/Images/Admin-Guide/Resource-Data-Modeling/ImportResFamilies.png) - - -3. Navigate to the Resource Management Additional files > **Configuration** folder, select the XML file containing the resource family updates, and click **Open**. - :::note Note about attributes referenced in the XML: - Referencing attributes whose names contain unsupported characters may cause unexpected behavior. For details about attribute names, see [Creating an Attribute](./attributes.md#creating-an-attribute). - ::: -4. Repeat the process to import updated Resource Family samples, L1 switches configuration files, and traffic family libraries. - -## Exporting resource families - -You can save a resource family's structure to an XML file that can be later used to update the settings of resource families, models and attributes. - -**To export a resource family structure**: - -1. Right-click the **Resource Families** root folder and select **Export** from the context menu. - - ![](/Images/Admin-Guide/Resource-Data-Modeling/ImportResFamilies_1.png) - - -2. In the **Export Configuration** dialog, specify the file name and location. -3. Click **Save**. - - The updates are saved to the XML file. diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/index.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/index.md deleted file mode 100644 index 548bf065ed..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/index.md +++ /dev/null @@ -1,27 +0,0 @@ -# Resource Data Modeling (for 1st Gen Shells) - -:::info -This article only applies to resources based on 1st Gen shells. While CloudShell supports 1st Gen shells, we recommend using 2nd Gen shells, which offer enhanced shell management capabilities. For details, see [Shells Overview](../../../../intro/features/shells.md). -::: - -Every resource in the resource repository inherits a collection of properties and behaviors from the data model on which it is based. - -For example, the resource data model describes which attributes and drivers to associate with each type of resource. Initial, default and runtime attribute values are determined by the parent family and model. - -Even if you choose to set up the resource data model and populate the resource repository automatically, it's important to understand the process in case you choose to customize the default settings and values. If you assign new attributes or modify the attribute values of a resource family or model, the updated properties will be applied to both new and existing resources. - -Defining the resource data model affects the whole system, including how resources are searched for, how abstract resources are created, how they're saved in the database and more. - -The resource data model and attributes should be standardized across the company therefore should get a proper design and review procedure prior to deployment. - -There are two ways to define the resource data model: importing or manually creating them. In practice, defining the data model usually requires a mix of both methods. - -Importing data modeling populates Resource Manager with pre-defined resource families, models and structures. You can import updated definitions by launching the configuration wizard, or by importing xml configuration files via the Resource Families tree. For additional information, see [Importing/Exporting Resource Family Updates](./importingexporting-resource-family-updates.md). - -You can use these configuration files to add new resource families, associated models, attributes and their complete structure, or to update existing family and model definitions for the current resource structure. - -Importing data modeling is a good starting point for setting up your resource data model, as it sets up common resource data models and configurations. - -However, it wasn't designed to cover every possible device brand and version. If you need additional resource data models, you can add them manually. You may want to customize the default properties for imported resource families and models. The available options are extensive. - -When you add a new resource family manually, in addition to defining its properties, you'll need to add associated models and structure manually. You can add new resource models to an existing resource family, or to one that you create. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/viewing-resource-live-status.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/viewing-resource-live-status.md deleted file mode 100644 index 317cbd9986..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/inventory-operations/viewing-resource-live-status.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Viewing Resource Live Status - -In the **Inventory** dashboard, you can see the live status of resources that are in active sandboxes. The sandbox live status icon displays additional information about the current sandbox. The live status indication is activated via API. The ![](/Images/CloudShell-Portal/Lab-Management/Reservations/In_a_ReservationIcon.png) icon indicates that the resource is part of an active sandbox. diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/jira-integration-with-cloudshell.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/jira-integration-with-cloudshell.md deleted file mode 100644 index d5eebd7657..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/jira-integration-with-cloudshell.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -sidebar_position: 8 ---- - -# JIRA Integration with CloudShell - -*To purchase this feature, please contact your Account Manager. For assistance with first time configuration, please contact your Technical Account Manager* - -CloudShell integration with JIRA enables users to leverage JIRA defect management to manage failed CloudShell tests by associating Jira issues with specific CloudShell test executions. - -To illustrate how this feature can be used, consider the following scenario: A tester investigates an automation suite failure, discovers the originating test (or tests) and opens a JIRA bug to pass to the company's developers so they can fix the problem. Once the bug is resolved, the tester manually reruns the failed job or suite to make sure the bug is fixed. -:::note -This feature is supported for JIRA version 7.4.0 and above. -::: - -## JIRA Integration with CloudShell - -**To integrate CloudShell with JIRA:** - -1. Open the `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config` file. -2. Add the following keys, and set each key's value accordingly: - - - - - - - - - - - - - - - - - - - - - - - - -
    KeyDescription
    `` - JIRA server base URL. Make sure you include "http://” or https://, as appropriate. - -For example, http://jira-srv:8080/jira. -
    `` - JIRA admin user that is authorized to create and modify issues in all related projects. CloudShell will use this user to automatically authenticate CloudShell users when they create or associate JIRA issues to a test execution. -:::note -This user is only used for the authentication. The reporter of the bug in JIRA will be the logged in CloudShell user who initiated the request. -::: -
    ``JIRA user's password
    - `` - -`` - - Jira project and issue cache timeout periods, in seconds. Default is 30 minutes. - -When integrating CloudShell with a new Jira project or issue type, the Jira [project or issue] cache on the Quali Server needs to be restarted. This can be done by manually restarting the **Quali Server** service or setting a shorter cache timeout period using these keys. - -To disable the cache, set the appropriate key's value to "0". -
    - - For example: - - ```javascript - - - - - - ``` - -3. Restart the **Quali Server** service. - -## Additional Requirements - -- The CloudShell domain in which the test is executed must have the same name as the JIRA project ID. -- The CloudShell user must have a corresponding Jira user that has access to the Jira project defined by the CloudShell domain. -- A ‘Bug' issue type must include the "Environment" field and be associated with the JIRA project. -- CloudShell Server IP address must be white listed in Jira configuration. -- Adjustments of CloudShell to your JIRA environment - to be performed by a Quali Customer Success representative. - -## Troubleshooting - -### Setting the logging level for communication between CloudShell and Jira - -CloudShell logs errors related to communication with Jira out of the box. However, in some cases, you may need to drill down into the communication level. - -**To change the logging level to debug:** - -1. On the Quali Server, go to `C:\Program Files (x86)\QualiSystems\CloudShell\Server`. -2. Edit the `log4net.config` file. -3. Search for `` line that follows, change "ERROR" to "DEBUG". - -5. Save the file and restart the **Quali Server** service. - - -## Related Topics - -- [Associating JIRA Issues with Test Executions](../../portal/job-scheduling/associate-jira-issues-with-test-executions.md) diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/setting-up-license-pools/_category_.json b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/setting-up-license-pools/_category_.json deleted file mode 100644 index d79aa6f346..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/setting-up-license-pools/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Setting Up License Pools", - "position": 3, - "link": { - "type": "generated-index", - "description": "The number of concurrent sandboxes in the system is managed using License Pools. A license pool defines the maximum number of active concurrent sandboxes that can be created by users. License pools are defined by the system administrator and can be assigned to a single or multiple domains." - } -} diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/setting-up-license-pools/using-license-pools.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/setting-up-license-pools/using-license-pools.md deleted file mode 100644 index 46c7d8dde2..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/setting-up-license-pools/using-license-pools.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Using License Pools - -## About License Pools - -A license pool defines the maximum number of active concurrent sandboxes that can be created by users and domain administrators in the domain. License pools are defined by the system administrator and the same pool can be assigned to multiple domains. The domain's license pool limit does not apply to the system administrator. - -The License Pools in the system are: - -| Pool Type | Description | -| --- | --- | -| Global License Pool | Holds the total amount of concurrent active sandboxes allowed in the system. The size of the Global License Pool cannot be modified. | -| License Pool | Holds the number of concurrent sandboxes that can be created in the domain that is using this pool. | -:::note -The Global License Pool is added, by default, to all new domains. When migrating from an earlier version, the global license pool is added to all domains. -::: -A License pool can be assigned to multiple domains. - -## Managing License Pools -:::note -Every domain must have a license pool. -::: -### Creating license pools - -**To create a new license pool:** - -1. In the **Resource Manager**, click the **Admin** tab and then click ![](/Images/Admin-Guide/Setting-Up-CloudShell/Setting-up_24x34.png) **License Pools**. - - The **License Pools** page is displayed, listing the maximum number of licenses that are available and the number of used licenses. - -2. Click **New**. -3. Enter the required information in the following fields: - - | Field | Required | Description | - | --- | --- | --- | - | Name | Mandatory | The name of the license pool. | - | Description | Optional | A meaningful description of the license pool. | - | Number of Licenses | Mandatory | The number of permitted concurrent sandboxes. The value must be at least 1 and the highest amount is the number that is set by the concurrent sandbox license.
    **Note:** The permitted number of sandboxes is the license pool limit plus 1. For example, if the license pool is set to 3 licenses, the domain's users can have up to 3 concurrent sandboxes. | - | Domains | Optional | Licenses can be assigned from the pool to, or removed from, existing domains. Multiple selections are supported. A license pool can be assigned to a single domain or multiple domains. You can also assign a pool to a domain from the **Properties** page of the selected domain. | - - -4. Click **OK**. - - The details of the license pool are displayed in the **License Pools** page and the number of used licenses is updated accordingly. - - -### Deleting license pools - -Before deleting a license pool, make sure it is not assigned to any domains. - -**To delete a license pool:** - -1. In the **License Pools** page, select the required license pool. -2. Click **Delete**. - - A confirmation message informs you that the specified license pool will be deleted and that domains that used that license pool will now be linked to the global pool. - -3. Click **OK**. - - The details in the **License Pools** page and the number of used licenses is updated accordingly. - - -### Editing license pools - -**To edit the details of a license pool:** - -1. In the **License Pools** page, double click the license pool or select it and click **Edit**. -2. Edit the required fields in the **New License Pool** window. -3. Click **OK**. - -## Validating Licenses - -A license pool is a subset of the global license pool. The validation is done both for license pool size and global pool size. - -The size of the license pool is strictly maintained. When the license pool limit is reached, any new sandbox is rejected. - -### User Notifications - -When the permitted concurrent active sandboxes amount is exceeded, the following notifications are issued: - - - - - - - - - - - - -
    **When the domain license pool limit is reached**The license sandbox owner is notified by way of a warning message. An external user receives a general message. Notification email messages are also sent automatically to the user, domain administrator and system administrator.
    **When using the global license pool and the maximum number of licenses is reached**If the sandbox owner is a domain administrator or system administrator, he is notified by a warning message popup. In addition a notification email is sent automatically to the system administrator.
    diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/_category_.json b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/_category_.json deleted file mode 100644 index 5e913cda06..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Source Control: Using Local Tests in Automation Suites", - "position": 6 -} diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/enabling-automation-suites-to-use-local-tests.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/enabling-automation-suites-to-use-local-tests.md deleted file mode 100644 index 01363c42fe..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/enabling-automation-suites-to-use-local-tests.md +++ /dev/null @@ -1,300 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Enabling Automation Suites to Use Local Tests - -As administrator, you can enable test automation developers to add tests from their local tests folder to jobs in their automation suites. This requires a source control system that will manage the TestShell tests and make them available to CloudShell. To learn how to do this, follow the configuration steps below, or contact your Technical Account Manager. - -By default, when creating new CloudShell automation suites, the user can only select shared tests (shared tests and assets are stored in the MS SQL database). - -First, let’s try to understand the general flow for working with local tests: - -1. Each test developer creates and saves tests on their local machine. The developer's local tests folder should be mapped to a source control repository, which stores all the tests. -2. A test developer creates or updates a test and pushes the updates to the source control. -3. An admin can then execute an update process to make sure that all the execution server have the latest version of the tests, and that CloudShell Portal displays the latest version as well (changes might include new tests, new functions, new inputs, etc). - -Now that we understand the general concept, let's drill down to the technical part: - -- The **Job Scheduling** dashboard's **Update local tests** button (available for admins only) runs a batch script file. This file pulls the latest version from the repository to the Quali Server machine (the files on the Quali Server are used for listing only) and allows CloudShell Portal to show which tests exists/get inputs/etc. - - :::warning Important - - **Update local tests** applies to ALL execution servers in your CloudShell deployment. As such, when running **Update local tests**, execution servers that do not have a batch file configured will go into "Waiting for update” mode and become excluded. For details on how to add a passing script, see [Batch scripts](#batch-scripts). - - **Update local tests** only applies to included execution servers. Therefore, if your execution servers are excluded, ensure that the batch script passes with "exit code 0" and include them, as explained in [Including/excluding execution servers](../../cloudshell-manage-dashboard/managing-execution-servers/execution-servers-servers-page.md#includingexcluding-execution-servers). - ::: -- Once the batch file completes: - - For each execution server, if the execution server state is idle (not running any test), the execution server launches a batch file that pulls the latest test versions to the execution server. If the execution server is not idle, the batch file will run when it completes its current executions. - - During this update, the execution server does not run any new job until the batch file ends successfully. - -This diagram illustrates the full process: - -![](/Images/Admin-Guide/Setting-Up-CloudShell/UpdateLocalTestsFlow.png) -:::note -This only applies to tests residing in the source control repository, so before you start, make sure the local tests folder on the Quali Server is on source control. -::: -For this to work, you need to do the following: - -1. [Configure CloudShell Portal](#configure-cloudshell-portal): Enable CloudShell Portal to browse the local tests folder -2. [Configure Quali Server](#configure-quali-server): Set the local tests folder and batch script that will retrieve the local tests from the source control repository -3. [Configure each Execution Server that will support local tests](#configure-each-execution-server-that-will-support-local-tests): Set the folder that will store the tests from the source control repository -4. [Enable the use of Local Assets](#enable-the-use-of-local-assets): Enable the tests to use local assets if any tests require the use of local TestShell assets - - Once enabled, CloudShell admins can run the **Update Local Tests** batch script from the **Job Scheduling** dashboard to retrieve the local tests from the source control repository. - - -## Configure CloudShell Portal - -On the CloudShell Portal, enable admins to browse the local tests folder and set any environment parameters you’d like to pass to the **Update Local Tests** process. - -**To configure CloudShell Portal:** - -1. Open the Portal installation directory (`C:\Program Files (x86)\QualiSystems\CloudShell\Portal` by default) and edit the `customer.config` file. -2. Add the following key: - - `` - -3. To insert environment variables into the Update local tests process, add the following key and set the environment parameters, separated by commas: - - For example: - - `` - - Whenever the admin runs the **Update local tests** process, the **User Blueprint Parameters** page will be displayed, prompting the admin to set the custom parameters to be used by the Upgrade local tests process. - - ![](/Images/Admin-Guide/Setting-Up-CloudShell/JobSchedulingUpdateLocalTests.png) - :::note - Values of arguments that have the word "password” in the name are displayed as asterisks. - ::: -4. Restart the **CloudShell Portal IIS** service. - -## Configure Quali Server - -On the Quali Server machine, the automation developer needs to add the new test from the repository to the Quali Server. - -To configure Quali Server: - -1. On the Quali Server machine, open the Server installation directory (`C:\Program Files (x86)\QualiSystems\CloudShell\Server` by default) and edit the `customer.config` file. -2. Copy the following keys and specify the values: - - `` - - `` - - `` - - - - - - - - - - - - - - - - -
    `TestShellServerLocalTestsPath` - Set the local tests folder on the Quali Server that contains the tests to be used. The contents of this folder will be displayed when the test automation developer browses local tests in the **Job Scheduling** dashboard. - -For example: - -`` - -The folder must be different from the one in use for saved Studio tests (`~\Documents\TestShell Files\Tests` by default). -
    `LocalEnvironmentGetBatchFilePath` - Set the path to the batch script that will update the tests from source control when the admin initiates the **Update local tests** process. For details, see [Batch scripts](#batch-scripts). - -*Although the Quali Server doesn't run the tests, it needs to expose the latest test versions when adding tests to the automation suite.* - -For example: - -`` -
    `LocalEnvironmentGetBatchFileOutPutPath` - Set the path to the file that will contain the log files and outputs of the **Update local tests** process. CloudShell will overwrite the log file every time the admin initiates the process. - -For example: - -`` -
    - -3. Save and close the file. - -4. Restart the **Quali Server** service. - - -## Configure each Execution Server that will support local tests - -On each execution server machine, the developer/admin adds the new test from the repository to the execution server. -:::important -Prior to running the **Update local tests** process, make sure every execution server has a batch file in the specified folder, as the update process will run on all the execution servers in CloudShell and exclude execution servers with a bad or missing batch file. For details, see [Batch scripts](#batch-scripts). -::: -**To configure an execution server:** - -1. On each execution server, open the execution server's installation folder (`C:\Program Files (x86)\QualiSystems\TestShell\ExecutionServer` by default) and edit the `customer.config` file. -2. Copy the following keys and specify the values: - - `` - - `` - - `` - - `` - - - - - - - - - - - - - - - - - - - - -
    `TestShellFilesPath` - Set the path to the folder that will contain the local tests retrieved from the source control repository - -(`~\Documents\TestShell Files\Tests` by default). - -For example: - -`` -:::important -Do not include the local tests folder. For example, if the local tests folder is `~\Documents\TestShell Files\Tests`, specify `~\Documents\TestShell Files`. -::: -
    `LocalQsAppDataPath` - Set the path to your QualiSystems `AppData` folder (`C:\ProgramData\QualiSystems\WS_User\AppData` by default). - -For example: - -`` -
    `LocalEnvironmentGetBatchFilePath` - Set the path to the batch file that will update the tests from source control during the **Update local tests** process. For details, see [Batch scripts](#batch-scripts). - -For example: - -`` -
    `LocalEnvironmentGetBatchFileOutPutPath` - Set the path to the file that will contain the log files and outputs of the **Update local tests** process. CloudShell will overwrite the log file every time the admin initiates the process. - -For example: - -`` -
    - -3. Save and close the file. -4. Restart the **TestShell Execution Server** service. - -## Enable the use of Local Assets - -Like tests, assets can be local or shared. By default, ‘local tests’ support the use of ‘shared assets’. However, support for local assets needs to be configured to allow local tests to use them. - -Local assets are composed of two files: the actual asset file that can be located anywhere on your computer, and a metadata file that points to the asset file. By default, the metadata files are located at `C:\ProgramData\QualiSystems\Resources`. - -This folder contains the assets' folder tree that can be seen in the **Asset** explorer in TestShell Studio. - -In order to use a local asset, the asset's metadata file AND the asset's actual file need to be in the same path on each appropriate execution server as they are on your local machine. -:::important -Perform the following procedure on all execution servers you plan on using for test execution. -::: -**To use assets in your execution servers:** - -1. In the folder `C:\TestShell Files`, create a new folder named: **Assets Manager**. -2. In the `Assets Manager` folder, create the following two folders: - - **Assets References**: Contains links that TestShell creates between assets and tests (i.e. which asset is being used by which tests) - - **Actual Files**: Contains the asset files - -3. Edit the `customer.config` file (`C:\Program Files (x86)\QualiSystems\TestShell\Studio` by default). -4. Add the following key: - - `` - -5. Update the source control with the `Asset Manager` folder content. - - Before importing a new asset into TestShell Studio, place the actual asset file (DLL\EXE) in the `Actual Files` directory and then import the new asset from TestShell Studio. - -6. Next, make sure the assets exist on each execution server. The asset folder path must be exactly the same as defined in the developer machine -7. On all execution servers, make sure the batch file retrieves the latest of the **Asset Manager** folder. - -For more information, contact you Customer Success representative. - -## Batch scripts -:::note -In the Server installation directory, there is a sub-folder called `Local Sync Batch Samples` where you can find a sample script for TFS. Do not point to this file as this is a sample folder that might be overwritten in future versions. -::: -- The script file can be a simple file like: - - `cd %LOCAL_TESTS_PATH%` - - `git pull https://%GIT_USER%:%GIT_PASSWORD%@github.com/%GIT_USER%/%GIT_REPO%` - - Where GIT_USER, GIT_PASSWORD and GIT_REPO are parameters defined in the `LocalEnvironmentUserParameters Portal` configuration key. - - -- It is possible to pass or fail the batch script with the following exit codes: - - **Pass**: - - `Exit 0` - - **Failed**: - - `Exit -1` - - -### Example for validating git pull and passing / failing based on ErrorLevel after git pull: - -`REM change directory to TEST path configured in customer.config` - -`cd %LOCAL_TESTS_PATH%` - -`REM going to the parent directory in order to perform git operations` - -`cd..` - -`REM Displaying input params from user (optional to use these params in git commands)` - -`echo param 1: %Param1%` - -`echo param 2: %Param2%` - -`REM: pulling updated code to Repo` - -`git pull` - -`REM validating error code of git pull command` - -`if %ERRORLEVEL% EQU 0 goto passed` - -`:passed` - -`REM command passed` - -`exit 0` - -`REM command failed` - -`exit -1` - -### Example for an Execution Server that is not running any git commands and just needs to pass to avoid being excluded: - -`exit 0` - -## Related Topics - -- [Job Scheduling Dashboard](../../../portal/job-scheduling/job-scheduling-dashboard.md) diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/index.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/index.md deleted file mode 100644 index c0c703bd72..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/index.md +++ /dev/null @@ -1,11 +0,0 @@ -# Source Control: Using Local Tests in Automation Suites - -If you are working with local tests and assets, it is recommended to manage them through a source control solution, to help you track changes in your tests and resolve conflicts. - -As illustrated below, in a source controlled deployment, the TestShell Studio Clients push test updates and additions to the source control server, which synchronizes the Execution Servers and Quali Server with the latest updates, allowing you to use the latest test versions when running your tests and automation suites. - -![](/Images/Admin-Guide/Setting-Up-CloudShell/SourceControlArchitecture.png) - -- For local tests executed in TestShell Studio, Runner and Authoring, see [Setting Up Source Control for TestShell Tests](./setting-up-source-control-for-testshell-tests.md). -- For an end-to-end example explaining how to use GitLab source control to sync tests for **Job Scheduling** automation suites, see [TestShell Integration with GitLab](./testshell-integration-with-gitlab.md). -- For offline deployments, use an on-prem source control solution like GitLab, Apache Subversion or Microsoft Team Foundation Server. For details, see [TestShell Integration with GitLab](./testshell-integration-with-gitlab.md). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/setting-up-source-control-for-testshell-tests.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/setting-up-source-control-for-testshell-tests.md deleted file mode 100644 index 04fee4ca20..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/setting-up-source-control-for-testshell-tests.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Setting Up Source Control for TestShell Tests - -This article discusses the configuration steps for adding and managing tests using a source control solution. These procedures apply to tests executed by TestShell Studio and Runner. For executing local tests in Job Scheduling automation suites, see [Enabling Automation Suites to Use Local Tests](./enabling-automation-suites-to-use-local-tests.md). -:::note -The application is oblivious to source control, so all source control\-related actions including Commit, Get Latest and conflict management are handled in your source control solution. -::: -## Adding test folders to source control - -To manage your tests using a source control solution, add the folders of your local tests and dependencies as repositories. - -There are three TestShell elements you need to add to source control: - -- **Tests**: Your local tests and custom tools - - The default folder is `C:\Users\Administrator\Documents\TestShell Files`, and also includes custom tools. - -- **Assets**: Local dependencies and packages that are used by your tests. There is no centralized default folder for assets. - -- **Pointers**: .tsdll files that link each asset to the tests that use it. - - The default folder is `C:\ProgramData\QualiSystems\Resources` - -:::note -If you want to change the folder locations for the tests or assets folders, use the `TestShellServerLocalTestsPath` and `AssetsPath` keys. -::: -## Migrating existing assets to the designated Assets folder - -(Migration applies to existing customers only) As assets may be stored in different places, to add them to source control, you need to first copy the local assets to the source\-controlled folder, and redirect each local asset's path to this folder. - -**To migrate existing assets to the designated Assets folder:** - -1. Copy the local assets to the new folder. -2. In TestShell Studio, in the **Assets** explorer, double click each local asset and update the **Path** (Do not delete the asset's filename). -3. Save your changes. -4. Commit the updates to source control. - -## Using tests that are managed in source control - -This workflow outlines the basic process for adding, updating or using source\-controlled tests. The terminology may change, depending on the source control solution. - -1. Get latest version of the tests to ensure you are using the current version of the test and related files (If more people are working on the same repository). - -2. Add, update or run tests in TestShell. -3. If you added or updated a test, Add, Commit and Push the tests to source control. -:::tip -Make sure to include a meaningful description for each commit as it may be difficult to compare different versions of a test due to the complexity of the local test files. -::: \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/testshell-integration-with-gitlab.md b/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/testshell-integration-with-gitlab.md deleted file mode 100644 index 6eb922e18f..0000000000 --- a/versioned_docs/version-2023.3/admin/setting-up-cloudshell/source-control-using-local-tests-in-automation-suites/testshell-integration-with-gitlab.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -sidebar_position: 1 ---- - -# TestShell Integration with GitLab - -This article guides you on how to configure GitLab as the source control solution for your local tests and assets for automation suites executed in the **Job Scheduling** dashboard. Since local tests are accessible only to the client on which they were created, using a source control solution, these tests can be shared with other clients as well. In this article we will focus on GitLab as the source control solution. For other solutions, see [Source Control: Using Local Tests in Automation Suites](../source-control-using-local-tests-in-automation-suites/index.md). - -This integration provides test users with the latest version of the desired test(s) and assets and also allows test developers to push updates to GitLab. In this process, you will link your CloudShell clients (CloudShell Portal, TestShell Studio and Runner) and Execution Server(s) to a specific GitLab repository, which will contain the tests and assets, and make them available to these clients. -:::note -For brevity, the terms "Portal”, "Studio” and "Runner” are used to denote "CloudShell Portal”, "TestShell Studio” and "TestShell Runner”, respectively. -::: -For this to work, you need to follow these basic steps: - -1. Consolidate the Tests and Assets folders under a single parent folder -2. Install GitLab server on a Linux machine to have a local GitLab repository server -3. Install Git on each TestShell machine to allow Git interaction -4. Add files from the base Studio machine: Add the Tests and Assets folders to create the repository -5. Clone the GitLab repository on each relevant client machine to create a local copy of the repository on each client (Studio, Runner and Portal) -6. Configure Quali Server: Set the local Tests and Assets folders and create a batch script that will pull the local tests from the GitLab repository -7. Configure Execution Servers to access the GitLab repository: Set the folder that will store the tests and assets, create a batch script that will pull the local tests from the GitLab repository - -**To set up GitLab source control for your tests:** - -1. On the base machine (where you will create the repository), create a folder that will contain the managed files. -2. Copy and place the Tests and Assets folders in this parent folder. The default paths are: - - - Assets – `C:\ProgramData\QualiSystems\Resources` - - - Tests – `C:\Users\\Documents\TestShell Files\Tests` - -3. On your Studio and Runner client machines, go to the `C:\Program Files (x86)\QualiSystems\TestShell\Studio\customer.config` file, and set the local Assets and parent folders (make sure the paths are accessible to all users): - - `` - - `` - -4. Install GitLab server on a Linux machine to allow you to have an on premise Git repository. - - You can download GitLab at [https://about.gitlab.com/](https://about.gitlab.com/). - -5. Log in to the GitLab portal and create a new Project. The project should have the same name as the Tests and Assets parent folder. - -6. Install Git on the Quali Server, and each appropriate Execution Server, Studio and Runner, machine to allow you to perform Git operations on any of the clients (Pull/Push). You can download git at [https://git-scm.com/downloads](https://git-scm.com/downloads). - - If you are not familiar with Git, please use this simplified commands manual [http://rogerdudler.github.io/git-guide/](http://rogerdudler.github.io/git-guide/). - -7. Add the Test and Assets parent folder from the base machine to the GitLab repository. You can use the manuals or review the sample here (the below commands upload the local Tests and Assets to the GitLab repository): - - ```javascript - C:\> cd c:\TestShell\TestEnv - C:\TestShell\TestEnv\> git init - C:\TestShell\TestEnv\> git remote add origin http:///root/.git - C:\TestShell\TestEnv\> git add . - C:\TestShell\TestEnv\> git commit -m "" - C:\TestShell\TestEnv\> git Push -u origin master - ``` - -8. Clone the GitLab repository on the relevant Studio, Runner and Execution Server machines so it will have a local copy of the Tests and Assets. - - ```javascript - C:\> cd c:\TestShell - C:\TestShell\> git clone http:///root/.git - ``` - - Note that you need to configure each machine to work with the parent folder path, as explained in the beginning of this procedure. - -9. [Configure Quali Server](./enabling-automation-suites-to-use-local-tests.md#configure-quali-server) to work with local tests and assets. - - This requires setting a batch file that automates the Git Pull request using the **Update Local Tests** process (executed from Portal’s **Job Scheduling** dashboard). You’re welcome to use the following code in the **Update Local Tests** batch file. - - ```javascript - cd %LOCAL_TESTS_PATH% - REM going to the parent directory - cd.. - git pull - ``` - - For details and additional batch script examples, see [Batch scripts](./enabling-automation-suites-to-use-local-tests.md#batch-scripts). - -10. To use source controlled tests in CloudShell Portal job suites, enable the relevant execution servers to access the repository, as explained in [Configure each Execution Server that will support local tests](./enabling-automation-suites-to-use-local-tests.md#configure-each-execution-server-that-will-support-local-tests). -11. To verify, update local files on each client, and make sure that client uses the updated tests. - - This concludes the integration process. - - Before running local tests in Studio or Runner, or in automation suites in Portal, CloudShell users will need to pull the latest local tests and assets from the GitLab repository. In Portal, this is done by running the **Update Local Tests** batch script in the **Job Scheduling** dashboard, and in Studio or Runner, by manually performing a pull request from the Tests and Assets parent folder. diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/_category_.json b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/_category_.json deleted file mode 100644 index c886c7f415..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Supported Cloud Providers in CloudShell", - "position": 6 -} diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/cloud-provider-2g-shells-features-and-capabilities.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/cloud-provider-2g-shells-features-and-capabilities.md deleted file mode 100644 index b7c7961f7f..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/cloud-provider-2g-shells-features-and-capabilities.md +++ /dev/null @@ -1,538 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Cloud Provider 2G Shells Features and Capabilities - -This article lists the enhancements and capabilities introduced with each release of our certified 2nd Gen cloud provider shells, as well as documentation references. -:::important -In addition to our certified cloud provider shells, we also have "community" grade cloud provider shells that were developed by our community's developers, including shells for Nutanix and Google Cloud Platform. Feel free to download them from [Quali Repositories](https://github.com/orgs/QualiSystems/discussions/categories/integrations). -::: -## VMware vCenter - -- Shell's community page - [VMware vCenter Cloud Provider Shell 2G](https://github.com/orgs/QualiSystems/discussions/1691). -- Shell's [README](https://github.com/QualiSystems/VMware-vCenter-Cloud-Provider-Shell-2G/blob/master__old_code/README.md). -:::note -vCenter 5.0.0 and above works only with CloudShell 2022.1 EA and above. -::: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ReleaseCapabilities added
    6.0.2 - - **Forged Transmits** internal enhancements -
    6.0.1 - - Added support for splitting VM UUIDs by ";" and "," in affinity rule commands -- Added automation process that creates affinity rule name if it is specified but not present -
    6.0.0 - Optional port group attributes. To use these attributes, the CloudShell admin needs to manually add them to the VLAN service model in Resource Manager Client. For details, see [Configuring Services](../setting-up-cloudshell/inventory-operations/configuring-services.md). - -The new attributes are: - -- **Forged Transmits**: (Boolean) Enables to configure the port groups on the virtual switch to allow forged transmits. [VMware Docs](https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.security.doc/GUID-7DC6486F-5400-44DF-8A62-6273798A2F80.html) article. -- **Promiscuous Mode**: (Boolean) Enables to configure the port groups on the virtual switch to allow promiscuous mode. [VMware Docs](https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.security.doc/GUID-92F3AB1F-B4C5-4F25-A010-8820D7250350.html) article -- **MAC Address Changes**: (Boolean) Enables to configure the port groups on the virtual switch to allow MAC address changes. [VMware Docs](https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.security.doc/GUID-942BD3AA-731B-4A05-8196-66F2B4BF1ACB.html) article -- **Switch Name**: (String/Lookup) Allows you to choose the switch to use. The switch can be hard-coded in the attribute or set as a **User input** on the VLAN model, allowing the sandbox end-user to specify the desired switch. - - ![](/Images/Admin-Guide/switch-name_2022.2.png) -
    5.0.5 - - Updated dependencies -
    4.2.5 - - Remove the App's newly created vCenter folder if cloning the VM fails -- VM details show each disk size (See [View an App's VM Details](../../portal/sandboxes/sandbox-workspace/apps/view-vm-details.md)) -- Added hint support for templates to the **VM From Linked Clone** deployment path, so the **vCenter VM** attribute now displays your vCenter server's VMs and templates (See [Add a vCenter App Template](./private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-a-vcenter-app-template.md)) -- **Autoload**, **Behavior During Save**, and **IP Regex** attributes are now visible in the App deployment paths (See [Add a vCenter App Template](./private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-a-vcenter-app-template.md)) -- Fixed issue that caused CloudShell to ignore the **Behavior During Save** attribute **VM From Linked Clone** deployment path on the resource (See [Add a vCenter App Template](./private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-a-vcenter-app-template.md)) -- Fixed wmks link generation for different vCenter versions (wmks is used by QualiX) -- Fixed issue that prevented changing an HDD of a Linked Clone VM (VM created from a VM snapshot) (See [Add a vCenter App Template](./private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-a-vcenter-app-template.md)) -- Fixed issue that prevented selecting a datastore cluster -- Fixed issue preventing CloudShell from getting the cluster usage without cluster name -- Fixed issue preventing CloudShell from finding Resource Group under Compute Cluster -
    5.0.3 - - **Refresh IP** command returns the updated IP -
    5.0.2 - - Added the **Enable Tags** attribute -
    5.0.1 - - Fixed "connection to existing port groups" issue using the "vCenter VLAN Port Group" service -- Fixed issue with automatic removal of port groups after disconnecting connection routes -
    5.0.0 - - Implemented possible value suggestions (autocomplete) for App template attributes: **VM Name**, **VM Template**, and **VM Snapshot** (See [Add a vCenter App Template](./private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-a-vcenter-app-template.md)) -:::note -vCenter 5.0.0 and above works only with CloudShell 2022.1 EA and above. -::: -
    4.2.0 - - Implemented various fixes and updates -- Added integration with QualiX for the **Get VM Web Console** feature, by adding the **VM Console Link** attribute to the App Resource Shell (See [Run App Commands](../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md)) -- The default value for the shutdown method is hard. even if the value is not valid. (See [Add VMware vCenter Cloud Provider Resource](./private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md)) -- Updated **Remove Snapshot** command with new parameter **remove_child** (See [Run App Commands](../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md)) -
    4.1.0 - - Added support for **Static Apps** -:::note -This version is supported for CloudShell 2022.1 and up. -::: -
    4.0.0 - - Support for python 3.9/3.10 -- Added **Remove Snapshot** command (See [Run App Commands](../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md)) -- Added tags for the VM/Folder/Network for vCenter 6.5+ - -- Improved deployment of Apps with a private IP - -- Fixed duplicate VMs names in the sandbox - -- Fixed issue that prevented Save and Restore Sandbox from saving the state of VM - -- Fixed issue with Port Group not being removed when disconnecting -
    3.5.0 - - Added **Customize Guest OS** hidden command (See [Run App Commands](../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md)) -
    3.4.0 - - Added the ability to set FQDN hostnames for Linux virtual machines -- Added the ability to reconfigure CPU/RAM on powered on VMs (See [Run App Commands](../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md)) -- Fixed VM cleanup in case of incorrect customization specification -- Added the ability to create a new network interface if there are no virtual network adapters on the virtual machine -
    3.3.0 - - Fixed sandbox folder deletion in the event of failed/canceled VM deployment -- Fixed issue preventing the addition of multiple HDD disks in the **Reconfigure VM** command for vCenter v7 (See [Run App Commands](../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md)) -- Added **vCenter VLAN Port Group** service to support connecting Apps to existing port groups. The vCenter.VLAN.Port.Group.zip service can be downloaded from the vCenter 2G shell's Integrations page and imported into CloudShell. (See [Connecting vCenter Apps to an existing VLAN port group](../../portal/sandboxes/sandbox-workspace/connect-resources-and-apps.md#connecting-vcenter-apps-to-an-existing-vlan-port-group)) -- Release Notes: - - The "vCenter VLAN Port Group" service still has the "VLAN ID" attribute (not required). It was added in order to support consistency between vCenter and CloudShell in terms of VLAN management. -
    3.2.0 - - Added possibility to set gateway in the **Private IP** attribute (See [Add a vCenter App Template](./private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-a-vcenter-app-template.md)) -
    3.1.2 - - Fix for Save/Restore Sandbox (See [Save a Sandbox](../../portal/sandboxes/sandbox-workspace/save-sandbox.md) and [Restore a Saved Sandbox](../../portal/sandboxes/saved-sandboxes/restore-saved-sandbox.md)) -- Changed App's **Deploy** command's mechanism to deploy VMs into folders. Separate folder per sandbox. Folder name = sandbox id (See [Run App Commands](../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md)) -
    3.1.1 - - Added new attributes to all App deployment types: Hostname and **Private IP** (See [Add a vCenter App Template](./private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-a-vcenter-app-template.md)) -
    3.0.0 - - Fixed typo: Renamed **HHD** attribute to **HDD** (See [Add a vCenter App Template](./private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-a-vcenter-app-template.md)) -
    2.2.0 - - Added **Get VM Web Console** deployed App command (See [Run App Commands](../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md)) -- Added vSwitch connectivity support (See [Add VMware vCenter Cloud Provider Resource](./private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md)) -
    2.1.0 - - Added **Reconfigure VM** deployed App command (See [Run App Commands](../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md)) -- Added **Get Cluster Usage** hidden command -- Added Managed Object Reference ID to the deployed App's **Get VM Details** (See [View an App's VM Details](../../portal/sandboxes/sandbox-workspace/apps/view-vm-details.md)) -
    2.0.1 - - Removed **Execution Server Selector** attribute -
    1.0.0 - - Official release -- Based on python 3 -- Supports vCenter 5.5 - 7. PDF guides on how to find required vCenter elements are available for download in [Add VMware vCenter Cloud Provider Resource](./private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md) (step 8). -- Built according to Cloud Provider Standard version 1.0.0 -- Added **Customization Spec** attribute to allow additional customization of deployed App (See [Add a vCenter App Template](./private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-a-vcenter-app-template.md)) -
    - -## vCenter Static VM - -- Shell's [README](https://github.com/QualiSystems/Generic-Static-vCenter-VM-Shell-2G/blob/master/README.md). - - - - - - - - - - - - -
    ReleaseCapabilities added
    1.0.0 - - Official release -:::note -Works with cloud provider resource based on vCenter VMWare shell 4.1.0 and above. -::: -- Based on python 3 -
    - -## Microsoft Azure - -- Shell's community page - [Azure Cloud Provider Shell 2G](https://github.com/orgs/QualiSystems/discussions/1687). -- Shell's [README](https://github.com/QualiSystems/Microsoft-Azure-Cloud-Provider-Shell-2G/blob/master/README.md). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ReleaseCapabilities added
    2.5.0 - - **Autoload** and **Enable IP Forwarding** are now available on the App deployment paths (See [Add an Azure App Template](./public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md)) -- Added Managed Identity authorization to Azure Shell -- Added **KeyVault** attribute (and SSHKeys processing) to the Azure shell resource (See [Add an Azure Cloud Provider Resource](./public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-cloud-provider-resource.md)) -- Added **Availability Zones** attribute to the Azure shell resource and App deployment paths -- Fixed several bugs related to storage account creation, VM details display, and extension script executions -
    2.4.2 - - Added **AutoGenerated Name** attribute switch, that allows user to override default name generation behavior -
    2.4.1 - - Added **Boot Diagnostics Storage Account** deployment type attribute (See [Add an Azure App Template](./public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md)) -
    2.4.0 - - Added support for adding Bring Your Own License (BYOL) licenses for the virtual machines -- Added custom tags support in the Azure Deployment Path (See [Add an Azure App Template](./public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md)) -- The App's **Get VM Details** command now returns more accurate information about the OS disk and data disks (See [View an App's VM Details](../../portal/sandboxes/sandbox-workspace/apps/view-vm-details.md)) -- Added an additional validation for the **Resource Group** attribute in the Azure Deployment Path -- Removed Sandbox NSG creation for scenarios where all subnets are predefined -- Added ability to enable boot diagnostic for the VM (See [Add an Azure App Template](./public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md)) -- Added logic to automatically hide **Power On** command for shared deployed App resources - Apps that were deployed in a different sandbox (See [Add an Azure App Template](./public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md)) -
    2.3.0 - - Added support for data disks in the Azure deployment paths (See [Add an Azure App Template](./public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md)) -- Added **Reconfigure VM** command (See [Run App Commands](../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md)) -- Added support for **Standard SSD/Premium SSD/Ultra SSD** and other types of Azure disks (See [Add an Azure App Template](./public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md)) -- Removed Sandbox/MGMT vNETs binding to the network tags -- Added possibility to deploy Azure VM in a separate Resource Group (See [Add an Azure App Template](./public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md)) -
    2.1.0 - - New **Azure Shared Image Gallery** App deployment type (See [Add an Azure App Template](./public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md)) -- Sandbox management network is optional now (See [Create a Management Resource Group and VNets](./public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/create-a-management-resource-group-and-vnets.md)) -- Added support for predefined subnets (See [Connecting Azure Apps to predefined subnets](../../portal/sandboxes/sandbox-workspace/connect-resources-and-apps.md#connecting-azure-apps-to-predefined-subnets)) -
    2.0.0 - - Removed **Execution Server Selector** attribute -
    1.1.2 - - Added support for custom tags (See [Create a Management Resource Group and VNets](./public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/create-a-management-resource-group-and-vnets.md)) -
    1.0.0 - - Official release -- Based on python 3 -- Built according to Cloud Provider Standard version 1.0.0 -
    - -## Amazon AWS EC2 - -- Shell's community page - [Amazon AWS Cloud Provider Shell 2G](https://github.com/orgs/QualiSystems/discussions/1695). -- Shell's [README](https://github.com/QualiSystems/Amazon-AWS-Cloud-Provider-Shell-2G#readme). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ReleaseCapabilities added
    1.3.0 - - Added support for PowerShell scripts in User Data (See [Add an AWS EC2 App Template](./public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-app-template.md)) -
    1.2.0 - - Added new **Single VPC Mode**. Defined in the AWS cloud provider resource, which allows Apps that use this resource to be deployed within the Management VPC (See [Add an AWS EC2 Cloud Provider Resource](./public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-cloud-provider-resource.md)) -
    1.1.1 - - Updated description for the attributes **Enable Source Dest Check** and **Status Check Timeout** (See [Add an AWS EC2 App Template](./public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-app-template.md)) -
    1.1.0 - - New deployment type attribute **Enable Source Dest Check** allows disabling source/dest check (See [Add an AWS EC2 App Template](./public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-app-template.md)) -- New deployment type attribute **Status Check Timeout** to set timeout for a status check (See [Add an AWS EC2 App Template](./public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-app-template.md)) -
    1.0.3 - - Official release -- Added new flavor - **Shared VPC** (See [AWS Integration](./public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/index.md)) -- Multiple minor bug fixes -
    0.2.2 - - Pre-release -- Added support for **Shared VPC** (See [AWS Integration](./public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/index.md)) -- Based on Python 3 -
    - -## OpenStack - -- Shell's community page - [OpenStack Cloud Provider Shell 2G](https://github.com/orgs/QualiSystems/discussions/1694). -- Shell's [README](https://github.com/QualiSystems/OpenStack-Cloud-Provider-Shell-2G#readme). - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ReleaseCapabilities added
    1.2.1 -:::note -Supported on CloudShell 2022.2 GA and up -::: -- Added **Behavior During Save** attribute for the Save/Restore command (See [Add OpenStack Cloud Provider Resource](./private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/add-openstack-cloud-provider-resource.md)) -
    1.2.0 -:::note -Supported on CloudShell 2022.2 GA and up -::: -- Added sandbox Save/Restore support for OpenStack Apps and deployed Apps (See [Save a Sandbox](../../portal/sandboxes/sandbox-workspace/save-sandbox.md)) -- Added the **Private IP** attribute (See [Add an OpenStack App Template](./private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/add-an-openstack-app-template.md)) -- Added the **User Data** attribute, allowing you to specify metadata or a post-installation script that will run on the deployed App (See [Add an OpenStack App Template](./private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/add-an-openstack-app-template.md)) -- Added ability to connect to an existing network (See [Connecting OpenStack App to an existing network](../../portal/sandboxes/sandbox-workspace/connect-resources-and-apps.md#connecting-openstack-app-to-an-existing-network)) -- Added ability to specify **Subnet CIDR** in VLAN service (See [Specify Subnet CIDR for OpenStack VLAN service](../../portal/sandboxes/sandbox-workspace/connect-resources-and-apps.md#specify-subnet-cidr-for-openstack-vlan-service)) -- Added built-in capability to create separate trunks for different VLAN services -
    1.1.0 - - VLAN trunk support -- Added the **OpenStack Trunk Network ID** attribute (See [Add OpenStack Cloud Provider Resource](./private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/add-openstack-cloud-provider-resource.md)) -- Updated the **OpenStack Domain Name** attribute's description (See [Add OpenStack Cloud Provider Resource](./private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/add-openstack-cloud-provider-resource.md)) -
    1.0.0 - - Official release -- Added the **Console** command (See [Run App Commands](../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md)) -- Renamed the Shell to "OpenStack Cloud Provider Shell 2G" (See [OpenStack Cloud Provider Shell 2G](https://github.com/orgs/QualiSystems/discussions/1694) community page) -- Added the **Inbound Ports** attribute to the App's deployment type (See [Add an OpenStack App Template](./private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/add-an-openstack-app-template.md)) -
    0.1.1 - - Pre-release -- Based on Python 3 -- Known issues: - - Security groups are not created for the VM -
    - -## Kubernetes - -- Shell's community page - [Kubernetes Cloud Provider Shell 2G](https://github.com/orgs/QualiSystems/discussions/1689). -- Shell's [README](https://github.com/QualiSystems/Kubernetes-Cloud-Provider-2G/blob/master/README.md). - - - - - - - - - - - - -
    ReleaseCapabilities added
    1.0.1 - - Initial release -- Based on python 3 -- Built according to Cloud Provider Standard version 1.0.0 -
    - -## Oracle Cloud Infrastructure (OCI) - -- Shell's community page - [Oracle Cloud Infrastructure (OCI) Shell 2G](https://github.com/orgs/QualiSystems/discussions/1686). -- Shell's [README](https://github.com/QualiSystems/OCI-Shell-2G/blob/dev/README.md). - - - - - - - - - - - - - - - - - - - - - - - - -
    ReleaseCapabilities added
    1.1.9 - - Added retries for vNIC retrieval -- Adjusted VCN Service configuration -
    1.1.5 - - Fixed issue preventing security list from being populated across all subnets/VCNs -
    1.1.4 - - Fixed compatibility issues with the latest OCI python packages -
    1.1.3 - - Initial release -
    - -## Cisco VIRL - -- Shell's community page - [VIRL Shell 2G](https://github.com/orgs/QualiSystems/discussions/1685). -- Shell's [README](https://github.com/QualiSystems/VIRL-Shell-2G). - - - - - - - - - - - - - - - - - - - - -
    ReleaseCapabilities added
    1.0.2 - - Added support for SSH version 2 -- Added option to specify additional "empty" interfaces (interfaced without IP addresses that are not connected to any endpoints) -
    1.0.1 - - Added fix for non-unique Resource Names. -
    1.0 - - Official release -
    diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/customizing-app-deployment-types.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/customizing-app-deployment-types.md deleted file mode 100644 index 7df74ab1b1..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/customizing-app-deployment-types.md +++ /dev/null @@ -1,191 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Customizing App Deployment Types - -As a CloudShell system administrator, you can publish and configure the settings of certain App creation and orchestration processes. - -## Publishing App parameters - -This section explains how to set App creation and orchestration parameters as user inputs, so that when creating an App in the **Manage** dashboard, the App designer will be able to set the inputs' values. - -### Publishing App parameters for 1st Gen shells - -**To publish App creation and/or orchestration parameters in 1st Gen shells:** - -1. As system administrator, log into **Resource Manager Client**. -2. In the **Admin** ribbon, click **Resource Families**. - - The **Resource Families** explorer is displayed. - -3. Click the **Deployment Options** service family. - - The family's **Parameters** pane is displayed. - -4. Click the model of the required deployment type: - - - **AWS EC2 Instance** - - **Azure VM From Custom Image** - - **Azure VM From Marketplace** - - **vCenter Clone VM From VM** - - **vCenter Deploy VM From Linked Clone** - - **vCenter VM From Image** - - **vCenter VM From Template** - - The model's **Parameters** page is displayed. - -5. From the **Attributes** tab, select one of the following attributes and click **Edit Rules**. For parameter descriptions, see [App parameters](#app-parameters). - - The **Attribute Rules** dialog box is displayed. - -6. Select the **User Input** check box. -7. Click **OK**. -8. Repeat to publish additional attributes. -9. Save your changes. - -### Publishing App parameters for 2nd Gen shells - -**To publish App creation and/or orchestration parameters in 1st Gen shells:** - -1. Extend the shell, as explained in [Customizing a 2nd Gen Shell](../../devguide/reference/shellfoundry.md#customizing-a-2nd-gen-shell). -2. Extract the shell's project folder to your local computer. -3. Open the project folder in your preferred IDE. -4. From the shell's `deployments` folder, open the `deployment-path.yaml`. - - This file lists the attributes available for each deployment type. - - ![](/Images/Admin-Guide/DeploymentTypeAttributes.png) - -5. To publish an attribute, make sure the attribute has the **user_input** tag. - - For example: - - ![](/Images/Admin-Guide/DeploymentTypeAttributePublishing.png) - -6. Save the file and import/update the shell into CloudShell. - -## Modifying App parameter defaults - -This section explains how to modify the default settings of certain App creation and orchestration parameters that are used when creating Apps in the **Manage** dashboard. -:::note -These parameters are used by CloudShell's **Setup** and **Teardown** scripts. For additional information, see [Configure Blueprint Orchestration](../../portal/blueprints/creating-blueprints/configure-orchestration.md). -::: -### Modifying App parameter defaults for 1st Gen shells - -**To modify App parameter defaults (1st Gen):** - -1. As system administrator, log into Resource Manager Client. -2. In the **Admin** ribbon, click **Resource Families**. - - The **Resource Families** explorer is displayed. - -3. Click the **Deployment Options** service family. - - The family's **Parameters** pane is displayed. - -4. Click the model of the required deployment type: - - - **AWS EC2 Instance** - - **Azure VM From Custom Image** - - **Azure VM From Marketplace** - - **vCenter Clone VM From VM** - - **vCenter Deploy VM From Linked Clone** - - **vCenter VM From Image** - - **vCenter VM From Template** - - The model's **Parameters** page is displayed. - -5. From the **Attributes** tab, select one of the following attributes and click **Edit Rules**. For parameter descriptions, see [App parameters](#app-parameters). - - The **Attribute Rules** dialog box is displayed. - -6. Enter the **Default Value**. -7. Select the **User Input** check box. - - To prevent App designers from seeing this input, make sure the **User Input** check box is cleared. - -8. Click **OK**. -9. Repeat to edit additional attributes. -10. Save your changes. - -### Modifying App parameter defaults for 2nd Gen shells - -**To modify App parameter defaults (2nd Gen):** - -1. Extend the shell, as explained in [Customizing a 2nd Gen Shell](../../devguide/reference/shellfoundry.md#customizing-a-2nd-gen-shell). -2. Extract the shell's project folder to your local computer. -3. Open the project folder in your preferred IDE. -4. In the shell's `deployments` folder, open `deployment-path.yaml`. - - The deployment type attributes are displayed - -5. Set a **default** value for the desired attributes. - - For example: - - ![](/Images/Admin-Guide/DeploymentTypeAttributeDefaults.png) - -6. Save the file and import/update the shell in CloudShell. - -## App parameters - -### App creation parameters - -#### vCenter parameters: - -- **IP Regex**: Regular expressions that define which IP address ranges to allocate for the deployed VM's primary IP address. -- **Promiscuous Mode**: If enabled, the port groups on the virtual switch will be configured to allow all incoming traffic. -- **Refresh IP Timeout**: Timeout for waiting while obtaining IP address (in seconds) -- **VM Cluster** -- **VM Location** -- **VM Resource Pool** -- **VM Storage** - -#### AWS EC2 parameters: - -- **Root Volume Name**: The available device names for the volume. Depending on the block device driver of the selected AMI's kernel, the device may be attached with a different name than what you specify. If left empty, the default defined in the AMI is used. For example: "/dev/xvda". -- **Storage IOPS**: The default number of I/O operations per second that the root volume can support. For example "240". This parameter is used only for storage of type *io1*, in which you can provision up to 30 IOPS per GiB. If set to zero, the default defined in the image is used. -- **Storage Size**: The root volume size. For example "30". The value must be greater or equal to the size of the root snapshot used. If set to zero, the default defined in the image is used. -- **Storage Type**: The type of the storage volume. In AWS, there are several EBS Volume types that can be used: **gp2** and **io1** for SSD, **st1** and **sc1** for HDD or the standard type, which is the old generation EBS volume type. If **Auto** is selected, the storage type defined in the image is used. - -#### Azure parameters: - -- **Image Version**: The version of the VM image. For example: 16.04.201606270 -- **Extension Script Timeout**: Timeout, in minutes, for the execution of extension scripts during App deployment - -#### OpenStack parameters: - -- **Floating IP Subnet Id**: UUID of the external network to use for floating IPs - -### App orchestration parameters - -#### General parameters (used by all deployment types): - -- **Autoload**: Determines if the Autoload process runs for Apps deployed manually or during the setup of the sandbox. Default is **True**. -- **Wait For IP**: Determines if the App deployment process waits for the VM to get an IP. Default is **True**. - :::note - The default wait time is 10 minutes. On vCenter App deployment paths, this can be changed by specifying the number of seconds to wait in the **Refresh IP Timeout** attribute. - ::: - -#### vCenter parameters: - -- **Auto Power On**: Enables the automatic power on of an app, following its deployment during sandbox Setup. Default is **True**. -- **Auto Power Off**: Determines if the App's VM powers off automatically during the sandbox teardown. Default is **True**. -- **Auto Delete**: Determines if the App's VM is deleted automatically during the sandbox teardown. Default is **True**. - -#### AWS EC2 parameters: - -- **Wait for Credentials**: Enables the retrieval of credentials from a Windows machine. Note that if this parameter is enabled and the credentials are not retrieved within 15 minutes, the deployment will fail. Default is **True**. -- **Wait for Status Check**: If enabled, the App's deployment will end successfully only after the instance status check has passed. The status check includes network connectivity, physical host status, system status and more. Default is **False**. - -#### Azure parameters: - -- **Autogenerated Name**: **True** enables CloudShell to autogenerate the deployed App's name. Set to **False** to use the App's name instead. (Default is **True**) - -## Related Topics - -- [Add an AWS EC2 Cloud Provider Resource](./public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-cloud-provider-resource.md) -- [Add an Azure Cloud Provider Resource](./public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-cloud-provider-resource.md) -- [Add VMware vCenter Cloud Provider Resource](./private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md) -- [Developing Custom Cloud Provider Shells](../../devguide/develop-custom-cloud-provider-shells/) diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/index.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/index.md deleted file mode 100644 index 1c065d7c0e..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/index.md +++ /dev/null @@ -1,10 +0,0 @@ -# Supported Cloud Providers in CloudShell - -Note that we're adding cloud provider shells to [Quali Repositories](https://github.com/orgs/QualiSystems/discussions/categories/integrations) all the time. For additional information, see [Cloud Provider Shells - Features and Capabilities Per Release](./cloud-provider-2g-shells-features-and-capabilities.md). - -In addition, the **Custom Cloud Provider** Shell is provided to enable you to develop support for cloud providers that are not supported out of the box. For details, see [Developing Custom Cloud Provider Shells](../devguide/develop-custom-cloud-provider-shells/). - -## Related Topics - -- [Public Cloud Provider Support in CloudShell](../../admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/index.md) -- [Private Cloud Provider Support in CloudShell](../../admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/index.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/_category_.json b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/_category_.json deleted file mode 100644 index 433be91a59..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Kubernetes Integration", - "position": 4 -} diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/add-a-kubernetes-app-template.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/add-a-kubernetes-app-template.md deleted file mode 100644 index b99c7f7084..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/add-a-kubernetes-app-template.md +++ /dev/null @@ -1,332 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Add a Kubernetes App Template - -The App template defines the settings and configurations of the VM to be deployed in the sandbox as well as the application(s) to be installed on that VM. -:::note -CloudShell does not manage Kubernetes App connectivity at this time. This can be done using the external and internal ports defined in the App. -::: -**To add a new Kubernetes App template:** - -1. Click **\+ Add**. - - The **Create New App** wizard is displayed. - - ![](/Images/Admin-Guide/KubernetesNewApp.png) - -2. From the **Select Deployment Type** pane, select **Kubernetes Service**. -3. Enter a **Name** for the App template. - :::note - The App template's name has a limit of 100 characters and can only contain alpha-numeric characters, spaces, and the following characters: | . - \_ \] \[ - ::: -4. Click **Create**. - - The App template is created and the **App** wizard's **General** page is displayed. - -5. In the **General** page, define the App template's display settings and category. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldRequiredDescription
    NameRequiredApp name that is displayed in the catalog.
    DescriptionOptionalDescription of the App.
    IconOptionalAdd an image to the catalog definition. The recommended size for the image is 190x120 pixels (image size is limited to 400x400 pixels or 200 KB).
    CategoriesOptional - Service categories are a method to classify Apps. The Apps are displayed in the **Add App / Service** side pane in the blueprint and sandbox diagram, arranged in categories. Only users who are permitted to view the category can access the App. Apps without a category are not displayed. - -By default, the **Applications** category is selected. - -Select a category from the dropdown list. You can select additional categories. Examples of categories are: applications, networking and VLAN. - -:::note Notes -- The category must be associated with the domain in which the required cloud provider resides. For information about domain categories, see [Managing domain categories](../../cloudshell-manage-dashboard/managing-categories.md#managing-domain-categories). -- It is recommended to use up to a 2-level hierarchy when organizing the Add App / Service catalog (i.e. root and sub-category). -- In the Add App / Service side pane, Apps are displayed in the root category only. This includes services associated to sub-categories. -::: -
    - -1. In the left pane, click **Deployment Paths** and configure the App template's deployment path. - - A deployment path defines (1) the VM’s settings such as storage size, CPU and image file, and (2) the CloudShell cloud provider resource that enables CloudShell to access the cloud provider and deploy the VM on it. - - Note the deployment path's name (highlighted in the image below). The path's name is dynamic and consists of the selected **Cloud Provider** resource and **Deployment type**. You can change the name of the path by clicking the field. - - ![](/Images/Admin-Guide/KubernetesDeploymentType.png) - - 1. From the **Deployment** drop down list, select the deployment type. - - The selected deployment type's attributes are displayed. - - 2. Fill in the details. - - For **Kubernetes Service** attributes: - - | Attribute | Description | - | --- | --- | - | Cloud Provider | Name of the Kubernetes cloud provider resource to be used | - | Image Name | The name of the container image to use for creating the container. For example, "nginx".
    Image must exist in the image repository used by the cluster. | - | Image Tag | (Optional) The container image tag (usually represents the image version). For example, "latest". | - | Internal Ports | (Optional) The ports required by the application for internal communications. For example, "27,332,13009" | - | External Ports | The ports required by the application for external communications (outside the cluster). | - | Replicas | The number of container instances that will be deployed. Default is "1".
    CloudShell waits 120 seconds for all replicas to be in READY state. | - | Start Commands | (Optional) Replace the default start command for executing the container. | - | Environment Variables | (Optional) Comma separated list of 'key=value' environment variables that will be defined in the container. | - | CPU Request | (Optional) The requested CPU for each container. Fractional requests are also allowed. For example '0.5'. Optional unless any resource request or limit is specified. | - | RAM Request | (Optional) The requested RAM for each container. Memory is measured in bytes. Memory is expressed as a plain integer or as a fixed-point integer using one of these suffixes - E, P, T, G, M, K. You can also use the power-of-two equivalents - Ei, Pi, Ti, Gi, Mi, Ki. For example, '256M'. | - | CPU Limit | (Optional) The CPU limit for each container. Fractional limits are also allowed. For example '0.5'. | - | RAM Limit | (Optional) The RAM limit for each container. Memory is measured in bytes. Memory is expressed as a plain integer or as a fixed-point integer using one of these suffixes - E, P, T, G, M, K. You can also use the power-of-two equivalents - Ei, Pi, Ti, Gi, Mi, Ki. For example, '256M'. | - - -2. To add additional deployment paths to the App template, click the **Add New Deployment Path** link at the bottom of the wizard and fill in the required information. -3. In the left pane, click **Configuration Management** and configure the application to be installed on the VM. - - ![](/Images/CloudShell-Portal/Manage/ConfigurationManagement.png) - :::tip - To learn how to develop custom scripts and Ansible playbooks, including examples, and set up support for the desired configuration management tool, see [Developing Configuration Management Scripts for Apps](../../../devguide/develop-config-management-scripts-for-apps/index.md). - ::: - - :::note Notes - - To run configuration management on an Azure App, make sure the App's VM size is Basic\_A2 or larger. - - For configuration management operations, CloudShell uses an available Execution Server (for Ansible, it's a Linux Execution Server that has the **Supports Ansible** flag). - - If the cloud provider resource has an **Execution Server Selector** configured, it will use that selector. If the selector is empty, CloudShell will use the selector defined in the appropriate **Resource Manager Client \> Configuration Services** model (**Ansible Configuration** or **Custom Script Configuration**). - - - Execution Server selectors specified on the deployed App shell/resource are not used to execute configuration management operations. - ::: - -- Define the script or playbook to install. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Select Tool - Select the application's installation and configuration tool. - -- **None**: Do not use any Configuration Management option. Use this option if, for example, the image or template already contains the application to install. -- **Script**: Select the custom script to run (PowerShell, bash or sh). -- **Ansible**: (Intended for customers who are already using Ansible) Select the Ansible playbook to run. - :::note - The playbook runs once during the **Setup** phase for all of the sandbox's Apps that use that playbook, after CloudShell has finished deploying their VMs. This is done both to improve performance and support cross-server logic where multiple applications need to be installed and configured in a certain way. - ::: - Note that the playbook runs once for all of the sandbox's Apps that use that playbook, after CloudShell has finished deploying their VMs. - - -Depending on the selection, additional options may become available. -
    Connection Method - The method to use to connect to the VM. - -Select: - -- **SSH** if the VM has a Linux OS -- **Windows Remote Management** if the VM has a Windows OS -:::note -To run configuration management on a Windows VM, the VM must have WinRM enabled. For details, see [Enable WinRM on Windows VMs to Support Configuration Management](../../../devguide/enable-winrm-on-win-vm-for-cfg-mng.md). -::: -
    Playbook / Script Location - Details of the Ansible playbook or custom script. - -- **URL**: Raw URL of the Ansible playbook or ZIP file, or custom script on the online repository (GitHub, GitLab and BitBucket are supported). URL must be accessible to the Execution Servers. - :::tip - The URL can accept parameters defined on the App, enabling you to test new versions of scripts without affecting consumer-ready versions. For example, you can have an App everyone is using, but if you want to test a version you're developing, simply change the value of the URL parameter in the test blueprint. - - - To use parameters, specify the parameter name in curly brackets (for example: **\{branch\}**). - - If the App has this parameter, CloudShell will replace the **\{branch\}** with its value during execution. - - If the parameter is missing, CloudShell will replace **\{branch\}** with an empty string. - - If you are using a global input, customers would be well advised to set a default value on the global input - ::: - **For GitHub, specify the raw URL. For example:** - - ```javascript - https://raw.githubusercontent.com/.../site.yml - ``` - - **For GitLab, specify the API endpoint in the format:** - - ```javascript - https://gitlab.com/api/v4/projects/{Project ID}/repository/files/testsharding%2Eyml/raw?ref=master - ``` - - Where: - - - Each special character that the file contains has to be encoded. In the example above - "%2E” is an encoded point (".”) - - - The ref value is the branch name (master for this example) - - - **For BitBucket Data Center (on premise), use the following URL format:** - - ```javascript - http://{datacenter server IP}/rest/api/1.0/projects/{projectKey}/repos/{repository name}/raw/testsharding.yml - ``` - - **For BitBucket Cloud, use one of the following:** - - - For source code files, specify the API endpoint: - - ```javascript - https://api.bitbucket.org/2.0/repositories/{workspace}/{repository name}/src/{GUID- the Commit hash string}/testsharding.yml - ``` - - - For download files (files residing in the repository's "Downloads" folder), specify this endpoint: - - ```javascript - https://api.bitbucket.org/2.0/repositories/{workspace}/{repository name}/downloads/site.yml - ``` - - :::important - If the URL is private (HTTPS), the VM will need to have a valid SSL certificate. To disable the certificate check, open Resource **Manager Client>Resource Families>Configuration Services** (**Ansible Configuration** or **Custom Script Configuration**) and set the **Verify Certificate** attribute to **False**. - ::: -- **User/Password**: (For private repositories) Access credentials or token to the script/playbook's online repository. - -- **Token**: (For private repositories) Access token to the script/playbook's online repository. - - For GitHub and GitLab, specify the API token. For BitBucket Cloud, set the repo's "App Password" in the App template's **Password** field. For BitBucket Data Center, specify the personal access token. - - -:::note Notes -- **For Custom Script configurations**: In SSH mode, only bash and sh scripts are allowed. In WinRM mode, only PowerShell scripts are allowed. WinRM over HTTPS only applies to custom scripts at this time. If WinRM is configured to run over HTTPS, the execution server will first try to run the custom script over HTTPS and then fall back to HTTP if HTTPS is unsuccessful. To prevent the fallback, set the **winrm_transport** parameter to **ssl**. -- **For Ansible configurations**: The Ansible playbook must be a YML or YAML file. To specify multiple playbooks or a hierarchy of an Ansible project, you can specify multiple Ansible playbooks or a ZIP package. For example: `https://raw.githubusercontent.com/QualiSystemsLab/private-repo-zip-download/master/README.zip` -- If a ZIP containing 2 or more playbooks is specified, CloudShell will use the playbook file titled `site.yml` or `site.yaml`. If the file is missing, the App's deployment will fail. -::: -
    Inventory Groups - (For Ansible) Specify the host groups for the application to be installed, separated by semicolons (;). The newly deployed VM will be associated to these groups, thus allowing plays that target these groups to run on the VM. - -For example: `Servers/AppServers;Servers/DBServers` -
    Parameters - Parameters to be passed to the Ansible playbook or custom script. Specify the parameters and their default values. - -In the blueprint or sandbox diagram, privileged users can also set the parameter to receive the value that is specified for a global input when reserving a sandbox containing the App. This is done by selecting the global input when editing the App in the blueprint or sandbox diagram. For example, a global input that specifies the build number of a product to be tested or which components of a product to install. -:::important -(For Ansible) To customize the port to be used to communicate with the VM, add the `Ansible_port` parameter. Default: `SSH` / `Port: 22` / `WinRM: 5985`. -::: -
    Additional Arguments - (For Ansible) Define arguments to be passed to the execution of the playbook (`Ansible-playbook` command). For example, `-v` will set verbose mode on while `-f` will set the maximum number of VMs to be handled in parallel. Multiple arguments can be given, separated by spaces. For additional information on possible arguments, see the official Ansible documentation. - -The arguments must be specified in **Resource Manager Client > Configuration Services** family > **Ansible Configuration** model > **Ansible Additional Arguments** attribute. -:::note -The arguments are defined globally for all Apps using Ansible. -::: -:::important -To configure Ansible to connect to certified hosts only (Linux VMs with a valid 'known_hosts' key), include the following additional arguments: `--ssh-extra-args='-o StrictHostKeyChecking=yes'` -::: -
    - -- To enable the end-user to rerun the App's configuration management on the deployed App in the sandbox, select **Allow rerunning configuration management for resources deployed from the App**. Once the App's deployment completes, a **Rerun Configuration Management** command is included in the deployed App's **Application Commands** pane. For details, see [Run App Commands](../../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md). This is useful for rolling back the App's VM to its original state. - -- To enable blueprint and sandbox owners to modify the App's Configuration Management details, select **Allow blueprint/sandbox owners to modify the App's Configuration Management**. The following details can be modified: playbook/script, authentication details, inventory groups, and parameters. Note that the modifications only apply to the blueprint or sandbox of the instance. - -- Optionally click the **Add New Script/Playbook** link at the bottom right to add additional custom scripts/Ansible playbooks to the App. The scripts will run in their display order, from top to bottom. You can drag scripts up or down to rearrange. - -- To change the script's alias, click the script's name and change as appropriate. - - ![](/Images/CloudShell-Portal/Manage/RenameConfigManageScript.png) - - -1. In the left pane, click **App Resource** to optionally set the VM's operating system user credentials (for example, to connect to the VM via RDP or SSH). You can also change the deployed App's Shell. - - ![](/Images/CloudShell-Portal/Manage/AppResource.png) - :::important - To help sandbox end-users connect to the VM, it is recommended to include the User and Password in the blueprint's instructions. For additional information, see [Add Instructions](../../../portal/blueprints/creating-blueprints/add-instructions.md). - ::: - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Shell - The Shell on which the App's VMs are based. When an App is deployed in a sandbox, it changes into a "deployed App resource", which is based on the selected Shell. By default, the "Generic App Model" Shell is used. - -Deployed Apps include a default set of commands such as Power On and Refresh IP, and the VM's **User** and **Password** attributes, as explained below. -:::note -Changing the Shell might cause additional fields to become visible and you may need to enter further information. -::: -
    User - User defined in the App's image. The **User/Password** credentials are used by QualiX to create in-browser connections to the VM from within the sandbox. - -:::note Notes -- For AWS instances,make sure to set the **User** of a user that already exists on the Amazon machine image. For custom images, the image owner should know the credentials, while community/marketplace images have the image's credentials listed in their documentation. -- Azure VM username and password restrictions apply. For details, see [Frequently asked question about Windows Virtual Machines](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/faq). -- For Azure Marketplace images, CloudShell will create a user on the VM based on the **User/Password** credentials you specify. -- For Azure Marketplace VMs, if the user is not set, CloudShell will set **adminuser** as the default user name. -::: -
    Password - VM user's password. - -:::note Notes -- For AWS Marketplace images, leave the **Password** empty. The AWS shell generates a new key-pair for each sandbox, which QualiX will use to establish the in-browser connection. -- For Azure Marketplace images: - - If the password is not set, only the user name will be required. For Linux VMs, CloudShell will create an SSH key-pair to enable a secure connection. - - If the password is set, it will be displayed as asterisks (\*\*\*\*\*\*) in the blueprint or sandbox. -::: -
    - -1. Click **Done**. - - The new App template is displayed in the **Apps** page. diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/add-a-kubernetes-cloud-provider-resource.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/add-a-kubernetes-cloud-provider-resource.md deleted file mode 100644 index 37a7465c6a..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/add-a-kubernetes-cloud-provider-resource.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Add a Kubernetes Cloud Provider Resource - -The Kubernetes Cloud Provider 2nd Gen shell enables the deployment of Kubernetes instances on a Kubernetes cluster. - -**To add a Kubernetes resource:** - -1. Log in to CloudShell Portal as administrator. -2. Import the Kubernetes shell into CloudShell. For details, see [Importing Shells](../../cloudshell-manage-dashboard/managing-shells.md#importing-shells). - - ![](/Images/Admin-Guide/KubernetesDownloadShell.png) - -3. In the **Inventory** dashboard, in the **Resources** tab, click the folder in which you want to create the resource. -4. Click **\+ Add New**. -5. In the **Create New Resource** dialog box, select the **Kubernetes Cloud Provider Shell 2G** cloud provider template. -6. Enter a **Name** for the Kubernetes resource.   - :::note - The resource's name has a limit of 100 characters and can only contain alpha-numeric characters, spaces, and the following characters: | . - \_ \] \[ - ::: -7. Click **Create**. - - The **Resource** dialog box is displayed. - - ![](/Images/Admin-Guide/KubernetesResourceDiscovery.png) - -8. Enter the required information. - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Config File Path - Full path to a standalone kubernetes `config` file containing all the relevant information for authentication. The file must reside on the Execution Server machine. To generate a portable config file, as Kubernetes administrator, run this command from your Kubernetes client: - -```python - kubectl config view --flatten -``` -
    AWS CP Resource Name(Optional - EKS only) The CloudShell resource name for the AWS Cloud Provider Resource
    External Service TypeThe service type the shell will create for external services. LoadBalancer type should be used when the Kubernetes cluster is hosted on a supported public cloud provider like AWS and Azure. Use NodePort when the cluster is self-hosted.
    Execution Server Selector - (Optional) This attribute points to a pre-defined group of execution servers (grouped by a common **Execution Server Selector** value). To make the association, enter the same value you specified on the execution server. -:::tip -The Execution Server Selector attribute does not come with the shell out-of-the-box. If you want to use it, add it to the shell in the **Manage>Shells** page and make sure the attribute has the **Execution Server Selector** rule, in Resource Manager Client's **Attributes** tab. -::: -
    - -9. Click **Start Discovery**. - - When the discovery process completes, a confirmation message is displayed. The cloud provider resource is displayed in the Inventory dashboard in CloudShell Portal and in Resource Manager Client. - - To customize the App deployment types and publish App orchestration parameters, see [Customizing App Deployment Types](../customizing-app-deployment-types.md). - -10. Next, [Add a Kubernetes App Template](../kubernetes-integration/add-a-kubernetes-app-template.md). diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/index.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/index.md deleted file mode 100644 index 495bb53265..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/index.md +++ /dev/null @@ -1,43 +0,0 @@ -# Kubernetes Integration - -The Kubernetes deployment type integrates CloudShell with Kubernetes. This integration enables the deployment of CloudShell Apps in self-hosted and cloud-managed Kubernetes containers. CloudShell supports deploying Kubernetes pods from images residing in the cluster's image registry. - -The following diagram illustrates an Kubernetes integration (with a local CloudShell installation) hosting two live sandboxes: - -![](/Images/Admin-Guide/KubernetesIntegrationArchitecture.png) - -CloudShell communicates with the Kubernetes cluster over the Kubernetes API to deploy and manage container instances as part of CloudShell sandboxes. - -When deploying a sandbox, CloudShell creates a Kubernetes deployment in a dedicated namespace for the sandbox. The deployment spins up 1 or more pods for each Kubernetes App (number of pods are defined in the App’s settings) as well as services for exposing the internal and external ports defined in the App. A dedicated service is created for each port. For each internal port, a ClusterIP service is created, and for each external port, a LoadBalancer or NodePort service is created. - -:::note Notes -- CloudShell does not manage Kubernetes App connectivity at this time. This can be done using the external and internal ports defined in the App. -- When the sandbox ends, the sandbox's namespace along with all its components are automatically deleted from the cluster. -- The App's external IP is displayed in the VM Details pane. For details, see [View an App's VM Details](../../../portal/sandboxes/sandbox-workspace/apps/view-vm-details.md). -::: -## Kubernetes installation workflow - -To integrate Kubernetes with CloudShell, perform the following steps: - - - - - - - -
    -
      -
    1. - [Add a Kubernetes Cloud Provider Resource](./add-a-kubernetes-cloud-provider-resource.md) -
    2. -
    3. - [Add a Kubernetes App Template](./add-a-kubernetes-app-template.md) -
    4. -
    -
    - - -## Related Topics - -- [Kubernetes Prerequisites](./kubernetes-prerequisites.md) -- [Supported Cloud Providers for Kubernetes Integration](./supported-cloud-providers-for-kubernetes-integration.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/kubernetes-prerequisites.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/kubernetes-prerequisites.md deleted file mode 100644 index 8842ce6fed..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/kubernetes-prerequisites.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Kubernetes Prerequisites - -Before you set up your Kubernetes integration with CloudShell, make sure you have the following: - -- Kubernetes cluster. For details, see the official Kubernetes installation docs. - - Kubernetes `config` file with cluster administrator permissions. To generate a portable config file, run this command from your Kubernetes client machine: - - ```python - kubectl config view --flatten - ``` - - - Configured LoadBalancer and/or NodePort for external ports -- Amazon EKS: - - Existing AWS 2G shell resource - - AWS region must have EKS already installed. diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/supported-cloud-providers-for-kubernetes-integration.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/supported-cloud-providers-for-kubernetes-integration.md deleted file mode 100644 index 1edecc02e6..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/kubernetes-integration/supported-cloud-providers-for-kubernetes-integration.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Supported Cloud Providers for Kubernetes Integration - -CloudShell communicates directly with the Kubernetes cluster. As such, CloudShell's Kubernetes integration is cloud-agnostic and should work with any on-prem or public cloud that hosts a Kubernetes cluster. diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/_category_.json b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/_category_.json deleted file mode 100644 index 36ea7612cb..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Private Cloud Provider Support in CloudShell", - "position": 3 -} diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/index.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/index.md deleted file mode 100644 index a0a7530daf..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/index.md +++ /dev/null @@ -1,10 +0,0 @@ -# Private Cloud Provider Support in CloudShell - -In order to allow CloudShell Apps to deploy and manage virtual machines in a private cloud provider such as VMware vCenter, the system administrator needs to create a cloud provider resource in the Inventory dashboard. This resource provides the cloud provider's network, storage and access settings to the CloudShell Apps. - -In addition, CloudShell App deployments can be associated to specific domains to improve performance in geographically dispersed CloudShell deployments. - -## Related Topics - -- [Add VMware vCenter Cloud Provider Resource](../private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md) -- [Managing Private Cloud Apps in Domains](../private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md deleted file mode 100644 index 05952a5b5d..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Managing Private Cloud Apps in Domains - -*The procedures in this article apply to Apps hosted on a private cloud provider, like vCenter or OpenStack. For public cloud Apps like AWS EC2 or Azure, see [Managing Public Cloud Apps in Domains](../public-cloud-provider-support-in-cloudshell/managing-public-cloud-apps-in-domains.md).* - -In order to improve performance and stability in CloudShell deployments that include multiple geographically distributed sites, administrators need to configure the deployment process of the App to be carried out in the domain of the cloud provider (i.e. configure the App to be deployed using the execution server closest to the lab in which the cloud provider resides). - -This is done by associating the App and cloud provider to the domain, to make sure domain users use the Apps and cloud providers allocated to their domain, and setting the **Execution Server Selector** attribute on the execution server, cloud provider resource and App, and giving it the same value on these elements to ensure the actual drivers will run physically near the cloud provider. - -This is a five-step process: - -1. [Create a cloud provider resource set to the domain](../private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md#create-a-cloud-provider-resource-set-to-the-domain) -2. [Configure the Execution Server to support Ansible operations](../private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md#configure-the-execution-server-to-support-ansible-operations) -3. [Associate the Execution Server Selector attribute to the deployed App's family](../private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md#associate-the-execution-server-selector-attribute-to-the-deployed-apps-family) -4. [Associate the execution servers to the domain](../private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md#associate-the-execution-servers-to-the-domain) -5. [Associate the App's deployment to the domain](../private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md#associate-the-apps-deployment-to-the-domain) - -## Create a cloud provider resource set to the domain - -When creating the cloud provider resource, you need to specify the required domain in the **Execution Server Selector** attribute. -:::note -A cloud provider resource should be set to one domain only. For multiple domains, create additional cloud provider resources. -::: -**To set the cloud provider resource to the domain:** - -1. As administrator in the required CloudShell domain, create the cloud provider resource. - -2. In the **Resource Discovery Information** page, in the **Execution Server Selector** attribute, specify the name of the domain. For example, "London". - - ![](/Images/CloudShell-Portal/Manage/ExecutionServerSelectorNewResource.png) - -3. Complete the resource creation process. - -## Configure the Execution Server to support Ansible operations -:::note -This section is only required for Ansible configuration management. -::: -To use Ansible to install and configure applications on Apps, the system administrator needs to perform several configurations on the Linux-based Execution Server that will be used to run the Ansible operations on the App's deployed VMs. For additional information, see [Ansible Playbook Development for Apps](../../../devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/). - -## Associate the Execution Server Selector attribute to the deployed App's family - -**To associate the Execution Server Selector attribute to the deployed App's family:** - -1. Associate the **Execution Server Selector** attribute to the deployed App's family. For example, **Generic App Family**. -2. After you associate the attribute to the deployed App's family, make sure the **Attributes** list of the family displays the **Execution Server Selector** attribute. For example: - - ![](/Images/CloudShell-Portal/Manage/DeployedAppParameters.png) - - -## Associate the execution servers to the domain - -This procedure explains how to associate, to the domain, the execution servers to be used to deploy Apps on the cloud provider to the domain (usually the execution servers that are physically closest to location of the cloud provider.) The **Execution Server Selector** attribute must have the **Execution Server Selector** rule enabled. - -**To associate an execution server to the domain:** - -1. In CloudShell Portal, click **Manage**. - - The **Manage** dashboard is displayed. - -2. In the left sidebar, click **Execution Servers**. - -3. In the left pane, under **Execution Servers**, click **Servers**. - - The execution server list is displayed. - -4. Click the name of a server. - - The **Attributes** dialog box is displayed. - -5. Select the **Execution Server Selector** check box and enter the name of the domain. For example, London: - - ![](/Images/CloudShell-Portal/Manage/AddAttribute.png) - -6. Click **Done**. -7. Repeat these steps to associate additional execution servers to the domain. - -## Associate the App's deployment to the domain - -To configure the App to be deployed in a specific domain, you need to associate the App's family to the domain, as well as the domain category to make it available to members of that domain. This domain both includes the App's cloud provider and is closest to the execution servers that will deploy the App. - -**To associate an App's deployment to a domain:** - -1. In the **Manage** dashboard, in the left sidebar, click **Apps**. - - The **Apps** page is displayed. - -2. Create a new App or edit an existing one, as explained in [Managing App Templates](../../cloudshell-manage-dashboard/manage-app-templates/index.md). - - The App's configuration wizard is displayed. - -3. To make the App available to members of this domain, from the **Categories** dropdown list, select the categories associated to the domain. For details about creating domain categories, see [Managing domain categories](../../cloudshell-manage-dashboard/managing-categories.md#managing-domain-categories). - - For example, "London": - - ![](/Images/CloudShell-Portal/Manage/ExecutionServerAppTemplate5.png) - -4. If this is a new App, in the **Deployment Paths** page, create a deployment path for the cloud provider. Make sure to select the cloud provider resource you created in the required CloudShell domain. - -5. In the **App Resource** page, in the **Execution Server Selector** attribute, specify the value you specified in the **Execution Server Selector** attribute of the cloud provider resource. For example, "London": - - ![](/Images/CloudShell-Portal/Manage/ExecutionServerAppTemplate4.png) - -6. Click **Done**. - -## Related Topics - -- [Manage Dashboard Overview](../../cloudshell-manage-dashboard/manage-dashboard-overview.md) -- [Managing App Templates](../../cloudshell-manage-dashboard/manage-app-templates/index.md) -- [Apps Overview](../../../intro/features/apps-overview.md) diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/_category_.json b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/_category_.json deleted file mode 100644 index 78fe527651..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "OpenStack Integration and Configuration", - "position": 1 -} diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/add-an-openstack-app-template.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/add-an-openstack-app-template.md deleted file mode 100644 index d0c44c9129..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/add-an-openstack-app-template.md +++ /dev/null @@ -1,380 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Add an OpenStack App Template - -The App template defines the settings and configurations of the VM to be deployed in the sandbox as well as the application(s) to be installed on that VM. - -**To add a new OpenStack App template:** - -1. Click **\+ Add**. - - The **Create New App** wizard is displayed. - - ![](/Images/CloudShell-Portal/Manage/CreateNewApp.png) - -2. From the **Select Deployment Type** pane, select **OpenStack Deploy From Glance Image**. -3. Enter a **Name** for the App template. - :::note - The App template's name has a limit of 100 characters and can only contain alpha-numeric characters, spaces, and the following characters: | . - \_ \] \[ - ::: -4. Click **Create**. - - The App template is created and the **App** wizard's **General** page is displayed. - - ![](/Images/CloudShell-Portal/Manage/AppGeneralPage.png) - -5. In the **General** page, define the App template's display settings and category. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldRequiredDescription
    NameRequiredApp name that is displayed in the catalog.
    DescriptionOptionalDescription of the App.
    IconOptionalAdd an image to the catalog definition. The recommended size for the image is 190x120 pixels (image size is limited to 400x400 pixels or 200 KB).
    CategoriesOptional - Service categories are a method to classify Apps. The Apps are displayed in the **Add App / Service** side pane in the blueprint and sandbox diagram, arranged in categories. Only users who are permitted to view the category can access the App. Apps without a category are not displayed. - - By default, the **Applications** category is selected. - - Select a category from the dropdown list. You can select additional categories. Examples of categories are: applications, networking and VLAN. - - :::note Notes - - The category must be associated with the domain in which the required cloud provider resides. For information about domain categories, see [Managing domain categories](../../../cloudshell-manage-dashboard/managing-categories.md#managing-domain-categories). - - It is recommended to use up to a 2-level hierarchy when organizing the **Add App / Service** catalog (i.e. root and sub-category). - - In the **Add App / Service** side pane, Apps are displayed in the root category only. This includes services associated to sub-categories. - ::: -
    - -6. In the left pane, click **Deployment Paths** and configure the App template's deployment path. - - A deployment path define(1) the OpenStack Glance image, (the method to be used to deploy the VM), (2) the VM’s settings such as storage size, CPU and image file, and (3) the CloudShell cloud provider resource that enables CloudShell to access the cloud provider and deploy the VM on it. - - Note the deployment path's name (highlighted in the image below). The path's name is dynamic and consists of the selected **Cloud Provider** resource and **Deployment type**. You can change the name of the path by clicking the field. - - ![](/Images/Admin-Guide/Inventory-Operations/OpenstackDeploymentPathName.png) - - 1. From the Deployment drop down list, select the deployment type. - - The selected deployment type's attributes are displayed. - - 2. Fill in the details. - - For **OpenStack Deploy Glance Image 2G** attributes, - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Cloud ProviderName of the OpenStack cloud provider resource to be used
    Image IDUUID of the image to be used to create the App's Openstack instance. Can be found on Portal in **Compute**>**Images**>select the image>**ID** value.
    Instance Flavor - (Optional) OpenStack instance Flavor. The instance flavor determines the CPU, memory and networking capacity of the instance. For example: "m1.tiny" or "m1.xlarge". - - Can be found on Portal in **Compute**>**Flavors**>select the flavor>**Flavor Name**. -
    Add Floating IP - Set to **True** to use a static (public) IP address to communicate with the instance from outside the virtual network. Default value is **False**. - - In most cases the floating IP address is associated with the instance until the instance is stopped or terminated, after which the floating IP is no longer available. You can reserve a floating IP in OpenStack to ensure that the IP is available to your subscription at any time. -
    Affinity Group ID - (Optional) UUID of the affinity group ("nova server-group") to which the instance will be associated. Affinity groups determine on which compute nodes to place instances. - :::note - To support the deployment of 'all' OpenStack instances using the same hypervisor, affinity groups with the 'affinity' policy are used. - ::: -
    Availability Zone(Optional) Name of the availability zone to which the instance will be associated. Availability zones are used to group network nodes to enhance the availability of network resources.
    Floating IP Subnet IDUUID of the subnet to use for Floating IPs.
    Auto UDEVEnable Linux udev rules to allow new interfaces to be recognized by the OS automatically. When using Windows machines, this attribute should be set to **False**.
    User Data - Custom user data to pass to the deployed App instance. For example, some metadata or post-installation script. For details, see this official OpenStack documentation page: [https://docs.openstack.org/nova/rocky/user/user-data.html](https://docs.openstack.org/nova/rocky/user/user-data.html). -
    Inbound Ports - Semi-colon separated list of CIDRs, ports and protocols on which to open inbound traffic from outside of the sandbox. - The syntax is `[cidr:][protocol:]port-or-port-range`. For example: `0.0.0.0/0:tcp:80;443;udp:200-220`. - Default CIDR is "0.0.0.0/0". Default protocol is "tcp". -
    Private IPThe IP will be set for the management interface. The IP should be inside the management network ranges. OpenStack doesn't allow to use the same IP address for different instances.
    - -7. To add additional deployment paths to the App template, click the **Add New Deployment Path** link at the bottom of the wizard and fill in the required information. -8. In the left pane, click **Configuration Management** and configure the application to be installed on the VM. - - ![](/Images/CloudShell-Portal/Manage/ConfigurationManagement.png) - :::tip - To learn how to develop custom scripts and Ansible playbooks, including examples, and set up support for the desired configuration management tool, see [Developing Configuration Management Scripts for Apps](../../../../devguide/develop-config-management-scripts-for-apps/index.md). - ::: - :::note Notes - - To run configuration management on an Azure App, make sure the App's VM size is Basic_A2 or larger. - - For configuration management operations, CloudShell uses an available Execution Server (for Ansible, it's a Linux Execution Server that has the **Supports Ansible** flag). - - If the cloud provider resource has an **Execution Server Selector** configured, it will use that selector. If the selector is empty, CloudShell will use the selector defined in the appropriate **Resource Manager Client>Configuration Services** model (**Ansible Configuration** or **Custom Script Configuration**). - - Execution Server selectors specified on the deployed App shell/resource are not used to execute configuration management operations. - ::: - - - Define the script or playbook to install. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Select Tool - Select the application's installation and configuration tool. - -- **None**: Do not use any Configuration Management option. Use this option if, for example, the image or template already contains the application to install. -- **Script**: Select the custom script to run (PowerShell, bash or sh). -- **Ansible**: (Intended for customers who are already using Ansible) Select the Ansible playbook to run. - :::note - The playbook runs once during the **Setup** phase for all of the sandbox's Apps that use that playbook, after CloudShell has finished deploying their VMs. This is done both to improve performance and support cross-server logic where multiple applications need to be installed and configured in a certain way. - ::: - Note that the playbook runs once for all of the sandbox's Apps that use that playbook, after CloudShell has finished deploying their VMs. - - -Depending on the selection, additional options may become available. -
    Connection Method - The method to use to connect to the VM. - -Select: - -- **SSH** if the VM has a Linux OS -- **Windows Remote Management** if the VM has a Windows OS -:::note -To run configuration management on a Windows VM, the VM must have WinRM enabled. For details, see [Enable WinRM on Windows VMs to Support Configuration Management](../../../../devguide/enable-winrm-on-win-vm-for-cfg-mng.md). -::: -
    Playbook / Script Location - Details of the Ansible playbook or custom script. - -- **URL**: Raw URL of the Ansible playbook or ZIP file, or custom script on the online repository (GitHub, GitLab and BitBucket are supported). URL must be accessible to the Execution Servers. -:::tip -The URL can accept parameters defined on the App, enabling you to test new versions of scripts without affecting consumer-ready versions. For example, you can have an App everyone is using, but if you want to test a version you're developing, simply change the value of the URL parameter in the test blueprint. - -- To use parameters, specify the parameter name in curly brackets (for example: **\{branch\}**). -- If the App has this parameter, CloudShell will replace the **\{branch\}** with its value during execution. -- If the parameter is missing, CloudShell will replace **\{branch\}** with an empty string. -- If you are using a global input, customers would be well advised to set a default value on the global input -::: - **For GitHub, specify the raw URL. For example:** - - ```javascript - https://raw.githubusercontent.com/.../site.yml - ``` - - **For GitLab, specify the API endpoint in the format:** - - ```javascript - https://gitlab.com/api/v4/projects/{Project ID}/repository/files/testsharding%2Eyml/raw?ref=master - ``` - - Where: - - - Each special character that the file contains has to be encoded. In the example above - "%2E” is an encoded point (".”) - - - The ref value is the branch name (master for this example) - - - **For BitBucket Data Center (on premise), use the following URL format:** - - ```javascript - http://{datacenter server IP}/rest/api/1.0/projects/{projectKey}/repos/{repository name}/raw/testsharding.yml - ``` - - **For BitBucket Cloud, use one of the following:** - - - For source code files, specify the API endpoint: - - ```javascript - https://api.bitbucket.org/2.0/repositories/{workspace}/{repository name}/src/{GUID- the Commit hash string}/testsharding.yml - ``` - - - For download files (files residing in the repository's "Downloads" folder), specify this endpoint: - - ```javascript - https://api.bitbucket.org/2.0/repositories/{workspace}/{repository name}/downloads/site.yml - ``` - -:::important -If the URL is private (HTTPS), the VM will need to have a valid SSL certificate. To disable the certificate check, open **Resource Manager Client>Resource Families>Configuration Services** (**Ansible Configuration** or **Custom Script Configuration**) and set the **Verify Certificate** attribute to **False**. -::: -- **User/Password**: (For private repositories) Access credentials or token to the script/playbook's online repository. - -- **Token**: (For private repositories) Access token to the script/playbook's online repository. - - For GitHub and GitLab, specify the API token. For BitBucket Cloud, set the repo's "App Password" in the App template's **Password** field. For BitBucket Data Center, specify the personal access token. - -:::note Notes -- **For Custom Script configurations**: In SSH mode, only bash and sh scripts are allowed. In WinRM mode, only PowerShell scripts are allowed. WinRM over HTTPS only applies to custom scripts at this time. If WinRM is configured to run over HTTPS, the execution server will first try to run the custom script over HTTPS and then fall back to HTTP if HTTPS is unsuccessful. To prevent the fallback, set the **winrm_transport** parameter to **ssl**. -- **For Ansible configurations**: The Ansible playbook must be a YML or YAML file. To specify multiple playbooks or a hierarchy of an Ansible project, you can specify multiple Ansible playbooks or a ZIP package. For example: `https://raw.githubusercontent.com/QualiSystemsLab/private-repo-zip-download/master/README.zip` -- If a ZIP containing 2 or more playbooks is specified, CloudShell will use the playbook file titled `site.yml` or `site.yaml`. If the file is missing, the App's deployment will fail. -::: -
    Inventory Groups - (For Ansible) Specify the host groups for the application to be installed, separated by semicolons (;). The newly deployed VM will be associated to these groups, thus allowing plays that target these groups to run on the VM. - -For example: `Servers/AppServers;Servers/DBServers` -
    Parameters - Parameters to be passed to the Ansible playbook or custom script. Specify the parameters and their default values. - -In the blueprint or sandbox diagram, privileged users can also set the parameter to receive the value that is specified for a global input when reserving a sandbox containing the App. This is done by selecting the global input when editing the App in the blueprint or sandbox diagram. For example, a global input that specifies the build number of a product to be tested or which components of a product to install. -:::important -(For Ansible) To customize the port to be used to communicate with the VM, add the `Ansible_port` parameter. Default: `SSH` / `Port: 22` / `WinRM: 5985`. -::: -
    Additional Arguments - (For Ansible) Define arguments to be passed to the execution of the playbook (`Ansible-playbook` command). For example, `-v` will set verbose mode on while `-f` will set the maximum number of VMs to be handled in parallel. Multiple arguments can be given, separated by spaces. For additional information on possible arguments, see the official Ansible documentation. - -The arguments must be specified in **Resource Manager Client \> Configuration Services** family \> **Ansible Configuration** model \> **Ansible Additional Arguments** attribute. -:::note -The arguments are defined globally for all Apps using Ansible. -::: -:::important -To configure Ansible to connect to certified hosts only (Linux VMs with a valid 'known_hosts' key), include the following additional arguments: `--ssh-extra-args='-o StrictHostKeyChecking=yes'` -::: -
    - - - To enable the end-user to rerun the App's configuration management on the deployed App in the sandbox, select **Allow rerunning configuration management for resources deployed from the App**. Once the App's deployment completes, a Rerun Configuration Management command is included in the deployed App's Application Commands pane. For details, see [Run App Commands](../../../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md). This is useful for rolling back the App's VM to its original state. - - To enable blueprint and sandbox owners to modify the App's Configuration Management details, select Allow blueprint/sandbox owners to modify the App's Configuration Management. The following details can be modified: playbook/script, authentication details, inventory groups, and parameters. Note that the modifications only apply to the blueprint or sandbox of the instance. - - Optionally click the Add New Script/Playbook link at the bottom right to add additional custom scripts/Ansible playbooks to the App. The scripts will run in their display order, from top to bottom. You can drag scripts up or down to rearrange. - - To change the script's alias, click the script's name and change as appropriate. - -![](/Images/CloudShell-Portal/Manage/RenameConfigManageScript.png) - - -1. In the left pane, click **App Resource** to optionally set the VM's operating system user credentials (for example, to connect to the VM via RDP or SSH). You can also change the deployed App's Shell. - - ![](/Images/CloudShell-Portal/Manage/AppResource.png) - :::important - To help sandbox end-users connect to the VM, it is recommended to include the **User** and **Password** in the blueprint's instructions. For additional information, see [Add Instructions](../../../../portal/blueprints/creating-blueprints/add-instructions.md). - ::: - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Shell - The Shell on which the App's VMs are based. When an App is deployed in a sandbox, it changes into a "deployed App resource", which is based on the selected Shell. By default, the "Generic App Model" Shell is used. - -Deployed Apps include a default set of commands such as Power On and Refresh IP, and the VM's User and Password attributes, as explained below. -:::note -Changing the Shell might cause additional fields to become visible and you may need to enter further information. -::: -
    User - User defined in the App's image. The **User/Password** credentials are used by QualiX to create in-browser connections to the VM from within the sandbox. - -:::note Notes -- For AWS instances,make sure to set the **User** of a user that already exists on the Amazon machine image. For custom images, the image owner should know the credentials, while community/marketplace images have the image's credentials listed in their documentation. -- Azure VM username and password restrictions apply. For details, see [Frequently asked question about Windows Virtual Machines](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/faq). -- For Azure Marketplace images, CloudShell will create a user on the VM based on the **User/Password** credentials you specify. -- For Azure Marketplace VMs, if the user is not set, CloudShell will set **adminuser** as the default user name. -::: -
    Password - VM user's password. - -:::note Notes -- For AWS Marketplace images, leave the **Password** empty. The AWS shell generates a new key-pair for each sandbox, which QualiX will use to establish the in-browser connection. -- For Azure Marketplace images: - - If the password is not set, only the user name will be required. For Linux VMs, CloudShell will create an SSH key-pair to enable a secure connection. - - If the password is set, it will be displayed as asterisks (\*\*\*\*\*\*) in the blueprint or sandbox. -::: -
    - -1. Click **Done**. - - The new App template is displayed in the **Apps** page. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/add-openstack-cloud-provider-resource.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/add-openstack-cloud-provider-resource.md deleted file mode 100644 index b8768253de..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/add-openstack-cloud-provider-resource.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Add OpenStack Cloud Provider Resource - -The OpenStack 2nd Gen cloud provider enables the deployment of OpenStack instances from images. CloudShell supports OpenStack releases Ocata, Pike, Queens, Rocky, Stein, Train, Ussuri, Victoria and Wallaby. - -:::note Notes -- The OpenStack 2nd Gen shell is available for download from [Quali Repositories](https://github.com/orgs/QualiSystems/discussions/categories/integrations). -- OpenStack elements created by the CloudShell management network should not be altered as this may cause unexpected behavior. -::: -**To add an OpenStack cloud provider resource:** - -1. Log in to CloudShell Portal as administrator. -2. Import the OpenStack 2G shell into CloudShell. For details, see [Importing Shells](../../../cloudshell-manage-dashboard/managing-shells.md#importing-shells). - - ![](/Images/Admin-Guide/KubernetesDownloadShell.png) - -3. In the **Inventory** dashboard, in the **Resources** tab, click the folder in which you want to create the resource. -4. Click **\+ Add New**. -5. In the **Create New Resource** dialog box, select the **OpenStack Cloud Provider Shell 2G** cloud provider template. -6. Enter a **Name** for the OpenStack resource. - :::note - The resource's name has a limit of 100 characters and can only contain alpha-numeric characters, spaces, and the following characters: | . - \_ \] \[ - ::: -7. Enter the **IP Address** of the OpenStack server that will be used to deploy the virtual machines. -8. Click **Create**. - - The **Resource** dialog box is displayed. - - ![](/Images/Admin-Guide/Inventory-Operations/OpenstackResource.png) - -9. Enter the required information. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Controller URL - OpenStack Keystone Controller URL endpoint address. For example: http://controller:5000/v3. - - Displayed in OpenStack portal>**API Access** page>**Identity** value). -
    OpenStack Domain NameOpenStack domain to use.
    OpenStack Project NameOpenStack project in which CloudShell will create the instances.
    OpenStack Management Network ID - UUID of the manually created CloudShell management network (for assistance identifying your management network, contact your OpenStack admin). This network will be used to configure the communication between the Sandbox instances and the CloudShell components. For example: "c14241d2-376c-4fb3-8d1e-61f5c1408448" - - The UUID can be found in the Horizon user interface or in OpenStack portal>**Network**\>**Networks** page>click the network and copy the **ID**. -
    PasswordOpenStack user's password
    UserOpenStack user on the OpenStack server
    OpenStack Reserved Networks - Comma separated list (,) of reserved networks. vNICs configured to these networks will not be used for instance connectivity. - :::note - Ideally, one of the following three ranges should be free: 10.0.0.0/8, 172.16.0.0/16, 192.168.0.0/16 - ::: -
    VLAN Type(**VLAN** / **VXLAN**) The VLAN technology to use for connectivity to/from this cloud provider.
    Floating IP Subnet ID - UUID of the external network subnet that will allocate floating IDs to the OpenStack instances, to allow external connectivity into those instances. For additional details, see [OpenStack Configuration Requirements](./openstack-configuration-requirements.md). - - Displayed in OpenStack portal>**Network**\>**Networks** page>**Subnets** tab>select the subnet>**ID** value. For assistance identifying your Floating IP network, contact your OpenStack admin. -
    OpenStack Physical Interface Name - (Not required if you set the **VLAN Type** attribute to **VXLAN**) The physical interface mapping name to use when configuring OpenStack connectivity. - - The physical interface can be found under the connectivity provider configuration in your OpenStack plugin's agent file. For example: - - - For Linux Bridge plugin: `/etc/neutron/plugins/ml2/linuxbridge_agent.ini` file > `[linux_bridge]` configuration section > `physical_interface_mappings` attribute. - - For example: `physical_interface_mappings = public:em1,office:p1p2,quali:em2`. - - - For Open vSwitch plugin: `/etc/neutron/plugins/ml2/openvswitch_agent.ini` file > `[ovs]` configuration section > `bridge_mappings` attribute. - - For example: `bridge_mappings = public:br-vlan`. -
    Behavior During Save (Optional) - (Applies to the **Save and Restore** paid add-on) The VM's state while the sandbox is being saved. Options are **Remain Powered On** and **Power Off**. - - - **Inherit**: (Default) Uses the setting defined on the vCenter cloud provider resource - - **Remain Powered On**: The VM will remain powered on during the saving state. - - **Power Off**: If the VM was powered on before the sandbox entered the saving state, the VM will shut down (power off) for the duration of the save. - :::note - After save has ended, the VM returns to its state prior to saving, regardless of the behavior during the save. - ::: - If this field is left empty, the default value is **Remain Powered On**. -
    Execution Server Selector - (Optional) This attribute points to a pre-defined group of execution servers (grouped by a common **Execution Server Selector** value). To make the association, enter the same value you specified on the execution server. - - This attribute is typically used for different sites or domains. For additional information on managing App deployments per domains, see [Managing Private Cloud Apps in Domains](../managing-private-cloud-apps-in-domains.md). -
    - -10. Click **Start Discovery** to validate the OpenStack settings. - - When the discovery process completes, a confirmation message is displayed. The resource is displayed in the **Inventory** dashboard in CloudShell Portal and in Resource Manager. - - Apps can now be added using the OpenStack resource. For additional information, see [Adding App templates](../../../cloudshell-manage-dashboard/manage-app-templates/index.md). - - To customize the App deployment types and publish App orchestration parameters, see [Customizing App Deployment Types](../../customizing-app-deployment-types.md) - - -## Related Topics - -- [Adding Inventory Resources](../../../../portal/inventory/managing-resources/adding-inventory-resources/index.md) -- [Managing Private Cloud Apps in Domains](../managing-private-cloud-apps-in-domains.md) diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/index.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/index.md deleted file mode 100644 index 11ed8ec738..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/index.md +++ /dev/null @@ -1,16 +0,0 @@ -# OpenStack Integration and Configuration - -The OpenStack 2nd Gen cloud provider enables the deployment of OpenStack instances from images. CloudShell supports OpenStack releases Ocata, Pike, Queens, Rocky, Stein, Train, Ussuri, Victoria and Wallaby. - -:::note Notes -- The OpenStack 2nd Gen shell is available for download from [Quali Repositories](https://github.com/orgs/QualiSystems/discussions/categories/integrations). -- OpenStack elements created by the CloudShell management network should not be altered as this may cause unexpected behavior. -::: - -# Related Topics - -- [OpenStack Configuration Requirements](./openstack-configuration-requirements.md) -- [Add OpenStack Cloud Provider Resource](./add-openstack-cloud-provider-resource.md) -- [Add an OpenStack App Template](./add-an-openstack-app-template.md) -- [OpenStack Known Limitations](./openstack-known-limitations.md) -- [Managing Private Cloud Apps in Domains](../managing-private-cloud-apps-in-domains.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/openstack-configuration-requirements.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/openstack-configuration-requirements.md deleted file mode 100644 index 9aefb9731a..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/openstack-configuration-requirements.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -sidebar_position: 1 ---- - -# OpenStack Configuration Requirements - -To enable CloudShell to deploy and manage the lifecycle of OpenStack instances, the following configurations and settings are required: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    RequirementDescription
    OpenStack user - Permissions required from the user specified in the OpenStack cloud provider resource: - -- User should be admin on the project to enable the use of provider networks -- Create instances -- Create a network -- Create a subnet -- Access to images used for deployment -
    Quotas - The following quotas should be provided: - -- Number of Cores and Number of Instances: Important to set the same value for these quotas. - -- Neutron number of networks and ports: It is recommended to specify the maximum number of quotas. - - Typically, about 3-4 ports are required per instance and hence the port quota should be sufficient. Also, note that for each instance, a port on the CloudShell Management network utilizes ports from this quota. - -- To use Server groups, you may need to increase the "server group members" quota. Note that a very high value for this quota along with an "anti-affinity" policy would mean so many different hosts should be available. -
    Project Management Network - A network needs to be created to store instances deployed by CloudShell Apps: - -- Assign a subnet to the network. -- Make sure the network is not **external**. Every instance will have a network port on the management network. -- Set the network's **shared** flag to **True**. The network will be shared by instances (that are deployed across different sandboxes and potentially different tenants/projects. -- Make sure QualiX Server has a floating IP and is part of this network so that it can be accessed from external networks. -
    Floating IP subnet network - - The subnet network must be **external**. -- The network should be "flat” – no need for segmentation. -- The network must be connected to a router. -- The floating IP is saved on the deployed app in the Public IP attribute -
    Supported releases - CloudShell supports the following OpenStack releases: - -- Ocata -- Pike -- Queens -- Rocky -- Stein -- Train -- Ussuri -- Victoria -- Wallaby -
    Supported API versions - - Nova API - Version 2 (tested and used features of base v2.0 - additional features supported by sub-releases 2.X are not used) -- Neutron API - Version 2 -- Keystone API - Version 3 -
    Provider networksOpenStack provider networks are shared across all projects in your OpenStack installation. Therefore, to avoid ID collisions, make sure the VLAN services that will be used for OpenStack VM connectivity do not have overlapping allocation ranges for the same pool name. For information about setting up VLAN services, see [VLAN Connectivity](../../../setting-up-cloudshell/inventory-operations/connectivity-control/vlan-connectivity/index.md).
    Project Security Group - To enable remote connections to OpenStack instances from CloudShell Portal (via QualiX), the following ports should be open on the project's Default Security Group: - -- ICMP Open - (Required unless a policy prevents ICMP) -- TCP Port 22 for SSH -- TCP port 80/443 if running a web-server (Required if running web services that require external access) -- TCP Port 3389 for RDP On Windows - -In addition, the QualiX Server VM must be assigned to the Project Security Group. -:::important -It is recommended to explicitly set the `Remote` property of the rules created in the Project Security Group. If CIDR is set, use the CloudShell management network's CIDR, for example: 172.16.1.0/24. If a security group is set, use the CloudShell management security group. -::: -:::note -The Project Security Group will be used for all OpenStack instances created by CloudShell. -::: -
    Default Security Group - To enable OpenStack instances to receive a floating IP, a default security group must be defined in the OpenStack project to be used by the cloud provider resource. - -The default security group will be associated to all OpenStack instances that are deployed by Apps that use this cloud provider and have the **Add Floating IP** attribute set to **True**. -
    VLAN Trunking(Applies to OpenStack Cloud Provider Shell version 1.2.0 and up) To allow CloudShell to create a new interface on the deployed App's VM for every VLAN service, make sure VLAN Trunking is enabled. For details, see this official OpenStack documentation page: [https://docs.openstack.org/neutron/pike/admin/config-trunking.html](https://docs.openstack.org/neutron/pike/admin/config-trunking.html).
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/openstack-known-limitations.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/openstack-known-limitations.md deleted file mode 100644 index 55f17c5481..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/openstack-integration-and-configuration/openstack-known-limitations.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -sidebar_position: 4 ---- - -# OpenStack Known Limitations - -Take the following under consideration when setting up OpenStack App deployment in CloudShell. - -- **OpenStack networking model**: OpenStack networking is not a Pure L2 model where ports are attached to switches and VLANs. This is more of an L2/L3 hybrid where each L2 network (broadcast domain) is also associated with an L3 Subnet. In CloudShell, this model is implemented using segmentation ID as VLAN or VxLAN. -- **Access/Trunk VLANs**: Currently, only **Access** mode is supported. In other words, end hosts are not VLAN-aware. VLAN trunking support is not present right now. -- **Attaching VLAN to vNIC**: Support for selecting a VLAN to attach to a vNIC does not exist right now due to limitations with the hybrid L2/L3 model. -- **VM access using keypairs**: Currently, username/password access to OpenStack instances is supported. Keypairs are currently not supported. -- **Hotplug interfaces**: CloudShell uses udev rules for auto detecting interfaces on the deployed OpenStack instances. Therefore, make sure the instance image has udev support and 'cloud-init' installed and enabled. Note that most of the standard cloud images have built-in udev support. - - To use ubuntu images, the 'GNOME NetworkManager' service must be disabled. - -- **App network CIDRs**: In CloudShell's implementation, support for /24 CIDRs is provided. This might limit the number of supported hosts on a subnet to 255. diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/_category_.json b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/_category_.json deleted file mode 100644 index 84bb4b3f77..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "VMware vCenter Integration and Configuration", - "position": 2 -} diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-a-vcenter-app-template.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-a-vcenter-app-template.md deleted file mode 100644 index f74cec4d12..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-a-vcenter-app-template.md +++ /dev/null @@ -1,729 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Add a vCenter App Template - -The App template defines the settings and configurations of the VM to be deployed in the sandbox as well as the application(s) to be installed on that VM. - -**To add a new vCenter App template:** - -1. Click **\+ Add**. - - The **Create New App** wizard is displayed. - - ![](/Images/CloudShell-Portal/Manage/CreateNewApp.png) - -2. From the **Select Deployment Type** pane, select the desired vCenter deployment type. -3. Enter a **Name** for the App template. - :::note - The App template's name has a limit of 100 characters and can only contain alpha-numeric characters, spaces, and the following characters: | . - \_ \] \[ - ::: -4. Click **Create**. - - The App template is created and the **App** wizard's **General** page is displayed. - - ![](/Images/CloudShell-Portal/Manage/AppGeneralPage.png) - -5. In the **General** page, define the App template's display settings and category. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldRequiredDescription
    NameRequiredApp name that is displayed in the catalog.
    DescriptionOptionalDescription of the App.
    IconOptionalAdd an image to the catalog definition. The recommended size for the image is 190x120 pixels (image size is limited to 400x400 pixels or 200 KB).
    CategoriesOptional - Service categories are a method to classify Apps. The Apps are displayed in the **Add App / Service** side pane in the blueprint and sandbox diagram, arranged in categories. Only users who are permitted to view the category can access the App. Apps without a category are not displayed. - - By default, the **Applications** category is selected. - - Select a category from the dropdown list. You can select additional categories. Examples of categories are: applications, networking and VLAN. - - :::note Notes - - The category must be associated with the domain in which the required cloud provider resides. For information about domain categories, see [Managing domain categories](../../../cloudshell-manage-dashboard/managing-categories.md#managing-domain-categories). - - It is recommended to use up to a 2-level hierarchy when organizing the **Add App / Service** catalog (i.e. root and sub-category). - - In the **Add App / Service** side pane, Apps are displayed in the root category only. This includes services associated to sub-categories. - ::: -
    - -6. In the left pane, click **Deployment Paths** and configure the App template's deployment path. - - A deployment path consists of (1) the selected deployment type (the method to be used to deploy the VM), (2) the VM’s settings such as storage size, CPU and image file, and (3) the CloudShell cloud provider resource that enables CloudShell to access the cloud provider and deploy the VM on it. - - Note the deployment path's name (highlighted in the image below). The path's name is dynamic and consists of the selected **Cloud Provider** resource and **Deployment type**. You can change the name of the path by clicking the field. - - ![](/Images/Admin-Guide/Inventory-Operations/vCenterDeploymentPathName.png) - - 1. From the **Deployment** drop down list, select the deployment type. - - The selected deployment type's attributes are displayed. - :::important - Deployment types related to the vCenter 2nd Gen cloud provider shell include "2G" in the title (for example: "vCenter VM From Template 2G"). - ::: - 2. Fill in the details. - -
    - For **vCenter Clone VM From VM** attributes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributevCenter shell versionDescription
    Cloud ProviderAllName of the vCenter cloud provider resource to be used
    vCenter VMAllFull path to the VM that will be used to clone a new VM, relative to the datacenter. For example: `My-Folder/My-VM`
    Behavior During Save (optional)All - (Applies to the **Save and Restore** paid add-on) The VM's state while the sandbox is being saved. Options are **Remain Powered On** and **Power Off**. - - - **Inherit**: (Default) Uses the setting defined on the vCenter cloud provider resource - - **Remain Powered On**: The VM will remain powered on during the saving state. - - **Power Off**: If the VM was powered on before the sandbox entered the saving state, the VM will shut down (power off) for the duration of the save. - - - :::note Notes - - The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](./add-vmware-vcenter-cloud-provider-resource.md). - - After save has ended, the VM returns to its state prior to saving, regardless of the behavior during the save. - ::: -
    Saved Sandbox StorageAll - (Applies to the **Save and Restore** paid add-on) During the saving process, CloudShell creates a clone of the sandbox's App VMs in this vCenter storage, which CloudShell will later use to restore the VM when the user restores the saved sandbox. See [Save a Sandbox](../../../../portal/sandboxes/sandbox-workspace/save-sandbox.md) for more information. - - For storage purposes, these VM clones can be stored in a different data storage than the one configured in the **VM Storage** attribute defined on the vCenter cloud provider resource. The storage can be either a datastore or a datastore cluster. For example: datastore1 or clustername/datastore1. - - - **Note**: The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](./add-vmware-vcenter-cloud-provider-resource.md). -
    Customization Spec2nd Gen onlyName of the vSphere VM Customization Specification to apply to the App's VM.
    Hostname2nd Gen only - (Only applies to Windows and Linux VMs) The hostname to set on the VM. - :::note Notes - If **Customization Spec** is specified, the value specified in the **Hostname** attribute will be used. **If Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a password in the App resource page. - ::: -
    Private IP2nd Gen only - (Only applies to Windows and Linux VMs) The private static IP to set on the first vNIC of the VM. If there's a default gateway, specify it after the private IP. For example: "192.168.4.124:80.114.1.87" where 80.114.1.87 is the default gateway - - :::note Notes - - If there is no gateway, the .1 IP of the same subnet will be used as the gateway. So, for private IP "192.168.4.124", gateway "192.168.4.1" will be used. - - It is also possible to provide a subnet mask here. For example: "192.168.4.124/24:80.114.1.87" - - If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. - - If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. - - If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. - ::: -
    CPU2nd Gen onlyNumber of CPU core s to configure on the VM.
    RAM2nd Gen onlyAmount of RAM (GB) to configure on the VM.
    HDD2nd Gen onlyAllows to add/edit hard disk size to the VM. The syntax is semi-colon separated disk pairs 'Hard Disk Label: Disk Size (GB)'. For example: 'Hard Disk 1:100;Hard Disk 2:200'. Short-hand format is also valid: '1:100;2:200'.
    -
    - -
    - For **VCenter Deploy VM From Linked Clone** attributes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributevCenter shell versionDescription
    Cloud ProviderAllName of the vCenter cloud provider resource to be used
    vCenter VMAllFull path to the VM containing the snapshot that will be used to clone a new VM, relative to the datacenter.
    vCenter VM SnapshotAll - Full path to the virtual machine snapshot that will be used to clone a new VM. For example Snapshot1/Snapshot2 - - This snapshot should be associated with the VM defined in the **vCenter VM** input. -
    Behavior During SaveAll - (Applies to the **Save and Restore** paid add-on) The VM's state while the sandbox is being saved. Options are **Remain Powered On** and **Power Off**. - - - **Inherit**: (Default) Uses the setting defined on the vCenter cloud provider resource - - **Remain Powered On**: The VM will remain powered on during the saving state. - - **Power Off**: If the VM was powered on before the sandbox entered the saving state, the VM will shut down (power off) for the duration of the save. - - - :::note Notes - - The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](./add-vmware-vcenter-cloud-provider-resource.md). - - After save has ended, the VM returns to its state prior to saving, regardless of the behavior during the save. - ::: -
    Saved Sandbox StorageAll - (Applies to the **Save and Restore** paid add-on) During the saving process, CloudShell creates a clone of the sandbox's App VMs in this vCenter storage, which CloudShell will later use to restore the VM when the user restores the saved sandbox. See [Save a Sandbox](../../../../portal/sandboxes/sandbox-workspace/save-sandbox.md) for more information. - - For storage purposes, these VM clones can be stored in a different data storage than the one configured in the **VM Storage** attribute defined on the vCenter cloud provider resource. The storage can be either a datastore or a datastore cluster. For example: datastore1 or clustername/datastore1. - :::note - The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](./add-vmware-vcenter-cloud-provider-resource.md). - ::: -
    Customization Spec2nd Gen onlyName of the vSphere VM Customization Specification to apply to the App's VM.
    Hostname2nd Gen only - (Only applies to Windows and Linux VMs) The hostname to set on the VM. - :::note Notes - If **Customization Spec** is specified, the value specified in the **Hostname** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a password in the App resource page - ::: -
    Private IP2nd Gen only - (Only applies to Windows and Linux VMs) The private static IP to set on the first vNIC of the VM. If there's a default gateway, specify it after the private IP. For example: "192.168.4.124:80.114.1.87" where 80.114.1.87 is the default gateway - - :::note Notes - - If there is no gateway, the .1 IP of the same subnet will be used as the gateway. So, for private IP "192.168.4.124", gateway "192.168.4.1" will be used. - - It is also possible to provide a subnet mask here. For example: "192.168.4.124/24:80.114.1.87" - - If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. - - If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. - - If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. - ::: -
    CPU2nd Gen onlyNumber of CPU core s to configure on the VM.
    RAM2nd Gen onlyAmount of RAM (GB) to configure on the VM.
    HDD2nd Gen onlyAllows to add/edit hard disk size to the VM. The syntax is semi-colon separated disk pairs 'Hard Disk Label: Disk Size (GB)'. For example: 'Hard Disk 1:100;Hard Disk 2:200'. Short-hand format is also valid: '1:100;2:200'.
    -
    - -
    - For **vCenter VM From Image** attributes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributevCenter shell versionDescription
    Cloud ProviderAllName of the vCenter cloud provider resource to be used
    vCenter ImageAll - Full path to the vCenter OVF image file, relative to the datacenter. For example: `My-OVF-Images/Image.ovf` - :::note - Path must be accessible to all execution servers. OVF tool must be installed on all execution servers. - ::: -
    vCenter NameAllName of the vCenter resource to be used
    vCenter Image ArgumentsAll - (Optional) vCenter-specific arguments to use when deploying the virtual machine. - - Example for OVF: - - `--allowExtraConfig --prop:Hostname=ASAvtest --prop:HARole=Standalone --prop:SSHEnable=True --prop:DHCP=True --net:Management0-0='Office LAN 41' --net:GigabitEthernet0-0='VLAN_access_101'` -
    Behavior During SaveAll - (Applies to the **Save and Restore** paid add-on) The VM's state while the sandbox is being saved. Options are **Remain Powered On** and **Power Off**. - - - **Inherit**: (Default) Uses the setting defined on the vCenter cloud provider resource - - **Remain Powered On**: The VM will remain powered on during the saving state. - - **Power Off**: If the VM was powered on before the sandbox entered the saving state, the VM will shut down (power off) for the duration of the save. - - - :::note Notes - - The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](./add-vmware-vcenter-cloud-provider-resource.md). - - After save has ended, the VM returns to its state prior to saving, regardless of the behavior during the save. - ::: -
    Saved Sandbox StorageAll - (Applies to the **Save and Restore** paid add-on) During the saving process, CloudShell creates a clone of the sandbox's App VMs in this vCenter storage, which CloudShell will later use to restore the VM when the user restores the saved sandbox. See [Save a Sandbox](../../../../portal/sandboxes/sandbox-workspace/save-sandbox.md) for more information. - - For storage purposes, these VM clones can be stored in a different data storage than the one configured in the **VM Storage** attribute defined on the vCenter cloud provider resource. The storage can be either a datastore or a datastore cluster. For example: datastore1 or clustername/datastore1. - :::note - The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](./add-vmware-vcenter-cloud-provider-resource.md). - ::: -
    Customization Spec2nd Gen onlyName of the vSphere VM Customization Specification to apply to the App's VM.
    Hostname2nd Gen only - (Only applies to Windows and Linux VMs) The hostname to set on the VM. - :::note Notes - If **Customization Spec** is specified, the value specified in the **Hostname** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a password in the App resource page - ::: -
    Private IP2nd Gen only - (Only applies to Windows and Linux VMs) The private static IP to set on the first vNIC of the VM. If there's a default gateway, specify it after the private IP. For example: "192.168.4.124:80.114.1.87" where 80.114.1.87 is the default gateway - - :::note Notes - - If there is no gateway, the .1 IP of the same subnet will be used as the gateway. So, for private IP "192.168.4.124", gateway "192.168.4.1" will be used. - - It is also possible to provide a subnet mask here. For example: "192.168.4.124/24:80.114.1.87" - - If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. - - If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. - - If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. - ::: -
    CPU2nd Gen onlyNumber of CPU core s to configure on the VM.
    RAM2nd Gen onlyAmount of RAM (GB) to configure on the VM.
    HDD2nd Gen onlyAllows to add/edit hard disk size to the VM. The syntax is semi-colon separated disk pairs 'Hard Disk Label: Disk Size (GB)'. For example: 'Hard Disk 1:100;Hard Disk 2:200'. Short-hand format is also valid: '1:100;2:200'.
    -
    - -
    - For **vCenter VM From Template** attributes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributevCenter shell versionDescription
    Cloud ProviderAllName of the vCenter cloud provider resource to be used
    vCenter TemplateAll - Path to the vCenter template to use in the virtual machine's creation. Path is relative to the datacenter and must include the template name, for example: `My-Templates/Template1` -
    Behavior During SaveAll - (Applies to the **Save and Restore** paid add-on) The VM's state while the sandbox is being saved. Options are **Remain Powered On** and **Power Off**. - - - **Inherit**: (Default) Uses the setting defined on the vCenter cloud provider resource - - **Remain Powered On**: The VM will remain powered on during the saving state. - - **Power Off**: If the VM was powered on before the sandbox entered the saving state, the VM will shut down (power off) for the duration of the save. - - - :::note Notes - - The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](./add-vmware-vcenter-cloud-provider-resource.md). - - After save has ended, the VM returns to its state prior to saving, regardless of the behavior during the save. - ::: -
    Saved Sandbox StorageAll - (Applies to the **Save and Restore** paid add-on) During the saving process, CloudShell creates a clone of the sandbox's App VMs in this vCenter storage, which CloudShell will later use to restore the VM when the user restores the saved sandbox. See [Save a Sandbox](../../../../portal/sandboxes/sandbox-workspace/save-sandbox.md) for more information. - - For storage purposes, these VM clones can be stored in a different data storage than the one configured in the **VM Storage** attribute defined on the vCenter cloud provider resource. The storage can be either a datastore or a datastore cluster. For example: datastore1 or clustername/datastore1. - :::note - The value configured here overrides the configuration in the vCenter cloud provider resource, see [Add VMware vCenter Cloud Provider Resource](./add-vmware-vcenter-cloud-provider-resource.md). - ::: -
    Customization Spec2nd Gen onlyName of the vSphere VM Customization Specification to apply to the App's VM.
    Hostname2nd Gen only - (Only applies to Windows and Linux VMs) The hostname to set on the VM. - :::note Notes - If **Customization Spec** is specified, the value specified in the **Hostname** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a password in the App resource page - ::: -
    Private IP2nd Gen only - (Only applies to Windows and Linux VMs) The private static IP to set on the first vNIC of the VM. If there's a default gateway, specify it after the private IP. For example: "192.168.4.124:80.114.1.87" where 80.114.1.87 is the default gateway - - :::note Notes - - If there is no gateway, the .1 IP of the same subnet will be used as the gateway. So, for private IP "192.168.4.124", gateway "192.168.4.1" will be used. - - It is also possible to provide a subnet mask here. For example: "192.168.4.124/24:80.114.1.87" - - If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. - - If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. - - If **Customization Spec** is specified, the value specified in the **Private IP** attribute will be used. If **Customization Spec** is not specified, a new one will be created for the VM. For Windows VMs, make sure to specify a **Password** in the **App resource** page. - ::: -
    CPU2nd Gen onlyNumber of CPU core s to configure on the VM.
    RAM2nd Gen onlyAmount of RAM (GB) to configure on the VM.
    HDD2nd Gen onlyAllows to add/edit hard disk size to the VM. The syntax is semi-colon separated disk pairs 'Hard Disk Label: Disk Size (GB)'. For example: 'Hard Disk 1:100;Hard Disk 2:200'. Short-hand format is also valid: '1:100;2:200'.
    -
    - -7. To add additional deployment paths to the App template, click the **Add New Deployment Path** link at the bottom of the wizard and fill in the required information. -8. In the left pane, click **Configuration Management** and configure the application to be installed on the VM. - - ![](/Images/CloudShell-Portal/Manage/ConfigurationManagement.png) - :::tip - To learn how to develop custom scripts and Ansible playbooks, including examples, and set up support for the desired configuration management tool, see [Developing Configuration Management Scripts for Apps](../../../../devguide/develop-config-management-scripts-for-apps/index.md). - ::: - :::note Notes - - To run configuration management on an Azure App, make sure the App's VM size is Basic\_A2 or larger. - - For configuration management operations, CloudShell uses an available Execution Server (for Ansible, it's a Linux Execution Server that has the **Supports Ansible** flag). - - If the cloud provider resource has an **Execution Server Selector** configured, it will use that selector. If the selector is empty, CloudShell will use the selector defined in the appropriate **Resource Manager Client \>Configuration Services** model (**Ansible Configuration** or **Custom Script Configuration**). - - - Execution Server selectors specified on the deployed App shell/resource are not used to execute configuration management operations. - ::: - - 1. Define the script or playbook to install. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Select Tool - Select the application's installation and configuration tool. - - - **None**: Do not use any Configuration Management option. Use this option if, for example, the image or template already contains the application to install. - - **Script**: Select the custom script to run (PowerShell, bash or sh). - - **Ansible**: (Intended for customers who are already using Ansible) Select the Ansible playbook to run. - :::note - The playbook runs once during the **Setup** phase for all of the sandbox's Apps that use that playbook, after CloudShell has finished deploying their VMs. This is done both to improve performance and support cross-server logic where multiple applications need to be installed and configured in a certain way. - ::: - Note that the playbook runs once for all of the sandbox's Apps that use that playbook, after CloudShell has finished deploying their VMs. - - - Depending on the selection, additional options may become available. -
    Connection Method - The method to use to connect to the VM. - - Select: - - - **SSH** if the VM has a Linux OS - - **Windows Remote Management** if the VM has a Windows OS - :::note - To run configuration management on a Windows VM, the VM must have WinRM enabled. For details, see [Enable WinRM on Windows VMs to Support Configuration Management](../../../../devguide/enable-winrm-on-win-vm-for-cfg-mng.md). - ::: -
    Playbook / Script Location - Details of the Ansible playbook or custom script. - - - **URL**: Raw URL of the Ansible playbook or ZIP file, or custom script on the online repository (GitHub, GitLab and BitBucket are supported). URL must be accessible to the Execution Servers. - :::tip - The URL can accept parameters defined on the App, enabling you to test new versions of scripts without affecting consumer-ready versions. For example, you can have an App everyone is using, but if you want to test a version you're developing, simply change the value of the URL parameter in the test blueprint. - - - To use parameters, specify the parameter name in curly brackets (for example: **\{branch\}**). - - If the App has this parameter, CloudShell will replace the **\{branch\}** with its value during execution. - - If the parameter is missing, CloudShell will replace **\{branch\}** with an empty string. - - If you are using a global input, customers would be well advised to set a default value on the global input - ::: - **For GitHub, specify the raw URL. For example:** - - ```javascript - https://raw.githubusercontent.com/.../site.yml - ``` - - **For GitLab, specify the API endpoint in the format:** - - ```javascript - https://gitlab.com/api/v4/projects/{Project ID}/repository/files/testsharding%2Eyml/raw?ref=master - ``` - - Where: - - - Each special character that the file contains has to be encoded. In the example above - "%2E” is an encoded point (".”) - - - The ref value is the branch name (master for this example) - - - **For BitBucket Data Center (on premise), use the following URL format:** - - ```javascript - http://{datacenter server IP}/rest/api/1.0/projects/{projectKey}/repos/{repository name}/raw/testsharding.yml - ``` - - **For BitBucket Cloud, use one of the following:** - - - For source code files, specify the API endpoint: - - ```javascript - https://api.bitbucket.org/2.0/repositories/{workspace}/{repository name}/src/{GUID- the Commit hash string}/testsharding.yml - ``` - - - For download files (files residing in the repository's "Downloads" folder), specify this endpoint: - - ```javascript - https://api.bitbucket.org/2.0/repositories/{workspace}/{repository name}/downloads/site.yml - ``` - - :::important - If the URL is private (HTTPS), the VM will need to have a valid SSL certificate. To disable the certificate check, open Resource Manager **Client>Resource Families>Configuration Services** (**Ansible Configuration** or **Custom Script Configuration**) and set the **Verify Certificate** attribute to **False**. - ::: - - **User/Password**: (For private repositories) Access credentials or token to the script/playbook's online repository. - - - **Token**: (For private repositories) Access token to the script/playbook's online repository. - - For GitHub and GitLab, specify the API token. For BitBucket Cloud, set the repo's "App Password" in the App template's Password field. For BitBucket Data Center, specify the personal access token. - - - :::note Notes - - For **Custom Script configurations**: In SSH mode, only bash and sh scripts are allowed. In WinRM mode, only PowerShell scripts are allowed. WinRM over HTTPS only applies to custom scripts at this time. If WinRM is configured to run over HTTPS, the execution server will first try to run the custom script over HTTPS and then fall back to HTTP if HTTPS is unsuccessful. To prevent the fallback, set the **winrm_transport** parameter to **ssl**. - - **For Ansible configurations**: The Ansible playbook must be a YML or YAML file. To specify multiple playbooks or a hierarchy of an Ansible project, you can specify multiple Ansible playbooks or a ZIP package. For example: `https://raw.githubusercontent.com/QualiSystemsLab/private-repo-zip-download/master/README.zip` - - If a ZIP containing 2 or more playbooks is specified, CloudShell will use the playbook file titled `site.yml` or `site.yaml`. If the file is missing, the App's deployment will fail. - ::: -
    Inventory Groups - (For Ansible) Specify the host groups for the application to be installed, separated by semicolons (;). The newly deployed VM will be associated to these groups, thus allowing plays that target these groups to run on the VM. - - For example: `Servers/AppServers;Servers/DBServers` -
    Parameters - Parameters to be passed to the Ansible playbook or custom script. Specify the parameters and their default values. - - In the blueprint or sandbox diagram, privileged users can also set the parameter to receive the value that is specified for a global input when reserving a sandbox containing the App. This is done by selecting the global input when editing the App in the blueprint or sandbox diagram. For example, a global input that specifies the build number of a product to be tested or which components of a product to install. - :::important - (For Ansible) To customize the port to be used to communicate with the VM, add the `Ansible_port` parameter. Default: `SSH` / `Port: 22` / `WinRM: 5985`. - ::: -
    Additional Arguments - (For Ansible) Define arguments to be passed to the execution of the playbook (`Ansible-playbook` command). For example, `-v` will set verbose mode on while `-f` will set the maximum number of VMs to be handled in parallel. Multiple arguments can be given, separated by spaces. For additional information on possible arguments, see the official Ansible documentation. - - The arguments must be specified in **Resource Manager Client > Configuration Services** family > **Ansible Configuration** model > **Ansible Additional Arguments** attribute. - :::note - The arguments are defined globally for all Apps using Ansible. - ::: - :::important - To configure Ansible to connect to certified hosts only (Linux VMs with a valid 'known\_hosts' key), include the following additional arguments: `--ssh-extra-args='-o StrictHostKeyChecking=yes'` - ::: -
    - - 1. To enable the end-user to rerun the App's configuration management on the deployed App in the sandbox, select **Allow rerunning configuration management for resources deployed from the App**. Once the App's deployment completes, a **Rerun Configuration Management** command is included in the deployed App's **Application Commands** pane. For details, see [Run App Commands](../../../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md). This is useful for rolling back the App's VM to its original state. - 2. To enable blueprint and sandbox owners to modify the App's Configuration Management details, select **Allow blueprint/sandbox owners to modify the App's Configuration Management**. The following details can be modified: playbook/script, authentication details, inventory groups, and parameters. Note that the modifications only apply to the blueprint or sandbox of the instance. - 3. Optionally click the **Add New Script/Playbook** link at the bottom right to add additional custom scripts/Ansible playbooks to the App. The scripts will run in their display order, from top to bottom. You can drag scripts up or down to rearrange. - 4. To change the script's alias, click the script's name and change as appropriate. - ![](/Images/CloudShell-Portal/Manage/RenameConfigManageScript.png) - -9. In the left pane, click **App Resource** to optionally set the VM's operating system user credentials (for example, to connect to the VM via RDP or SSH). You can also change the deployed App's Shell. - - ![](/Images/CloudShell-Portal/Manage/AppResource.png) - :::important - To help sandbox end-users connect to the VM, it is recommended to include the **User** and **Password** in the blueprint's instructions. For additional information, see [Add Instructions](../../../../portal/blueprints/creating-blueprints/add-instructions.md). - ::: - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Shell - The Shell on which the App's VMs are based. When an App is deployed in a sandbox, it changes into a "deployed App resource", which is based on the selected Shell. By default, the "Generic App Model" Shell is used. - - Deployed Apps include a default set of commands such as Power On and Refresh IP, and the VM's **User** and **Password** attributes, as explained below. - :::note - Changing the Shell might cause additional fields to become visible and you may need to enter further information. - ::: -
    User - User defined in the App's image. The **User/Password** credentials are used by QualiX to create in-browser connections to the VM from within the sandbox. - - :::note Notes - - For AWS instances,make sure to set the **User** of a user that already exists on the Amazon machine image. For custom images, the image owner should know the credentials, while community/marketplace images have the image's credentials listed in their documentation. - - Azure VM username and password restrictions apply. For details, see [Frequently asked question about Windows Virtual Machines](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/faq). - - For Azure Marketplace images, CloudShell will create a user on the VM based on the **User/Password** credentials you specify. - - For Azure Marketplace VMs, if the user is not set, CloudShell will set **adminuser** as the default user name. - ::: -
    Password - VM user's password. - - :::note Notes - - For AWS Marketplace images, leave the **Password** empty. The AWS shell generates a new key-pair for each sandbox, which QualiX will use to establish the in-browser connection. - - For Azure Marketplace images: - - If the password is not set, only the user name will be required. For Linux VMs, CloudShell will create an SSH key-pair to enable a secure connection. - - If the password is set, it will be displayed as asterisks (\*\*\*\*\*\*) in the blueprint or sandbox. - ::: -
    - -10. Click **Done**. - - The new App template is displayed in the **Apps** page. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md deleted file mode 100644 index 5cf3dabd86..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/add-vmware-vcenter-cloud-provider-resource.md +++ /dev/null @@ -1,225 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Add VMware vCenter Cloud Provider Resource - -This article explains how to configure a vCenter cloud provider resource. The **VMware vCenter** cloud provider enables the deployment of virtual machines from vCenter templates, images, clones (existing vCenter VMs) and linked clones (snapshots of existing vCenter VMs). Each deployment type includes the required settings, attributes, and commands. For a video tutorial on how to set up the resource, watch the video at the bottom of the article. -:::tip -We strongly recommend using the 2nd Gen version of the shell, which provides significant enhancements and capabilities, and is tamper-resistant from within CloudShell, ensuring your Azure cloud provider resources and Apps are in pristine condition. Useful articles: [Replacing the 1st Gen shell with a 2nd Gen version](../../../../devguide/reference/migrate-1st-gen-shell-to-2nd-gen-shell.md#replacing-the-1st-gen-shell-with-a-2nd-gen-version), [Cloud Provider Shells - Features and Capabilities Per Release](../../cloud-provider-2g-shells-features-and-capabilities.md). -::: -:::note Notes -- vCenter elements created by CloudShell should not be altered as this may cause unexpected behavior. -- The supported versions are vSphere 5.5 - 6.5, 6.7, 7. -::: -**To add a vCenter cloud provider resource:** - -1. Log in to the CloudShell domain in which this resource will reside. This will enable the Apps based on this cloud provider resource to be usable in this domain. -2. In the **Inventory** dashboard, in the **Resources** tab, click the folder in which you want to create the resource. -3. Click **\+ Add New**. -4. In the **Create New Resource** dialog box, select the **vCenter** cloud provider template. To use the vCenter 2nd Gen shell, select **VMware vCenter Cloud Provider 2G**. -5. Enter a **Name** for the vCenter resource. - :::note - The resource's name has a limit of 100 characters and can only contain alpha-numeric characters, spaces, and the following characters: | . - \_ \] \[ - ::: -6. Enter the **IP Address**s of the vCenter server that will be used to deploy the virtual machines. -7. Click **Create**. - - The Resource dialog box is displayed. - - ![](/Images/Admin-Guide/Inventory-Operations/AppsResourceDiscoveryInformation.png) - -8. Enter the required information. Unless specified differently, paths are relative to the datacenter so for example, to specify VM storage "datastore cluster" that is under datacenter "QualiSB", enter "datastore cluster" in the **VM Storage** field. For guidance on finding each element in your vCenter server, see [vCenter cheatsheet for versions 5.5-6.5](/attachments/VCenter_5.5_6.5_Cloud_Provider_Resource_Configuration_Cheetsheet.pdf) or [vCenter cheatsheet for version 6.7 and above](/attachments/VCenter_6.7_Cloud_Provider_Resource_Configuration_Cheetsheet.pdf). - :::note - All vCenter elements must be located under the same data center. - ::: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeSupporting shell versionDescription
    AddressAllIP address of the vCenter server
    UserAll - User on the vCenter server. - - The user must be assigned to the root level of the vCenter server with the necessary permissions. For details, see [Required vCenter User Permissions per Deployment Type](./required-vcenter-user-permissions-per-deployment-type.md). -
    PasswordAll - vCenter user's password - :::important - Password must not include a # character. - ::: -
    Default DatacenterAllDatacenter within the vCenter that will be used for virtual machine deployment. All other settings of this vCenter resource should refer to entities associated with this datacenter.
    VM StorageAll - vCenter storage in which the VMs will be created. The storage can be either a datastore or a datastore cluster. For example: datastore1 - :::note - To use a specific datastore that resides inside a cluster, specify the cluster name and the datastore name. For example: clustername/storage1 - ::: -
    Holding NetworkAll - Default network to be used for the VM’s vNICs when disconnecting them from another network. A distributed port group can also be specified. - - Specify a network under the specified dvSwitch. Do not include the **dvSwitch** name in the path. - :::note - Only vNICs in this holding network will be used when connecting Apps based on this cloud provider resource in the sandbox. - ::: -
    VM LocationAll - Folder in the vSphere datacenter (defined in the **VM Storage** attribute) in which the VM will be created. Default is **Qualisystems**. - - From CloudShell version 9.0, two folders are created within this folder, as needed: `Deployed Apps` and `Saved Sandboxes`. The `Deployed Apps` folder holds the deployed VM Apps and, if you have saved a sandbox as part of the **Save and Restore** paid add-on, the `Saved Sandboxes` folder is created to hold the VM artifacts created when a user saves a sandbox. -
    Default dvSwitchAll - (Optional if connectivity is not required) Default vCenter dvSwitch to be used when configuring virtual machine connectivity. Using the vCenter 2nd Gen shell, vSwitch is also supported. - :::important - CloudShell needs to create port groups in the dvSwitch in order to use Apps. Therefore, make sure you have an appropriate VMWare license that provides this capability. - ::: -
    VM ClusterAll - vCenter cluster or host to use when deploying a virtual machine. To specify a host instead of a cluster, use: Cluster Name/Host IP. - - :::note Notes - - If the cluster is in **Under Maintenance** mode, the deployment may fail. - - Discovery of the resource will fail if your vCenter server has a datastore cluster folder with the same name as the specified VM cluster. - ::: -
    VM Resource PoolAllResource pool in which the virtual machine is created. Specify a resource pool under the specified **VM Cluster**. Do not include the **VM Cluster** name in the path. Leave this field empty if you specified a specific host name in the **VM Cluster** field or if you don't want to use a resource pool.
    Shutdown MethodAll - Shutdown method to be used when powering off the VM. Options are **Hard** and **Soft**. - - - **Hard**: (Default - starting with vCenter shell 4.2.0) Shuts down the virtual machine without shutting down any running applications - - **Soft**: Shuts down all running applications on the virtual machine before shutting down the virtual machine. - :::note - **Soft** shutdowns require VMware Tools to be installed on the VM. - ::: -
    Execution Server SelectorAll - (Optional) This attribute points to a pre-defined group of execution servers (grouped by a common **Execution Server Selector** value). To make the association, enter the same value you specified on the execution server. - - For additional information on managing App deployments per domains, see [Managing Private Cloud Apps in Domains](../managing-private-cloud-apps-in-domains.md). - :::note - App deployment requires a minimum number of slots to be available. See [Number of execution slots for VM deployments](../../../cloudshell-execution-server-configurations/setting-up-execution-servers-to-run-commands.md#number-of-execution-slots-for-vm-deployments). - ::: -
    OVF Tool PathAll - (Relevant when deploying vCenter VM from an image) Path to the OVF tool installation. Use the same path for all execution servers. - :::note - This path must be accessible to all execution servers that will be used to deploy Apps. - ::: -
    Reserved NetworksAll(Optional) Comma-separated list of reserved networks. vNICs configured to these networks will not be used for VM connectivity.
    Behavior During Save (optional)All - (Applies to the **Save and Restore** paid add-on) The VM's state while the sandbox is being saved. Options are **Remain Powered On** and **Power Off**. - - - **Inherit**: (Default) Uses the setting defined on the vCenter cloud provider resource - - **Remain Powered On**: The VM will remain powered on during the saving state. - - **Power Off**: If the VM was powered on before the sandbox entered the saving state, the VM will shut down (power off) for the duration of the save. - :::note - After save has ended, the VM returns to its state prior to saving, regardless of the behavior during the save. - ::: - - If this field is left empty, the default value is **Remain Powered On**. -
    Saved Sandbox StorageAll - (Applies to the **Save and Restore** paid add-on) During the saving process, CloudShell creates a clone of the sandbox's App VMs in this vCenter storage, which CloudShell will later use to restore the VM when the user restores the saved sandbox. See [Save a Sandbox](../../../../portal/sandboxes/sandbox-workspace/save-sandbox.md) for more information. - - For storage purposes, these VM clones can be stored in a different data storage than the one configured in the **VM Storage** attribute defined on the vCenter cloud provider resource. The storage can be either a datastore or a datastore cluster. For example: datastore1 or clustername/datastore1. - - If this field is left empty, the default is the value configured in **VM Storage**. -
    Promiscuous ModeAll(Optional) Configures the port groups on the virtual switch to allow all incoming traffic. This setting is enabled by default.
    Enable Tags2nd Gen(Applies to vCenter 6.5 and above) If enabled, vSphere tags will be added to new vSphere inventory objects created by the Shell - folders, networks, VMs, etc.
    - -9. Click **Start Discovery** to validate the vCenter settings. - - When the discovery process completes, a confirmation message is displayed. The resource is displayed in the **Inventory** dashboard in CloudShell Portal and in Resource Manager. - - Apps can now be added using the vCenter resource. For additional information, see [Adding App templates](../../../cloudshell-manage-dashboard/manage-app-templates/index.md#adding-app-templates). - - To customize the App deployment types and publish App orchestration parameters, see [Customizing App Deployment Types](../../customizing-app-deployment-types.md). - - - - -## Related Topics - -- [Adding Inventory Resources](../../../../portal/inventory/managing-resources/adding-inventory-resources/index.md) -- [Managing Private Cloud Apps in Domains](../managing-private-cloud-apps-in-domains.md) diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/index.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/index.md deleted file mode 100644 index c47e730247..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/index.md +++ /dev/null @@ -1,52 +0,0 @@ -# VMware vCenter Integration and Configuration - -This article discusses the integration of CloudShell with vCenter to allow CloudShell to spin up and manage the lifecycle of VMs hosted on vCenter Server. vCenter integration is provided out of the box starting with CloudShell version 7.0 and includes the following: - -- VM lifecycle management (Deploy App, Power On, Refresh IP, Power Off and Delete) -- Connectivity with other VMs and physical resources, including static VMs. Connectivity is based on vCenter dvSwitch (standard vSwitch supported in [vCenter 2nd Gen cloud provider shell](https://github.com/orgs/QualiSystems/discussions/1691)). -- Snapshot management (Save Snapshot, Restore Snapshot, and Get Snapshots) - -CloudShell supports two integration modes with vCenter, where Quali Server is installed internally on a vCenter VM or externally. - -## CloudShell App deployment flow on vCenter - -During the deployment of vCenter Apps in a CloudShell sandbox, CloudShell accesses the vCenter Server defined in the cloud provider resource, and does the following: - -1. Creates the VM on the ESXi host or host cluster. -2. Creates connectivity. Allocates VLAN ID for each required VLAN network, according to VLAN allocation policy defined in the sandbox (VLAN services), and adds the VM's NIC(s) to the network(s). -3. Powers on the VM and refreshes the VM's IP. -4. Runs configuration management on the VM (if defined). - -## Basic Requirements - -The following VMware vSphere components are required for CloudShell integration with vCenter (supported version is listed in [vCenter Integration Architecture and Prerequisites](./vcenter-integration-architecture-and-prerequisites.md)): - -- vSphere® Standard™ / Enterprise Plus™/ with Operations Management™ / Platinum™ - :::note - CloudShell connectivity requires vSphere® Enterprise Plus™ and above. - ::: - - vSphere Client - - - vCenter server - - - ESXi server - - - dvSwitch that is capable of creating and configuring port groups (vCenter 2nd Gen shell supports standard vSwitch as well) - - -Note that for additional capabilities or to integrate with other VMware vSphere components such as vSphere Client, you will need to implement a custom cloud provider that supports these options. For details, see the Dev Guide's [Getting Started with Cloud Provider Development](../../../../devguide/develop-custom-cloud-provider-shells/getting-started-with-cp-dev.md). - -## vCenter integration workflow - -For each vCenter Server you want to integrate with CloudShell, perform the following steps: - -1. Prepare vCenter Server for integration with CloudShell. See [vCenter Integration Architecture and Prerequisites](./vcenter-integration-architecture-and-prerequisites.md). -2. Designate a vCenter user with the required permissions to be used by CloudShell to access and interact with vCenter Server. See [Required vCenter User Permissions per Deployment Type](./required-vcenter-user-permissions-per-deployment-type.md). -3. [Add VMware vCenter Cloud Provider Resource](./add-vmware-vcenter-cloud-provider-resource.md) based on the specifications of the designated vCenter datacenter. -4. Set up CloudShell App Templates to deploy and configure VMs on the datacenter. See [Add a vCenter App Template](./add-a-vcenter-app-template.md). - - To have CloudShell App deployments run on specific domains in CloudShell, follow the steps in [Managing Private Cloud Apps in Domains](../managing-private-cloud-apps-in-domains.md). -5. Configure QualiX for in-browser connections to App VMs hosted on vCenter Server from the sandbox. See [QualiX Installation and Configuration](../../../../install-configure/qualix/index.md). - :::note - The QualiX Server must be accessible to the vCenter Server and can be installed either externally or in a VM on the vCenter Server. - ::: \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/required-vcenter-user-permissions-per-deployment-type.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/required-vcenter-user-permissions-per-deployment-type.md deleted file mode 100644 index 1919d8e851..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/required-vcenter-user-permissions-per-deployment-type.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Required vCenter User Permissions per Deployment Type - -To configure vCenter cloud providers, you must use a vCenter user that has a role with the required permissions for the specified deployment type on the root and child objects. Root-level permissions are required because in order to correctly identify each vCenter object (datacenter, templates, dvswitches, etc.) on your cloud provider resource, CloudShell needs to be able to access the vCenter object tree, starting with the root, which is the datacenter. - -**To set up the vCenter user(s) for CloudShell:** - -1. In the vSphere Client's **Administration** area, in the **Roles** section, add or edit a role. - - ![](/Images/Admin-Guide/Inventory-Operations/vCenterEditRoleDialog.png) - -2. Grant the permissions for the desired deployment type(s): - - **Permissions for App deployments:** - - Deploy Clone VM from VM / Deploy VM from Linked Clone: - - - Datastore > Allocate space - - Folder > Create folder - - Folder > Delete Folder - - Host > Local operations > Create virtual machine - - Host > Local operations > Delete virtual machine - - Host > Local operations > Reconfigure virtual machine - - Resource > Assign vApp to resource pool - - Resource > Assign virtual machine to resource pool - - Virtual machine > Configuration > CPU count - - Virtual machine > Configuration > Memory - - Virtual machine > Extend virtual disk - - Virtual machine > Interaction > Device connection - - Virtual machine > Interaction > Power Off - - Virtual machine > Interaction > Power On - - Virtual machine > Inventory > Create from existing - - Virtual machine > Inventory > Remove - - Virtual machine > Provisioning > Clone template - - Virtual machine > Provisioning > Clone virtual machine - - Virtual machine > Provisioning > Customize - - Virtual machine > Provisioning > Modify customization specifications - - Virtual machine > Provisioning > Read customization specifications - - Virtual machine > Snapshot management > Create snapshot - - Virtual machine > Snapshot management > Remove snapshot - - Virtual machine > Snapshot management > Revert to snapshot - - vSphere Tagging > Assign or Unassign Tag - - vSphere Tagging > Create vSphere Tag - - vSphere Tagging > Create vSphere Tag Category - - vSphere Tagging > Delete vSphere Tag - - vSphere Tagging > Delete vSphere Tag Category - - vSphere Tagging > Edit vSphere Tag - - vSphere Tagging > Edit vSphere Tag Category - - Deploy VM from OVF image: - - - Datastore > Allocate space - - Folder > Create folder - - Folder > Delete Folder - - Network > Assign network - - vApp > Import - - Virtual machine > Configuration > Add new disk - - Virtual machine > Configuration > Advanced - - Virtual machine > Configuration > CPU count - - Virtual machine > Configuration > Memory - - Virtual machine > Extend virtual disk - - Virtual machine > Interaction > Device connection - - Virtual machine > Inventory > Remove - - Virtual machine > Provisioning > Customize - - Virtual machine > Provisioning > Modify customization specifications - - Virtual machine > Provisioning > Read customization specifications - - vSphere Tagging > Assign or Unassign Tag - - vSphere Tagging > Create vSphere Tag - - vSphere Tagging > Create vSphere Tag Category - - vSphere Tagging > Delete vSphere Tag - - vSphere Tagging > Delete vSphere Tag Category - - vSphere Tagging > Edit vSphere Tag - - vSphere Tagging > Edit vSphere Tag Category - - Deploy VM from Template: - - - Datastore > Allocate space - - Folder > Create folder - - Folder > Delete Folder - - Host > Local operations > Create virtual machine - - Host > Local operations > Delete virtual machine - - Host > Local operations > Reconfigure virtual machine - - Resource > Assign vApp to resource pool - - Resource > Assign virtual machine to resource pool - - Virtual machine > Configuration > CPU count - - Virtual machine > Configuration > Memory - - Virtual machine > Extend virtual disk - - Virtual machine > Interaction > Device connection - - Virtual machine > Interaction > Power Off - - Virtual machine > Interaction > Power On - - Virtual machine > Inventory > Create from existing - - Virtual machine > Inventory > Remove - - Virtual machine > Provisioning > Customize - - Virtual machine > Provisioning > Deploy template - - Virtual machine > Provisioning > Modify customization specifications - - Virtual machine > Provisioning > Read customization specifications - - vSphere Tagging > Assign or Unassign Tag - - vSphere Tagging > Create vSphere Tag - - vSphere Tagging > Create vSphere Tag Category - - vSphere Tagging > Delete vSphere Tag - - vSphere Tagging > Delete vSphere Tag Category - - vSphere Tagging > Edit vSphere Tag - - vSphere Tagging > Edit vSphere Tag Category - - Connectivity: - - - Network > Assign network - - Virtual machine > Configuration > Modify device settings - - Virtual machine > Configuration > Settings - - dvPort group > Create - - dvPort group > Delete - - **Permissions for Sandbox Save and Restore:** - - Snapshot Save and Restore operations: - - - Virtual machine > Snapshot management > Create snapshot - - Virtual machine > Snapshot management > Remove snapshot - - Virtual machine > Snapshot management > Revert to snapshot - -3. Click **Next**. -4. Set the **Role name**, as appropriate. -5. Click **Finish**. -6. After creating the role, add a permission to the root level of the vCenter Server. - - For example, "vcenter1.qualisystems.local": - - ![](/Images/Admin-Guide/Inventory-Operations/vCenterRootLevel.png) - -7. Add the **User** that will be used by vCenter cloud provider resources to deploy App VMs on the vCenter Server. -8. Assign the new/updated **Role**. -9. Make sure the **Propagate to children** check box is selected. -10. Click **OK**. - - If you cannot **Propagate to children**, make sure the vCenter account has at least **Read-only** permission on the datacenter. - - 1. Click the datacenter and select **Permissions**. - 2. Make sure the account has the **Read-only** role or higher. - - ![](/Images/Admin-Guide/Inventory-Operations/vcenterReadOnlyRoleOnDatacenter.png) diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/vcenter-integration-architecture-and-prerequisites.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/vcenter-integration-architecture-and-prerequisites.md deleted file mode 100644 index 17f36b11a2..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/vmware-vcenter-integration-and-configuration/vcenter-integration-architecture-and-prerequisites.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -sidebar_position: 1 ---- - -# vCenter Integration Architecture and Prerequisites - -## vCenter Integration Architecture - -When deploying a vCenter App in a sandbox, the CloudShell Execution Server connects to the vCenter server and creates the VM according to the settings (parent VM/image, datacenter, ESXi host or host cluster, storage, dvSwitch, etc.) defined on the App and the App's vCenter cloud provider resource. Specifically, CloudShell accesses the datacenter, finds the parent VM, snapshot, template or image defined on the App template\*, and creates the VM from that parent object. If the App has a connectivity requirement defined in the sandbox, CloudShell will create a port group on the dvSwitch, add the VM's vNIC and configure the VLAN on this vNIC and on all other connected vNICs. - -\*\* When restoring a saved sandbox with deployed vCenter Apps, CloudShell creates the App VMs from the VM clones CloudShell created during the sandbox saving process. For additional information, see [Save a Sandbox](../../../../portal/sandboxes/sandbox-workspace/save-sandbox.md).* -:::note Important -vCenter elements created by CloudShell should not be altered as this may cause unexpected behavior. -::: -The following diagram illustrates a vCenter integration (with a local CloudShell installation) hosting a live sandbox that has 6 deployed VMs connected to a VLAN network: - -![](/Images/Admin-Guide/Inventory-Operations/vCenter-Architecture_620x333.png) - -## CloudShell access to vCenter - -- Ensure your CloudShell Execution Server communicates to the vCenter Management IP over HTTPS/port 443. Make sure to allow HTTPS/port 443 through the appropriate firewalls. - -## vCenter Prerequisites - -For CloudShell integration with vCenter Server, the following preparations need to be made on the vCenter Server. -:::warning Important -Please consult your resident vSphere expert before performing these configurations. -::: -### vCenter machine's operating system - -- Windows / Linux - -### Licensing - -- vSphere version: 5.5 - 6.5, 6.7, 7 (vSphere® Standard™ / Enterprise Plus™/ with Operations Management™ / Platinum™) - :::note - CloudShell connectivity requires vSphere® Enterprise Plus™ and above. - ::: - - vSphere Client - - - vCenter server - - - ESXi server - - - dvSwitch that is capable of creating and configuring port groups - - -### Networking - -- Physical backbone – a single switch with management interface and VLAN assignment capability, physically connected to NICs on the ESXis -- dvSwitch: During App deployment, CloudShell creates connectivity between vCenter App VMs as well as physical resources by creating VLAN networks in the sandbox. First, CloudShell allocates a VLAN for each peer-to-peer or many-to-many network in the sandbox and adds the connected endpoints to the relevant network. - - CloudShell manages VM networking via the dvSwitch, so if you require networking, you will need a dvSwitch that is capable of creating and configuring port groups. - :::note - vSwitch connectivity is supported in the vCenter 2nd Gen cloud provider shell and requires the same vSwitch name to be set on all relevant VM cluster hosts. The **VMware vCenter Cloud Provider Shell 2G** shell can be downloaded [here](https://github.com/orgs/QualiSystems/discussions/1691). - ::: - - Connected to the same physical NICs as the physical backbone switch - - Capable of creating and configuring port groups -- For connectivity between different datacenters, the dvSwitches and other switches or lab components must be fully trunked. -- The physical switch must be configured to route the individual VLAN traffic to a DHCP server. -- DHCP server can be either: - - Managed as a service on board the switch - - A dedicated DHCP server created in VMware (Windows/Linux) on a management network, reaching all segments for IP assignment -- DHCP should be able to manage all required segments according to architecture design. -- Physical network should not be configured with gateways, in order to prevent cross-VLAN communication by default. -- VMs must have network adapter(s). Starting with vCenter 2G version 3.4.0, CloudShell will create VMXNET3 adapters on the VMs if required by the sandbox. For example, if the VM has 2 network adapters of type e1000, but the App has 3 connector lines, CloudShell will create a 3rd network adapter of the same type as the last one (e1000). - -### VMware - -- Datacenter: Since CloudShell does not provide out-of-the-box support for connectivity between VMs on multiple datacenters, it is recommended to designate a single datacenter to be used for CloudShell App deployments. The datacenter doesn't have to be dedicated only to CloudShell activity. - - - Host cluster – including all ESXi hosts (1 or more) to be managed by CloudShell - - Datastore or datastore (DS) cluster that includes all data stores (1 or more) to be managed by CloudShell: - - - Using VMware vSAN license/external SAN - - (For datastore clusters) Using NFS cluster, containing all external datastores - - :::note Notes about storage: - - VMs are stored on the datastore or datastore cluster defined on the cloud provider resource. - - CloudShell does not support cross-storage communication. Therefore, if you’re using multiple cloud provider resources in the same sandbox and want to share the storage among the VMs, make sure all cloud provider resources use the same storage. - ::: - -### Best Practices: VMware folders and templates - -To help you organize your CloudShell activity on vSphere, we've come up with these best practices: - -- "Management" folder - should contain all management VMs: - - Quali server (Quali Server can be installed on a dedicated VM on the vCenter or in an external location with networking to the vCenter Server) - - QualiX: In order to use QualiX for in-browser connections to App VMs, make sure the QualiX machine is accessible to the sandbox application network. See [QualiX Installation and Configuration](../../../../install-configure/qualix/index.md) - - DHCP (if used with a dedicated server) - other applications and services that manage Cloudshell-deployed VM capabilities -- "Infrastructure" folder – for infrastructure static VMs: - - Static always-on VMs (Firewalls, DBs, etc.) -- "Base Templates" folder – for all App templates to be deployed on CloudShell sandboxes: - - Must have VMware tools installed (needs to be included with image or VM template with which CloudShell creates the App VM) - - DHCP IP settings - - A snapshot called "clean” – after VM is powered off diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/_category_.json b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/_category_.json deleted file mode 100644 index 2efcbe15ed..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Public Cloud Provider Support in CloudShell", - "position": 2 -} diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/_category_.json b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/_category_.json deleted file mode 100644 index df53ed3035..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "AWS Integration and Configuration", - "position": 1 -} diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/_category_.json b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/_category_.json deleted file mode 100644 index adfb6c8f83..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "AWS Integration", - "position": 1 -} diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-app-template.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-app-template.md deleted file mode 100644 index 1d5b959619..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-app-template.md +++ /dev/null @@ -1,507 +0,0 @@ ---- -sidebar_position: 8 ---- - -# Add an AWS EC2 App Template - -The App template defines the settings and configurations of the VM to be deployed in the sandbox as well as the application(s) to be installed on that VM. - -:::note Notes: -- By default, all public cloud Apps of the same type in the same sandbox are deployed within the same subnet and therefore are connected to each other and isolated from other sandboxes. However, using the **Subnet** service, blueprint designers can set up multiple subnet networks in the sandbox, instead of having one default subnet for all the Apps of the same cloud provider. For details, see [Subnet Connectivity](../../../../setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/index.md). -- Public cloud App deployment requires the management network and subnet(s) to be prepared in advance as part of the sandbox **Setup** process; CloudShell's out-of-the-box **Setup** process does this. However, the blueprint must include at least one public cloud App to initiate the **Setup** script's connectivity preparation process for deployment in that public cloud. -::: -**To add a new AWS EC2 App template:** - -1. Click **\+ Add**. - - The **Create New App** wizard is displayed. - - ![](/Images/CloudShell-Portal/Manage/CreateNewApp.png) - -2. From the **Select Deployment Type** pane, select **AWS EC2 instance**. -3. Enter a **Name** for the App template. - :::note - The App template's name has a limit of 100 characters and can only contain alpha-numeric characters, spaces, and the following characters: | . - \_ \] \[ - ::: -4. Click **Create**. - - The App template is created and the **App** wizard's **General** page is displayed. - - ![](/Images/CloudShell-Portal/Manage/AppGeneralPage.png) - -5. In the **General** page, define the App template's display settings and category. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldRequiredDescription
    NameRequiredApp name that is displayed in the catalog.
    DescriptionOptionalDescription of the App.
    IconOptionalAdd an image to the catalog definition. The recommended size for the image is 190x120 pixels (image size is limited to 400x400 pixels or 200 KB).
    CategoriesOptional - Service categories are a method to classify Apps. The Apps are displayed in the **Add App / Service** side pane in the blueprint and sandbox diagram, arranged in categories. Only users who are permitted to view the category can access the App. Apps without a category are not displayed. - - By default, the **Applications** category is selected. - - Select a category from the dropdown list. You can select additional categories. Examples of categories are: applications, networking and VLAN. - - :::note Notes: - - The category must be associated with the domain in which the required cloud provider resides. For information about domain categories, see [Managing domain categories](../../../../cloudshell-manage-dashboard/managing-categories.md#managing-domain-categories). - - It is recommended to use up to a 2-level hierarchy when organizing the **Add App / Service** catalog (i.e. root and sub-category). - - In the **Add App / Service** side pane, Apps are displayed in the root category only. This includes services associated to sub-categories. - ::: -
    - -6. In the left pane, click **Deployment Paths** and configure the App template's deployment path. - - A deployment path defines (1) the AWS AMI image, (2) the VM’s settings such as storage size, CPU and image file, and (3) the CloudShell cloud provider resource that enables CloudShell to access the cloud provider and deploy the VM on it. - - Note the deployment path's name (highlighted in the image below). The path's name is dynamic and consists of the selected **Cloud Provider** resource and **Deployment type**. You can change the name of the path by clicking the field. - - ![](/Images/CloudShell-Portal/Manage/AppDeploymentPathsPage.png) - - 1. From the **Deployment** drop down list, select the deployment type. - - The selected deployment type's attributes are displayed. - :::important - The deployment type related to the AWS 2nd Gen cloud provider shell is named "Amazon AWS EC2 Instance 2G". - ::: - 2. Fill in the details. - - For **AWS EC2 Instance** attributes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeAWS EC2 shell versionDescription
    Cloud ProviderAllName of the AWS EC2 cloud provider resource to be used
    AWS AMI IDAll - AWS AMI ID to launch the instance from. For example, "ami-6869aa05". - :::note - The AMI must be accessible in the selected cloud provider's AWS region. - ::: -
    Allow All Sandbox TrafficAll - Determines if the App allows inbound traffic from all other AWS EC2 Apps in the sandbox. If set to **False**, the instance will be isolated. Access from specific Apps or subnets can be defined using the **Inbound Ports** attribute or API. - :::note - By default, this attribute is **True**. This means that all access is allowed to all ports from all Apps in the sandbox and all ports are open for traffic within the sandbox. - ::: -
    Instance TypeAll - AWS EC2 instance type. The instance type determines the CPU, memory, storage and networking capacity of the instance. For example, "t2.large". - - Leave empty to use the default instance type specified in the AWS EC2 cloud provider resource. - - For built-in or Marketplace images, make sure the instance type is supported by the image you defined in the App. -
    IAM Role NameAll - (Optional) Name of the IAM role to associate to the App's AWS EC2 instance. The instance will use this role to access AWS. - - :::note Notes: - - The role must have the AWS permissions required for the actions the instance is expected to perform. - - If the role does not exist, or there are other issues with launching the instance with the role, App deployment will fail. - ::: -
    Inbound PortsAll - Semi-colon separated list of ports and protocols to open for inbound traffic. Note that by default all ports are open for traffic between AWS EC2 App instances within the sandbox, but this can be changed using the **Allow All Sandbox Traffic** attribute. - - In addition, all outbound traffic is allowed. - - The syntax is: - - `port[single/range]:protocol[tcp(default)/udp]` - - For example: "80;443:tcp;200-220:udp". - :::note - If not specified, the protocol defaults to TCP. - ::: - :::tip Tips: - - To allow QualiX in-browser connections to the VM from the sandbox, include port "22". - - To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/2023.3/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Ports** attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../setappsecuritygroups-code-example.md). - ::: -
    Public IP OptionsAll - Enables access to the instance from the internet. Options are: - - - **No Public IP** - default option - - **Public IP (single subnet)** - (for Apps connected to a single subnet \[private or public\]) allocates a public IP - - **Elastic IPs** - (for Apps connected to multiple subnets) allocates an elastic IP for the App in each of the public subnets that it is connected to - :::note - In AWS EC2 Apps, this setting is mandatory if the App is connected to more than one network (private or public). - ::: -
    Storage Size2nd Gen onlyThe root volume size. The value must be greater or equal to the size of the root snapshot used. If set to **0**, the default defined in the image will be used. For example: 30.
    Storage IOPS2nd Gen onlyThe default number of I/O operations per second that the root volume can support. This parameter is used only for storage of type *io1*, in which you can provision up to 30 IOPS per GiB. If set to **0**, the default in the image is used. For example: 240.
    Storage Type2nd Gen onlyThe type of storage volume. In AWS, there are several EBS Volume types that can be used, *gp2* and *io1* for SSD, *st1* and *sc1* for HDD or the standard type which is the old generation EBS volume type. If **auto** is selected, the storage type defined in the image is used.
    Root Volume Name2nd Gen onlyThe device names available for the volume. Depending on the block device driver of the selected AMI's kernel, the device may be attached with a different name than what you specify. If left empty, the default defined in the AMI is used. For example: /dev/xvda
    Autoload2nd Gen onlyEnables the automatic execution of the Autoload command during reservation Setup.
    Wait for IP2nd Gen onlyIf set to **False**, the deployment will not wait for the VM to get an IP.
    Wait for Status Check2nd Gen onlyIf set to **True**, the App's deployment will end successfully only after instance status checks have passed. The status checks include network connectivity, physical host status, system status and more.
    Wait for Credentials2nd Gen onlyEnable in order to retrieve credentials from a Windows machine. Note that if this parameter is enabled and the credentials are not retrieved within 15 minutes, the deployment will fail.
    Custom TagsAll - Custom tags to be set on CloudShell-deployed AWS EC2 instances for billing, like the details of the project or team that deployed the instance. - - For multiple tags, specify a comma-separated list of the key-value pairs. For example: - - `tag_name1:ec2_instance,tag_name2:ec2_instance2` -
    User Data URLAll(Optional) URL to the raw version of the script to execute (PowerShell, bash, sh, etc.).
    User Data ParametersAll - (Optional) Parameters to pass to the user data script. For example, specifying `param1 param2` will result in the command running as follows: - - `./file.sh param1 param2` -
    Private IPAll - When the VPC is in static mode (defined on the AWS EC2 cloud provider resource's **VPC Mode** attribute), this attribute is used to set a static private IP for the deployed App. - - To set a static private IPs in multi-subnet mode, specify a json string that maps the subnet request CIDR to the requested static private IP. For example: \{"10.0.0.0/28": "10.0.0.6"\} -
    Enable Source Dest Check2nd Gen only - Set to **True** to enable source/destination checks. Source/destination checks allow users to create custom routing inside the VPC. It is applied to all vNICs of a certain instance. If enabled, you can reconfigure routing to go through that instance. This value must be **False** for Virtual Appliance instances like virtual firewalls/routers. - :::note Important: - This value must be **False** for Virtual Appliance instances like virtual firewalls/routers. The reason for this is that some virtual appliances may take a while to fully deploy and AWS will show them as impaired from 20 minutes until they fully deploy. Setting **Enable Source Dest Check** to **False** ensures the instances are not stopped when they become impaired. - ::: -
    Status Check Timeout2nd Gen only - Timeout, in seconds, for AWS status checks to pass. Some virtual appliances may take a while to fully deploy and AWS will show them as impaired from 20 minutes until they fully deploy. Therefore, to ensure virtual appliance instances are not stopped when they become impaired, use this attribute to provide a long enough timeout for the instance to complete its status check. - :::note - The default timeout is 600 seconds (10 minutes). However, instance deployment will fail once the instance status becomes "impaired". Specifying a status check timeout period will configure CloudShell to ignore the "impaired" status and instead wait for the instance deployment to complete or the timeout period to pass. - ::: -
    - -7. To add additional deployment paths to the App template, click the **Add New Deployment Path** link at the bottom of the wizard and fill in the required information. -8. In the left pane, click **Configuration Management** and configure the application to be installed on the VM. - - ![](/Images/CloudShell-Portal/Manage/ConfigurationManagement.png) - :::tip - To learn how to develop custom scripts and Ansible playbooks, including examples, and set up support for the desired configuration management tool, see [Developing Configuration Management Scripts for Apps](../../../../../devguide/develop-config-management-scripts-for-apps/index.md). - ::: - :::note Notes: - - To run configuration management on an Azure App, make sure the App's VM size is Basic_A2 or larger. - - For configuration management operations, CloudShell uses an available Execution Server (for Ansible, it's a Linux Execution Server that has the **Supports Ansible** flag). - - If the cloud provider resource has an **Execution Server Selector** configured, it will use that selector. If the selector is empty, CloudShell will use the selector defined in the appropriate **Resource Manager Client >Configuration Services** model (**Ansible Configuration** or **Custom Script Configuration**). - - - Execution Server selectors specified on the deployed App shell/resource are not used to execute configuration management operations. - ::: - - 1. Define the script or playbook to install. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Select Tool - Select the application's installation and configuration tool. - - - **None**: Do not use any Configuration Management option. Use this option if, for example, the image or template already contains the application to install. - - **Script**: Select the custom script to run (PowerShell, bash or sh). - - **Ansible**: (Intended for customers who are already using Ansible) Select the Ansible playbook to run. - :::note - The playbook runs once during the **Setup** phase for all of the sandbox's Apps that use that playbook, after CloudShell has finished deploying their VMs. This is done both to improve performance and support cross-server logic where multiple applications need to be installed and configured in a certain way. - ::: - Note that the playbook runs once for all of the sandbox's Apps that use that playbook, after CloudShell has finished deploying their VMs. - - - Depending on the selection, additional options may become available. -
    Connection Method - The method to use to connect to the VM. - - Select: - - - SSH if the VM has a Linux OS - - Windows Remote Management if the VM has a Windows OS - :::note - To run configuration management on a Windows VM, the VM must have WinRM enabled. For details, see [Enable WinRM on Windows VMs to Support Configuration Management](../../../../../devguide/enable-winrm-on-win-vm-for-cfg-mng.md). - ::: -
    Playbook / Script Location - Details of the Ansible playbook or custom script. - - - **URL**: Raw URL of the Ansible playbook or ZIP file, or custom script on the online repository (GitHub, GitLab and BitBucket are supported). URL must be accessible to the Execution Servers. - :::tip - The URL can accept parameters defined on the App, enabling you to test new versions of scripts without affecting consumer-ready versions. For example, you can have an App everyone is using, but if you want to test a version you're developing, simply change the value of the URL parameter in the test blueprint. - - - To use parameters, specify the parameter name in curly brackets (for example: \{branch\}). - - If the App has this parameter, CloudShell will replace the \{branch\} with its value during execution. - - If the parameter is missing, CloudShell will replace \{branch\} with an empty string. - - If you are using a global input, customers would be well advised to set a default value on the global input - ::: - **For GitHub, specify the raw URL. For example:** - - ```javascript - https://raw.githubusercontent.com/.../site.yml - ``` - - **For GitLab, specify the API endpoint in the format:** - - ```javascript - https://gitlab.com/api/v4/projects/{Project ID}/repository/files/testsharding%2Eyml/raw?ref=master - ``` - - Where: - - - Each special character that the file contains has to be encoded. In the example above - "%2E” is an encoded point (".”) - - - The ref value is the branch name (master for this example) - - - **For BitBucket Data Center (on premise), use the following URL format:** - - ```javascript - http://{datacenter server IP}/rest/api/1.0/projects/{projectKey}/repos/{repository name}/raw/testsharding.yml - ``` - - **For BitBucket Cloud, use one of the following:** - - - For source code files, specify the API endpoint: - - ```javascript - https://api.bitbucket.org/2.0/repositories/{workspace}/{repository name}/src/{GUID- the Commit hash string}/testsharding.yml - ``` - - - For download files (files residing in the repository's "Downloads" folder), specify this endpoint: - - ```javascript - https://api.bitbucket.org/2.0/repositories/{workspace}/{repository name}/downloads/site.yml - ``` - - :::important - If the URL is private (HTTPS), the VM will need to have a valid SSL certificate. To disable the certificate check, open **Resource Manager Client>Resource Families>Configuration Services** (**Ansible Configuration** or **Custom Script Configuration**) and set the **Verify Certificate** attribute to **False**. - ::: - - **User/Password**: (For private repositories) Access credentials or token to the script/playbook's online repository. - - - **Token**: (For private repositories) Access token to the script/playbook's online repository. - - For GitHub and GitLab, specify the API token. For BitBucket Cloud, set the repo's "App Password" in the App template's **Password** field. For BitBucket Data Center, specify the personal access token. - - - :::note Notes: - - **For Custom Script configurations**: In SSH mode, only bash and sh scripts are allowed. In WinRM mode, only PowerShell scripts are allowed. WinRM over HTTPS only applies to custom scripts at this time. If WinRM is configured to run over HTTPS, the execution server will first try to run the custom script over HTTPS and then fall back to HTTP if HTTPS is unsuccessful. To prevent the fallback, set the **winrm_transport** parameter to **ssl**. - - **For Ansible configurations**: The Ansible playbook must be a YML or YAML file. To specify multiple playbooks or a hierarchy of an Ansible project, you can specify multiple Ansible playbooks or a ZIP package. For example: `https://raw.githubusercontent.com/QualiSystemsLab/private-repo-zip-download/master/README.zip` - - If a ZIP containing 2 or more playbooks is specified, CloudShell will use the playbook file titled `site.yml` or `site.yaml`. If the file is missing, the App's deployment will fail. - ::: -
    Inventory Groups - (For Ansible) Specify the host groups for the application to be installed, separated by semicolons (;). The newly deployed VM will be associated to these groups, thus allowing plays that target these groups to run on the VM. - - For example: `Servers/AppServers;Servers/DBServers` -
    Parameters - Parameters to be passed to the Ansible playbook or custom script. Specify the parameters and their default values. - - In the blueprint or sandbox diagram, privileged users can also set the parameter to receive the value that is specified for a global input when reserving a sandbox containing the App. This is done by selecting the global input when editing the App in the blueprint or sandbox diagram. For example, a global input that specifies the build number of a product to be tested or which components of a product to install. - :::important - (For Ansible) To customize the port to be used to communicate with the VM, add the `Ansible_port` parameter. Default: `SSH` / `Port: 22` / `WinRM: 5985`. - ::: -
    Additional Arguments - (For Ansible) Define arguments to be passed to the execution of the playbook (`Ansible-playbook` command). For example, `-v` will set verbose mode on while `-f` will set the maximum number of VMs to be handled in parallel. Multiple arguments can be given, separated by spaces. For additional information on possible arguments, see the official Ansible documentation. - - The arguments must be specified in **Resource Manager Client** > **Configuration Services** family > **Ansible Configuration** model > **Ansible Additional Arguments** attribute. - :::note - The arguments are defined globally for all Apps using Ansible. - ::: - :::important - To configure Ansible to connect to certified hosts only (Linux VMs with a valid 'known\_hosts' key), include the following additional arguments: `--ssh-extra-args='-o StrictHostKeyChecking=yes'` - ::: -
    - - 1. To enable the end-user to rerun the App's configuration management on the deployed App in the sandbox, select **Allow rerunning configuration management for resources deployed from the App**. Once the App's deployment completes, a **Rerun Configuration Management** command is included in the deployed App's **Application Commands** pane. For details, see [Run App Commands](../../../../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md). This is useful for rolling back the App's VM to its original state. - - 2. To enable blueprint and sandbox owners to modify the App's Configuration Management details, select **Allow blueprint/sandbox owners to modify the App's Configuration Management**. The following details can be modified: playbook/script, authentication details, inventory groups, and parameters. Note that the modifications only apply to the blueprint or sandbox of the instance. - 3. Optionally click the **Add New Script/Playbook** link at the bottom right to add additional custom scripts/Ansible playbooks to the App. The scripts will run in their display order, from top to bottom. You can drag scripts up or down to rearrange. - - 4. To change the script's alias, click the script's name and change as appropriate. - -9. In the left pane, click **App Resource** to optionally set the VM's operating system user credentials (for example, to connect to the VM via RDP or SSH). You can also change the deployed App's Shell. - - ![](/Images/CloudShell-Portal/Manage/AppResource.png) - :::important - To help sandbox end-users connect to the VM, it is recommended to include the User and Password in the blueprint's instructions. For additional information, see [Add Instructions](../../../../../portal/blueprints/creating-blueprints/add-instructions.md). - ::: - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Shell - The Shell on which the App's VMs are based. When an App is deployed in a sandbox, it changes into a "deployed App resource", which is based on the selected Shell. By default, the "Generic App Model" Shell is used. - - Deployed Apps include a default set of commands such as Power On and Refresh IP, and the VM's **User** and **Password** attributes, as explained below. - :::note - Changing the Shell might cause additional fields to become visible and you may need to enter further information. - ::: -
    User - User defined in the App's image. The **User/Password** credentials are used by QualiX to create in-browser connections to the VM from within the sandbox. - - :::note Notes: - - For AWS instances,make sure to set the **User** of a user that already exists on the Amazon machine image. For custom images, the image owner should know the credentials, while community/marketplace images have the image's credentials listed in their documentation. - - Azure VM username and password restrictions apply. For details, see [Frequently asked question about Windows Virtual Machines](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/faq). - - For Azure Marketplace images, CloudShell will create a user on the VM based on the **User/Password** credentials you specify. - - For Azure Marketplace VMs, if the user is not set, CloudShell will set **adminuser** as the default user name. - ::: -
    Password - VM user's password. - - :::note Notes: - - For AWS Marketplace images, leave the **Password** empty. The AWS shell generates a new key-pair for each sandbox, which QualiX will use to establish the in-browser connection. - - For Azure Marketplace images: - - If the password is not set, only the user name will be required. For Linux VMs, CloudShell will create an SSH key-pair to enable a secure connection. - - If the password is set, it will be displayed as asterisks (\*\*\*\*\*\*) in the blueprint or sandbox. - ::: -
    - -10. Click **Done**. - - The new App template is displayed in the **Apps** page. - -11. Next, [Configure the Qualix Server for AWS EC2](./configure-the-qualix-server-for-aws-ec2.md). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-cloud-provider-resource.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-cloud-provider-resource.md deleted file mode 100644 index 42cc488f44..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/add-an-aws-ec2-cloud-provider-resource.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -sidebar_position: 7 ---- - -# Add an AWS EC2 Cloud Provider Resource - -The **AWS EC2** cloud provider enables the deployment of AWS instances from an Amazon Machine Image (AMI). -:::tip -We strongly recommend using the 2nd Gen version of the shell, which provides significant enhancements and capabilities, and is tamper-resistant from within CloudShell, ensuring your Azure cloud provider resources and Apps are in pristine condition. Useful articles: [Replacing the 1st Gen shell with a 2nd Gen version](../../../../../devguide/reference/migrate-1st-gen-shell-to-2nd-gen-shell.md#replacing-the-1st-gen-shell-with-a-2nd-gen-version), [Cloud Provider Shells - Features and Capabilities Per Release](../../../cloud-provider-2g-shells-features-and-capabilities.md). -::: -**To add an AWS EC2 cloud provider resource:** - -1. Log in to CloudShell as administrator and access the required domain. This will enable the Apps based on this cloud provider resource to be usable in this domain. For additional information, see [Managing Public Cloud Apps in Domains](../../managing-public-cloud-apps-in-domains.md). - -2. In the **Inventory** dashboard, in the **Resources** tab, click the folder in which you want to create the resource. -3. Click **\+ Add New**. -4. In the **Create New Resource** dialog box, select the **AWS EC2** cloud provider template. To use the AWS 2nd Gen shell, select **Amazon AWS Cloud Provider Shell 2G**. -5. Enter a **Name** for the AWS EC2 resource. - :::note - The resource's name has a limit of 100 characters and can only contain alpha-numeric characters, spaces, and the following characters: | . - \_ \] \[ - ::: - Access to the AWS account is provided using the IAM role configured in the **Management VPC**. - -6. Click **Create**. - - The **Resource** dialog box is displayed. - - ![](/Images/Admin-Guide/Inventory-Operations/AWSResourceDiscoveryInformation.png) - -7. Enter the required information. - :::note - All AWS elements must belong to the specified region. - ::: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeSupporting shell versionDescription
    Execution Server SelectorAll - (Optional) This attribute points to a pre-defined group of execution servers (grouped by a common **Execution Server Selector** value). To make the association, enter the same value you specified on the execution server. - :::note - To use the out-of-the-box **Execution Server Selector** attribute, make sure it has the "Execution Server Selector" rule. For details on how to add the rule to the attribute, see [Defining attribute rules](../../../../setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/attributes.md#defining-attribute-rules). - ::: - For additional information on managing App deployments per domains, see [Managing Public Cloud Apps in Domains](../../managing-public-cloud-apps-in-domains.md). -
    RegionAll - The code of the AWS region to be used by this cloud provider resource. For example, "us-east-1". - :::note - The AWS region must have **Management VPC** configured. For the list of supported regions, see [AWS Regions Supported by CloudShell](./aws-regions-supported-by-cloudshell.md). - ::: -
    VPC CIDRAWS 1st Gen shell onlyCIDR to be used for sandbox VPC if **VPC Mode** is set to **Static**.
    AWS Mgmt SG IDAll - The Management VPC's security group (use the **SG1id** output when configuring the Management VPC for the region). For example, "sg-71240198". - - This value is used by the **Setup** process to configure the communication between the Management VPC's instances and the Sandbox instances. -
    AWS Mgmt VPC IDAll - ID of the Management VPC. Used by the **Setup** process to set up the VPC and subnet for the sandbox (use the **ManagementVPCID** output when configuring the Management VPC for the region). For example "vpc-633fb904". - - This value is created when configuring the Management VPC for the region. -
    Keypairs LocationAll - S3 bucket containing sandbox PEM files (use the **S3Name** output when configuring the Management VPC for the region). - - Each active Sandbox creates a PEM file under a designated folder. For example, "sandbox-management". -
    Max Storage SizeAll - (Optional) The maximum number of GiB in the root volume. The value of this parameter will be the storage size limit for all apps deployed on this Cloud Provider. For example, "8". - - The value must be greater than or equal to the size of the root snapshot used. If set to "0", the default size of the snapshot will be used. -
    Max Storage IOPSAll - (Optional) The maximum number of I/O operations per second to be supported by the volume. The value of this parameter is the storage IOPS limit for all Apps deployed on this Cloud Provider. For example, "240". - - This parameter is used only for storage of type **io1**, in which you can provision up to 30 IOPS per GiB. If set to zero, the default in the image is used. -
    Networks In UseAll - Reserved networks that will be excluded when allocating sandbox networks, and therefore must include the Management VPC CIDR (which was provided as an input to the CloudFormation deployment process) as well as any other private networks that have access to the Management VPC. - - The syntax is comma separated CIDR. For example, "10.0.0.0/32,172.31.0.0/24". -
    Instance TypeAll - (Optional) The default AWS EC2 instance type for the deployed instance. The instance type determines the CPU, memory and networking capacity of the instance to be deployed. For example “t2.large”. - :::note - The instance type can be changed when creating the App in the **Manage** dashboard. - ::: -
    VPC ModeAll - Every sandbox with AWS Apps deploys a VPC to AWS, while in Shared VPC mode, CloudShell deploys the sandbox to an existing VPC. This setting determines how the sandbox VPC selects a CIDR block. - - Options are: - - - **Dynamic**: The CIDR block is selected by Cloudshell Server. In other words, CloudShell deploys a new VPC with a dedicated CIDR for every sandbox. - - **Static**: The CIDR block for all sandboxes allocated is taken from the **VPC CIDR** attribute. To configure CloudShell to support this mode, see the [Typical Workflows](https://github.com/QualiSystems/Amazon-AWS-Cloud-Provider-Shell-2G#typical-workflows) of the AWS EC2 2G shell's README file. - - **Shared**: Indicates that the cloud provider resource will deploy to the shared VPC defined in **Shared VPC ID** and use the CIDR block defined in the **VPC CIDR** attribute. - - **Single**: The sandbox infrastructure will be deployed within the Management VPC and use the VPC CIDR block. -
    Static VPC CIDRAWS 2nd Gen shell onlyCIDR to be used for sandbox VPC if **VPC Mode** is set to **Static**.
    Shared VPC IDAWS 2nd Gen shell only(Mandatory for Shared VPC mode) Shared VPC's ID (can be found in the output of the shared VPC CloudFormation stack, in the **SharedVPCId** key). For example: `vpc-0bf24b1ebrd855e30`.
    Shared VPC Role ARNAWS 2nd Gen shell only(Mandatory for Shared VPC mode) Role created by the CloudFormation process with read/write permissions in the AWS account (can be found in the output of the shared VPC CloudFormation stack, in the **SharedRoleARN** key). This role is used by CloudShell to operate in the shared VPC.
    Transit Gateway IDAWS 2nd Gen shell only(Mandatory for Shared VPC mode) ID of the transit gateway (can be found in the output of the main CloudFormation stack, in the **TGWid** key).
    Additional Management NetworksAWS 2nd Gen shell only - Networks to be allowed to interact with all sandboxes. This is used for allowing connectivity to AWS resources outside the Management VPC. - - The syntax is comma separated CIDRs. For example, "10.0.0.0/24,10.1.0.0/16,172.31.0.0/24". -
    VPN Gateway IDAWS 2nd Gen shell only(Applies to Shared VPC mode only) ID of the gateway to use. Required to connect the shared VPC's sandbox subnets to the VPN gateway. CloudShell does this by creating a route between the specified VPN gateway and the connected subnet within the VPC CIDR. Can be found in the output of the shared VPC CloudFormation stack, in the **VPNGWid** key.
    VPN CIDRsAWS 2nd Gen shell only(Mandatory for Shared VPC mode if VPN Gateway ID is defined) Comma-separated list of CIDRs in the local network to be used to VPN to the shared VPC. Example, 10.1.0.0/24,10.3.0.0/16
    - -8. Click Start **Discovery**. - - When the discovery process completes, a confirmation message is displayed. The cloud provider resource is displayed in the **Inventory** dashboard in CloudShell Portal and in Resource Manager Client. - - To customize the App deployment types and publish App orchestration parameters, see [Customizing App Deployment Types](../../../customizing-app-deployment-types.md) - - -9. Next, [Add an AWS EC2 App Template](./add-an-aws-ec2-app-template.md). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/aws-regions-supported-by-cloudshell.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/aws-regions-supported-by-cloudshell.md deleted file mode 100644 index 6289ddc9ae..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/aws-regions-supported-by-cloudshell.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -sidebar_position: 1 ---- - -# AWS Regions Supported by CloudShell - -The following AWS regions are currently supported: - -| Region | Code | -| --- | --- | -| US East (N. Virginia) | `us-east-1` | -| US East (Ohio) | `us-east-2` | -| US West (N. California) | `us-west-1` | -| US West (Oregon) | `us-west-2` | -| South America (São Paulo) | `sa-east-1` | -| EU (Frankfurt) | `eu-central-1` | -| EU (Ireland) | `eu-west-1` | -| Asia Pacific (Mumbai) | `ap-south-1` | -| Asia Pacific (Singapore) | `ap-southeast-1` | -| Asia Pacific (Sydney) | `ap-southeast-2` | -| Asia Pacific (Tokyo) | `ap-northeast-1` | -| Asia Pacific (Seoul) | `ap-northeast-2` | diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/configure-an-execution-server-selector-for-aws-ec2.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/configure-an-execution-server-selector-for-aws-ec2.md deleted file mode 100644 index afde0d0142..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/configure-an-execution-server-selector-for-aws-ec2.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Configure an Execution Server Selector for AWS EC2 - -*This article explains how to associate an Execution Server to AWS EC2 App deployments and command executions. To learn how to associate an Execution Server to resources, Apps and blueprints, see [Setting Up Execution Servers to Run Commands](../../../../cloudshell-execution-server-configurations/setting-up-execution-servers-to-run-commands.md).* - -The management VPC contains two Execution Servers: the **es-shells** Execution Server has a configured IAM role, which enables it to communicate with AWS and create the necessary elements, such as instances, networking etc. (as well as run any configuration management operations defined on the App), and the **es-commands** Execution Server is used to run custom code on the instances and has an empty IAM role, which restricts it from altering configurations on AWS services. The reason we have two Execution Servers is to ensure that custom code is launched in a safe and isolated manner, preventing misuse of the AWS account. As these are Linux Execution Servers, they do not support Suite executions. - -The **es-shells** Execution Server in CloudShell needs to be associated with the AWS EC2 cloud provider resource while the **es-commands** Execution Server needs to be associated with the deployed App's shell, allowing it to launch the shell's commands inside the sandbox VPC. This link is achieved by using an attributes that has the **Execution Server Selector** rule. - -For information about managing, troubleshooting and upgrading Execution Servers on AWS, see [Managing AWS EC2 Execution Servers](../managing-aws-ec2-execution-servers.md). -:::note -The below procedure assumes you're using the out-of-the-box **Execution Server Selector** attribute. However, in order to use this attribute, you will need to assign it the **Execution Server Selector** rule in Resource Manager Client's **Attributes** tab. For details, see [Defining attribute rules](../../../../setting-up-cloudshell/inventory-operations/resource-data-modeling-for-1st-gen-shells/attributes.md#defining-attribute-rules). -::: -**To configure the Execution Server Selector attribute:** - -1. In **CloudShell Portal**, configure the Execution Server: - - 1. Open the **Manage>Execution Servers>Servers** page. - 2. Click the **es-shells** Execution Server. - 3. Select the **Execution Server Selector** check box and enter a unique value, such as "us-east-1-es1”. - - ![](/Images/Admin-Guide/AWS-deployment-type/AWS-deployment-type-Installation_1_428x153.png) - -2. Click **Done**. -3. If you are using a deployed App shell that has a custom driver, repeat the above process to configure the **es-commands** Execution Server with a different **Execution Server Selector** value. - - To complete the link, in the App's **App Resource** page, specify the same value on the **Execution Server Selector** attribute. - :::important - If you are setting up AWS integration in High Availability mode, repeat this process for the backup Execution Servers (**es-shells-b** and **es-commands-b**). - ::: -4. Next, [Add an AWS EC2 Cloud Provider Resource](./add-an-aws-ec2-cloud-provider-resource.md). diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/configure-the-qualix-server-for-aws-ec2.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/configure-the-qualix-server-for-aws-ec2.md deleted file mode 100644 index 3ad7c8648f..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/configure-the-qualix-server-for-aws-ec2.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -sidebar_position: 9 ---- - -# Configure the Qualix Server for AWS EC2 - -Follow these guidelines when setting up QualiX in-browser connections in your AWS integration. -:::note -To connect to App instances without QualiX, you will need to access the keypair location defined in the AWS EC2 cloud provider resource and download the key-pair `.pem` file from the bucket bearing the reservation ID. -::: -- If the only QualiX server in your CloudShell deployment is the one in the Management VPC in AWS, refer to the [QualiX Installation and Configuration](../../../../../install-configure/qualix/index.md) on how to configure it, and for the server address, use the **QualixInstanceEIP** output from the **CloudFormation** process - see [Create a Management VPC and Networks using CloudFormation](./create-a-management-vpc/index.md). -- If there are more QualiX servers in your CloudShell deployments, do the following for each relevant server: - 1. Install QualiX version 2.3 or above. - 2. Use an attribute to hold the QualiX Server address, and customize the `ServerUniversalSettings.xml` file on the Quali Server machine to have Quali Server take the QualiX Server address from this attribute. - 3. Add this attribute to the **Generic App Model** and set its value in all AWS templates defined in the App catalog for this region. Each App must have in this attribute the address of the QualiX Server in the Management VPC of its region. - -- If you selected an internal deployment of the Management VPC, the QualiX Server does not have a Public IP and is accessible only by the network that is connected via VPN to the Management VPC, which is the network you defined in the **On Premise CIDR** input parameter when you created the Management VPC. If you need more networks to access the QualiX Server, which enables end users to access the AWS EC2 Apps in the sandboxes, configure the **Management VPC Routing Table** via the AWS Console and add those networks. - - -## Related Topics - -- [Connect Remotely to Devices with QualiX (RDP, SSH, Telnet)](../../../../../portal/sandboxes/sandbox-workspace/resources/connect-remotely-with-qualix.md) diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/connect-the-management-vpc-to-quali-server.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/connect-the-management-vpc-to-quali-server.md deleted file mode 100644 index 7dbdf8e5b2..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/connect-the-management-vpc-to-quali-server.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Connect the Management VPC to Quali Server - -**To connect the Management VPC to Quali Server:** - -1. To prepare Quali Server, configure the connection between the Management VPC and Quali Server via VPN, and register the Execution Servers on Quali Server. -2. To complete the configuration, perform the following steps: - 1. Open the AWS console and identify the Management VPC listed in the **VPN Connections** summary. - 2. Open the Management VPC's VPN connection created in [Create a Management VPC and Networks using CloudFormation](./create-a-management-vpc/index.md). - 3. Select the **Management VPC** and click **Download Configuration** according to the type of gateway you have on the Quali Server network side. - - ![](/Images/Admin-Guide/AWS-deployment-type/AWSDeploymentTypeInstallation.png) - - 4. Use the configuration information to configure VPN on the Quali Server network side. -3. Make sure you have an active VPN. -4. To register the Execution Server instances on the Quali Server: - - 1. Log in to your AWS console. - - 2. In the **EC2 Dashboard**, identify the two Execution Server instances associated with the Management VPC created when the Management VPC was created. - - 3. Reboot the Execution Server instances (**es-shells** and **es-commands**): right click the instance and select **Instance State>Reboot**. - - ![](/Images/Admin-Guide/AWS-deployment-type/CloudFormationRebootExecutionServers.png) - -5. Next, [Configure an Execution Server Selector for AWS EC2](./configure-an-execution-server-selector-for-aws-ec2.md). diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/create-a-management-vpc/_category_.json b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/create-a-management-vpc/_category_.json deleted file mode 100644 index 4f189b88e2..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/create-a-management-vpc/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Create a Management VPC and Networks using CloudFormation", - "position": 3 -} diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/create-a-management-vpc/index.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/create-a-management-vpc/index.md deleted file mode 100644 index aacc90bff9..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/create-a-management-vpc/index.md +++ /dev/null @@ -1,145 +0,0 @@ -# Create a Management VPC and Networks using CloudFormation - -The **CloudFormation** service creates the Management VPC, subnet within the Management VPC, and then launches three AWS EC2 instances, two with an execution server and one with QualiX. The execution servers then need to be configured to access the on-prem Quali Server. To set up a deployment where Quali Server is also installed on AWS, see [Integrating AWS with Cloud-based CloudShell Installation](./integrating-aws-with-cloud-based-cloudshell.md). -:::note Important: -We strongly recommend using the new and improved [AWS 2nd Gen shell](https://github.com/orgs/QualiSystems/discussions/1695). If you're using the 1st Gen version of the shell that comes out of the box with CloudShell, see [this version](https://help-archive.quali.com/Online%20Help/2021.1/Portal/Content/Admn/VPC-Crt-Mng-VPC-Ntwrks.htm) of the online help. -::: -**To create a Management VPC and the required networks:** - -1. Make sure you have the information required for this process, as listed in [Required Permissions for AWS Deployment](../required-permissions-for-aws-deployment.md). -2. As an admin, open your AWS management account, search for "cloudformation" and click the **CloudFormation** service. - - ![](/Images/Admin-Guide/AWS-deployment-type/CloudFormationSection.png) - -3. Click the **Create Stack** drop-down list and select **With new resources (standard)**. -4. In the **Create stack** page, specify the appropriate Quali template. There are two template URLs for AWS integration and they are provided in [CloudShell Download Center](https://support.quali.com/hc/en-us/articles/231613247-Quali-s-Download-Center) for each CloudShell release version: - - - **0_Main.yaml**: Deploys the cloud infrastructure that is needed for the deployment type of your choice - internal or external deployments. This includes the management VPC and a peering to your local network's gateway for external deployments where Quali Server is installed locally. In this mode, a sandbox VPC is created for each sandbox. - - - In an internal deployment, the QualiX instance has only a Private IP associated with it. The Private IP is accessible from the networks that are connected to the Management VPC (such as the network in which the Quali Server resides). - - In an external deployment, the QualiX instance has a Public IP associated with it. - - - **3_Shared_VPC.yaml**: Is optionally deployed after the **0_Main.yaml** and enables you to define an existing VPC that will host the cloud infrastructure (instead of creating a new sandbox VPC for each sandbox). Defines the shared VPC's account, IP ranges and transit gateway. For details, see [Create a Shared VPC using CloudFormation](../create-a-shared-vpc-using-cloudformation.md). -5. Click **Next**. -6. In the **Specify Details** page, enter a **Stack name** and fill in the installation parameters. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ParameterDescription
    Network - Determines how the network infrastructure is deployed. Options are: - - - **NAT**: Used for internal deployment, where the QualiX instance has only a Private IP associated with it. This option doesn’t expose a public IP to the internet. This option deploys QualiX and the Execution Servers on AWS while CloudShell is installed on prem and communicates with the AWS stack via VPN. It is also possible to have CloudShell installed on AWS. For details, see [Integrating AWS with Cloud-based CloudShell Installation](./integrating-aws-with-cloud-based-cloudshell.md). - - **Local**: Used for deployments where internet access is provided via the on prem VPN. - - **Public (Elastic IP)**: Used for external deployment, where the QualiX instance has a Public IP associated with it. -
    VPN Attachment - Determines if to create a VPN connection to the on-prem network and how it will be attached to the management VPC. Options are: - - - **Transit gateway**: Connects the VPC to the on-prem network via a central hub. - - **VPC gateway**: Connects the management VPC directly to the on-prem network. - - **No VPN**: Does not create a VPN connection. Use this option if you plan on having CloudShell installed on AWS and don’t need on-prem access. This option does the following: - - Does not create a VPN connection. - - Deploys an empty Windows Server 2019 Full Base instance on AWS on which you will need to manually install CloudShell Server in this instance, as explained in [Integrating AWS with Cloud-based CloudShell Installation](./integrating-aws-with-cloud-based-cloudshell.md). -
    Management VPC CIDR - The IP range (in CIDR notation) to be used for the Management VPC. Select a class C CIDR (/24). - :::note - The Management VPC will be later connected via VPN with your on-premise network so select an IP range that does not conflict with your other networks. - ::: -
    Key PairThe KeyPair to use for all instances that will be created in the Management VPC.
    Instance TypeThe instance type to be used for the execution server and QualiX instances. The minimum recommended instance type is c4.large.
    High Availability Mode - Use this option if you wish to set up AWS integration in High Availability mode. In this mode, the integration will create two additional execution servers, **es-shells-b** and **es-commands-b** that will be used for failover scenarios. - :::note - Before enabling High Availability mode, please take into account that the failover instances will incur additional costs. - ::: -
    VPN Address - The public IP address of the router on the network in which Quali Server resides. - - Leave empty if you set **VPN Attachment** to **No VPN**. -
    On-premise CIDRThe IP range (in CIDR notation) of the private network in which the Quali Server resides (outside of the management VPC).
    Enhanced S3 Bucket SecuritySelect True to enable this option to encrypt and block public access from the S3 bucket.
    - Configure the execution servers (created by the CloudFormation process) to work with the Quali Server: - - Leave the below parameters empty if you set **VPN Attachment** to **No VPN** and **Network** to **Public (Elastic IP)**. -
    CloudShell Server IPThe IP Address of the Quali Server
    CloudShell UsernameThe CloudShell admin user
    CloudShell PasswordThe CloudShell admin password
    - - For example: - - ![](/Images/Admin-Guide/AWS-deployment-type/CloudFormationInstallParams.png) - -7. Click **Next**. -8. In the **Options** page, click **Next**. - -9. In the **Review** page, at the bottom, select the **I acknowledge that AWS CloudFormation might create IAM resources** check box. -10. Click **Create**. - - The stack is created. - - If stack creation fails with the below subscription error, make sure to subscribe to the CentOS 7 [Marketplace image](https://aws.amazon.com/marketplace/pp/B00O7WM7QW) and try again. - - ![](/Images/Admin-Guide/AWS-deployment-type/AWSSubscriptionError.png) - -11. Note the **Outputs** tab at the bottom of the page. You will need this information when you [Add an AWS EC2 Cloud Provider Resource](../add-an-aws-ec2-cloud-provider-resource.md). - - ![](/Images/Admin-Guide/AWS-deployment-type/CloudFormationStack.png) - -12. In the **VPC Dashboard**, open **VPN Connections** to see the VPN connection settings: - - ![](/Images/Admin-Guide/AWS-deployment-type/CloudFormationVPNConnections.png) - -13. Next, do one of the following: - - If you want to set up a shared VPC integration in which AWS EC2 Apps are deployed to an existing VPC on AWS: [Create a Shared VPC using CloudFormation](../create-a-shared-vpc-using-cloudformation.md). - - If Quali Server is installed in your on-prem network: [Connect the Management VPC to Quali Server](../connect-the-management-vpc-to-quali-server.md). - - If Quali Server is also on AWS: [Configure an Execution Server Selector for AWS EC2](../configure-an-execution-server-selector-for-aws-ec2.md). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/create-a-management-vpc/integrating-aws-with-cloud-based-cloudshell.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/create-a-management-vpc/integrating-aws-with-cloud-based-cloudshell.md deleted file mode 100644 index 532f12269a..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/create-a-management-vpc/integrating-aws-with-cloud-based-cloudshell.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Integrating AWS with Cloud-based CloudShell Installation - -It is possible to set up an AWS integration where CloudShell is Server is also installed on AWS. - -The process is as follows - -1. Deploy the **Main.yaml** CloudFormation template. For details, see [Create a Management VPC and Networks using CloudFormation](../create-a-management-vpc/index.md). - - :::note Important: - - Make sure the **Network** parameter is set to either **NAT** or **Public**. - - If you're deploying a public network, make sure **VPN Attachment** is not set to **No VPN**. - ::: -2. From AWS Marketplace, deploy a **Windows Server 2019 English Full Base** instance called **cloudshell-server** that is connected to the Execution Servers subnet. -3. In the instance's security group, set a rule to allow inbound RDP connections over IPv4 - see this [article](http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/authorizing-access-to-an-instance.html) for official instructions. -4. Log in to the Windows Server 2019 instance using Remote Desktop. To get the password, in the **EC2 Dashboard**, right-click the instance and select **Connect**, click **Get Windows Password**, browse to the keypair file you used in CloudFormation and select **Decrypt**. -5. On the instance, install the CloudShell suite that matches the CloudFormation template you are using. Make sure you install an execution server on this machine and configure it to run all sandbox orchestration scripts. For details, see [Controlling execution server selection for blueprint commands](../../../../../cloudshell-execution-server-configurations/setting-up-execution-servers-to-run-commands.md#controlling-execution-server-selection-for-blueprint-commands). -6. Stop and start the **es-shells** and **es-commands** instances to allow the execution servers to register Quali Server. -7. If for whatever reason they didn't register, manually connect each execution server to the CloudShell Server, as explained in [Connecting the Execution Server to Quali Server](../../managing-aws-ec2-execution-servers.md#connecting-the-execution-server-to-quali-server). -8. In CloudShell Portal, in the **Manage** dashboard, open the **Execution Servers>Servers** page and make sure the two execution servers registered successfully and are online. diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/create-a-shared-vpc-using-cloudformation.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/create-a-shared-vpc-using-cloudformation.md deleted file mode 100644 index 41c13db5ad..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/create-a-shared-vpc-using-cloudformation.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Create a Shared VPC using CloudFormation - -The Shared VPC option is supported in the AWS 2G shell and enables you to deploy sandboxes to an existing VPC. - -**Prerequisites:** - -- Successfully deployed **0_Main.yaml** stack - -**To create a Shared VPC:** - -1. Add a principal for the **TGW Share** resource share. - - 1. As an admin, open your AWS management account. - 2. Open the **Resource Access Manager** dashboard. - 3. Click the **TGW Share** resource share. - - ![](/Images/Admin-Guide/AWS-deployment-type/ResourceAccessManager1.png) - - 4. Click **Modify**. - - ![](/Images/Admin-Guide/AWS-deployment-type/ResourceAccessManager2.png) - - 5. Click **Next**. - 6. Add the AWS account ID of the shared account and click **Next**. - - ![](/Images/Admin-Guide/AWS-deployment-type/ResourceAccessManager3.png) - - 7. Update the resource share. -2. Create the CloudFormation stack. - 1. Click **Management Tools>CloudFormation**. - - ![](/Images/Admin-Guide/AWS-deployment-type/CloudFormationSection.png) - - 2. As an admin, open the AWS account that will contain the shared VPC. - 3. Click the **Create Stack** button. - 4. In the **Select Template** page, select the **Specify an Amazon S3 template URL** option and enter the **3_Shared_VPC.yaml** template's URL. The template URLs are provided in [CloudShell Download Center](https://support.quali.com/hc/en-us/articles/231613247-Quali-s-Download-Center) for each CloudShell release version. - 5. Click **Next**. - 6. In the **Specify Details** page, enter a **Stack name** and fill in the installation parameters. - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ParameterDescription
    Shared VPC CIDR - VPC CIDR for the shared VPC. Default is 10.1.0.0/16. - :::note Important: - We strongly recommend to use a "/16" CIDR range. A smaller range will force you to specify subnet ranges for every new sandbox and may dramatically decrease the number of sandboxes you can have running at the same time. - ::: -
    Default Subnet CIDR - Default CIDR to be used by CloudShell. This CIDR range must be included in the defined VPC CIDR. Default is 10.1.254.0/24. - :::note - CloudShell cannot differentiate between this CIDR and the VPC CIDR, which can cause overlap. To avoid this from happening, we recommend specifying a limited default subnet CIDR. For example, "10.1.254.0/24” or "10.1.253.0/24”. - ::: -
    VPN AddressThe public IP address of the router on the network in which Quali Server resides.
    Transit Gateway IDCreated by the deployment of the management VPC. To find the transit gateway ID, open the main CloudFormation stack , click the **Outputs** tab and copy the **TGWid** value.
    Execution Server Role ARNCreated by the deployment of the management VPC. To find the role ARN, open the main CloudFormation stack , click the **Outputs** tab and copy the **ESRoleArn** value.
    - - For example: - - ![](/Images/Admin-Guide/AWS-deployment-type/SharedVPCInstallationParams.png) - - 1. Click **Next**. - 2. In the **Options** page, click **Next**. - 3. In the **Review** page, at the bottom, select the **I acknowledge that AWS CloudFormation might create IAM resources** check box. - 4. Click **Create**. - - The stack is created. - -1. Modify the Execution Server role ARN. - 1. As an admin, open your AWS management account. - 2. In the **CloudFormation** dashboard, click the main stack (bearing the stack name followed by "-VPCNAT. For example, my-stack-VPCNAT-2JDLSJ32D4LC). - 3. Click the **Resources** tab and click the **ESRole**'s physical ID. - 4. Click **CloudShell_EC2Access**. - 5. Click **Edit Policy**. - 6. Switch to the JSON tab and add the following statement for each shared VPC you deployed: - - ```javascript - { - "Effect": "Allow", - "Action": "sts:AssumeRole", - "Resource": "" - }, - ``` - - For example: JSON defining two shared VPCs: - - ![](/Images/Admin-Guide/AWS-deployment-type/SharedVPCJson.png) - - 7. Replace "\" with the shared role ARN. To find the shared VPC role ARN, open your AWS account in a new browser tab, open the shared VPC CloudFormation stack , click the **Outputs** tab and copy the **SharedVpcRoleArn** value. - 8. Click **Review policy** and then **Save changes**. -2. Next, do one of the following: - - If Quali Server is installed in your on-prem network: [Connect the Management VPC to Quali Server](./connect-the-management-vpc-to-quali-server.md). - - If Quali Server is also on AWS: [Configure an Execution Server Selector for AWS EC2](./configure-an-execution-server-selector-for-aws-ec2.md). diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/index.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/index.md deleted file mode 100644 index 63f53ede71..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/index.md +++ /dev/null @@ -1,80 +0,0 @@ -# AWS Integration - -The AWS deployment type integrates CloudShell with the AWS public cloud. This integration enables the deployment of CloudShell Apps in AWS. CloudShell supports deploying AWS instances from AMI (Amazon Machine Image) images. - -CloudShell supports three infrastructure deployment modes: - -- **Dedicated VPC** mode: (Default) CloudShell deploys a new VPC and subnet(s) for each sandbox and deletes that VPC and related cloud resources when the sandbox ends. This mode is provided with CloudShell via the out-of-the box AWS shell. For details, - - The following diagram illustrates an AWS integration (with a local CloudShell installation) hosting two live sandboxes: - - ![](/Images/Admin-Guide/AWS-deployment-type/AWS-architecture.png) - - -- **Shared VPC** mode: CloudShell deploys the sandbox to an existing VPC. When the sandbox ends, the sandbox-deployed cloud resources such as subnets, instances and security groups are deleted from the cloud while the VPC remains. For details, - - :::note Notes about Shared VPC: - - This mode is supported by the AWS EC2 2G shell, which needs to be downloaded separately from [Quali Repositories](https://github.com/orgs/QualiSystems/discussions/categories/integrations). - - Applies to sandboxes based on AWS cloud provider resources that are configured to use Shared VPC mode. - - - New subnet(s) are created in the shared VPC for each sandbox and deleted when the sandbox ends. - - - CloudShell creates 2 dedicated security groups per sandbox, which are used to isolate AWS instances from instances of other sandboxes. - - - Shared VPCs can reside in different AWS accounts and different regions. - ::: - The following diagram illustrates an AWS integration with two different accounts, where each account has a shared VPC with live sandboxes: - - ![](/Images/Admin-Guide/AWS-deployment-type/AWS-Architecture---Shared-mode.png) - -- **Single** (Management VPC): CloudShell deploys the sandbox in the Management VPC, which was deployed as part of CloudShell's CloudFormation stack. - -The deployment architecture in AWS requires a **Management VPC** to be created for each relevant AWS region. The Management VPC has 4 instances, which are always on: - -- QualiX: QualiX Server used to enable in-browser RDP, Telnet and SSH access to Apps in the sandbox. -- Execution Servers: Two Execution Servers named **es-shells** and **es-commands** are deployed in the region and for High Availability Mode, an additional two fallback execution servers are deployed named **es-shells-b** and **es-commands-b**. - - **es-shells**: Execution server to be used for the deployment and management of the AWS instances. This execution server has access to AWS API and is associated with an AWS IAM role. - - **es-commands**: Execution server to be used for running scripts and commands on the AWS instances. This execution server is associated with an empty AWS IAM role. -- **NAT**: (Created in integrations where Quali Server IS NOT installed on AWS) Network address translation instance that enables internally deployed AWS instances to initiate outbound traffic to the Internet or other AWS services, while preventing the AWS instances from receiving inbound traffic from the Internet. Do not touch this instance. -- **cloudshell-server**: Created when deploying a public Main CloudFormation template without VPN. It's the user's responsibility to install Quali Server on this instance. For details, see [Integrating AWS with Cloud-based CloudShell Installation](../../aws-integration-and-configuration/aws-integration/create-a-management-vpc/integrating-aws-with-cloud-based-cloudshell.md). -:::note -Keeping these instances running at all times entails a fixed monthly rate. -::: -Both the **es-shells** and **es-commands** execution servers in the Management VPC need to access the Quali Server, which is located outside of the Management VPC (on-premise, another AWS VPC or another public cloud). To allow this access, you need to configure a VPN between the Management VPC and the network in which the Quali Server resides. - -When a new CloudShell sandbox with AWS EC2 Apps is starting, the out-of-the-box setup process creates a new VPC with a subnet in it (in shared mode, the sandbox subnet is created in an existing VPC defined in the AWS cloud provider resource). All AWS EC2 Apps within the same sandbox are deployed in this sandbox subnet (within the Sandbox VPC). This architecture allows both QualiX Server and the execution servers to access the Apps in the sandbox while keeping the Apps within one sandbox isolated from Apps in other sandboxes. Note that up to 255 AWS EC2 Apps may be deployed in a single sandbox. - -In dedicated VPC mode, the sandbox VPC is connected to the Management VPC using a VPC Peering connection. In shared VPC mode, there is no peering between the management VPC and shared VPC, and communication is done via a static transit gateway, which acts like a router between the different VPCs. - -:::note Notes: -- AWS EC2 Apps in the same sandbox are actually on the same subnet and VPC, and can interact with each other. -- CloudShell allows sandboxes to have multiple subnets. See [Subnet Connectivity](../../../../setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/index.md). -- When the sandbox ends, the Sandbox VPC along with all its components (the subnets, the App instances and the VPC Peering) are automatically deleted by CloudShell. In Shared VPC mode, the sandbox subnets and instances are deleted but the VPC infrastructure remains. -- In dedicated mode, when the sandbox ends, the Sandbox VPC along with all its components (subnets, App instances and the VPC peering) are automatically deleted by CloudShell. In shared mode, the subnets and App instances are deleted but the shared VPC remains. -- Amazon API enables you to retrieve a sandbox's VPC name using the **ReservationId** tag with the sandbox's ID. This can be used, for example, in real-time automation processes. -::: -## AWS installation workflow - -For each AWS region you want to integrate with CloudShell, perform the following steps: - -1. [Create a Management VPC and Networks using CloudFormation](./create-a-management-vpc/index.md) - - In order to deploy a shared VPC integration where CloudShell sandboxes are deployed to an existing VPC, you need to also create a Shared VPC stack to define the AWS account and shared VPC to use, as explained in [Create a Shared VPC using CloudFormation](./create-a-shared-vpc-using-cloudformation.md). - -2. [Connect the Management VPC to Quali Server](./connect-the-management-vpc-to-quali-server.md) -3. [Configure an Execution Server Selector for AWS EC2](./configure-an-execution-server-selector-for-aws-ec2.md) -4. [Add an AWS EC2 Cloud Provider Resource](./add-an-aws-ec2-cloud-provider-resource.md) - - For shared VPC mode, make sure to also configure the shared VPC parameters on the cloud provider resource. - -5. [Add an AWS EC2 App Template](./add-an-aws-ec2-app-template.md) -6. [Configure the Qualix Server for AWS EC2](./configure-the-qualix-server-for-aws-ec2.md) - -## Related Topics - -- [AWS Regions Supported by CloudShell](./aws-regions-supported-by-cloudshell.md) -- [Required Permissions for AWS Deployment](./required-permissions-for-aws-deployment.md) -- [Managing Public Cloud Apps in Domains](../../managing-public-cloud-apps-in-domains.md) -- [Cost Management of AWS EC2 Instances](../cost-management-of-aws-ec2-instances.md) -- [Managing AWS EC2 Execution Servers](../managing-aws-ec2-execution-servers.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/required-permissions-for-aws-deployment.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/required-permissions-for-aws-deployment.md deleted file mode 100644 index 7eaa801ce1..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/aws-integration/required-permissions-for-aws-deployment.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Required Permissions for AWS Deployment - -Before creating the management VPC and networks, make sure you have the following: - -- Admin user with permissions to the following services: - - - EC2 - - VPC - - CloudFormation - - S3 - - IAM - - AWSLambda_FullAccess - -- When creating the stack for the first time, the AWS account must be subscribed to the CentOS 7 [Marketplace image](https://aws.amazon.com/marketplace/pp/B00O7WM7QW). -- VPN address: Public IP address to your router -- Keypair on AWS: New or existing keypair to be used during the CloudFormation process -- On Premise CIDR: IP address range of a network behind the router -- VPC CIDR: Range of available IP addresses to be allocated to AWS EC2 VMs deployed by CloudShell \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/cost-management-of-aws-ec2-instances.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/cost-management-of-aws-ec2-instances.md deleted file mode 100644 index d4d91a388f..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/cost-management-of-aws-ec2-instances.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Cost Management of AWS EC2 Instances - -To assist with your AWS EC2 cost management activities, AWS EC2 resources that are created by CloudShell Apps include the following tags: **Blueprint**, **CreatedBy**, **Domain**, **Name**, **Owner**, and **ReservationId**. -:::note Important -These tags should not be altered as this may cause unexpected behavior and inaccurate AWS budget reports. -::: -For example: - -![](/Images/Admin-Guide/AWS-deployment-type/AWSTags.png) - -## Creating budgets - -Budgets are your way to manage your CloudShell AWS costs. Here are a few examples of how to use CloudShell tags in your budget: - -- For a general budget, select the **CreatedBy** tag with the **CloudShell** value, and specify an amount. -- To limit specific users, select the **Owner** tag and specify the owner for whom to create a budget. -- To limit the number of times a blueprint can be reserved, select the **Blueprint** tag and select a specific blueprint. -- To limit the number of AWS instances that can be created per domain, select the **Domain** tag and select a certain domain. - -For additional information on creating a budget, see [CloudShell AWS Cost Management](https://github.com/orgs/QualiSystems/discussions/289) on our Community forum. diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/index.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/index.md deleted file mode 100644 index e9e9fed565..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/index.md +++ /dev/null @@ -1,13 +0,0 @@ -# AWS Integration and Configuration - -To enable CloudShell Apps to deploy virtual machines in AWS, the system administrator needs to integrate AWS with CloudShell, and associate each App template with the domain of the CloudShell cloud provider resource the admin created during the integration process. To manage AWS costs, the system administrator can set up budgeting limits for CloudShell-created AWS resources such as instances. - -:::note Important -AWS elements created by CloudShell should not be altered as this may cause unexpected behavior. -::: - -## Related Topics - -- [AWS Integration](./aws-integration/index.md) -- [Managing Public Cloud Apps in Domains](../managing-public-cloud-apps-in-domains.md) -- [Cost Management of AWS EC2 Instances](../aws-integration-and-configuration/cost-management-of-aws-ec2-instances.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/managing-aws-ec2-execution-servers.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/managing-aws-ec2-execution-servers.md deleted file mode 100644 index 239cbbb00b..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/aws-integration-and-configuration/managing-aws-ec2-execution-servers.md +++ /dev/null @@ -1,160 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Managing AWS EC2 Execution Servers - -The CloudShell CloudFormation process installs two Execution Servers on the AWS EC2 region - **es-shells** and **es-commands**. - -## Support - -- The Execution Servers are installed on Centos 7 instances (CentOS 7.2 and up). -- The Execution Servers come with Python 2.7 and 3 installed and configured out of the box. - -## Accessing the Execution Server instances - -- Use username "centos” and the key used during the CloudFormation deployment. - -## Connecting the Execution Server to Quali Server - -This procedure is required if Quali Server is also installed on AWS. - -- Log in to the Execution Server machine and follow the instructions in [Configure the Linux Execution Server](../../../../install-configure/linux-virtual-appliance/post-installation/configure/index.md). - -## Execution Server logs - -Execution Server logs reside at: - -- `/opt/ExecutionServer/logs` -- `/var/log/qualisystems/` - -## Performing maintenance operations on an Execution Server - -Do the following if you need to perform any maintenance operations on the Execution Server, such as updating the Execution Server version of setting `customer.config` keys: - -1. Stop the Execution Server service by running the following command: - - ```python - sudo systemctl stop es - ``` - -2. Perform the maintenance operations. -3. Start the Execution Server service by running the following command: - - ```python - sudo systemctl start es - ``` - - -## Installing a new Execution Server - -Follow this procedure to install a new Execution Server from scratch. To upgrade an existing Execution server, scroll down to the next section. - -1. From [Quali’s Download Center](https://support.quali.com/hc/en-us/articles/231613247-Quali-s-Download-Center?flash_digest=3f2ece71dadb98bf640f295d5812eb5e8aedb9a7), download the **Linux Execution Server** installation script to your local machine. - -2. In the **EC2 Dashboard**, launch an instance, select the latest **CentOS 7** instance type. - - The **Choose an Instance Type** page is displayed. - -3. At the bottom of the page, click **Next: Configure Instance Details**. -4. In the **Advanced Details** area, select **As text** and paste the **Linux Execution Server** installation script's contents. - - For example: - - ```python - curl [InstallScript] --output cloudshell_es_install_script.sh --retry 20 -s –S - chmod +rwx ./cloudshell_es_install_script.sh - sed -i -e 's/\r$//' ./cloudshell_es_install_script.sh - ./cloudshell_es_install_script.sh [CloudShellServerIP] [CloudShellServerAdmin] [CloudShellServerAdminPassword] [ExecutionServerName] - ``` - -5. Update the CloudShell Server and administrator credentials. - - For example (script for CloudShell 9.0): - - ```python - curl https://s3.amazonaws.com/quali-prod-binaries/9.0.0-180/ES/cloudshell_es_install_script.sh --output cloudshell_es_install_script.sh --retry 20 -s –S - chmod +rwx ./cloudshell_es_install_script.sh - sed -i -e 's/\r$//' ./cloudshell_es_install_script.sh - ./cloudshell_es_install_script.sh 192.168.42.132 admin admin es-shells - ``` - - :::note Notes - - If the Execution Server VM does not have an internet connection, make sure the OfflinePackageRepository zip file is extracted to the local PyPi Server repository. For details, see [Add the out-of-the-box dependencies package to the local PyPi Server repository](../../../cloudshell-execution-server-configurations/setting-up-python-virtual-environments/configuring-cloudshell-to-execute-python-commands-in-offline-mode.md#add-the-out-of-the-box-dependencies-package-to-the-local-pypi-server-repository). - - Quali Server must be running when configuring the Execution Server. - - Depending on your flavor of Linux, you may need to escape parameter values containing special characters with single or double quotes. For example: `"admin1234!"` - ::: - -6. Launch the instance. - -## Upgrading an existing Execution Server - -There are two ways to upgrade an AWS Execution Server: - -- Upgrade to a GA version (by spinning up a new instance and installing the Linux Execution Server installation script installation script that installs the updated Execution Server) -- Upgrade to a non-GA patch version (by replacing configuration DLLs) - -**To upgrade to a GA version:** - -1. SSH to the VM. -2. Stop the Execution Server service by running the following command: - - ```python - sudo systemctl stop es - ``` - -3. Run the following script (set the appropriate values): - - ```python - curl [InstallScript] --output cloudshell_es_install_script.sh --retry 20 -s -S - chmod +rwx ./cloudshell_es_install_script.sh - sed -i -e 's/\r$//' ./cloudshell_es_install_script.sh - ./cloudshell_es_install_script.sh [CloudShellServerIP] [CloudShellServerAdmin] [CloudShellServerAdminPassword] [ExecutionServerName] - ``` - - For example: - - ```python - curl https://s3.amazonaws.com/quali-prod-binaries/8.3-168734/ES/cloudshell_es_install_script.sh --output cloudshell_es_install_script.sh --retry 20 -s -S - chmod +rwx ./cloudshell_es_install_script.sh - sed -i -e 's/\r$//' ./cloudshell_es_install_script.sh - ./cloudshell_es_install_script.sh 192.168.42.132 admin admin es-shells - ``` - - :::note Notes - - If the Execution Server VM does not have an internet connection, make sure the OfflinePackageRepository zip file is extracted to the local PyPi Server repository. For details, see [Add the out-of-the-box dependencies package to the local PyPi Server repository](../../../cloudshell-execution-server-configurations/setting-up-python-virtual-environments/configuring-cloudshell-to-execute-python-commands-in-offline-mode.md#add-the-out-of-the-box-dependencies-package-to-the-local-pypi-server-repository). - - Quali Server must be running when configuring the Execution Server. - - Depending on your flavor of Linux, you may need to escape parameter values containing special characters with single or double quotes. For example: `"admin1234!"` - ::: - -4. Start the Execution Server service by running the following command: - - ```python - sudo systemctl start es - ``` - :::tip - The Execution Server service name was changed from **qa_execution_server** to **es** in version 8.3. - ::: - -**To upgrade to a patch version:** - -1. Open the CloudShell patch package. -2. Go to the `~\CloudShell \Data\ExecutionServer\Qualisystems\TestShell\ExecutionServer` folder. For example: - - ![](/Images/Admin-Guide/CloudShellPackageForCloudProviders.png) - -3. Select all contents in the folder and create a tar archive. -4. Copy the tar file to the `/temp` folder in the **Execution Server** instance. -5. SSH to the instance. -6. Stop the Execution Server service by running the following command: - - ```python - sudo systemctl stop es - ``` - -7. Extract the tar file to `/opt/ExecutionServer`, overriding any existing files. -8. Start the Execution Server service by running the following command: - - ```python - sudo systemctl start es - ``` diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/index.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/index.md deleted file mode 100644 index 36dee5ac92..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/index.md +++ /dev/null @@ -1,10 +0,0 @@ -# Public Cloud Provider Support in CloudShell - -In order to allow CloudShell Apps to deploy and manage virtual machines in a public cloud provider such as AWS or Azure in CloudShell, the system administrator needs to perform several configurations. These include setting up a CloudShell management network on the cloud provider, a VPN connection to enable communication between CloudShell and the cloud provider, and a CloudShell "cloud provider resource", which provides the cloud provider's network, storage and access settings to the CloudShell Apps. - -In addition, CloudShell tags are attached to all CloudShell-created elements in the cloud provider. You can use these tags to analyze, filter and manage costs associated with your CloudShell activities. - -## Related Topics - -- [AWS Integration](./aws-integration-and-configuration/aws-integration/index.md) -- [Microsoft Azure Integration](./microsoft-azure-integration-and-configuration/microsoft-azure-integration/index.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/managing-public-cloud-apps-in-domains.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/managing-public-cloud-apps-in-domains.md deleted file mode 100644 index 5c95c386ed..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/managing-public-cloud-apps-in-domains.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Managing Public Cloud Apps in Domains - -*The procedures in this article apply to Apps hosted on a public cloud provider, like AWS EC2 or Azure. For private cloud Apps like vCenter, see [Managing Private Cloud Apps in Domains](./managing-public-cloud-apps-in-domains.md).* - -CloudShell does not support the deployment of public cloud Apps on different cloud regions in the same sandbox. It is therefore required to include (in a blueprint or sandbox) only Apps with an active deployment path that is associated to a single cloud provider resource. A warning is displayed if this design guideline is not kept. - -In this process, you will configure the App's deployments to be carried out by the execution server(s) installed on the public cloud provider's region. This is done by associating the cloud provider and App to the domain, and associating the appropriate execution server to the cloud provider resource and to the shell that defines the deployed App. Technically, this requires specifying a value in the execution server's **Execution Server Selector** attribute, and setting that value in the cloud provider resource and deployed App shell. *Note that resource association to a domain makes sure that users use cloud providers allocated to their domains, while assigning the Execution Server Selector ensures that the actual drivers will run next to the cloud provider to reduce latency and improve performance.* - -CloudShell supports two public cloud providers out-of-the-box, AWS EC2 and Azure. In AWS EC2, we use two execution servers: **es-shells** deploys the instances on AWS and therefore needs to be associated to the cloud provider resource, and **es-commands** runs scripts and commands on the AWS instances and needs to be associated to the shell of the deployed Apps. In Azure, since the authentication mechanism works a bit differently, we use one execution server called **Execution-Server-VM** that needs to be associated to both the cloud provider resource and deployed App shell. - -For illustration purposes, we will configure an AWS App in this article. - -This is a five step process: - -1. Decide which CloudShell domain to associate to the public cloud region -2. [Set the execution server's selector attribute](./managing-public-cloud-apps-in-domains.md#set-the-execution-servers-selector-attribute) -3. [Create a cloud provider resource in the required domain](./managing-public-cloud-apps-in-domains.md#create-a-cloud-provider-resource-in-the-required-domain) -4. [Configure the Execution Server to support Ansible operations](./managing-public-cloud-apps-in-domains.md#configure-the-execution-server-to-support-ansible-operations) -5. [Associate the public cloud App to the domain](./managing-public-cloud-apps-in-domains.md#associate-the-public-cloud-app-to-the-domain) -:::important -Before you begin, make sure CloudShell has been configured on the required public cloud region. See [AWS Integration](./aws-integration-and-configuration/aws-integration/index.md) or [Microsoft Azure Integration](./microsoft-azure-integration-and-configuration/microsoft-azure-integration/index.md). -::: -## Set the execution server's selector attribute - -This procedure explains how to prepare the execution server to deploy the Apps. The **Execution Server Selector** attribute must have the **Execution Server Selector** rule enabled. - -**To associate an execution server to the domain:** - -1. In CloudShell Portal, click **Manage**. - - The **Manage** dashboard is displayed. - -2. In the left sidebar, click **Execution Servers**. - -3. In the left pane, under **Execution Servers**, click **Servers**. - - The execution server list is displayed. - -4. Click the name of the appropriate execution server. Note that this execution server is installed on the cloud provider itself. - - The **Attributes** dialog box is displayed. - -5. Select the **Execution Server Selector** check box and specify a value. For example, ES1: - - ![](/Images/CloudShell-Portal/Manage/AddAttributeOnES.png) - - For AWS EC2 Apps, perform these steps twice, once for the **es-shells** execution server and again for the **es-commands** execution. Specify a different value on each execution server. For illustration purposes, we'll set "ES1" as the value on **es-shells** and "ES2" as the value on **es-commands**. - -6. Click **Done**. -7. Repeat these steps to associate additional execution servers to the domain. - -## Create a cloud provider resource in the required domain - -**To set the cloud provider resource to the domain:** - -1. As system administrator, log in to CloudShell and select the required domain. -2. Create the cloud provider resource, as explained in [Adding AWS EC2 Cloud Provider Resource](../../../portal/inventory/managing-resources/adding-inventory-resources/adding-aws-cp.md) and [Adding Microsoft Azure Cloud Provider Resource](../../../portal/inventory/managing-resources/adding-inventory-resources/adding-azure-cp.md). - -3. In the **Region** attribute, enter the public cloud's region that is relevant for the current domain. - - For example, AWS EC2 resource with a **Region** selected: - - ![](/Images/CloudShell-Portal/Manage/ExecutionServerAppTemplate3.png) - -4. In the **Execution Server Selector** attribute, specify the value you set in the Execution Server Selector attribute on the appropriate execution server (**es-shells** for AWS ES2 - "ES1" in our case). -5. Complete the resource creation process. - -## Configure the Execution Server to support Ansible operations -:::note -This section is only required for Ansible configuration management. -::: -To use Ansible to install and configure applications on Apps, the system administrator needs to perform several configurations on the Linux-based Execution Server that will be used to run the Ansible operations on the App's deployed VMs. For additional information, see [Ansible Playbook Development for Apps](../../../devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/). - -## Associate the public cloud App to the domain - -To make the App available to members of specific domains, in the App template, select the cloud provider resource with the required region and associate the domain categories to the App. - -**To associate an App to a domain:** - -1. In the **Manage** dashboard, in the left sidebar, click **Apps**. - - The **Apps** page is displayed. - -2. Create a new App or edit an existing one, as explained in [Managing App Templates](../../cloudshell-manage-dashboard/manage-app-templates/index.md). - - The App's configuration wizard is displayed. - -3. To make the App available to members of this domain, from the **Categories** dropdown list, select the categories associated to the domain. For details about creating domain categories, see [Managing domain categories](../../cloudshell-manage-dashboard/managing-categories.md#managing-domain-categories). - - For example, Testing NY: - - ![](/Images/CloudShell-Portal/Manage/ExecutionServerAppTemplate1.png) - -4. If this is a new App, in the **Deployment Paths** page, create a deployment path for the cloud provider. Make sure to select the cloud provider resource you created in the required CloudShell domain. -5. In the **App Resource** page, in the **Execution Server Selector** attribute, specify the value you set in the **Execution Server Selector** attribute on the appropriate Execution Server. For AWS EC2 Apps that have a custom shell driver, specify the value on the **es-commands** Execution Server ("ES2" in our case). - :::note - If the **Execution Server Selector** attribute is missing, ask the system administrator to associate it with the deployed App's resource model in **Resource Manager Client**. By default, the **Generic App Model** model is used. - ::: - ![](/Images/CloudShell-Portal/Manage/ExecutionServerSelectorAWSAppTemplate.png) - -6. Click **Done**. - -## Related Topics - -- [Manage Dashboard Overview](../../cloudshell-manage-dashboard/manage-dashboard-overview.md) -- [Managing App Templates](../../cloudshell-manage-dashboard/manage-app-templates/index.md) -- [Apps Overview](../../../intro/features/apps-overview.md) diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/_category_.json b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/_category_.json deleted file mode 100644 index 641625c0f5..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Microsoft Azure Integration and Configuration", - "position": 2 -} diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/azure-known-limitations.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/azure-known-limitations.md deleted file mode 100644 index 0285b8339a..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/azure-known-limitations.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Azure Known Limitations - -For up to date Azure limitations, see the official [Microsoft Azure doc](https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits). - -- **Limit for Network Security Groups (NSG)**: 5000. CloudShell uses 2 NSGs for the QualiX and Execution Server VMs. -- **Concurrent public IP addresses (dynamic)**: 1000 for Basic. Contact Azure support to increase the limit. -- **Concurrent public IP addresses (static)**: 1000 for Basic / 200 for Standard. Contact Azure support to increase the limit. -- **NSG rules per NSG**: 1000. An average of 2 rules are used per App. -- **Core quota**: Default is 30 per region / maximum is 10K. Contact support to increase the quota. -- **Number of storage accounts per subscription**: 250. Maximum number of sandboxes is 249 (one storage account is always used for management activity). -- **Concurrent sandboxes**: 249 -- **Extension scripts**: Extension scripts must be uploaded to a public location by the App designer, while in **Azure Portal** the user only needs to browse for the file and Azure will save it somewhere accessible to the VM. diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/cost-management-of-microsoft-azure-resources.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/cost-management-of-microsoft-azure-resources.md deleted file mode 100644 index 45546a6196..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/cost-management-of-microsoft-azure-resources.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Cost Management of Microsoft Azure Resources - -To assist with your Microsoft Azure cost management activities, Microsoft Azure resources, such as subnets, virtual machines and VNets, which are created by CloudShell Apps include the following tags: **Blueprint**, **CreatedBy**, **Domain**, **Name**, **Owner**, and **SandboxId**. -:::note Important: -These tags should not be altered as this may result in inaccurate usage data reports. -::: -## Download usage data from the Azure billing center - -This procedure explains how to download an Azure subscription’s usage data from the Azure billing center. The data is provided in a CSV file. - -**To download Microsoft Azure usage data:** - -1. Sign in to the [Microsoft Azure Account Center](https://account.windowsazure.com/subscriptions?correlationId=00000000-0000-0000-0000-000000000000) using your Microsoft account or Organizational ID. -2. Click the required subscription. -3. Specify the desired period. -4. From the **Download Usage** drop down list, select **Version 2 - Preview**. The Version 2 CSV file contains the updated terminology and user tags required to properly filter Azure resources. - - ![](/Images/Admin-Guide/Azure-deployment-type/BillingCurrentPeriod.jpg) - - A CSV file detailing the subscription’s usage data is downloaded. - - -## Filter usage data - -In the CSV file, the subscription’s usage data is arranged in 3 tables: - -- **Provisioning Status** – General information regarding subscriptions -- **Statement** – Summary and payments amounts -- **Daily Usage** - Detailed information regarding resource usage - -The **Daily Usage** table displays CloudShell custom tags attached to CloudShell elements created in Azure. Here are a few examples of how to use CloudShell tags in your budget: - -- For a general budget, filter by the **CreatedBy** tag with the **CloudShell** value, and specify an amount. -- For information regarding specific users, filter by the **Owner** tag and specify the owner for whom to create a budget. - :::note - The report includes sandbox owners only. Permitted users who modified existing sandboxes are not included. - ::: -- For information regarding the number of times a blueprint can be reserved, select the **Blueprint** tag and select a specific blueprint. -- For information regarding the number of Azure virtual machines that can be created per domain, select the **Domain** tag and select a certain domain. - - -For example: - -![](/Images/Admin-Guide/Azure-deployment-type/BillingTags.png) - -For additional information on Azure billing and setting up billing alerts, see [Understand your bill for Microsoft Azure](https://docs.microsoft.com/en-us/azure/billing/billing-understand-your-bill) and Set up billing alerts for your [Microsoft Azure subscriptions on the official Microsoft Documentation](https://docs.microsoft.com/en-us/azure/billing-set-up-alerts). - -Advanced billing options are available using the Microsoft Azure API and other 3rd party tools. diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/custom-routing-for-azure-in-sandboxes.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/custom-routing-for-azure-in-sandboxes.md deleted file mode 100644 index 4c6eb6ef28..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/custom-routing-for-azure-in-sandboxes.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Custom Routing for Azure in Sandboxes - -CloudShell supports the creation of custom routes in Azure sandboxes, allowing you to force communication from any subnet(s) to go through any specific IP(s). For example, you can have traffic go through a firewall or VPN connection. - -To do this, you need to add to your blueprint a blueprint or custom setup script that will tell the Azure cloud provider resource to define the custom routing. - -For instructions and implementation examples, see [Custom Routing for Azure Apps](./custom-routing-for-azure-in-sandboxes.md) in the CloudShell Dev Guide chapter. diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/index.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/index.md deleted file mode 100644 index e53e8a5654..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/index.md +++ /dev/null @@ -1,17 +0,0 @@ -# Microsoft Azure Integration and Configuration - -To enable CloudShell Apps to deploy virtual machines in Microsoft Azure, the system administrator needs to integrate Azure with CloudShell, associate each App template with the domain of the CloudShell cloud provider resource the admin created during the integration process. You can also track the cost of your CloudShell activity on Azure using CloudShell tags that are attached to all Azure resources created by CloudShell, such as virtual machines and VNets. - -:::note Important -Azure elements created by CloudShell should not be altered as this may cause unexpected behavior. -::: - -## Related Topics - -- [Microsoft Azure Integration](./microsoft-azure-integration/index.md) -- [Managing Public Cloud Apps in Domains](../managing-public-cloud-apps-in-domains.md) -- [Cost Management of Microsoft Azure Resources](./cost-management-of-microsoft-azure-resources.md) -- [Azure Known Limitations](./azure-known-limitations.md) -- [Custom Routing for Azure in Sandboxes](./custom-routing-for-azure-in-sandboxes.md) -- [Integrating Azure with Cloud-based CloudShell Installation](./integrating-azure-with-cloud-based-cloudshell-installation.md) -- [Using Multiple Azure Regions in CloudShell](./using-multiple-azure-regions-in-cloudshell.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/integrating-azure-with-cloud-based-cloudshell-installation.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/integrating-azure-with-cloud-based-cloudshell-installation.md deleted file mode 100644 index 7696d3b92d..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/integrating-azure-with-cloud-based-cloudshell-installation.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Integrating Azure with Cloud-based CloudShell Installation - -This article explains the process for setting up an Azure integration where Quali Server is installed on the Azure region. - -The process is as follows: - -1. Choose an Azure region for the integration. -2. Create a resource group in this region. -3. In the resource group, create an Azure VM and install CloudShell on it. - - - You can install all the required CloudShell components on this VM or use a combination of VMs in the same VNet. - - Make sure the VNet has an address space that will not overlap with the CloudShell Sandbox VNet, which is "10.0.0.0/8". Something like "192.168.25.0/24". -4. [Configure Azure API to work with CloudShell](./microsoft-azure-integration/configure-azure-api-to-work-with-cloudshell.md). -5. Deploy the Azure template to create the management resource group and VNets, as explained in [Create a Management Resource Group and VNets](./microsoft-azure-integration/create-a-management-resource-group-and-vnets.md). - - - You can choose to create a new management resource group or select the CloudShell VM's resource group. However, if you deploy the Azure template in a different resource group, you will also need to create a peering between the CloudShell VM's VNet and the CloudShell management VNet. - - In the template, make sure to select the **Internal** deployment mode. -6. Connect the Execution Server to the CloudShell Server. For details, see [Connecting the Execution Server to Quali Server](./managing-the-azure-execution-server.md#connecting-the-execution-server-to-quali-server). - -7. Create the Azure cloud provider resource and an App template. - - :::important Networking considerations: - - To allow all inbound traffic from other Apps in the sandbox, in the App's **Deployment Paths** page, enable the **Allow All Sandbox Traffic** attribute. - - - To allow end users to remotely connect to the App VMs, in the App's **Deployment Paths** page, make sure to open inbound connections to the VMs using the **Inbound Ports** attribute or set up QualiX for in-browser connections via the sandbox itself. For example, specifying "3389" allows RDP connections, while "22" enables QualiX to run in-browser connections. And set the user/password credentials in the App's **App Resource** page. - ::: -8. To verify the integration, do the following: - - 1. Log into CloudShell Portal, set up and reserve a blueprint that deploys an Azure App on the region. - 2. Make sure you can log in to the VMs using the credentials on the App template. - 3. For networking, reserve a blueprint that has two Azure Apps and make sure a subnet is created in Azure for the App VMs. - -### Related Topics - -- [Microsoft Azure Integration and Configuration](./microsoft-azure-integration/index.md) -- [Add an Azure Cloud Provider Resource](./microsoft-azure-integration/add-an-azure-cloud-provider-resource.md) -- [Managing App Templates](../../../cloudshell-manage-dashboard/manage-app-templates/index.md) -- [Subnet Connectivity](../../../setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/index.md) diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/managing-the-azure-execution-server.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/managing-the-azure-execution-server.md deleted file mode 100644 index 7b2acaadd2..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/managing-the-azure-execution-server.md +++ /dev/null @@ -1,165 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Managing the Azure Execution Server - -The deployment process of the CloudShell Template deploys a VM on the Azure region called **ExecutionServer-VM** and in it installs an Execution Server called "`Azure-`" (for example, "Azure-East US"). - -## Support - -- The Execution Server is installed on a Centos 7 VM (CentOS 7.2 and up). -- The Execution Server comes with Python 2.7 and 3 installed and configured out of the box. - -## Accessing the Execution Server VM - -- Use the **Admin Username** and **Admin Password** defined in the CloudShell Template that was deployed on the Azure region. - -## Connecting the Execution Server to Quali Server - -This procedure is required if Quali Server is also installed on Azure. - -- Log in to the Execution Server machine and follow the instructions in [Configure the Linux Execution Server](../../../../install-configure/linux-virtual-appliance/post-installation/configure/index.md). - -## Execution Server logs - -Execution Server logs reside at: - -- `/opt/ExecutionServer/logs` -- `/var/log/qualisystems/` - -## Performing maintenance operations on an Execution Server - -Do the following if you need to perform any maintenance operations on the Execution Server, such as updating the Execution Server version of setting `customer.config` keys: - -1. Stop the Execution Server service by running the following command: - - ```bash - sudo systemctl stop es - ``` - -2. Perform the maintenance operations. -3. Start the Execution Server service by running the following command: - - ```bash - sudo systemctl start es - ``` - - -## Installing a new Execution Server - -Follow this procedure to install a new Execution Server from scratch. To upgrade an existing Execution server, scroll down to the next section. - -1. From [Quali’s Download Center](https://support.quali.com/hc/en-us/articles/231613247-Quali-s-Download-Center?flash_digest=3f2ece71dadb98bf640f295d5812eb5e8aedb9a7), download the **Linux Execution Server** installation script to your local machine. - -2. In Azure Marketplace, create a **CentOS** VM (CentOS 7.2 and up). - -3. In the **Advanced** tab, click **Select an extension to install**. - - ![](/Images/Admin-Guide/Azure-deployment-type/AzureSelectExtension.png) - -4. In the **Install an Extension** page, search for and click **Custom Script For Linux**. - - ![](/Images/Admin-Guide/Azure-deployment-type/AzureVMExtensionScript.png) - -5. Click **Next**. -6. In the **Configure Custom Script For Linux Extension** page, set the params: - - - **Script files**: Browse to the **Linux Execution Server** installation script file you downloaded. Follow the instructions to create a storage account and upload the script as a blob to the storage account. Then, repeat the above step and select the storage account > container > script. - - ![](/Images/Admin-Guide/Azure-deployment-type/AzureStorageAccount.png) - - - **Command**: Paste the below line, and set the CloudShell Server and admin credentials. - - ```bash - sudo sh cloudshell_es_install_script.sh [CloudShellServerIP] [CloudShellServerAdmin] [CloudShellServerAdminPassword] [ExecutionServerName] - ``` - - For example: - - ```bash - sudo sh cloudshell_es_install_script.sh 192.168.52.47 admin admin es-EastUS - ``` - - :::note Notes - - If the Execution Server VM does not have an internet connection, make sure the OfflinePackageRepository zip file is extracted to the local PyPi Server repository. For details, see [Add the out-of-the-box dependencies package to the local PyPi Server repository](../../../cloudshell-execution-server-configurations/setting-up-python-virtual-environments/configuring-cloudshell-to-execute-python-commands-in-offline-mode.md#add-the-out-of-the-box-dependencies-package-to-the-local-pypi-server-repository). - - Quali Server must be running when configuring the Execution Server. - - - Depending on your flavor of Linux, you may need to escape parameter values containing special characters with single or double quotes. For example: `"admin1234!"` - ::: - - -7. Click **Create**. - - ![](/Images/Admin-Guide/Azure-deployment-type/AzureConfigureCustomScript.png) - -8. Finish creating the VM. - -## Upgrading an existing Execution Server - -There are two ways to upgrade the Azure Execution Server: - -- Upgrade to a GA version (by running a custom script on the Execution Server VM) -- Upgrade to a non-GA patch version (by replacing configuration DLLs) - -**To upgrade to a GA version:** - -1. SSH to the VM. -2. Stop the Execution Server service by running the following command: - - `sudo systemctl stop es` - -3. Run the following script (set the appropriate values): - - ```bash - curl [InstallScript] --output cloudshell_es_install_script.sh --retry 20 -s -S - chmod +rwx ./cloudshell_es_install_script.sh - sed -i -e 's/\r$//' ./cloudshell_es_install_script.sh - ./cloudshell_es_install_script.sh [CloudShellServerIP] [CloudShellServerAdmin] [CloudShellServerAdminPassword] [ExecutionServerName] - ``` - - For example: - - ```bash - curl https://s3.amazonaws.com/quali-prod-binaries/8.3-168734/ES/cloudshell_es_install_script.sh --output cloudshell_es_install_script.sh --retry 20 -s -S - chmod +rwx ./cloudshell_es_install_script.sh - sed -i -e 's/\r$//' ./cloudshell_es_install_script.sh - ./cloudshell_es_install_script.sh 192.168.42.132 admin admin es-shells - ``` - - :::note Notes - - If the Execution Server VM does not have an internet connection, make sure the OfflinePackageRepository zip file is extracted to the local PyPi Server repository. For details, see [Add the out-of-the-box dependencies package to the local PyPi Server repository](../../../cloudshell-execution-server-configurations/setting-up-python-virtual-environments/configuring-cloudshell-to-execute-python-commands-in-offline-mode.md#add-the-out-of-the-box-dependencies-package-to-the-local-pypi-server-repository). - - Quali Server must be running when configuring the Execution Server. - - - Depending on your flavor of Linux, you may need to escape parameter values containing special characters with single or double quotes. For example: `"admin1234!"` - ::: - -4. Start the Execution Server service by running the following command: - - ```bash - sudo systemctl start es - ``` - - Tip: The Execution Server service name was changed from qa\_execution\_server to es in version 8.3. - - -**To upgrade to a patch version:** - -1. Open the CloudShell patch package. -2. Go to the `~\CloudShell \Data\ExecutionServer\Qualisystems\TestShell\ExecutionServer` folder. For example: ![](/Images/Admin-Guide/CloudShellPackageForCloudProviders.png) - -3. Select all contents in the folder and create a tar archive. -4. Copy the tar file to the `/temp` folder in the **ExecutionServer-VM** VM. -5. SSH to the VM. -6. Stop the Execution Server service by running the following command: - - ```bash - sudo systemctl stop es - ``` - -7. Extract the tar file to `/opt/ExecutionServer`, overriding any existing files. -8. Start the Execution Server service by running the following command: - - ```bash - sudo systemctl start es - ``` diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/_category_.json b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/_category_.json deleted file mode 100644 index 85fd19b036..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Microsoft Azure Integration", - "position": 1 -} diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md deleted file mode 100644 index 02e2b123e5..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-app-template.md +++ /dev/null @@ -1,1018 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Add an Azure App Template - -The App template defines the settings and configurations of the VM to be deployed in the sandbox as well as the application(s) to be installed on that VM. - -:::note Notes: -- By default, all public cloud Apps of the same type in the same sandbox are deployed within the same subnet and therefore are connected to each other and isolated from other sandboxes. However, using the **Subnet** service, blueprint designers can set up multiple subnet networks in the sandbox, instead of having one default subnet for all the Apps of the same cloud provider. For details, see [Subnet Connectivity](../../../../setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/index.md). -- Public cloud App deployment requires the management network and subnet(s) to be prepared in advance as part of the sandbox **Setup** process. CloudShell's out-of-the-box **Setup** process does this. However, the blueprint must include at least one public cloud App to initiate the **Setup** script's connectivity preparation process for deployment in that public cloud. -::: -**To add a new Azure App template:** - -1. Click **\+ Add**. - - The **Create New App** wizard is displayed. - - ![](/Images/CloudShell-Portal/Manage/CreateNewApp.png) - -2. From the **Select Deployment Type** pane, select the Azure deployment type. -3. Enter a **Name** for the App template. - :::note - The App template's name has a limit of 100 characters and can only contain alpha-numeric characters, spaces, and the following characters: | . - \_ \] \[ - ::: -4. Click **Create**. - - The App template is created and the **App** wizard's **General** page is displayed. - - ![](/Images/CloudShell-Portal/Manage/AppGeneralPage.png) - -5. In the General page, define the App template's display settings and category. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldRequiredDescription
    NameRequiredApp name that is displayed in the catalog.
    DescriptionOptionalDescription of the App.
    IconOptionalAdd an image to the catalog definition. The recommended size for the image is 190x120 pixels (image size is limited to 400x400 pixels or 200 KB).
    CategoriesOptional - Service categories are a method to classify Apps. The Apps are displayed in the Add App / Service side pane in the blueprint and sandbox diagram, arranged in categories. Only users who are permitted to view the category can access the App. Apps without a category are not displayed. - - By default, the Applications category is selected. - - Select a category from the dropdown list. You can select additional categories. Examples of categories are: applications, networking and VLAN. - - :::note Notes: - - The category must be associated with the domain in which the required cloud provider resides. For information about domain categories, see [Managing domain categories](../../../../cloudshell-manage-dashboard/managing-categories.md#managing-domain-categories). - - It is recommended to use up to a 2-level hierarchy when organizing the **Add App / Service** catalog (i.e. root and sub-category). - - In the **Add App / Service** side pane, Apps are displayed in the root category only. This includes services associated to sub-categories. - ::: -
    - -6. In the left pane, click **Deployment Paths** and configure the App template's deployment path. - - A deployment path consists of (1) the selected deployment type (the method to be used to deploy the VM), (2) the VM’s settings such as storage size, CPU and image file, and (3) the CloudShell cloud provider resource that enables CloudShell to access the cloud provider and deploy the VM on it. - - Note the deployment path's name (highlighted in the image below). The path's name is dynamic and consists of the selected **Cloud Provide**r resource and **Deployment type**. You can change the name of the path by clicking the field. - - ![](/Images/Admin-Guide/Azure-deployment-type/AzureDeploymentPathName.png) - - 1. From the **Deployment** drop down list, select the deployment type. - - The selected deployment type's attributes are displayed. - :::important - Deployment types related to the Azure 2nd Gen cloud provider shell include "2nd Gen" in the title (for example: "Azure VM from Marketplace 2nd Gen"). - ::: - 2. Fill in the details. - - - For **Azure VM From Custom Image** attributes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeAzure shell versionDescription
    Cloud ProviderAllName of the Azure cloud provider resource to be used
    Azure ImageAllName of the custom image. The image name is listed in the Images blade of the Azure portal.
    Azure Resource GroupAllName of the resource group in which the custom image resides.
    VM SizeAll - (Optional) Size of the Microsoft Azure computing resources, including CPU, memory and networking capacity of the VM. Leave it empty to use the default VM Size that was set in the cloud provider resource. For example: "Standard_A1_v2”. - - Make sure the VM size you specify is supported by the image you defined in the App. - :::important - For Azure Apps that will run configuration management operations, specify a VM size of Standard_A2_v2 or larger. - ::: - For additional information, see the Azure help page [Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes) or use Azure CLI to get a list of your region's supported sizes. -
    Disk TypeAll - Type of disk to use for the VM's operating system. Possible options depend on the shell version: - - Azure 1G shell: - - - **HDD** (default) - - **SSD** - - Azure 2G shell: - - - **Standard HDD** - - **Standard SSD** - - **Premium SSD** - - **Standard SSD (zone-redundant storage)** - - **Premium SSD (zone-redundant storage)** -
    Disk SizeAll - (Optional) Disk size (in GB) of the VM's operating system. For example, "17” or "35”. - - If you leave it empty, CloudShell will determine the disk size according to the App's **VM Size**. -
    Data Disks2G - Semicolon-separated list of data disks that will be added to the VM. - - The syntax is: `disk_name:disk_size,disk_type` - - For example: - - `disk1:10;disk2:20,Premium SSD;disk3:20,Standard SSD (zone-redundant storage)` - - Supported disk types are: - - - **Standard HDD** (default) - - **Standard SSD** - - **Premium SSD** - - **Ultra SSD** - - **Standard SSD (zone-redundant storage)** - - **Premium SSD (zone-redundant storage)** -
    License Type2G - Optionally apply an OS license you own to the VM. - - Options are: - - - **No License**: None - - **Windows OS**: Windows_Client - - **Windows Server OS**: Windows_Server - - **Red Hat Enterprise Linux (RHEL)**: RJE:_BYOS - - **SUSE Linux Enterprise Server (SLES)**: SLES_BYOS -
    Enable Boot Diagnostics2GEnable Boot diagnostics for the VM. For additional information, see Microsoft Docs' [Azure boot diagnostics](https://docs.microsoft.com/en-us/azure/virtual-machines/boot-diagnostics) article.
    Boot Diagnostics Storage Account2GThe name of a storage account where boot diagnostic artifacts will be stored. Enter "Sandbox Storage" to use the storage account created by the sandbox. By default: the managed storage account is used if **Enable Boot Diagnostics** is enabled.
    Resource Group Name2G(Optional) The name of the predefined resource group where the VM will be deployed. This resource group will contain all cloud resources created for the VM (such as network interfaces, security groups, disks and the VM itself). When the VM tears down, its cloud resources will be deleted from the resource group but the resource group will remain.
    Add Public IPAll - Set to **True** to use a public IP address to communicate with the VM from outside the virtual network. - - In most cases the public IP address is associated with the VM until the VM is stopped or terminated, after which the IP is no longer available. To ensure that the IP is available to your subscription at any time, reserve it by setting the **Public IPType** attribute to **Static**. -
    Wait for IPAllDetermines if the App deployment process waits for the VM to get an IP. Default is **False**.
    Extension Script File / ConfigurationAll - (Optional) Custom extension script (PowerShell, Python, batch, etc.) to execute on the deployed VM. - - - **Extension Script File**: Raw URL of the script file - - **Extension Script Configuration**: Space-separated value containing the tool to be used to execute the script, such as Python or PowerShell, the script's file name and extension, and any inputs that need to be passed to the script. For example: `python my_script.py input1` `input2` - - :::note Notes: - - For non-PowerShell scripts, the tool to be used to execute the script must be installed on the VM. - - For Linux VMs, you must specify the tool to be used. For Windows VMs, PowerShell is used by default, unless a different tool is specified. - - Extension scripts are not supported on Kali Linux images in Azure Marketplace. To fix this issue, you will need to use a modified version of the Marketplace image: - - 1. Deploy a VM based on the **Kali Linux** Marketplace image. - - 2. Run the following command: - - ```javascript - sudo nano /usr/lib/python3/dist-packages/azurelinuxagent/common/osutil/factory.py - ``` - - 3. Find the line: - - ```javascript - from .debian import DebianOSModernUtil - ``` - - 4. Replace with: - - ```javascript - from .debian import DebianOSModernUtil,DebianOSBaseUtil - ``` - - 5. Press **\[CTRL\]** + **\[O\]** and **\[Enter\]** keys. - 6. Press **\[CTRL\]** + **\[X\]** and **\[Enter\]** keys. - 7. Restart the **walinuxagent.service** service. - 8. Create a custom image out of the VM. - ::: - - :::note - To support the execution of extension scripts, custom images created outside of Azure Marketplace must include the **ProvisionGuestAgent** agent. For additional information, see [Virtual machine extensions and features for Windows](https://docs.microsoft.com/en-us/azure/virtual-machines/extensions/features-windows). - ::: -
    Public IP TypeAllSet to **Static** to ensure that the VM always uses the same public IP. By default, public IPs are **Dynamic** and the address associated to them may change when the VM is powered off.
    Inbound PortsAll - (Optional) Semi-colon separated list of ports and protocols to open for inbound traffic. Note that by default access from the management VPC is allowed and all ports are open for traffic between Azure App VMs within the sandbox, but this can be changed using the **Allow All Sandbox Traffic** attribute. - - In addition, all outbound traffic is allowed. - - The syntax is: - - `port[single/range]:protocol[tcp(default)/udp]` - - For example: "80;443:tcp;200-220:udp". - :::note - If not specified, the protocol defaults to TCP. - ::: - :::tip Tips: - - To allow QualiX in-browser connections to the VM from the sandbox, include port "22". - - To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/2023.3/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Port**s attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../setappsecuritygroups-code-example.md). - ::: -
    Custom Tags2GSemi-colon separated list of up to 9 tags to be applied to all related Azure objects created during the App deployment, such as the sandbox's resource group, VNETs, subnets, NSGs and VMs. Attribute supports the following syntax: [TagName]=[TagValue]; [TagName]=[TagValue]. For example: "Tag1=Val1;Tag2=Val2”
    Allow All Sandbox TrafficAll - Determines if the App allows inbound traffic from all other Azure Apps in the sandbox. If set to **False**, the App's VM will be isolated. Access from specific Apps or subnets can be defined using the **Inbound Ports** attribute or API. - :::note - By default, this attribute is **True**, and access is allowed to all ports from all Apps in the sandbox. By default, all ports are open for traffic within the sandbox. - ::: -
    Enable IP Forwarding2GEnables IP forwarding on all network interfaces of the app in order to support virtual appliances like routers and firewalls that are connected to multiple subnets.
    Autoload2GEnables the automatic execution of the Autoload command during reservation Setup.
    Availability Zones2GSpecify the Availability Zone (1, 2, or 3) in which the App’s VM, managed disk and public IP (if available) will be deployed. Leave empty to inherit the Availability Zones defined on the cloud provider resource. For details and supported regions, see [Regions and availability zones](https://learn.microsoft.com/en-us/azure/availability-zones/az-overview).
    - - - For **Azure VM From Marketplace** attributes - :::note - Every VM deployed from a Marketplace image is created with a managed disk, which is deleted when the sandbox ends. - ::: - - :::important - If you want to deploy a third party application from a Marketplace image, make sure Programmatic Deployment is enabled for the image in the subscription. To enable, log in to Azure and open the Marketplace, find the image and click it, select the Want to deploy programmatically? Get started link at the bottom of the blade that appears. Then, in the Configure Programmatic Deployment blade, scroll down to the bottom, select Enable for the appropriate subscription and click Save. For additional information, see the following Azure help page: [Working with Marketplace Images on Azure Resource Manager](https://azure.microsoft.com/en-us/blog/working-with-marketplace-images-on-azure-resource-manager/). - ::: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeAzure shell versionDescription
    Cloud ProviderAllName of the Azure cloud provider resource to be used
    Image PublisherAll - Define the VM image's **Publisher**, **Offer** and **SKU**. - :::note - The Publisher, Offer and SKU must exist in the Azure region where the VM will be deployed. - ::: - For typical image properties, see the following Azure help pages: [Linux VM images](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/cli-ps-findimage) and [Windows VM images](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/cli-ps-findimage). -
    Image OfferAllImage Offer
    Image SKUAllImage SKU
    VM SizeAll - (Optional) Size of the Microsoft Azure VM. This parameter determines the CPU, memory and networking capacity of the VM. Leave it empty to use the default VM Size that was set in the cloud provider resource. For example: "Standard_A1_v2”. - :::important - For Azure Apps that will run configuration management operations, specify a VM size of Standard_A2_v2 or larger. - ::: -
    Disk TypeAll - Type of disk to use for the VM's operating system. Possible options depend on the shell version: - - Azure 1G shell: - - - **HDD** (default) - - **SSD** - - Azure 2G shell: - - - **Standard HDD** - - **Standard SSD** - - **Premium SSD** - - **Standard SSD (zone-redundant storage)** - - **Premium SSD (zone-redundant storage)** -
    Disk SizeAll - (Optional) Disk size (in GB) of the VM's operating system. For example, "17” or "35”. - - If you leave it empty, CloudShell will determine the disk size according to the App's **VM Size**. -
    Data Disks2G - Semicolon-separated list of data disks that will be added to the VM. - - The syntax is: `disk_name:disk_size,disk_type` - - For example: - - `disk1:10;disk2:20,Premium SSD;disk3:20,Standard SSD (zone-redundant storage)` - - Supported disk types are: - - - **Standard HDD** (default) - - **Standard SSD** - - **Premium SSD** - - **Ultra SSD** - - **Standard SSD (zone-redundant storage)** - - **Premium SSD (zone-redundant storage)** -
    License Type2G - Optionally apply an OS license you own to the VM. - - Options are: - - - **No License**: None - - **Windows OS**: Windows_Client - - **Windows Server OS**: Windows_Server - - **Red Hat Enterprise Linux (RHEL)**: RJE:_BYOS - - **SUSE Linux Enterprise Server (SLES)**: SLES_BYOS -
    Enable Boot Diagnostics2GEnable Boot diagnostics for the VM. For additional information, see Microsoft Docs' [Azure boot diagnostics](https://docs.microsoft.com/en-us/azure/virtual-machines/boot-diagnostics) article.
    Boot Diagnostics Storage Account2GThe name of a storage account where boot diagnostic artifacts will be stored. Enter "Sandbox Storage" to use the storage account created by the sandbox. By default: the managed storage account is used if **Enable Boot Diagnostics** is enabled.
    Resource Group Name2G(Optional) The name of the predefined resource group where the VM will be deployed. This resource group will contain all cloud resources created for the VM (such as network interfaces, security groups, disks and the VM itself). When the VM tears down, its cloud resources will be deleted from the resource group but the resource group will remain.
    Add Public IPAll - Set to **True** to use a public IP address to communicate with the VM from outside the virtual network. - - In most cases the public IP address is associated with the VM until the VM is stopped or terminated, after which the IP is no longer available. To ensure that the IP is available to your subscription at any time, reserve it by setting the **Public IP Type** attribute to **Static**. -
    Wait for IPAllDetermines if the App deployment process waits for the VM to get an IP. Default is **False**.
    Extension Script File / ConfigurationAll - (Optional) Custom extension script (PowerShell, Python, batch, etc.) to execute on the deployed VM. - - - **Extension Script File**: Raw URL of the script file - - **Extension Script Configuration**: Space-separated value containing the tool to be used to execute the script, such as Python or PowerShell, the script's file name and extension, and any inputs that need to be passed to the script. For example: `python my_script.py input1` `input2` - - :::note Notes: - - For non-PowerShell scripts, the tool to be used to execute the script must be installed on the VM. - - For Linux VMs, you must specify the tool to be used. For Windows VMs, PowerShell is used by default, unless a different tool is specified. - - Extension scripts are not supported on Kali Linux images in Azure Marketplace. To fix this issue, you will need to use a modified version of the Marketplace image: - - 1. Deploy a VM based on the **Kali Linux** Marketplace image. - - 2. Run the following command: - - ```javascript - sudo nano /usr/lib/python3/dist-packages/azurelinuxagent/common/osutil/factory.py - ``` - - 3. Find the line: - - ```javascript - from .debian import DebianOSModernUtil - ``` - - 4. Replace with: - - ```javascript - from .debian import DebianOSModernUtil,DebianOSBaseUtil - ``` - - 5. Press **\[CTRL\]** + **\[O\]** and **\[Enter\]** keys. - 6. Press **\[CTRL\]** + **\[X\]** and **\[Enter\]** keys. - 7. Restart the **walinuxagent.service** service. - 8. Create a custom image out of the VM. - ::: -
    Public IP TypeAllSet to **Static** to ensure that the VM always uses the same public IP. By default, public IPs are **Dynamic** and the address associated to them may change when the VM is powered off.
    Inbound PortsAll - (Optional) Semi-colon separated list of ports and protocols to open for inbound traffic. Note that by default access from the management VPC is allowed and all ports are open for traffic between Azure App VMs within the sandbox, but this can be changed using the **Allow All Sandbox Traffic** attribute. - - In addition, all outbound traffic is allowed. - - The syntax is: - - `port[single/range]:protocol[tcp(default)/udp]` - - For example: "80;443:tcp;200-220:udp". - :::note - If not specified, the protocol defaults to TCP. - ::: - :::tip Tips: - - To allow QualiX in-browser connections to the VM from the sandbox, include port "22". - - To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/2023.3/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Port**s attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../setappsecuritygroups-code-example.md). - ::: -
    Custom Tags2GSemi-colon separated list of up to 9 tags to be applied to all related Azure objects created during the App deployment, such as the sandbox's resource group, VNETs, subnets, NSGs and VMs. Attribute supports the following syntax: [TagName]=[TagValue]; [TagName]=[TagValue]. For example: "Tag1=Val1;Tag2=Val2”
    Allow All Sandbox TrafficAll - Determines if the App allows inbound traffic from all other Azure Apps in the sandbox. If set to **False**, the App's VM will be isolated. Access from specific Apps or subnets can be defined using the **Inbound Ports** attribute or API. - :::note - By default, this attribute is **True**, and access is allowed to all ports from all Apps in the sandbox. By default, all ports are open for traffic within the sandbox. - ::: -
    Enable IP Forwarding2GEnables IP forwarding on all network interfaces of the app in order to support virtual appliances like routers and firewalls that are connected to multiple subnets.
    Autoload2GEnables the automatic execution of the Autoload command during reservation Setup.
    Availability Zones2GSpecify the Availability Zone (1, 2, or 3) in which the App’s VM, managed disk and public IP (if available) will be deployed. Leave empty to inherit the Availability Zones defined on the cloud provider resource. For details and supported regions, see [Regions and availability zones](https://learn.microsoft.com/en-us/azure/availability-zones/az-overview).
    - - - For **Azure VM From Gallery Image 2nd Gen** attributes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Cloud ProviderName of the Azure cloud provider resource to be used
    Shared Image GalleryName of the shared image gallery to be used to create a VM. The image gallery is listed in the **Shared image galleries** blade of the Azure portal.
    Image DefinitionThe image definition is listed in the **Image definitions** blade of the Azure portal.
    Image VersionName of the image version to be used to create Azure VMs. Use "latest" if version is unavailable.
    Shared Gallery Resource GroupResource group in which the shared image gallery resides.
    Shared Gallery Image Subscription IDThe subscription ID of the shared image gallery. Use "current" if not set.
    VM Size - (Optional) Size of the Microsoft Azure computing resources, including CPU, memory and networking capacity of the VM. Leave it empty to use the default VM Size that was set in the cloud provider resource. For example: "Standard_A1_v2”. - :::important - For Azure Apps that will run configuration management operations, specify a VM size of Standard_A2_v2 or larger. - ::: - For additional information, see the Azure help page [Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes) or use Azure CLI to get a list of your region's supported sizes. -
    Disk Type - Type of disk to use for the VM's operating system. - - - **Standard HDD** - - **Standard SSD** - - **Premium SSD** - - **Standard SSD (zone-redundant storage)** - - **Premium SSD (zone-redundant storage)** -
    Disk Size - (Optional) Disk size (in GB) of the VM's operating system. For example, "17” or "35”. - - If you leave it empty, CloudShell will determine the disk size according to the App's **VM Size**. -
    Data Disks - Semicolon-separated list of data disks that will be added to the VM. - - The syntax is: `disk_name:disk_size,disk_type` - - For example: - - `disk1:10;disk2:20,Premium SSD;disk3:20,Standard SSD (zone-redundant storage)` - - Supported disk types are: - - - **Standard HDD** (default) - - **Standard SSD** - - **Premium SSD** - - **Ultra SSD** - - **Standard SSD (zone-redundant storage)** - - **Premium SSD (zone-redundant storage)** -
    License Type - Optionally apply an OS license you own to the VM. - - Options are: - - - **No License**: None - - **Windows OS**: Windows_Client - - **Windows Server OS**: Windows_Server - - **Red Hat Enterprise Linux (RHEL)**: RJE:_BYOS - - **SUSE Linux Enterprise Server (SLES)**: SLES_BYOS -
    Enable Boot DiagnosticsEnable Boot diagnostics for the VM. For additional information, see Microsoft Docs' [Azure boot diagnostics](https://docs.microsoft.com/en-us/azure/virtual-machines/boot-diagnostics) article.
    Boot Diagnostics Storage AccountThe name of a storage account where boot diagnostic artifacts will be stored. Enter "Sandbox Storage" to use the storage account created by the sandbox. By default: the managed storage account is used if **Enable Boot Diagnostic**s is enabled.
    Resource Group Name(Optional) The name of the predefined resource group where the VM will be deployed. This resource group will contain all cloud resources created for the VM (such as network interfaces, security groups, disks and the VM itself). When the VM tears down, its cloud resources will be deleted from the resource group but the resource group will remain.
    Add Public IP - Set to **True** to use a public IP address to communicate with the VM from outside the virtual network. - - In most cases the public IP address is associated with the VM until the VM is stopped or terminated, after which the IP is no longer available. To ensure that the IP is available to your subscription at any time, reserve it by setting the **Public IPType** attribute to **Static**. -
    Wait for IPDetermines if the App deployment process waits for the VM to get an IP. Default is **False**.
    Extension Script File / Configuration - (Optional) Custom extension script (PowerShell, Python, batch, etc.) to execute on the deployed VM. - - - **Extension Script File**: Raw URL of the script file - - **Extension Script Configuration**: Space-separated value containing the tool to be used to execute the script, such as Python or PowerShell, the script's file name and extension, and any inputs that need to be passed to the script. For example: `python my_script.py input1` `input2` - - :::note Notes: - - For non-PowerShell scripts, the tool to be used to execute the script must be installed on the VM. - - For Linux VMs, you must specify the tool to be used. For Windows VMs, PowerShell is used by default, unless a different tool is specified. - - Extension scripts are not supported on Kali Linux images in Azure Marketplace. To fix this issue, you will need to use a modified version of the Marketplace image: - - 1. Deploy a VM based on the **Kali Linux** Marketplace image. - - 2. Run the following command: - - ```javascript - sudo nano /usr/lib/python3/dist-packages/azurelinuxagent/common/osutil/factory.py - ``` - - 3. Find the line: - - ```javascript - from .debian import DebianOSModernUtil - ``` - - 4. Replace with: - - ```javascript - from .debian import DebianOSModernUtil,DebianOSBaseUtil - ``` - - 5. Press **\[CTRL\]** + **\[O\]** and **\[Enter\]** keys. - 6. Press **\[CTRL\]** + **\[X\]** and **\[Enter\]** keys. - 7. Restart the **walinuxagent.service** service. - 8. Create a custom image out of the VM. - ::: - :::note - To support the execution of extension scripts, custom images created outside of Azure Marketplace must include the ProvisionGuestAgent agent. For additional information, see [Virtual machine extensions and features for Windows](https://docs.microsoft.com/en-us/azure/virtual-machines/extensions/features-windows). - ::: -
    Public IP TypeSet to **Static** to ensure that the VM always uses the same public IP. By default, public IPs are **Dynamic** and the address associated to them may change when the VM is powered off.
    Inbound Ports - (Optional) Semi-colon separated list of ports and protocols to open for inbound traffic. Note that by default access from the management VPC is allowed and all ports are open for traffic between Azure App VMs within the sandbox, but this can be changed using the **Allow All Sandbox Traffic** attribute. - - In addition, all outbound traffic is allowed. - - The syntax is: - - `port[single/range]:protocol[tcp(default)/udp]` - - For example: "80;443:tcp;200-220:udp". - :::note - If not specified, the protocol defaults to TCP. - ::: - :::tip Tips: - - To allow QualiX in-browser connections to the VM from the sandbox, include port "22". - - To set more specific security groups, it is recommended to use the TestShell API's [SetAppsSecurityGroup](pathname:///api-docs/2023.3/TestShell-API/TestShell%20XML%20RPC%20API.html#SetAppSecurityGroups) method instead. Unlike the **Inbound Ports** attribute, it enables you to define different port settings per subnet and allow inbound access to specific source CIDRs. For additional information, see [SetAppSecurityGroups Code Example](../../setappsecuritygroups-code-example.md). - ::: -
    Custom TagsSemi-colon separated list of up to 9 tags to be applied to all related Azure objects created during the App deployment, such as the sandbox's resource group, VNETs, subnets, NSGs and VMs. Attribute supports the following syntax: [TagName]=[TagValue]; [TagName]=[TagValue]. For example: "Tag1=Val1;Tag2=Val2”
    Allow All Sandbox Traffic - Determines if the App allows inbound traffic from all other Azure Apps in the sandbox. If set to **False**, the App's VM will be isolated. Access from specific Apps or subnets can be defined using the **Inbound Ports** attribute or API. - :::note - By default, this attribute is **True**, and access is allowed to all ports from all Apps in the sandbox. By default, all ports are open for traffic within the sandbox. - ::: -
    Enable IP ForwardingEnables IP forwarding on all network interfaces of the app in order to support virtual appliances like routers and firewalls that are connected to multiple subnets.
    AutoloadEnables the automatic execution of the Autoload command during reservation Setup.
    Availability ZonesSpecify the Availability Zone (1, 2, or 3) in which the App’s VM, managed disk and public IP (if available) will be deployed. Leave empty to inherit the Availability Zones defined on the cloud provider resource. For details and supported regions, see [Regions and availability zones](https://learn.microsoft.com/en-us/azure/availability-zones/az-overview).
    - -7. To add additional deployment paths to the App template, click the **Add New Deployment Path** link at the bottom of the wizard and fill in the required information. -8. In the left pane, click Configuration Management and configure the application to be installed on the VM. - - ![](/Images/CloudShell-Portal/Manage/ConfigurationManagement.png) - :::tip - To learn how to develop custom scripts and Ansible playbooks, including examples, and set up support for the desired configuration management tool, see [Developing Configuration Management Scripts for Apps](../../.././../../devguide/develop-config-management-scripts-for-apps/index.md). - ::: - :::note Notes: - - To run configuration management on an Azure App, make sure the App's VM size is Basic_A2 or larger. - - For configuration management operations, CloudShell uses an available Execution Server (for Ansible, it's a Linux Execution Server that has the Supports Ansible flag). - - If the cloud provider resource has an Execution Server Selector configured, it will use that selector. If the selector is empty, CloudShell will use the selector defined in the appropriate Resource Manager Client >Configuration Services model (Ansible Configuration or Custom Script Configuration). - - - Execution Server selectors specified on the deployed App shell/resource are not used to execute configuration management operations. - ::: - - 1. Define the script or playbook to install. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Select Tool - Select the application's installation and configuration tool. - - - **None**: Do not use any Configuration Management option. Use this option if, for example, the image or template already contains the application to install. - - **Script**: Select the custom script to run (PowerShell, bash or sh). - - **Ansible**: (Intended for customers who are already using Ansible) Select the Ansible playbook to run. - :::note - The playbook runs once during the **Setup** phase for all of the sandbox's Apps that use that playbook, after CloudShell has finished deploying their VMs. This is done both to improve performance and support cross-server logic where multiple applications need to be installed and configured in a certain way. - ::: - Note that the playbook runs once for all of the sandbox's Apps that use that playbook, after CloudShell has finished deploying their VMs. - - - Depending on the selection, additional options may become available. -
    Connection Method - The method to use to connect to the VM. - - Select: - - - **SSH** if the VM has a Linux OS - - **Windows Remote Management** if the VM has a Windows OS - :::note - To run configuration management on a Windows VM, the VM must have WinRM enabled. For details, see [Enable WinRM on Windows VMs to Support Configuration Management](../../../../../devguide/enable-winrm-on-win-vm-for-cfg-mng.md). - ::: -
    Playbook / Script Location - Details of the Ansible playbook or custom script. - - - **URL**: Raw URL of the Ansible playbook or ZIP file, or custom script on the online repository (GitHub, GitLab and BitBucket are supported). URL must be accessible to the Execution Servers. - :::tip - The URL can accept parameters defined on the App, enabling you to test new versions of scripts without affecting consumer-ready versions. For example, you can have an App everyone is using, but if you want to test a version you're developing, simply change the value of the URL parameter in the test blueprint. - - - To use parameters, specify the parameter name in curly brackets (for example: **\{branch\}**). - - If the App has this parameter, CloudShell will replace the **\{branch\}** with its value during execution. - - If the parameter is missing, CloudShell will replace **\{branch\}** with an empty string. - - If you are using a global input, customers would be well advised to set a default value on the global input - ::: - **For GitHub, specify the raw URL. For example:** - - ```javascript - https://raw.githubusercontent.com/.../site.yml - ``` - - **For GitLab, specify the API endpoint in the format:** - - ```javascript - https://gitlab.com/api/v4/projects/{Project ID}/repository/files/testsharding%2Eyml/raw?ref=master - ``` - - Where: - - - Each special character that the file contains has to be encoded. In the example above - "%2E” is an encoded point (".”) - - - The ref value is the branch name (master for this example) - - - **For BitBucket Data Center (on premise), use the following URL format:** - - ```javascript - http://{datacenter server IP}/rest/api/1.0/projects/{projectKey}/repos/{repository name}/raw/testsharding.yml - ``` - - **For BitBucket Cloud, use one of the following:** - - - For source code files, specify the API endpoint: - - ```javascript - https://api.bitbucket.org/2.0/repositories/{workspace}/{repository name}/src/{GUID- the Commit hash string}/testsharding.yml - ``` - - - For download files (files residing in the repository's "Downloads" folder), specify this endpoint: - - ```javascript - https://api.bitbucket.org/2.0/repositories/{workspace}/{repository name}/downloads/site.yml - ``` - - :::important - If the URL is private (HTTPS), the VM will need to have a valid SSL certificate. To disable the certificate check, open **Resource Manager Client>Resource Families>Configuration Services** (**Ansible Configuration** or **Custom Script Configuration**n) and set the **Verify Certificate** attribute to **False**. - ::: - - **User/Password**: (For private repositories) Access credentials or token to the script/playbook's online repository. - - - **Token**: (For private repositories) Access token to the script/playbook's online repository. - - For GitHub and GitLab, specify the API token. For BitBucket Cloud, set the repo's "App Password" in the App template's **Password** field. For BitBucket Data Center, specify the personal access token. - - - :::note Notes: - - **For Custom Script configurations**: In SSH mode, only bash and sh scripts are allowed. In WinRM mode, only PowerShell scripts are allowed. WinRM over HTTPS only applies to custom scripts at this time. If WinRM is configured to run over HTTPS, the execution server will first try to run the custom script over HTTPS and then fall back to HTTP if HTTPS is unsuccessful. To prevent the fallback, set the **winrm_transport** parameter to **ssl**. - - **For Ansible configurations**: The Ansible playbook must be a YML or YAML file. To specify multiple playbooks or a hierarchy of an Ansible project, you can specify multiple Ansible playbooks or a ZIP package. For example: `https://raw.githubusercontent.com/QualiSystemsLab/private-repo-zip-download/master/README.zip` - - If a ZIP containing 2 or more playbooks is specified, CloudShell will use the playbook file titled `site.yml` or `site.yaml`. If the file is missing, the App's deployment will fail. - ::: -
    Inventory Groups - (For Ansible) Specify the host groups for the application to be installed, separated by semicolons (;). The newly deployed VM will be associated to these groups, thus allowing plays that target these groups to run on the VM. - - For example: `Servers/AppServers;Servers/DBServers` -
    Parameters - Parameters to be passed to the Ansible playbook or custom script. Specify the parameters and their default values. - - In the blueprint or sandbox diagram, privileged users can also set the parameter to receive the value that is specified for a global input when reserving a sandbox containing the App. This is done by selecting the global input when editing the App in the blueprint or sandbox diagram. For example, a global input that specifies the build number of a product to be tested or which components of a product to install. - :::important - (For Ansible) To customize the port to be used to communicate with the VM, add the `Ansible_port` parameter. Default: `SSH` / `Port: 22` / `WinRM: 5985`. - ::: -
    Additional Arguments - (For Ansible) Define arguments to be passed to the execution of the playbook (`Ansible-playbook` command). For example, `-v` will set verbose mode on while `-f` will set the maximum number of VMs to be handled in parallel. Multiple arguments can be given, separated by spaces. For additional information on possible arguments, see the official Ansible documentation. - - The arguments must be specified in **Resource Manager Client > Configuration Services** family > **Ansible Configuration** model > **Ansible Additional Arguments** attribute. - :::note - The arguments are defined globally for all Apps using Ansible. - ::: - :::important - To configure Ansible to connect to certified hosts only (Linux VMs with a valid 'known\_hosts' key), include the following additional arguments: `--ssh-extra-args='-o StrictHostKeyChecking=yes'` - ::: -
    - - 2. To enable the end-user to rerun the App's configuration management on the deployed App in the sandbox, select **Allow rerunning configuration management for resources deployed from the App**. Once the App's deployment completes, a **Rerun Configuration Management** command is included in the deployed App's **Application Commands** pane. For details, see [Run App Commands](../../../../../portal/sandboxes/sandbox-workspace/apps/run-app-commands.md). This is useful for rolling back the App's VM to its original state. - 3. To enable blueprint and sandbox owners to modify the App's Configuration Management details, select **Allow blueprint/sandbox owners to modify the App's Configuration Management**. The following details can be modified: playbook/script, authentication details, inventory groups, and parameters. Note that the modifications only apply to the blueprint or sandbox of the instance. - 4. Optionally click the **Add New Script/Playbook** link at the bottom right to add additional custom scripts/Ansible playbooks to the App. The scripts will run in their display order, from top to bottom. You can drag scripts up or down to rearrange. - 5. To change the script's alias, click the script's name and change as appropriate. - - ![](/Images/CloudShell-Portal/Manage/RenameConfigManageScript.png) - - -9. In the left pane, click **App Resource** to optionally set the VM's operating system user credentials (for example, to connect to the VM via RDP or SSH). You can also change the deployed App's Shell. - - ![](/Images/CloudShell-Portal/Manage/AppResource.png) - :::important - To help sandbox end-users connect to the VM, it is recommended to include the **User** and **Password** in the blueprint's instructions. For additional information, see [Add Instructions](../../../../../portal/blueprints/creating-blueprints/add-instructions.md). - ::: - - - - - - - - - - - - - - - - - - - - -
    AttributeDescription
    Shell - The Shell on which the App's VMs are based. When an App is deployed in a sandbox, it changes into a "deployed App resource", which is based on the selected Shell. By default, the "Generic App Model" Shell is used. - - Deployed Apps include a default set of commands such as Power On and Refresh IP, and the VM's **User** and **Password** attributes, as explained below. - :::note - Changing the Shell might cause additional fields to become visible and you may need to enter further information. - ::: -
    User - User defined in the App's image. The **User/Password** credentials are used by QualiX to create in-browser connections to the VM from within the sandbox. - - :::note Notes: - - For AWS instances, make sure to set the **User** of a user that already exists on the Amazon machine image. For custom images, the image owner should know the credentials, while community/marketplace images have the image's credentials listed in their documentation. - - Azure VM username and password restrictions apply. For details, see [Frequently asked question about Windows Virtual Machines](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/faq). - - For Azure Marketplace images, CloudShell will create a user on the VM based on the **User/Password** credentials you specify. - - For Azure Marketplace VMs, if the user is not set, CloudShell will set **adminuser** as the default user name. - ::: -
    Password - VM user's password. - - :::note Notes: - - For AWS Marketplace images, leave the **Password** empty. The AWS shell generates a new key-pair for each sandbox, which QualiX will use to establish the in-browser connection. - - For Azure Marketplace images: - - If the password is not set, only the user name will be required. For Linux VMs, CloudShell will create an SSH key-pair to enable a secure connection. - - If the password is set, it will be displayed as asterisks (\*\*\*\*\*\*) in the blueprint or sandbox. - ::: -
    - -10. Click **Done**. - - The new App template is displayed in the **Apps** page. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-cloud-provider-resource.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-cloud-provider-resource.md deleted file mode 100644 index e845402baa..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/add-an-azure-cloud-provider-resource.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Add an Azure Cloud Provider Resource - -The **Microsoft Azure** cloud provider enables the deployment of Azure virtual machines from an Azure image. -:::tip -We strongly recommend using the 2nd Gen version of the shell, which provides significant enhancements and capabilities, and is tamper-resistant from within CloudShell, ensuring your Azure cloud provider resources and Apps are in pristine condition. Useful articles: [Replacing the 1st Gen shell with a 2nd Gen version](../../../../../devguide/reference/migrate-1st-gen-shell-to-2nd-gen-shell.md#replacing-the-1st-gen-shell-with-a-2nd-gen-version), [Cloud Provider Shells - Features and Capabilities Per Release](../../../cloud-provider-2g-shells-features-and-capabilities.md). -::: -**To add an Azure cloud provider resource:** - -1. Log in to the CloudShell domain in which this resource will reside. This will enable the Apps based on this cloud provider resource to be usable in this domain. -2. In the **Inventory** dashboard, in the **Resources** tab, click the folder in which you want to create the resource. -3. Click **\+ Add New**. -4. In the **Create New Resource** dialog box, select the **Microsoft Azure** cloud provider template. To use the Azure 2nd Gen shell, select **Microsoft Azure Cloud Provider 2G**. -5. Enter a **Name** for the Azure resource. - :::note - The resource's name has a limit of 100 characters and can only contain alpha-numeric characters, spaces, and the following characters: | . - \_ \] \[ - ::: -6. Click **Create**. - - The **Resource** dialog box is displayed. - - ![](/Images/Admin-Guide/Inventory-Operations/AzureResourceDiscoveryInformation.png) - -7. Enter the required information. - :::note - All Azure resources must belong to the specified region. - ::: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeSupporting shell versionDescription
    RegionAll - The Azure region to be used by this cloud provider resource. For example, "East US". - :::note - The Azure region must have the **CloudShell Management resource group** configured. All Azure regions are supported by CloudShell. - ::: -
    VM SizeAll - The size of the Microsoft Azure VM. The VM size determines the CPU, memory and networking capacity of the VM. By default: “Standard\_A3”. - - For additional information, see the Azure help page [Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes) or use Azure CLI to get a list of your region's supported sizes. - :::note - The VM size can be changed when creating the App in the **Manage** dashboard. - ::: -
    Networks in UseAll - Comma-separated list of CIDRs to be excluded when allocating sandbox networks. The value must include at least the CloudShell Management VNet. - - For example, `10.0.0.0/24,10.1.0.0/16,172.31.0.0/24` -
    Azure Subscription IDAllThe **Subscription ID** of the Azure user.
    Azure Tenant IDAll - The ID of the Azure tenant that is associated with your Azure Active Directory (AAD) instance - called **Directory (tenant) ID** in Azure. For example: "ccd13026-98e3-4e90-01f4-28e2afdf3213". - - The tenant ID can be retrieved when creating the Azure API web application or from Azure CLI. For more information, see [Configure Azure API to work with CloudShell](./configure-azure-api-to-work-with-cloudshell.md). -
    Azure Application IDAll - The Azure API web application's **Application (client) ID**. - - The application ID allows CloudShell to access the Azure API and is generated as part of the web application’s configuration process. For more information, see [Configure Azure API to work with CloudShell](./configure-azure-api-to-work-with-cloudshell.md). -
    Azure Application KeyAll - The Azure API web application's **client secret**. - - The application key allows CloudShell to access the Azure API and is generated as part of the Azure API web application’s configuration process. For more information, see [Configure Azure API to work with CloudShell](./configure-azure-api-to-work-with-cloudshell.md). -
    Management Group NameAllThe name of the Management Resource Group.
    Sandbox Virtual Network NameAzure 2nd Gen shell only - The name of the Sandbox VNet under the Management Resource Group. - - :::note Notes: - - In dedicated mode, the sandbox subnet will be created in this VNet. - - In predefined mode, you must make sure the subnet to be used is located within this VNet. - ::: -
    Management Virtual Network NameAzure 2nd Gen shell only(Optional) The name of the Management VNet under the Management Resource Group. Used to store management network security rules.
    Additional Mgmt NetworksAll - Networks to be allowed to interact with all sandboxes. This is used for allowing connectivity to Azure resources outside the Management VNet. - - The syntax is comma separated CIDRs. For example, "10.0.0.0/24,10.1.0.0/16,172.31.0.0/24". -
    Custom Tags2G - Semi-colon separated list of up to 9 tags to be applied to all related Azure objects created during the App deployment, such as the sandbox's resource group, VNETs, subnets, NSGs and VMs. - - Attribute supports the following syntax: \[TagName\]=\[TagValue\]; \[TagName\]=\[TagValue\]. For example: “Tag1=Val1;Tag2=Val2” -
    Private IP Allocation MethodAll - Method to be used to assign private IP addresses to VMs. Options are: - - - **Azure Allocation**: (Default. Recommended option) Azure assigns private IPs when creating the network interface. - - **CloudShell Allocation**: In this method, the Azure cloud provider resource assigns the private IPs for the network interface from the region's subnet CIDR. When the VM is deleted, the assigned IPs are released. - - :::note - When using this option, you can use the **GetAvailablePrivateIP** command (on the Azure cloud provider resource) to get an IP that will not be used by CloudShell when allocating any future private IPs. You can use this IP when creating Azure VMs independently from CloudShell. - ::: -
    Availability Zones2G - Specify the Availability Zone (1, 2, or 3) in which the App’s VM, managed disk and public IP (if available) will be deployed. Leave empty to deploy directly to the region. - - For details and supported regions, see [Regions and availability zones](https://learn.microsoft.com/en-us/azure/availability-zones/az-overview). -
    Key Vault2G - (Mandatory for QualiX connections to Azure machines) Name of the key vault to be used to securely store private ssh keys used for in-browser connections via QualiX. CloudShell will automatically delete the keys when the sandbox ends. - - To use private SSH keys for QualiX connections, grant the **Key Vault Secrets Officer** role to your Azure integration's web application to allow CloudShell to dynamically store and delete the secrets from the key vault. For details, see this official Microsoft docs article on [Key Vault keys and secrets](https://learn.microsoft.com/en-us/azure/key-vault/general/rbac-guide?tabs=azure-cli). - - Key Vault name must be a 3-24 character string, containing only 0-9, a-z, A-Z, and -. -
    Execution Server SelectorAll - (This attribute needs to be added to the shell via the **Manage > Shells > Details / Edit** dialog box) This attribute points to a pre-defined group of execution servers (grouped by a common **Execution Server Selector** value). To make the association, enter the same value you specified on the execution server. - - For additional information on managing App deployments per domains, see [Managing Public Cloud Apps in Domains](../../managing-public-cloud-apps-in-domains.md). -
    - -8. Click **Start Discovery**. - - When the discovery process completes, a confirmation message is displayed. The cloud provider resource is displayed in the **Inventory** dashboard in CloudShell Portal and in Resource Manager Client. - - To customize the App deployment types and publish App orchestration parameters, see [Customizing App Deployment Types](../../../customizing-app-deployment-types.md) - - -9. Next, [Configure an Execution Server Selector for Azure](./configure-an-execution-server-selector-for-azure.md). diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/configure-an-execution-server-selector-for-azure.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/configure-an-execution-server-selector-for-azure.md deleted file mode 100644 index 5899492eae..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/configure-an-execution-server-selector-for-azure.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Configure an Execution Server Selector for Azure - -*This article explains how to associate an Execution Server to Azure Apps. To learn how to associate an Execution Server to resources, other Apps and blueprints, see [Setting Up Execution Servers to Run Commands](../../../../cloudshell-execution-server-configurations/setting-up-execution-servers-to-run-commands.md).* - -The CloudShell Management VNet contains an Execution Server called "**Azure-\**" (for example, "Azure\-East US"), which resides in a dedicated VM called **ExecutionServer\-VM**. This Execution Server is responsible for running the App's deployment and automation, as well as configuration management operations defined on the App. As this is a Linux Execution Server, it does not support Suite executions. - -In CloudShell, this Execution Server needs to be associated with the Azure cloud provider resource via the **Execution Server Selector** attribute. This is achieved by setting the same value for this attribute in the Azure cloud provider resource and in the deployed App shell in the App template's **App Resource** page. Note that this Execution Server will also run any configuration management operations defined in the App. For information about managing, troubleshooting and upgrading Execution Servers on Azure, see [Managing the Azure Execution Server](../managing-the-azure-execution-server.md). -:::important -If CloudShell Server is installed on Azure, rerun the Execution Server's configuration, as explained in [Upgrading an existing Execution Server](../managing-the-azure-execution-server.md#upgrading-an-existing-execution-server),and specify the CloudShell Server's private IP. Then, perform the below steps. -::: -**To add and configure the Execution Server Selector attribute:** - -1. In **CloudShell Portal**, configure the Execution Server: - - 1. Open the **Manage>Execution Servers>Servers** page. - 2. Find the Execution Server called "Azure-\", open its action menu and click **Attributes**. - 3. Select the **Execution Server Selector** check box and enter the value you entered for the Azure cloud provider in the previous step. - - ![](/Images/Admin-Guide/Azure-deployment-type/SelectAzureExecutionServer.png) - -2. Click **Done**. -3. When creating the App template, specify the same value on the **Execution Server Selector** attribute in the relevant App's **App Resource** page. -4. Click **Done**. - -5. Next, [Configure the Qualix Server for Azure](./configure-the-qualix-server-for-azure.md) diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/configure-azure-api-to-work-with-cloudshell.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/configure-azure-api-to-work-with-cloudshell.md deleted file mode 100644 index dfa064ae90..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/configure-azure-api-to-work-with-cloudshell.md +++ /dev/null @@ -1,154 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Configure Azure API to work with CloudShell - -CloudShell Apps communicate with Azure using the Azure API. To enable the two platforms to work with each other, you need to add a web application that has permission to use the Azure API. - -:::note Notes: -- You will need an Azure Global Administrator, Application Administrator or Cloud Application Administrator role to perform this procedure. -- During the app registration process, you will need to save the subscription ID, client ID, tenant ID, and client secret key for later use in your CloudShell "cloud provider resource". -::: -This configuration is a three-step process: - -1. [Add an Azure web application](./configure-azure-api-to-work-with-cloudshell.md#add-an-azure-web-application) -2. [Delegate Azure API permissions to the web application](./configure-azure-api-to-work-with-cloudshell.md#delegate-azure-api-permissions-to-the-web-application) -3. [Configure the web application as Contributor](./configure-azure-api-to-work-with-cloudshell.md#configure-the-web-application-as-contributor) - -## Add an Azure web application - -**To add an Azure web application:** - -1. Log in to [https://portal.azure.com](https://portal.azure.com/#). -2. Open the **Subscriptions** page and make sure you have an active subscription. - - ![](/Images/Admin-Guide/Azure-deployment-type/ActiveSubscription.png) - -3. Make sure your subscription has the appropriate permissions. - - 1. From the user menu, click the **More links** button and select **My permissions**. - - ![](/Images/Admin-Guide/Azure-deployment-type/ShowUserPermissions.png) - - 2. In the **My permissions** blade, click **Resource Provider Status**. - 3. In the **Resource Provider Status** blade, make sure the following permissions are registered (register any missing ones): - - - - - - - - -
    -
      -
    • Microsoft.Compute
    • -
    • microsoft.support
    • -
    • Microsoft.Resources
    • -
    • Microsoft.Features
    • -
    • - Microsoft.Network -
    • -
    -
    -
      -
    • Microsoft.Authorization
    • -
    • Microsoft.Storage
    • -
    • Microsoft.OperationalInsights
    • -
    -
    - -4. Return to the **Subscriptions** page and copy and store the **Subscription ID** somewhere you'll remember. - - ![](/Images/Admin-Guide/Azure-deployment-type/subscription2.png) - -5. From the left pane, select **Azure Active Directory**. -6. In the active directory's blade, click **App registrations**. -7. In the **App registrations** blade, click the **New registration** button. -8. Enter the new web application's settings: - - | Parameter | Description | - | --- | --- | - | Name | Name of the web application. For example, "CloudShell App". | - | Supported account types | Select **Accounts in this organizational directory only (\ only - Single tenant)**. | - | Redirect URL | Select **Web** and enter a URL. For example, "https://quali.com". This is required for creating the web application but does not affect it. | - -9. Click **Register** at the bottom of the blade. - - The new web application is displayed. - - ![](/Images/Admin-Guide/Azure-deployment-type/NewWebApp.png) - -10. Copy and store the **Application (client) ID** and **Directory (tenant) ID**. You will need these values when creating the cloud provider resource in CloudShell. - -11. Proceed to the next section to delegate Azure API permissions to the web application. - -## Delegate Azure API permissions to the web application - -**To delegate Azure API permissions to the web application:** - -1. Return to the **App registrations** blade of the subscription's active directory. -2. Click the web application you created in the previous section. If you don't see the web application, select **All applications**. -3. In the web application's page, click **API permissions** and do the following: - - 1. Delegate **Azure Service Management** permission: Click **Add a permission**. In the **Request API permissions** blade, in the **Microsoft APIs** tab, click the **Azure Service Management** tile, make sure the **Delegated permissions** tile is selected and select the **Access Azure Service Management as organization users** checkbox. Click **Add permissions** at the bottom of the blade. - - 2. Make sure the **Sign in and read user profile** permission was delegated for **Microsoft Graph**. If not, click **Add a permission**. In the **Request API permissions** blade, in the **Microsoft APIs** tab, scroll down and click the **Microsoft Graph** tile. Select **Delegated permissions**, expand **User** and select **User.Read (Sign in and read user profile)**. Click **Add permissions** at the bottom of the blade. - - The API permissions blade should look like this: - - ![](/Images/Admin-Guide/Azure-deployment-type/RequiredPermissions.png) - - 3. Make sure the **Grant admin consent for \** link is checked next to the **Add a permission** button. - -4. Next, create a **client secret** (Azure application) key to be used by the CloudShell App for authentication with Azure. - 1. In the web application's page, click **Certificates & secrets**. - 2. Click **New client secret** and set it to expire **In 2 years**. - 3. Click **Add**. - - The client secret key is displayed. - - ![](/Images/Admin-Guide/Azure-deployment-type/SecretKey.png) - - 4. Copy and store the key value somewhere you'll remember. This is the **Azure Application Key** you will need to specify in the Azure cloud provider resource in CloudShell. - :::note - The client secret key is displayed only once and will disappear when you leave this blade. - ::: -5. Proceed to the next section to configure the web application as **Contributor**. - -## Configure the web application as Contributor - -The **Contributor** role enables CloudShell to create and manage virtual machines and other Azure services. - -**To configure the Azure web application as Contributor:** - -1. Return to the **Subscriptions** page and click the subscription's name. - - For example, **VS Account**: - - ![](/Images/Admin-Guide/Azure-deployment-type/subscription.png) - -2. In the blade that appears, click **Access control (IAM)**. - - The **Access Control** blade is displayed. - :::note - If you don't see this blade, clear your browser's cache and refresh the page. - ::: -3. Click **Add** and select **Add Role assignment**. -4. In the **Add role assignment** blade, in the **Role** tab, select the **Contributor** role. -5. Click **Next**. -6. Click **Select members**, and search for the web application you created. - - For example: - - ![](/Images/Admin-Guide/Azure-deployment-type/AddUsersSelectApp.png) - -7. Select the app and click **Select** at the bottom of the blade. - -8. Click **Review + assign**. -9. To verify that the web application was created correctly, in the **Access control (IAM)** blade, click the **Role assignments** tab and make sure it is displayed as a **Contributor**. - - ![](/Images/Admin-Guide/Azure-deployment-type/NewContributorWebApp.png) - -10. Next, [Create a Management Resource Group and VNets](./create-a-management-resource-group-and-vnets.md). diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/configure-the-qualix-server-for-azure.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/configure-the-qualix-server-for-azure.md deleted file mode 100644 index 9b6016d2cc..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/configure-the-qualix-server-for-azure.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -sidebar_position: 7 ---- - -# Configure the Qualix Server for Azure - -- If the only QualiX server in your CloudShell deployment is the one in the CloudShell Management VNet in Azure, refer to the [QualiX Installation and Configuration](../../../../../install-configure/qualix/index.md) on how to configure it, and for the server address, use the **QualiXPublicIp** output from the Management Resource Group deployment process - see [Create a Management Resource Group and VNets](./create-a-management-resource-group-and-vnets.md). -- If there are more QualiX servers in your CloudShell deployments, do the following for each relevant server: - 1. Install QualiX version 2.3 or above. - 2. Use an attribute to hold the QualiX Server address, and customize the `UniversalSettings.xml` file on the Quali Server machine to have Quali Server take the QualiX Server address from this attribute. - 3. Add this attribute to the **Generic App Model** and set its value in all Azure templates defined in the App catalog for this region. Each App must have in this attribute the address of the QualiX Server in the CloudShell Management VNet of its region. - -- If you selected an internal deployment of the CloudShell Management VNet, the QualiX Server does not have a Public IP and is accessible only by the network that is connected via VPN to the CloudShell Management VNet, which is the network you defined in the **On Premise CIDR** input parameter when you created the CloudShell Management VNet. In this case, use the QualiX VM's private IP as the server address in the `ServerUniversalSettings.xml`. - -- If CloudShell Portal is installed on Azure, in the `ServerUniversalSettings.xml`, specify the CloudShell Portal's private IP. - -## Related Topics - -- [Connect Remotely to Devices with QualiX (RDP, SSH, Telnet)](../../../../../portal/sandboxes/sandbox-workspace/resources/connect-remotely-with-qualix.md) diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/connect-the-cloudshell-management-vnet-to-quali-server.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/connect-the-cloudshell-management-vnet-to-quali-server.md deleted file mode 100644 index 4eaa2acec4..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/connect-the-cloudshell-management-vnet-to-quali-server.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Connect the CloudShell Management VNet to Quali Server - -*Note that this procedure only applies to scenarios where Quali Server is not installed in Azure. If Quali Server is installed on Azure, see [Integrating Azure with Cloud-based CloudShell Installation](../integrating-azure-with-cloud-based-cloudshell-installation.md).* - -This article guides you on how to set up the VPN connection between Quali Server and Azure. -:::note -This can be done in various ways and is subject to your organization’s IT policy. For illustration purposes, this article shows how to set up a site-to-site VPN connection. -::: -A VPN connection is needed to allow the execution server installed on Azure to work with CloudShell, and to allow resources deployed on Azure to connect back to CloudShell resources that are on your private network, like on prem devices and vCenter VMs. - -For this procedure, you will need the IP address of your Quali Server VPN endpoint (provided by your IT administrator) and the **VPN Public IP**, which is created by the Azure Template deployment and can be found in the management resource group’s VPN deployment output. - -**To connect the CloudShell Management VNet to Quali Server:** - -1. Log in to [https://portal.azure.com/](https://portal.azure.com/). -2. Open the **Local network gateways** page. -3. Click the name of the local network gateway residing in the management resource group created by the Azure Template deployment. - -4. In the blade that appears, click **Configuration**. - - The **Configuration** blade is displayed. - -5. The configuration parameters should already be filled out using the values you specified in the Azure template. - - | Parameter | Description | - | --- | --- | - | IP address | The IP address defined in the Azure template's **VPN Address** parameter. of the Quali Server's VPN endpoint specified in the Azure Template. | - | Address space | The IP range (in CIDR notation) defined in the Azure template's **On Premise CIDR** parameter. This range will be used by the CloudShell Management VNet and by the virtual machines that will be created by CloudShell. | - -6. Click **Save**. -7. Click **Connections**. - - The **Connections** blade is displayed. - -8. In the blade that appears, click **Add**. - - The **Add connection** blade is displayed. - - ![](/Images/Admin-Guide/Azure-deployment-type/AzureAddConnectionBlade.png) - -9. Fill in the connection's parameters. - - | Parameter | Description | - | --- | --- | - | Name | Name for the connection. | - | Connection type | Type of connection to be made. By design, **Site-to-site** is selected for security and encryption reasons. | - | Virtual network gateway | Azure virtual network to be used by this connection.
    Select the virtual network in the management resource group created by the Azure Template deployment | - | Local network gateway | Local network gateway for which a connection will be added. | - | Shared key (PSK) | Encryption key to be used to encrypt the connection.
    The same shared key must be used in both the virtual network and local network gateways. If your gateway device doesn't provide one, you can make one up here and provide it to your device. | - | Subscription | The subscription can't be changed when adding a connection to an existing peer. | - | Resource group | The resource group can't be changed when adding a connection to an existing peer. | - | Location | The location can't be changed when adding a connection to an existing peer. | - -10. Click **OK**. - - The connection is created. For more information about the connection, open the gateway's **Connections** blade or click the **Create connection** notification - - ![](/Images/Admin-Guide/Azure-deployment-type/CreateConnectionNotification.png) - -11. Next, [Add an Azure Cloud Provider Resource](./add-an-azure-cloud-provider-resource.md). diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/create-a-management-resource-group-and-vnets.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/create-a-management-resource-group-and-vnets.md deleted file mode 100644 index 3d52810aa3..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/create-a-management-resource-group-and-vnets.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Create a Management Resource Group and VNets - -The **Azure Resource Template** deployment process creates the CloudShell management resource group, the CloudShell Management VNet and CloudShell Sandbox VNet within the resource group and a peering between these networks, which are detailed in [Microsoft Azure Integration](./index.md). You will then need to configure the Execution Server and QualiX Server created in the CloudShell Management VNet to access the Quali Server. - -:::note Notes: -- We strongly recommend using the new and improved [Azure 2nd Gen shell](https://github.com/orgs/QualiSystems/discussions/1687). If you're using the 1st Gen version of the shell that comes out of the box with CloudShell, see [this version](https://help-archive.quali.com/Online%20Help/2021.1/Portal/Content/Admn/Azure-Crt-Mng-RSc-Grp.htm) of the online help. -- The below procedure assumes you already have CloudShell Server installed locally. However, if you plan on installing CloudShell Server on the Azure region, see [Integrating Azure with Cloud-based CloudShell Installation](../integrating-azure-with-cloud-based-cloudshell-installation.md). -::: -**To create a CloudShell management resource group and the required networks:** - -1. Import the Azure template file from [CloudShell Download Center](https://support.quali.com/hc/en-us/articles/231613247-Quali-s-Download-Center). The template file is provided as a JSON file for each CloudShell release version. -2. Log in to [https://portal.azure.com](https://portal.azure.com/#) and open the **Template specs** page. -3. Click **Import template** and import the Azure template file. - - ![](/Images/Admin-Guide/Azure-deployment-type/TemplateSpecImport.png) - -4. In the **Basics** tab, fill in the template spec's mandatory details (Name, Subscription, Resource Group, Location, Version), and click **Next** until the template spec is created. - - ![](/Images/Admin-Guide/Azure-deployment-type/TemplateSpecCreation.png) - -5. Click the name of the new template spec. - - ![](/Images/Admin-Guide/Azure-deployment-type/ClickAzureTemplate.png) - -6. In the blade that appears, click **Deploy**. - - The **Custom deployment** page is displayed. - - ![](/Images/Admin-Guide/Azure-deployment-type/TemplateSettingsBlade.png) - - 1. Specify the **Subscription**, **Resource group**. - 2. In the **Instance details** area, fill in the deployment parameters. - - | Parameter | Required? | Description | - | --- | --- | --- | - | CloudShell Admin | Required | The CloudShell admin user | - | CloudShell Admin Password | Required | The CloudShell admin’s password | - | CloudShell Server IP | Required | The IP address of the Quali Server | - | CloudShell SSH User Name | Required | Create a user name and password to be used to connect to the QualiX and Execution Server that will be created in Azure.
    Make sure you save these credentials for future use. | - | CloudShell SSH Password | Required | Create a password to be used with the **CloudShell SSH User Name**.
    Password must contain 12-72 characters and include 1 lower case character, 1 upper case character and 1 special character. | - | Management Vnet CIDR | Required | The IP range (in CIDR notation) to be used for the CloudShell Management VNet. Specify a class C CIDR (/24).
    For example: "192.168.120.0/24". | - | Management Vnet VPN Subnet CIDR | Required | (Relevant if **Create VPN Endpoint** is set to **True**) The IP range (in CIDR notation) of the subnet in which the VPN connection is set. This range must be included in the CloudShell Management VNet's range.
    For example: "192.168.120.0/28". | - | Management Vnet Subnet CIDR | Required | The IP range (in CIDR notation) of the subnet to be used by the CloudShell Management VNet.
    This range must be included in the CloudShell Management VNet's range. This subnet is used by CloudShell components such as QualiX Server and Execution Server.
    For example: "192.168.120.16/28". | - | Deployment Mode | Required | Use external deployment to create a QualiX VM with a public IP, or internal deployment to create the QualiX VM with a private IP. Possible values are **External** and **Internal**.
    The private IP is accessible from the networks that are connected to the CloudShell Management VNet (such as the network in which the Quali Server resides). | - | Create VPN Endpoint | Required | Set to **True** to create a VPN endpoint to the CloudShell Management VNet to support a hybrid scenario. | - | On Premise CIDR | Optional | The IP range (in CIDR notation) of the private network in which the Quali Server resides (outside of the CloudShell Management VNet). | - | VPN Address | Optional | The public IP address of the router on the network in which Quali Server resides. | - | Sandbox Vnet CIDR | Optional | The IP range (in CIDR notation) to be used for the Sandbox VNet. | - | Sandbox Vnet Subnet CIDR | Optional | The IP range (in CIDR notation) of the default subnet that will be created for the Sandbox VNet. This range must be included in the Sandbox VNet's range. Note that after the template is deployed you can delete this redundant subnet manually. | - -7. Click **Review + create**, and then **Create**. - - The Template is being deployed. - - If an error message is displayed, click the message to learn more about the error. - ![](/Images/Admin-Guide/Azure-deployment-type/TemplateCreationError.png) - - To track the deployment's progress, click the **Notifications** button. - - ![](/Images/Admin-Guide/Azure-deployment-type/TemplateDeploymentNotification.png) - -8. The Azure Template deployment's output includes the QualiX Public IP and, if required, the VPN Public IP. You will need this information to connect to the Azure subnets and App VMs from CloudShell. - - 1. Click **Go to resource group** and then click the name of the resource group. - - ![](/Images/Admin-Guide/Azure-deployment-type/ClickResourceGroup.png) - - 2. In the blade that appears, click **Deployments**. - - ![](/Images/Admin-Guide/Azure-deployment-type/AzureDeployments.png) - - 3. For the **QualiX Public IP**, click the QualiX deployment and expand **Deployment Details**. - 4. (If VPN was configured in the Azure Template) For the **VPN Public IP**, click the CloudShell VPN deployment. -9. Next, if your installation requires a VPN connection, [Connect the CloudShell Management VNet to Quali Server](./connect-the-cloudshell-management-vnet-to-quali-server.md). If not, [Add an Azure Cloud Provider Resource](./add-an-azure-cloud-provider-resource.md). diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/index.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/index.md deleted file mode 100644 index 09161039ce..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/microsoft-azure-integration/index.md +++ /dev/null @@ -1,69 +0,0 @@ -# Microsoft Azure Integration - -The Azure deployment types integrate CloudShell with the Microsoft Azure public cloud. This integration enables the deployment of CloudShell Apps in Microsoft Azure. CloudShell supports deploying Azure virtual machines from Azure Marketplace images and Azure custom images as well as Azure Shared Gallery images using the Azure 2nd Gen shell. - -CloudShell supports two integration methods with Azure - "on prem" and "cloud". In "on prem", CloudShell Server is already installed locally and requires a VPN connection to Azure, while in "cloud", CloudShell needs to be installed on the Azure region along with the CloudShell integration resources. For details about the "cloud" method, see [Integrating Azure with Cloud-based CloudShell Installation](../integrating-azure-with-cloud-based-cloudshell-installation.md). - -The following diagram illustrates an Azure integration (with a local CloudShell installation) hosting two live sandboxes: - -![](/Images/Admin-Guide/Azure-deployment-type/Azure-architecture.png) - -The deployment architecture in Azure requires a management resource group to be created for each relevant Azure region (all Azure regions are supported by CloudShell). This resource group has two virtual networks (VNets): - -- **CloudShell-Management-VNet**: (Optional when using a cloud provider resource based on the Azure 2nd Gen shell) VNet containing two Azure virtual machines, which are always on: - - **Execution-Server-VM**: Execution Server to be used to deploy and manage the Azure virtual machines, and run scripts and commands on them. - - The Execution Server in the CloudShell Management VNet needs to access the Quali Server, which is located outside of the CloudShell Management VNet (on-premise, another Azure VNet or another public cloud). To allow this access, you need to configure a VPN between the CloudShell Management VNet and the network in which the Quali Server resides. - - - **QualiX-VM**: QualiX Server used to enable in-browser connections, such as RDP, Telnet and SSH access to Apps in the sandbox - -- **CloudShell-Sandbox-VNet**: VNet containing a subnet for each CloudShell sandbox, which hosts all Azure App virtual machines created within the sandbox and allows them to communicate with each other. The CloudShell Management VNet's QualiX Server and Execution Server have access both to this VNet and each virtual machine's operating system to run commands and installations on the sandboxes. -:::note -Keeping Azure resources, like the CloudShell Management VNet's virtual machines, running at all times entails a fixed monthly rate. -::: -When a new CloudShell sandbox with Azure Apps is starting, the out-of-the-box setup process creates a new subnet for the sandbox within the **CloudShell Sandbox VNet**. This VNet is connected to the CloudShell Management VNet using a VNet Peering connection. All Azure Apps within the same sandbox are deployed in this sandbox subnet (within the CloudShell Sandbox VNet), and a dedicated Azure resource group is created for each sandbox to hold all Azure resources related to that sandbox. This architecture allows both QualiX Server and the Execution Server to access the Apps in the sandbox while keeping the Apps within one sandbox isolated from Apps in other sandboxes. - -:::note Notes: -- Azure virtual machines in the same sandbox live in the same subnet and can interact with each other. -- CloudShell allows sandboxes to have multiple subnets. If multiple subnets are defined (in the blueprint), the setup process will create the defined subnet networks instead of the default subnet. For additional information, see [Subnet Connectivity](../../../../setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/index.md). -- When the sandbox ends, all related Azure resources, including the sandbox subnet, resource group and virtual machines are automatically deleted by CloudShell. -::: -:::tip -We strongly recommend using the 2nd Gen version of the shell, which provides significant enhancements and capabilities, and is tamper-resistant from within CloudShell, ensuring your Azure cloud provider resources and Apps are in pristine condition. Useful articles: [Replacing the 1st Gen shell with a 2nd Gen version](../../../../../devguide/reference/migrate-1st-gen-shell-to-2nd-gen-shell.md#replacing-the-1st-gen-shell-with-a-2nd-gen-version), [Cloud Provider Shells - Features and Capabilities Per Release](../../../cloud-provider-2g-shells-features-and-capabilities.md). -::: -## Azure installation workflow - -For each Azure region you want to integrate with CloudShell, perform the following steps: - - - - - - - -
    - -1. [Configure Azure API to work with CloudShell](./configure-azure-api-to-work-with-cloudshell.md) -2. [Create a Management Resource Group and VNets](./create-a-management-resource-group-and-vnets.md) -3. [Connect the CloudShell Management VNet to Quali Server](./connect-the-cloudshell-management-vnet-to-quali-server.md) -4. [Add an Azure Cloud Provider Resource](./add-an-azure-cloud-provider-resource.md) -5. [Add an Azure App Template](./add-an-azure-app-template.md) -6. [Configure an Execution Server Selector for Azure](./configure-an-execution-server-selector-for-azure.md) -7. [Configure the Qualix Server for Azure](./configure-the-qualix-server-for-azure.md) -
    - - -## Related Topics - -- [Managing Public Cloud Apps in Domains](../../managing-public-cloud-apps-in-domains.md) -- [Cost Management of Microsoft Azure Resources](../cost-management-of-microsoft-azure-resources.md) -- [Managing the Azure Execution Server](../managing-the-azure-execution-server.md) -- [Custom Routing for Azure in Sandboxes](../custom-routing-for-azure-in-sandboxes.md) -- [Azure Known Limitations](../azure-known-limitations.md) -- [Connecting Azure Apps to predefined subnets](../../../../../portal/sandboxes/sandbox-workspace/connect-resources-and-apps.md#connecting-azure-apps-to-predefined-subnets) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/using-multiple-azure-regions-in-cloudshell.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/using-multiple-azure-regions-in-cloudshell.md deleted file mode 100644 index fd8e06ae26..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/microsoft-azure-integration-and-configuration/using-multiple-azure-regions-in-cloudshell.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_position: 7 ---- - -# Using Multiple Azure Regions in CloudShell - -This article provides guidelines on how to configure your Azure cloud provider resources in CloudShell, in case of multiple interconnected regions in Azure. - -In each region that has a CloudShell integration, a VNET is created for hosting the content of the sandboxes that will be created in that region. This VNET is always created with the CIDR 10.0.0.0/8. In scenarios where CloudShell is integrated with two or more Azure regions that are connected to each other by VPN, this behavior may cause an allocation conflict when creating a sandbox in one of the regions. - -For illustration purposes, consider this scenario of a sandbox deploying subnets in two different regions, each with its own VMs: - -![](/Images/Admin-Guide/Azure-deployment-type/Multi-Azure-Deployment.png) - -**To successfully implement such a scenario:** - -- Make sure CloudShell is integrated with the Azure regions. -- Make sure to set up a VPN tunnel between the regions to allow networking between sandbox VNETs located on the different regions. -- In the same CloudShell domain, create different Azure cloud provider resources, one for each Azure region. -- Make sure the IP range available to each cloud provider resource does not conflict with the ranges of the other cloud provider resources. This is done by specifying the IPs or IP ranges to ignore in the cloud providers' **Networks in Use** attribute. So for example, to use the default CIDR 10.0.0.0/8 (which provides a range of 16,777,216 IPs) in two Azure regions: - - - Set region A's cloud provider resource to ignore the first half of the range (1 - 8,388,608) - - - Set region B's cloud provider resource to ignore the second half of the range (8,388,609 - 16,777,216) -- To set up network connectivity between each cloud provider's Apps, see [Subnet Connectivity - Points to Consider](../../../setting-up-cloudshell/inventory-operations/connectivity-control/subnet-connectivity/subnet-connectivity--points-to-consider.md). diff --git a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md b/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md deleted file mode 100644 index 997862adf1..0000000000 --- a/versioned_docs/version-2023.3/admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/setappsecuritygroups-code-example.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -sidebar_position: 4 -hide_table_of_contents: true ---- - -# SetAppSecurityGroups Code Example - -The following code sample uses the `SetAppSecurityGroups` CloudShell Automation API method to open port 22 on two deployed Apps, which belong to a subnet called `management`, from another deployed App in the sandbox. - -```python -controllerApp = next(x for x in sandbox.components.apps.values() if x.deployed_app.Name.startswith('Controller')) - -VirtualRouterApp_1 = next(x for x in sandbox.components.apps.values() if x.deployed_app.Name.startswith('Virtual Router_1')) - -VirtualRouterApp_2 = next(x for x in sandbox.components.apps.values() if x.deployed_app.Name.startswith('Virtual Router_2')) - -# Find IP of the controller App and append /32 to be in CIDR format: - -controllerAddress = controllerApp.FullAddress + '/32' - -# Find the ID of the 'management' subnet. We need this because we always open a port in a deployed App in the context of its network interface: - -mngtSubnet = next(x for x in sandbox.components.services.values() if x.Alias.startswith('Management')) - -mngtSubnetId = next(att.Value for att in mngtSubnet.Attributes if att.Name == 'Subnet Id') - -sandbox.automation_api.WriteMessageToReservationOutput(reservationId=sandbox.id, message='Management subnet id is {0}'.format(str(mngtSubnetId))) - -# Define a rule on the 'management' network interface that enables access to port 22, from the controller App's IP address: - -rule = SecurityGroupRule(FromPort='22', ToPort='22', Protocol='TCP', Source=str(controllerAddress)) - -conf = SecurityGroupsConfiguration(SubnetId=str(mngtSubnetId), Rules=[rule]) - -# Apply the rule to both Apps: - -sg1 = SecurityGroup(Name=VirtualRouterApp_1.deployed_app.Name, SecurityGroupsConfigurations=[conf]) - -sg2 = SecurityGroup(Name=VirtualRouterApp_2.deployed_app.Name, SecurityGroupsConfigurations=[conf]) - -#API call: - -sandbox.automation_api.SetAppSecurityGroups( - reservationId=sandbox.id, - securityGroups=[sg1, sg2] -) -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/_category_.json b/versioned_docs/version-2023.3/api-guide/_category_.json deleted file mode 100644 index 6e227099bd..0000000000 --- a/versioned_docs/version-2023.3/api-guide/_category_.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "label": "CloudShell API Guide", - "position": 5, - "link": { - "slug": "api-guide", - "type": "generated-index", - "description": "CloudShell provides several APIs for setting up and executing your lab and test activities." - } -} diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/_category_.json b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/_category_.json deleted file mode 100644 index d7ff917ef3..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "CloudShell Administration REST API", - "position": 2 -} diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-blueprints-to-domain.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-blueprints-to-domain.md deleted file mode 100644 index e09454f9e6..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-blueprints-to-domain.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -sidebar_position: 9 ---- - -# Add blueprints to domain - -### Description - -Adds one or more blueprints from different domains to the desired domain. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/domains/{id}/blueprints` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Domain's ID. Can be retrieved via [Get all domains](./get-all-domains.md).| - -### HTTP method - -`POST` - -### Request - -
    -Headers - - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Id | (string) Blueprint's id. | -| ValidateResourceAvailability | (string) Set to **true** to check that the blueprint's resources are available in the new domain. | -
    - -
    -Request example -```javascript -{ - "Blueprints": [ - { - "Id": "ca60106f-761b-4463-976f-8cc846bc10ff" - }, - { - "Id": "a68214a1-3c5d-4534-886d-a1d281e58f21" - } - ], - "ValidateResourceAvailability": true -} -``` -
    - -### Response - -
    -Response example -```javascript -{ - "Errors": [] -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-domains-to-group.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-domains-to-group.md deleted file mode 100644 index b04dd7dcb3..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-domains-to-group.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -sidebar_position: 23 ---- - - -# Add domains to group - -### Description - -Adds one or more domains to a given group. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/groups/{id}/domain` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Group's ID. Can be retrieved via [Get all groups](./get-all-groups.md). | - -### HTTP method - -`POST` - -### Request - - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Id | (string) Domain ids. Can be retrieved via [Get all domains](./get-all-domains.md). | -| ViewOnly | (bool) Specify true to add the group with "view only" permissions. | -
    - -
    -Request example - -```javascript -{ - "Domains": [ - { - "Id": "domain1 id" - }, - { - "Id": "domain2 id" - } - ], - "ViewOnly": true -} -``` -
    - -### Response - -
    -Response example - -```javascript -{ - "Errors": [] -} -``` -
    - -
    -Response code - -```javascript -201 Created -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-groups-to-domain.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-groups-to-domain.md deleted file mode 100644 index 9f58eda096..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-groups-to-domain.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -sidebar_position: 12 ---- - - -# Add groups to domain - -### Description - -Adds one or more groups to a given domain. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/domains/{id}/groups` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Domain's ID. Can be retrieved via [Get all domains](./get-all-domains.md).| - -### HTTP method - -`POST` - -### Request - - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Id | (string) Group id. Can be retrieved via [Get all groups](./get-all-groups.md). | -| ViewOnly | (bool) Specify true to add the group with "view only" permissions. | -
    - -
    -Request example - -```javascript -{ - "Groups": [ - { - "Id": 1, - "ViewOnly": false - } - ] -} -``` -
    - -### Response - -
    -Response example - -```javascript -{ - "Errors": [] -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-resource-to-domain.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-resource-to-domain.md deleted file mode 100644 index 6dbcdd6eac..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-resource-to-domain.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -sidebar_position: 15 ---- - -# Add resources to domain - -### Description - -Add resources from other domains to a give domain. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/domains/{id}/resources` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Domain's id. Can be retrieved via [Get all domains](./get-all-domains.md). | - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| id | (string) Resource id. Can be retrieved via [Get domain's resources](./get-domain-resources.md). | -| IncludeDescendants | (bool) (Optional) Include sub-resources in the domain. Default is **true**. | - -
    - -
    -Request example - -```javascript -{ - - "Resources": [ - { - "Id": "6deda6fb-8f56-4c12-ac29-00b3fb7756db", - "IncludeDescendants": true - } - ] -} -``` -
    - -### Response - -
    -Response example - -```javascript -{ - "Errors": [] -} -``` -
    - -
    -Response code - -```javascript -201 Created -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-users-to-group.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-users-to-group.md deleted file mode 100644 index d01e939bb3..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/add-users-to-group.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -sidebar_position: 26 ---- - -# Add users to group - -### Description - -Adds one or more users to a given group. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/groups/{id}/Users` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Group's ID. Can be retrieved via [Get all groups](./get-all-groups.md). | - -### HTTP method - -`POST` - -### Request - - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Id | (string) User's id. Can be retrieved via [Get all users](./get-all-users.md). | -
    - -
    -Request example - -```javascript -{ - "Users": [ - { - "Id": 0 - } - ] -} -``` -
    - -### Response - -
    -Response example - -```javascript -{ - "Errors": [] -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/create-domain.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/create-domain.md deleted file mode 100644 index d3675a2849..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/create-domain.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Create domain - -### Description - -Creates a new domain in CloudShell. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/domains` - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Name | (string) License pool name. | -| Description | (string) License pool's description. | -| Archived | (bool) (Optional) Specify "true" to create an archived domain. | -| EndTime (Optional) | (string) (Optional) Domain's expiration time. When this time is reached, the domain will still be accessible but no longer in use. | -| LicensePoolId | (string) (Optional) Name of the license pool to use for the domain. | -| Description | (string) (Optional) Domain's name. | - -
    - -
    -Request example - -```javascript -{ - "Archived": true, - "EndTime": "string", - "LicensePoolId": "string", - "EndTime": "05/20/2023 4:37:00 PM" - "Description": "string", - "Name": "string" -} -``` -
    - -### Response - -
    -Response example - -```javascript -{ - "Id": "e7d4289c-4355-435e-bc8f-aea0591af53c" -} -``` -
    - -
    -Response code - -```javascript -201 Created -``` -
    - diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/create-group.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/create-group.md deleted file mode 100644 index 2786ad8ac4..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/create-group.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -sidebar_position: 18 ---- - -# Create group - -### Description - -Creates one or more new CloudShell groups. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/groups` - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Name | (string) Group name. | -| Description | (string) Group description. | -| GroupRole | Group's role. Possible values are: External, Regular, DomainAdmin | - -
    - -
    -Request example - -```javascript -{ - "Groups": [ - { - "Name": "my group", - "Description": "my test group", - "groupRole": "Regular" - } - ] -} -``` -
    - -### Response - -
    -Response example - -```javascript -{ - "Groups": [ - { - "Name": "mygroup", - "Description": "my test group", - "ViewOnly": false, - "groupType": "UserDefined", - "groupRole": "Regular", - "Id": 7 - } - ], - "Errors": [] -} -``` -
    - -
    -Response code - -```javascript -201 Created -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/create-license-pool.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/create-license-pool.md deleted file mode 100644 index de88e55845..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/create-license-pool.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -sidebar_position: 38 ---- - -# Create license pool - -### Description - -Creates a new license pool in CloudShell. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/licensepools` - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Name | (bool) License pool name. | -| Description | (string) License pool's password | -| MaxConcurrentReservation | (int) Maximum number of licenses (sandbox reservations) allowed by the license pool. | -| Domains | (string) List of domain ids to add the license pool to. | -
    - -
    -Request example - -```javascript -{ - "Name": "NY license pool", - "Description": "License pool for New York team", - "MaxConcurrentReservation": 10, - "Domains": ["2702ce9e-2db8-4b1d-94d6-1c4bf1b40267", "be342a7f-e2b8-45c6-9b32-0869b505029c"] -} -``` -
    - -### Response - -
    -Response example - -```javascript -{ - "Name": "New York license pool", - "Description": "License pool for New York team", - "MaxConcurrentReservation": 10, - "Domains": [ - "dbaf480c-09f7-46d3-a2e2-e35d3e374a16", - "dcd91805-4e1c-48a8-88c7-d9805e876783" - ], - "CreateDate": "0001-01-01T00:00:00", - "Id": "18967cc7-f239-496c-a900-b04300a5dafc" -} -``` -
    - -
    -Response code - -```javascript -201 Created -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/create-user.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/create-user.md deleted file mode 100644 index 74fecfdf60..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/create-user.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -sidebar_position: 30 ---- - -# Create user - -### Description - -Creates a new user in CloudShell. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/users` - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Username | (bool) Username. | -| Password | (string) User's password | -| Email | (string) User's email address. | -| IsActive | (bool) **true** creates an active user. | -| IsAdmin | (bool) **true** creates a system administrator. | -| GroupIds | (string) Comma-separated list of group ids to add the user to. | -| TimeZoneInfold | (string) User's time zone. | -| MaxReservationDuration | (int) (Optional) Maximum allowed sandbox duration for the user (in minutes). Specify "-1" to use the default. | -| MaxConcurrentReservations | (int) (Optional) Maximum number of sandboxes the user can own at any time. Specify "-1" to use the default. | -| MaxScheduledSandboxes | (int) (Optional) Maximum number of scheduled (planned/future) sandboxes the user can have at any time. Specify "-1" to use the default. | -| MaxOwnedBlueprints | (int) (Optional) Maximum number of blueprints the user can own at any given time. Specify "-1" to use the default (unlimited) _This setting applies to admins, domain admins and regular users only._ | -| MaxSavedSandboxes | (int) (Optional) Maximum number of saved sandboxes the user can have at any time. Unlimited by default. _Applies to customers using the Save and Restore add-on._ Specify "-1" to use the default. | -
    - -
    -Request example - -```javascript -{ - "Username": "john m", - "Password": "1234", - "Email": "john@example.com", - "IsActive": true, - "IsAdmin": true, - "GroupIds": [ - 1 - ], - "TimeZoneInfoId": "Israel Standard Time", - "MaxReservationDuration": 1, - "MaxConcurrentReservations": 2, - "MaxScheduledSandboxes": 2, - "MaxOwnedBlueprints": 2, - "MaxSavedSandboxes": 0 -} -``` -
    - -### Response - -
    -Response example - -```javascript -{ - "Id": 14 -} -``` -
    - -
    -Response code - -```javascript -201 Created -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/cs-admin-rest-api-response-code.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/cs-admin-rest-api-response-code.md deleted file mode 100644 index 515b303d14..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/cs-admin-rest-api-response-code.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -sidebar_position: 1 -title: API Response Codes ---- - -# CloudShell Administration REST API Response Codes - -| Code | Description | Result | -| --- | --- | --- | -| 200 OK | Success | API call was successfully executed. | -| 201 Created | Success | API call was successfully executed | -| 202 | Accepted | Accept partial success only, as part of the request was completed. For example, if you requested to delete / add batch of groups to domain. | -| 400 | Bad Request | Missing or Invalid Value in request | -| 403 | Forbidden | Invalid permissions or username | -| 404 | Not Found | Matching Entity was not found by request values | -| 409 | Conflict | Already exists | \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/cs-admin-rest-api-usage.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/cs-admin-rest-api-usage.md deleted file mode 100644 index e68ca3e721..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/cs-admin-rest-api-usage.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -sidebar_position: 0 -title: How to use ---- - -# CloudShell Administration REST API Usage - -1. To use the API's methods, you must pass an authentication token. To obtain the token, execute the login method with a CloudShell system admin's credentials: - - PUT `http://:/Api/Auth/Login` - - ```javascript - { - "Username": "admin", - "Password": "admin", - "Token": null, - "Domain": "Global" - } - ``` - - For example: - - ![](/Images/API/RM-API-login.png) - -2. And feed the token you got in the response into the API requests as a Bearer Token: - - ![](/Images/API/RM-API-bearer-token.png) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/delete-domain.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/delete-domain.md deleted file mode 100644 index 081ed25811..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/delete-domain.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -sidebar_position: 7 ---- - -# Delete domain - -### Description - -Delete a specific domain from CloudShell. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/domains/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Domain's id. Can be retrieved via [Get all domains](./get-all-domains.md).| - -### HTTP method - -`DELETE` - -### Request - -
    -Headers - - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/delete-group.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/delete-group.md deleted file mode 100644 index b28895abc2..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/delete-group.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -sidebar_position: 21 ---- - -# Delete group - -### Description - -Deletes a group by ID from CloudShell. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/group/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Group's id. Can be retrieved via [Get all groups](./get-all-groups.md). | - -### HTTP method - -`DELETE` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/delete-license-pool.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/delete-license-pool.md deleted file mode 100644 index 37b08967f2..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/delete-license-pool.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -sidebar_position: 40 ---- - -# Delete license pool - -### Description - -Delete a specific license pool from CloudShell. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/licensepools/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| id | (string) License pool's id. Can be retrieved via [Get all license pools](./get-all-license-pools.md). | - -### HTTP method - -`DELETE` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/delete-user.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/delete-user.md deleted file mode 100644 index 12bf9dddbd..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/delete-user.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -sidebar_position: 32 ---- - -# Delete user - -### Description - -Delete a specific user from CloudShell. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/users/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| id | (string) User's id. Can be retrieved via [Get all users](./get-all-users.md) or [Get group's users](./get-group-users.md). | - -### HTTP method - -`DELETE` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` -
    - -### Response - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/edit-domain.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/edit-domain.md deleted file mode 100644 index f53d90df52..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/edit-domain.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Edit domain - -### Description - -Gets a list of all domains in CloudShell - -### URL - -`http://{Admin API IP}:{port#}/api/v1/domains/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Domain's id. Can be retrieved via [Get all domains](./get-all-domains.md). | - -### HTTP method - -`PUT` - -### Request - - -
    - -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body -| Parameter | Description/Comments | -| --- | --- | -| Name | (string) Domain name. | -| Description | (string) Domain description. | -| EndTime | (string) End time of domain's validity. When the end time is reached, the domain will be accessible but no longer in use. | -| Archived | (bool) **true** to archive the domain. | -| LicensePoolId | (string) Id of the license pool. Can be retrieved via [Get all license pools](./get-all-license-pools.md). | - -
    - -
    -Request example - -```javascript -{ - "Name": "MyFirstDomain", - "Description": "Updated domain", - "EndTime": "05/20/2023 4:37:00 PM", - "Archived": true, - "LicensePoolId": "7932E56D-057E-47FE-8E37-B00600A97C7F" - -} -``` - -```javascript -{ - "Description": "domain's new description", - "Name": "domain's new name" -} -``` -
    - -### Response - -
    -Response code - -```javascript -200 Ok -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/edit-group.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/edit-group.md deleted file mode 100644 index 4462ed0e23..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/edit-group.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -sidebar_position: 20 ---- - -# Edit group - -### Description - -Edit a group's details. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/groups/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Group's id. Can be retrieved via [Get all groups](./get-all-groups.md). | - -### HTTP method - -`PUT` - -### Request - - -
    - -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body -| Parameter | Description/Comments | -| --- | --- | -| Name | (string) Group name. | -| Description | (string) Group description. | -| GroupRole | Group's role. Possible values are: External, Regular, DomainAdmin | - -
    - -
    -Request example - -```javascript -{ - "Name": "my updated group name", - "Description": "Updated description", - "GroupRole": "Regular" -} -``` -
    - -### Response - -
    -Response code - -```javascript -200 Ok -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/edit-license-pool.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/edit-license-pool.md deleted file mode 100644 index 50caf4e347..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/edit-license-pool.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -sidebar_position: 39 ---- - -# Edit license pool - -### Description - -Edit a license pool's details.. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/licensepools/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| id | (string) License pool's id. Can be retrieved via [Get all license pools](./get-all-license-pools.md). | - -### HTTP method - -`PUT` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Name | (bool) License pool name. | -| Description | (string) License pool's password | -| MaxConcurrentReservation | (int) Maximum number of licenses (sandbox reservations) allowed by the license pool. | -| Domains | (string) List of domain ids to add the license pool to. | -
    - -
    -Request example - -```javascript -{ - "Name": "Test license pool", - "Description": "license pool for testing", - "MaxConcurrentReservation": 3, - "Domains": ["985c3306-fad7-4e85-a4e3-c44876149657"] -} -``` -
    - -### Response - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/edit-user.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/edit-user.md deleted file mode 100644 index acfa35492e..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/edit-user.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -sidebar_position: 31 ---- - -# Edit user - -### Description - -Edit a user's details.. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/users/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| id | (string) User's id. Can be retrieved via [Get all users](./get-all-users.md). | - -### HTTP method - -`PUT` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Username | (bool) Username. _Username cannot be modified._ | -| Password | (string) User's password | -| Email | (string) User's email address. | -| IsActive | (bool) **true** creates an active user. | -| IsAdmin | (bool) **true** creates a system administrator. | -| GroupIds | (string) Comma-separated list of group ids to add the user to. | -| TimeZoneInfold | (string) User's time zone. | -| MaxReservationDuration | (int) Maximum allowed sandbox duration for the user (in days). | -| MaxConcurrentReservations | (int) Maximum number of sandboxes the user can own at any time.. | -| MaxScheduledSandboxes | (int) Maximum number of scheduled (planned/future) sandboxes the user can have at any time. | -| MaxOwnedBlueprints | (int) Set the maximum of blueprints the user can own at any given time. Unlimited by default. _This setting applies to admins, domain admins and regular users only._ | -| MaxSavedSandboxes | (int) Maximum number of saved sandboxes the user can have at any time. Unlimited by default. _Applies to customers using the Save and Restore add-on._ | -
    - -
    -Request example - -```javascript -{ - "Username": "john m", - "Password": "a", - "Email": "user99@example.com", - "IsActive": true, - "IsAdmin": true, - "GroupIds": [-1], - "TimeZoneInfoId": "Israel Standard Time", - "MaxReservationDuration": -1, - "MaxConcurrentReservations": -1, - "MaxScheduledSandboxes": -1, - "MaxOwnedBlueprints": -1, - "MaxSavedSandboxes": -1 -} -``` -
    - -### Response - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-admin-api-token.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-admin-api-token.md deleted file mode 100644 index 7d50a2199c..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-admin-api-token.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Get Administration API token - -### Description - -Gets an authentication token for Administration API. - -### URL - -`http://{Admin API IP}:{port#}/Api/Auth/Login` - -### HTTP method - -`PUT` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` -
    - -
    -Request body - -Example header format: - -| Parameter | Description/Comments | -| --- | --- | -| Username | (string) CloudShell username. | -| Password | (string) CloudShell user password. | -| Domain | (string) CloudShell domain. | -
    - -
    -Request example - -```javascript -{ - "Username":"admin", - "Password":"admin", - "Domain":"Global" -} -``` -
    - -### Response - -
    -Response example - -```javascript -"UJvRg9mn6EywpLYMpRPiQg2" -``` -
    - -
    -Response code - -```javascript -200 -``` - -
    - diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-domains.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-domains.md deleted file mode 100644 index 8a862d83b4..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-domains.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Get all domains - -### Description - -Gets a list of all domains in CloudShell - -### URL - -`http://{Admin API IP}:{port#}/api/v1/domains` - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` -
    - -
    -Query parameters - -| Parameter | Description/Comments | -| --- | --- | -| paginationProperties.limit | (integer) Number of results to return per page. Can retrieve up to 250 results per page. Default if unspecified: 50. Optional.
    Default value : 50| -| paginationProperties.sort-by | (string) Field to use to sort the results.
    | -| paginationProperties.sort-order | (integer) 1 for ascending, -1 for descending. Defaults to ascending. Optional.
    Default value : 1 | -| paginationProperties.cursor | (string) When paging, the response will include a cursor field. Use the cursor to get next set of results. Optional. | -| paginationProperties.filter | (string) String to use to filter for domains containing this string. For example: "lab" would return lab1, testlab, olabo. Optional. | -
    - -### Response - -
    -Response example - -```javascript -{ - "Domains": [ - { - "Id": "5c966733-c496-486d-8b1a-963c13e9a103", - "Archived": false, - "EndTime": null, - "LicensePoolId": null, - "Description": "New York team's domain", - "Name": "New York" - }, - { - "Id": "8cd12c8d-6d40-4dfd-89da-a8d8dde00575", - "Archived": false, - "EndTime": null, - "LicensePoolId": null, - "Description": "San Francisco team's domain", - "Name": "San Fran" - }, - { - "Id": "dbaf480c-09f7-46d3-a2e2-e35d3e374a16", - "Archived": false, - "EndTime": null, - "LicensePoolId": null, - "Description": "Global domain", - "Name": "Global" - } - ], - "Cursor": null -} -``` -
    - -
    -Response example - -```javascript -200 OK -``` -
    diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-external-groups.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-external-groups.md deleted file mode 100644 index 87ffb7736b..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-external-groups.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -sidebar_position: 33 ---- - -# Get all external groups - -### Description - -Get all external groups from your active directory/LDAP. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/integrations/IdentityManagement/groups` - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` -
    - -
    -Query parameters - -| Parameter | Description/Comments | -| --- | --- | -| paginationProperties.limit | (integer) Number of results to return per page. Can retrieve up to 250 results per page. Default if unspecified: 50. Optional.
    Default value : 50 | -| paginationProperties.sort-by | (string) Field to use to sort the results.
    Default value : Name | -| paginationProperties.sort-order | (integer) 1 for ascending, -1 for descending. Defaults to ascending. Optional.
    Default value : 1 | -| paginationProperties.cursor | (string) When paging, the response will include a cursor field. Use the cursor to get next set of results. Optional. | -| paginationProperties.filter | (string) String to use to filter for domains containing this string. For example: "lab" would return lab1, testlab, olabo. Optional. | -
    - -### Response - -
    -Response example - -```javascript -{ - "Groups": [ - { - "Name": "Administrators", - "DistinguishedName": "CN=Administrators,CN=Builtin,DC=qualisystems,DC=local" - }, - { - "Name": "ADSyncAdmins", - "DistinguishedName": "CN=ADSyncAdmins,CN=Users,DC=qualisystems,DC=local" - }, - { - "Name": "Azure_DevOps_Cloud_Admins", - "DistinguishedName": "CN=Azure_DevOps_Cloud_Admins,OU=00.00.Quali.Azure.Security.Groups,OU=00.00.Microsoft-Azure,OU=00.00.Cloud.Services,OU=00.QUALI.WW.DATA.CENTERS,DC=qualisystems,DC=local" - } - ], - "Cursor": "QXp1cmVfRGV2T3BzX0Nsb3VkX0FkbWlucw==" -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-groups.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-groups.md deleted file mode 100644 index afc14eb728..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-groups.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -sidebar_position: 17 ---- - -# Get all groups - -### Description - -Gets a list of all groups in CloudShell. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/groups` - -### HTTP method - -`GET` - -### Request - - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` -
    - -
    -Query parameters - -| Parameter | Description/Comments | -| --- | --- | -| paginationProperties.limit | (integer) Number of results to return per page. Can retrieve up to 250 results per page. Default if unspecified: 50. Optional.
    Default value : 50 | -| paginationProperties.sort-by | (string) Field to use to sort the results.
    Default value : Name | -| paginationProperties.sort-order | (integer) 1 for ascending, -1 for descending. Defaults to ascending. Optional.
    Default value : 1 | -| paginationProperties.cursor | (string) When paging, the response will include a cursor field. Use the cursor to get next set of results. Optional. | -| paginationProperties.filter | (string) String to use to filter for domains containing this string. For example: "lab" would return lab1, testlab, olabo. Optional. | - -
    - -### Response - -
    -Response example - -```javascript -{ - "Groups": [ - { - "ParentIds": null, - "Sid": "fa414b79-174f-4906-9c95-976caf363864", - "Name": "System Administrators", - "Description": "Built in group, all members have administrative rights.", - "ViewOnly": false, - "groupType": "System", - "groupRole": "SystemAdmin", - "Id": -1 - }, - { - "ParentIds": null, - "Sid": "88fc9928-a1f3-45c3-99cd-45a46d256592", - "Name": "Everyone", - "Description": null, - "ViewOnly": false, - "groupType": "System", - "groupRole": "Regular", - "Id": 1 - }, - { - "ParentIds": null, - "Sid": "1c7a0c13-600e-43ae-ab2d-6f594e245912", - "Name": "domain admin", - "Description": null, - "ViewOnly": false, - "groupType": "UserDefined", - "groupRole": "DomainAdmin", - "Id": 2 - }, - { - "ParentIds": null, - "Sid": "a2bf342a-5883-4e1a-87a5-5bb6e13b421b", - "Name": "regular users", - "Description": null, - "ViewOnly": false, - "groupType": "UserDefined", - "groupRole": "Regular", - "Id": 3 - } - ], - "Cursor": null -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-license-pools.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-license-pools.md deleted file mode 100644 index 90eebc23cc..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-license-pools.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -sidebar_position: 36 ---- - -# Get all license pools - -### Description - -Gets a list of all license pools in CloudShell. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/licensepools` - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` -
    - -
    -Query parameters - -| Parameter | Description/Comments | -| --- | --- | -| paginationProperties.limit | (integer) Number of results to return per page. Can retrieve up to 250 results per page. Default if unspecified: 50. Optional.
    Default value : 50 | -| paginationProperties.sort-by | (string) Field to use to sort the results.
    Default value : Name | -| paginationProperties.sort-order | (integer) 1 for ascending, -1 for descending. Defaults to ascending. Optional.
    Default value : 1 | -| paginationProperties.cursor | (string) When paging, the response will include a cursor field. Use the cursor to get next set of results. Optional. | -| paginationProperties.filter | (string) String to use to filter for domains containing this string. For example: "lab" would return lab1, testlab, olabo. Optional. | -
    - -### Response - -
    -Response example - -```javascript -{ - "LicensePools": [ - { - "Name": "SF license pool", - "Description": "License pool for San Francisco domain", - "MaxConcurrentReservation": 15, - "Domains": [ - "8cd12c8d-6d40-4dfd-89da-a8d8dde00575" - ], - "CreateDate": "2023-07-18T06:59:07", - "Id": "a4ba81df-ead7-487b-b684-b04300a48e69" - }, - { - "Name": "NY license pool", - "Description": "License pool for New York domain", - "MaxConcurrentReservation": 10, - "Domains": [ - "357ff49d-4ffd-4b3e-bc07-041dd4fd0f33" - ], - "CreateDate": "2023-07-18T06:55:55", - "Id": "a48d85a0-6332-445b-bf03-b04300a3ac9d" - } - ], - "Cursor": "TXkgbGljZW5zZSBwb29s" -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-users.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-users.md deleted file mode 100644 index 2a60c88823..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-all-users.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -sidebar_position: 28 ---- - -# Get all users - -### Description - -Gets a list of all users in CloudShell. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/users` - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Query parameters - -| Parameter | Description/Comments | -| --- | --- | -| paginationProperties.limit | (integer) Number of results to return per page. Can retrieve up to 250 results per page. Default if unspecified: 50. Optional.
    Default value : 50 | -| paginationProperties.sort-by | (string) Field to use to sort the results.
    Default value : Name | -| paginationProperties.sort-order | (integer) 1 for ascending, -1 for descending. Defaults to ascending. Optional.
    Default value : 1 | -| paginationProperties.cursor | (string) When paging, the response will include a cursor field. Use the cursor to get next set of results. Optional. | -| paginationProperties.filter | (string) String to use to filter for domains containing this string. For example: "lab" would return lab1, testlab, olabo. Optional. | -
    - -### Response - -
    -Response example - -```javascript -{ - "Users": [ - { - "Id": 1, - "Sid": "71afdb5c-d479-43a4-993d-0e01d77d02ac", - "Username": "admin", - "Email": null, - "IsActive": true, - "IsAdmin": true, - "GroupIds": [ - -1, - 1 - ], - "TimeZoneInfoId": "Israel Standard Time", - "MaxReservationDuration": null, - "MaxConcurrentReservations": null, - "MaxScheduledSandboxes": null, - "MaxOwnedBlueprints": null, - "MaxSavedSandboxes": null, - "DomainRoles": [ - { - "DomainId": "dbaf480c-09f7-46d3-a2e2-e35d3e374a16", - "role": "SystemAdmin" - }, - { - "DomainId": "357ff49d-4ffd-4b3e-bc07-041dd4fd0f33", - "role": "SystemAdmin" - }, - { - "DomainId": "8cd12c8d-6d40-4dfd-89da-a8d8dde00575", - "role": "SystemAdmin" - }, - { - "DomainId": "134b19d4-6c56-491d-b765-b61191c37f78", - "role": "SystemAdmin" - }, - { - "DomainId": "dcd91805-4e1c-48a8-88c7-d9805e876783", - "role": "SystemAdmin" - }, - { - "DomainId": "985c3306-fad7-4e85-a4e3-c44876149657", - "role": "SystemAdmin" - } - ], - "DomainName": null, - "ImportedSid": null - }, - { - "Id": 4, - "Sid": "93f41a86-946b-4e96-b8f1-1af642e000f0", - "Username": "john", - "Email": "", - "IsActive": true, - "IsAdmin": false, - "GroupIds": [ - 1, - 3 - ], - "TimeZoneInfoId": "Israel Standard Time", - "MaxReservationDuration": null, - "MaxConcurrentReservations": 100, - "MaxScheduledSandboxes": 10000, - "MaxOwnedBlueprints": null, - "MaxSavedSandboxes": 20, - "DomainRoles": [ - { - "DomainId": "dbaf480c-09f7-46d3-a2e2-e35d3e374a16", - "role": "Regular" - }, - { - "DomainId": "357ff49d-4ffd-4b3e-bc07-041dd4fd0f33", - "role": "Regular" - }, - { - "DomainId": "dcd91805-4e1c-48a8-88c7-d9805e876783", - "role": "Regular" - }, - { - "DomainId": "8cd12c8d-6d40-4dfd-89da-a8d8dde00575", - "role": "Regular" - } - ], - "DomainName": null, - "ImportedSid": null - } - ], - "Cursor": null -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-domain-blueprints.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-domain-blueprints.md deleted file mode 100644 index 3fd38b508e..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-domain-blueprints.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -sidebar_position: 8 ---- - -# Get domain's blueprints - -### Description - -Gets a list of all blueprints in a given domain. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/domains/{id}/blueprints` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Domain's ID. Can be retrieved via [Get all domains](./get-all-domains.md).| - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - - -
    - -
    -Query parameters - -| Parameter | Description/Comments | -| --- | --- | -| paginationProperties.limit | (integer) Number of results to return per page. Can retrieve up to 250 results per page. Default if unspecified: 50. Optional.
    Default value : 50 | -| paginationProperties.sort-by | (string) Field to use to sort the results.
    Default value : Name | -| paginationProperties.sort-order | (integer) 1 for ascending, -1 for descending. Defaults to ascending. Optional.
    Default value : 1 | -| paginationProperties.cursor | (string) When paging, the response will include a cursor field. Use the cursor to get next set of results. Optional. | -| paginationProperties.filter | (string) String to use to filter for domains containing this string. For example: "lab" would return lab1, testlab, olabo. Optional. | -
    - -### Response -
    -Response example - -```javascript -{ - "Blueprints": [ - { - "Alias": "Azure test", - "CreatorName": "hezsys", - "EnableSandboxSave": true, - "topologyType": "Regular", - "topologyState": "Pending", - "BaseTopology": null, - "ParentId": "942e2ff1-23b6-4d22-852a-3068380b80f4", - "Name": "Azure test", - "Description": "Blueprint with preconfigured setup & teardown processes.Deploys Apps and resolves connections on Setup, and deletes App VMs on Teardown", - "Type": "Topology", - "ModificationDate": "2022-02-14T14:48:08", - "CreateDate": "2022-02-14T10:43:52", - "Version": 6, - "Id": "d3e496b5-1426-4607-a72e-3a696549f35c" - }, - { - "Alias": "New York", - "CreatorName": "hez", - "EnableSandboxSave": true, - "topologyType": "Regular", - "topologyState": "Pending", - "BaseTopology": null, - "ParentId": "942e2ff1-23b6-4d22-852a-3068380b80f4", - "Name": "New York", - "Description": "Blueprint with preconfigured setup & teardown processes.Deploys Apps and resolves connections on Setup, and deletes App VMs on Teardown", - "Type": "Topology", - "ModificationDate": "2023-07-17T04:34:04", - "CreateDate": "2022-02-13T13:08:25", - "Version": 25, - "Id": "6fc4e095-606c-4fcc-9bf3-725dd01b5aa8" - }, - { - "Alias": "AWS test", - "CreatorName": "hezsys", - "EnableSandboxSave": true, - "topologyType": "Regular", - "topologyState": "Pending", - "BaseTopology": null, - "ParentId": "942e2ff1-23b6-4d22-852a-3068380b80f4", - "Name": "AWS test", - "Description": "Blueprint with preconfigured setup & teardown processes.Deploys Apps and resolves connections on Setup, and deletes App VMs on Teardown", - "Type": "Topology", - "ModificationDate": "2022-02-14T10:43:33", - "CreateDate": "2022-02-14T10:38:41", - "Version": 5, - "Id": "54b0f107-14e5-46e8-8ce6-92bb50d55e06" - }, - { - "Alias": "vCenter Resource BP", - "CreatorName": "hez", - "EnableSandboxSave": true, - "topologyType": "Regular", - "topologyState": "Pending", - "BaseTopology": null, - "ParentId": "942e2ff1-23b6-4d22-852a-3068380b80f4", - "Name": "vCenter Resource BP", - "Description": "Blueprint with preconfigured setup & teardown processes.Deploys Apps and resolves connections on Setup, and deletes App VMs on Teardown", - "Type": "Topology", - "ModificationDate": "2022-02-13T13:20:14", - "CreateDate": "2022-02-13T13:16:30", - "Version": 6, - "Id": "ecc31ee9-0a49-4bd4-b36a-c9e6c09698f4" - } - ], - "Cursor": null -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-domain-groups.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-domain-groups.md deleted file mode 100644 index bc1db88019..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-domain-groups.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -sidebar_position: 11 ---- - -# Get domain's groups - -### Description - -Gets a list of all groups in a given domain. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/domains/{id}/groups` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Domain's ID. Can be retrieved via [Get all domains](./get-all-domains.md).| - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Query parameters - -| Parameter | Description/Comments | -| --- | --- | -| paginationProperties.limit | (integer) Number of results to return per page. Can retrieve up to 250 results per page. Default if unspecified: 50. Optional.
    Default value : 50 | -| paginationProperties.sort-by | (string) Field to use to sort the results.
    Default value : Name | -| paginationProperties.sort-order | (integer) 1 for ascending, -1 for descending. Defaults to ascending. Optional.
    Default value : 1 | -| paginationProperties.cursor | (string) When paging, the response will include a cursor field. Use the cursor to get next set of results. Optional. | -| paginationProperties.filter | (string) String to use to filter for domains containing this string. For example: "lab" would return lab1, testlab, olabo. Optional. | -
    - -### Response -
    -Response example - -```javascript -{ - "Groups": [ - { - "ParentIds": null, - "Sid": "00000000-0000-0000-0000-000000000000", - "Name": "System Administrators", - "Description": "Built in group, all members have administrative rights.", - "ViewOnly": false, - "groupType": "System", - "groupRole": "SystemAdmin", - "Id": -1 - }, - { - "ParentIds": null, - "Sid": "00000000-0000-0000-0000-000000000000", - "Name": "domain admin", - "Description": null, - "ViewOnly": false, - "groupType": "UserDefined", - "groupRole": "DomainAdmin", - "Id": 2 - }, - { - "ParentIds": null, - "Sid": "00000000-0000-0000-0000-000000000000", - "Name": "view-only", - "Description": null, - "ViewOnly": true, - "groupType": "UserDefined", - "groupRole": "DomainAdmin", - "Id": 5 - } - ], - "Cursor": null -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-domain-resources.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-domain-resources.md deleted file mode 100644 index 902f7a5f99..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-domain-resources.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -sidebar_position: 14 ---- - -# Get domain's resources - -### Description - -Gets a list of all resources (and sub-resources) in a domain. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/domains/{id}/resources` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Domain's ID. Can be retrieved via [Get all domains](./get-all-domains.md).| - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Query parameters - -| Parameter | Description/Comments | -| --- | --- | -| paginationProperties.limit | (integer) Number of results to return per page. Can retrieve up to 250 results per page. Default if unspecified: 50. Optional.
    Default value : 50 | -| paginationProperties.sort-by | (string) Field to use to sort the results.
    Default value : Name | -| paginationProperties.sort-order | (integer) 1 for ascending, -1 for descending. Defaults to ascending. Optional.
    Default value : 1 | -| paginationProperties.cursor | (string) When paging, the response will include a cursor field. Use the cursor to get next set of results. Optional. | -| paginationProperties.filter | (string) String to use to filter for domains containing this string. For example: "lab" would return lab1, testlab, olabo. Optional. | -
    - -### Response -
    -Response example - -```javascript -{ - "Resources": [ - { - "FullPath": "Bridge1", - "FullName": "Bridge1", - "IsExcluded": false, - "reservedStatus": "Available", - "ParentId": "0e951eff-0530-42aa-913e-cd27b3a2ebc7", - "Name": "CDS_OPS_Bridgit10", - "Description": "", - "Type": "LabResource", - "ModificationDate": "2021-01-31T12:10:52", - "CreateDate": "2021-01-31T12:10:52", - "Version": 4, - "Id": "3063656e-52ba-4760-962a-0609006f54f8" - }, - { - "FullPath": "Bridge1/Jack1", - "FullName": "Bridge1/Jack1", - "IsExcluded": false, - "reservedStatus": "Available", - "ParentId": "0e951eff-0530-42aa-913e-cd27b3a2ebc7", - "Name": "PPJackVLb14", - "Description": "", - "Type": "LabResource", - "ModificationDate": "2021-01-31T12:10:21", - "CreateDate": "2021-01-31T12:10:21", - "Version": 33, - "Id": "4bcb852a-f4bf-4ab2-97db-02b1fec07733" - }, - { - "FullPath": "Bridge1/Jack2", - "FullName": "Bridge1/Jack2", - "IsExcluded": false, - "reservedStatus": "Available", - "ParentId": "0e951eff-0530-42aa-913e-cd27b3a2ebc7", - "Name": "PPJackVLb14", - "Description": "", - "Type": "LabResource", - "ModificationDate": "2021-01-31T12:10:21", - "CreateDate": "2021-01-31T12:10:21", - "Version": 33, - "Id": "f3c8ed5e-d76f-4b5f-9548-7d37a2f387a4" - }, - { - "FullPath": "Bridge1/Jack3", - "FullName": "Bridge1/Jack3", - "IsExcluded": false, - "reservedStatus": "Available", - "ParentId": "0e951eff-0530-42aa-913e-cd27b3a2ebc7", - "Name": "PPJackVLb14", - "Description": "", - "Type": "LabResource", - "ModificationDate": "2021-01-31T12:10:21", - "CreateDate": "2021-01-31T12:10:21", - "Version": 33, - "Id": "ccf544fa-070a-4157-8a37-07b1ba12aaf8" - }, - ], - "Cursor": "100" -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-group-by-id.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-group-by-id.md deleted file mode 100644 index 05cb9f74d9..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-group-by-id.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -sidebar_position: 19 ---- - -# Get group by ID - -### Description - -Gets a group's details using the group's id. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/groups/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Group's ID. Can be retrieved via [Get all groups](./get-all-groups.md).| - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response -
    -Response example - -```javascript -{ - "ParentIds": null, - "Sid": "42038eb9-9a58-4298-8a38-0be6f4d3b87a", - "Name": "my group", - "Description": "my group's description", - "ViewOnly": false, - "groupType": "UserDefined", - "groupRole": "Regular", - "Id": 7 -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-group-domains.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-group-domains.md deleted file mode 100644 index 7b200be5b0..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-group-domains.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -sidebar_position: 22 ---- - -# Get group's domains - -### Description - -Gets a list of all domains associated to a given group. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/groups/{id}/domains` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Group's ID. Can be retrieved via [Get all groups](./get-all-groups.md).| - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response -
    -Response example - -```javascript -{ - "Domains": [ - { - "ViewOnly": false, - "Id": "5c966733-c496-486d-8b1a-963c13e9a103", - "Archived": false, - "EndTime": null, - "LicensePoolId": null, - "Description": "some description about this domain", - "Name": "new domain 02" - }, - { - "ViewOnly": false, - "Id": "8cd12c8d-6d40-4dfd-89da-a8d8dde00575", - "Archived": false, - "EndTime": null, - "LicensePoolId": null, - "Description": "", - "Name": "New York" - }, - { - "ViewOnly": false, - "Id": "134b19d4-6c56-491d-b765-b61191c37f78", - "Archived": false, - "EndTime": null, - "LicensePoolId": null, - "Description": "", - "Name": "San Francisco" - }, - { - "ViewOnly": false, - "Id": "dbaf480c-09f7-46d3-a2e2-e35d3e374a16", - "Archived": false, - "EndTime": null, - "LicensePoolId": null, - "Description": "A domain that includes all available resources", - "Name": "Global" - } - ], - "Cursor": null -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-group-users.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-group-users.md deleted file mode 100644 index 7a5229a6e1..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-group-users.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -sidebar_position: 25 ---- - -# Get group's users - -### Description - -Gets a list of all users in a given domain. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/groups/{id}/Users` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Group's ID. Can be retrieved via [Get all groups](./get-all-groups.md). | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Query parameters - -| Parameter | Description/Comments | -| --- | --- | -| paginationProperties.limit | (integer) Number of results to return per page. Can retrieve up to 250 results per page. Default if unspecified: 50. Optional.
    Default value : 50 | -| paginationProperties.sort-by | (string) Field to use to sort the results.
    Default value : Name | -| paginationProperties.sort-order | (integer) 1 for ascending, -1 for descending. Defaults to ascending. Optional.
    Default value : 1 | -| paginationProperties.cursor | (string) When paging, the response will include a cursor field. Use the cursor to get next set of results. Optional. | -| paginationProperties.filter | (string) String to use to filter for domains containing this string. For example: "lab" would return lab1, testlab, olabo. Optional. | - -
    - -### Response - -
    -Response example - -```javascript -{ - "Users": [ - { - "Id": 1, - "Sid": "71afdb5c-d479-43a4-993d-0e01d77d02ac", - "Username": "admin", - "Email": null, - "IsActive": true, - "IsAdmin": true, - "GroupIds": [ - -1, - 1 - ], - "TimeZoneInfoId": "Israel Standard Time", - "MaxReservationDuration": null, - "MaxConcurrentReservations": null, - "MaxScheduledSandboxes": null, - "MaxOwnedBlueprints": null, - "MaxSavedSandboxes": null, - "DomainRoles": [ - { - "DomainId": "dbaf480c-09f7-46d3-a2e2-e35d3e374a16", - "role": "SystemAdmin" - }, - { - "DomainId": "357ff49d-4ffd-4b3e-bc07-041dd4fd0f33", - "role": "SystemAdmin" - }, - { - "DomainId": "8cd12c8d-6d40-4dfd-89da-a8d8dde00575", - "role": "SystemAdmin" - }, - { - "DomainId": "134b19d4-6c56-491d-b765-b61191c37f78", - "role": "SystemAdmin" - }, - { - "DomainId": "dcd91805-4e1c-48a8-88c7-d9805e876783", - "role": "SystemAdmin" - }, - { - "DomainId": "985c3306-fad7-4e85-a4e3-c44876149657", - "role": "SystemAdmin" - } - ], - "DomainName": null, - "ImportedSid": null - }, - { - "Id": 4, - "Sid": "93f41a86-946b-4e96-b8f1-1af642e000f0", - "Username": "john", - "Email": "", - "IsActive": true, - "IsAdmin": false, - "GroupIds": [ - 1, - 3 - ], - "TimeZoneInfoId": "Israel Standard Time", - "MaxReservationDuration": null, - "MaxConcurrentReservations": 100, - "MaxScheduledSandboxes": 10000, - "MaxOwnedBlueprints": null, - "MaxSavedSandboxes": 20, - "DomainRoles": [ - { - "DomainId": "dbaf480c-09f7-46d3-a2e2-e35d3e374a16", - "role": "Regular" - }, - { - "DomainId": "357ff49d-4ffd-4b3e-bc07-041dd4fd0f33", - "role": "Regular" - }, - { - "DomainId": "dcd91805-4e1c-48a8-88c7-d9805e876783", - "role": "Regular" - }, - { - "DomainId": "8cd12c8d-6d40-4dfd-89da-a8d8dde00575", - "role": "Regular" - } - ], - "DomainName": null, - "ImportedSid": null - } - ], - "Cursor": null -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-license-pool-by-id.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-license-pool-by-id.md deleted file mode 100644 index 1c22360d6c..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-license-pool-by-id.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -sidebar_position: 37 ---- - -# Get license pool by ID - -### Description - -Gets a license pool's details using the group's id. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/licensepools/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| Id | (string) License pool's id. Can be retrieved via [Get all license pools](./get-all-license-pools.md). | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -```javascript -{ - "Name": "SF license pool 2", - "Description": "License pool for San Francisco domain", - "MaxConcurrentReservation": 15, - "Domains": [ - "8cd12c8d-6d40-4dfd-89da-a8d8dde00575" - ], - "CreateDate": "2023-07-18T06:59:07", - "Id": "a4ba81df-ead7-487b-b684-b04300a48e69" -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-user-by-id.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-user-by-id.md deleted file mode 100644 index b41dc42a99..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-user-by-id.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -sidebar_position: 29 ---- - -# Get user by ID - -### Description - -Get a user's details. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/users/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) User's ID. Can be retrieved via [Get all users](./get-all-users.md) or [Get group's users](./get-group-users.md). | - -### HTTP method - -`GET` - -### Request - - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -```javascript -{ - "Id": 14, - "Sid": "02358185-f2a7-465f-8d05-6052590896e2", - "Username": "john m", - "Email": "john@example.com", - "IsActive": true, - "IsAdmin": true, - "GroupIds": [ - -1, - 1 - ], - "TimeZoneInfoId": "Israel Standard Time", - "MaxReservationDuration": 1, - "MaxConcurrentReservations": 2, - "MaxScheduledSandboxes": 2, - "MaxOwnedBlueprints": 2, - "MaxSavedSandboxes": 0, - "DomainRoles": [ - { - "DomainId": "dbaf480c-09f7-46d3-a2e2-e35d3e374a16", - "role": "SystemAdmin" - }, - { - "DomainId": "357ff49d-4ffd-4b3e-bc07-041dd4fd0f33", - "role": "SystemAdmin" - }, - { - "DomainId": "8cd12c8d-6d40-4dfd-89da-a8d8dde00575", - "role": "SystemAdmin" - }, - { - "DomainId": "134b19d4-6c56-491d-b765-b61191c37f78", - "role": "SystemAdmin" - }, - { - "DomainId": "dcd91805-4e1c-48a8-88c7-d9805e876783", - "role": "SystemAdmin" - }, - { - "DomainId": "985c3306-fad7-4e85-a4e3-c44876149657", - "role": "SystemAdmin" - } - ], - "DomainName": null, - "ImportedSid": null -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-users-from-an-external-group.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-users-from-an-external-group.md deleted file mode 100644 index 24e167ffe3..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/get-users-from-an-external-group.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -sidebar_position: 34 ---- - -# Get users from an external group - -### Description - -Get users from a group in your active directory/LDAP. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/integrations/IdentityManagement/groups/{groupName}/users` - -| Parameter | Description/Comments | -| --- | --- | -| groupName | Name of the group (e.g. "Azure\_DevOps\_Cloud\_Admins”). Can be retrieved via [Get all external groups](./get-all-external-groups.md). | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Query parameters - -| Parameter | Description/Comments | -| --- | --- | -| paginationProperties.limit | (integer) Number of results to return per page. Can retrieve up to 250 results per page. Default if unspecified: 50. Optional.
    Default value : 50 | -| paginationProperties.sort-by | (string) Field to use to sort the results. Default value : Name | -| paginationProperties.sort-order | (integer) 1 for ascending, -1 for descending. Defaults to ascending. Optional.
    Default value : 1 | -| paginationProperties.cursor | (string) When paging, the response will include a cursor field. Use the cursor to get next set of results. Optional. | -| paginationProperties.filter | (string) String to use to filter for domains containing this string. For example: "lab" would return lab1, testlab, olabo. Optional. | - -
    - -### Response - - -
    -Response example - -```javascript -{ - "Users": [ - { - "Id": "S-1-5-21-1487810946-2753822684-3978873285-7489", - "Username": "user1.s", - "DisplayName": "user1", - "DistinguishedName": "CN=user1 Vlasenko,OU=00.05.Quali-IL-Ops.And.IT,OU=00.00.Quali-IL-Departments,OU=00.00.Petah-Tikva,OU=00.00.Quali-IL,OU=03.QUALI.WW.CORPORATE.ORGANIZATION,DC=qualisystems,DC=local", - "Email": "user1@quali.com", - "DomainName": "QUALISYSTEMS" - }, - { - "Id": "S-1-5-21-1487810946-2753822684-3978873285-11090", - "Username": "user2.j", - "DisplayName": "user2", - "DistinguishedName": "CN=user2 Castro,OU=00.08.Quali-US.Texas-Ops.And.IT,OU=00.00.Quali-US.Texas-Departments,OU=00.00.Quali-US.Texas,OU=00.01.Quali-US,OU=03.QUALI.WW.CORPORATE.ORGANIZATION,DC=qualisystems,DC=local", - "Email": "user2@quali.com", - "DomainName": "QUALISYSTEMS" - }, - { - "Id": "S-1-5-21-1487810946-2753822684-3978873285-22202", - "Username": "user3.h", - "DisplayName": "user 3", - "DistinguishedName": "CN=user3 Poldian,OU=00.05.Quali-IL-Ops.And.IT,OU=00.00.Quali-IL-Departments,OU=00.00.Petah-Tikva,OU=00.00.Quali-IL,OU=03.QUALI.WW.CORPORATE.ORGANIZATION,DC=qualisystems,DC=local", - "Email": "user3.p@quali.com", - "DomainName": "QUALISYSTEMS" - } - ], - "Cursor": null -} - - -``` -
    - - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/import-external-users.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/import-external-users.md deleted file mode 100644 index a4a107812b..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/import-external-users.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -sidebar_position: 35 ---- - -# Import external users - -### Description - -Import users from your active directory/LDAP into CloudShell. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/integrations/IdentityManagement/users` - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| UserName | External user name. Can be retrieved via [Get users from an external group](./get-users-from-an-external-group.md) | -| GroupName | External group name. Can be retrieved via [Get all external groups](./get-all-external-groups.md).
    TIP: You should import by group name for larger organizations containing hundreds of users as importing all users may fail due to active directory/LDAP limitations. | - -
    - -
    -Request example - -```javascript -{ - "UserName": "James Porter", -} -``` - -By group name: - -```javascript -{ - "GroupName": "Azure_DevOps_Cloud_Admins" -} -``` -
    - -### Response - -
    -Response example - -```javascript -{ - "Users": [ - { - "Id": 11, - "Sid": "750ad20a-ccf7-4185-a1d9-9202bd108f71", - "Username": "automationuser", - "Email": null, - "IsActive": true, - "IsAdmin": false, - "GroupIds": [ - 1 - ], - "TimeZoneInfoId": null, - "MaxReservationDuration": 1440, - "MaxConcurrentReservations": 10, - "MaxScheduledSandboxes": 10, - "MaxOwnedBlueprints": 10, - "MaxSavedSandboxes": null, - "DomainRoles": [], - "DomainName": "QUALISYSTEMS", - "ImportedSid": "S-1-5-21-1487810946-2753822684-3978873285-7293" - } - ], - "Errors": [] -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/index.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/index.md deleted file mode 100644 index 95a2310e13..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/index.md +++ /dev/null @@ -1,97 +0,0 @@ -# CloudShell Administration REST API - -This API enables developers to perform CloudShell administration tasks. This includes managing CloudShell users, groups, domains, license pools, associating resources and blueprints to other domains, and more. - -The following Administration APIs are available: - -**Login:** - -- [Get Administration API token](./get-admin-api-token.md) - -**Domains:** - -Manage CloudShell domains. - -- [Get all domains](./get-all-domains.md) -- [Create domain](./create-domain.md) -- [Get domain by ID](./get-domain-by-id.md) -- [Edit domain](./edit-domain.md) -- [Delete domain](./delete-domain.md) - -**DomainBlueprints:** - -Manage a domain's blueprints. - -- [Get domain's blueprints](./get-domain-blueprints.md) -- [Add blueprints to domain](./add-blueprints-to-domain.md) -- [Remove blueprints from domain](./remove-blueprint-from-domain.md) - -**DomainGroups:** - -Manage a domain's group associations. - -- [Get domain's groups](./get-domain-groups.md) -- [Add groups to domain](./add-groups-to-domain.md) -- [Remove groups from domain](./remove-groups-from-domain.md) - -**DomainResources:** - -Manage a domain's resources. - -- [Get domain's resources](./get-domain-resources.md) -- [Add resources to domain](./add-resource-to-domain.md) -- [Remove resources from domain](./remove-resource-from-domain.md) - -**Groups:** - -Manage CloudShell groups. - -- [Get all groups](./get-all-groups.md) -- [Create group](./create-group.md) -- [Get group by ID](./get-group-by-id.md) -- [Edit group](./edit-group.md) -- [Delete group](./delete-group.md) - -**GroupDomains:** - -Manage a group's domain associations. - -- [Get group's domains](./get-group-domains.md) -- [Add domains to group](./add-domains-to-group.md) -- [Remove domains from group](./remove-domains-from-group.md) - -**GroupUsers:** - -Manage a group's users. - -- [Get group's users](./get-group-users.md) -- [Add users to group](./add-users-to-group.md) -- [Remove users from group](./remove-users-from-group.md) - -**Users:** - -Manage CloudShell users. - -- [Get all users](./get-all-users.md) -- [Get user by ID](./get-user-by-id.md) -- [Create user](./create-user.md) -- [Edit user](./edit-user.md) -- [Delete user](./delete-user.md) - -**IdentityManagement:** - -Get and import users from your active directory or LDAP. - -- [Get all external groups](./get-all-external-groups.md) -- [Get users from an external group](./get-users-from-an-external-group.md) -- [Import external users](./import-external-users.md) - -**LicensePools:** - -Manage CloudShell license pools. - -- [Get all license pools](./get-all-license-pools.md) -- [Get license pool by ID](./get-license-pool-by-id.md) -- [Create license pool](./create-license-pool.md) -- [Edit license pool](./edit-license-pool.md) -- [Delete license pool](./delete-license-pool.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-blueprint-from-domain.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-blueprint-from-domain.md deleted file mode 100644 index 8b57cf88c0..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-blueprint-from-domain.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -sidebar_position: 10 ---- - -# Remove blueprints from domain - -### Description - -Removes one or more blueprints from a domain. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/domains/{id}/blueprint` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Domain's ID. Can be retrieved via [Get all domains](./get-all-domains.md).| - -### HTTP method - -`DELETE` - -### Request - -
    -Headers - - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Id | (string) Blueprint's id. Can be retrieved via [Get domain's blueprints](./get-domain-blueprints.md). | - -
    - -
    -Request example -```javascript -{ - "Blueprints": [ - { - "Id": "369960ab-68ff-4fdc-bf02-054a96879812" - }, - { - "Id": "a0cd0b72-8ed6-41a8-a460-0ab6253aa6af" - } - ] -} -``` -
    - -### Response - -
    -Response example -```javascript -{ - "Errors": [] -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-domains-from-group.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-domains-from-group.md deleted file mode 100644 index efff459ceb..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-domains-from-group.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -sidebar_position: 24 ---- - -# Remove domains from group - -### Description - -Removes one or more domains from a given group. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/groups/{id}/domains` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Group's ID. Can be retrieved via [Get all groups](./get-all-groups.md). | - -### HTTP method - -`DELETE` - -### Request - - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Id | (string) Domain's id. Can be retrieved via [Get group's domains](./get-group-domains.md). | -
    - -
    -Request example - -```javascript -{ - "Domains": [ - { - "Id": "5c966733-c496-486d-8b1a-963c13e9a103" - }, - { - "Id": "8cd12c8d-6d40-4dfd-89da-a8d8dde00575" - }, - ] -} -``` -
    - -### Response - -
    -Response example - -```javascript -{ - "Errors": [] -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-groups-from-domain.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-groups-from-domain.md deleted file mode 100644 index 2b98b4a9c8..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-groups-from-domain.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -sidebar_position: 13 ---- - -# Remove groups from domain - -### Description - -Removes one or more blueprints from a domain. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/domains/{id}/groups` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Domain's ID. Can be retrieved via [Get all domains](./get-all-domains.md).| - -### HTTP method - -`DELETE` - -### Request - -
    -Headers - - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Id | (string) Group's id. Can be retrieved via [Get all groups](./get-all-groups.md). | - -
    - -
    -Request example - -```javascript -{ - "Groups": [ - { - "Id": 1 - } - ] -} -``` -
    - -### Response - -
    -Response example - -```javascript -{ - "Errors": [] -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-resource-from-domain.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-resource-from-domain.md deleted file mode 100644 index de203d483a..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-resource-from-domain.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -sidebar_position: 16 ---- - -# Remove resources from domain - -### Description - -Removes resources/sub-resources from domain by id. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/domains/{id}/resources` - -| Parameter | Description/Comments | -| --- | --- | -| ID | (string) Domain's ID. Can be retrieved via [Get all domains](./get-all-domains.md).| - -### HTTP method - -`DELETE` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Id | (string) Resource id (not ParentId). Can be retrieved via [Get domain's resources](./get-domain-resources.md). | -| RemoveAssocations | (bool) Unbooks the resource in the domain. Default is **true**. | -
    - -
    -Request example - -```javascript -{ - - "Resources": [ - { - "Id": "", - "RemoveAssociations": false - }, - { - "Id": "", - "RemoveAssociations": false - } - ] -} -``` -
    - - -### Response - -
    -Request example - -```javascript -{ - "Errors": [] -} -``` -
    - -
    -Response code - -200 OK - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-users-from-group.md b/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-users-from-group.md deleted file mode 100644 index 8ede718de6..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-admin-rest-api/remove-users-from-group.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -sidebar_position: 27 ---- - -# Remove users from group - -### Description - -Removes one or more users from a group. - -### URL - -`http://{Admin API IP}:{port#}/api/v1/groups/{id}/Users` - -| Parameter | Description/Comments | -| --- | --- | -| id | (string) Group's id. Can be retrieved via [Get all groups](./get-all-groups.md). | - -### HTTP method - -`DELETE` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| Id | (string) User's id. Can be retrieved via [Get group's users](./get-group-users.md). | -
    - -
    -Request example - -```javascript -{ - "Users": [ - { - "Id": 0 - } - ] -} -``` -
    - -### Response - -
    -Response example - -```javascript -{ - "Errors": [] -} -``` -
    - -
    -Response code - -```javascript -200 OK -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-api-overview.md b/versioned_docs/version-2023.3/api-guide/cs-api-overview.md deleted file mode 100644 index c897e29a64..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-api-overview.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -sidebar_position: 1 ---- - -# CloudShell API Overview - -Quali's CloudShell APIs allow you to interact with and automate CloudShell for enhanced, customizable platform management, functionality, and usability. - -CloudShell applications have multiple APIs, which enable you to get services from the Quali Server and to utilize CloudShell's capabilities for Shell automation, blueprint orchestration, sandbox deployment and test automation. Using Quali's CloudShell APIs, you can integrate between CloudShell and third-party applications in the DevOps ecosystem, such as a continuous integration solution like Jenkins (or any web application). - -CloudShell APIs can be classified as outbound and inbound APIs. In other words, APIs that are used to serve CloudShell in a wider context (Sandbox API), like CI/CD processes, and APIs used to extend CloudShell automation and orchestration. - -- **CloudShell Administration API**: Used for managing domains, identities and license pools -- **Sandbox API**: Used for consuming and interacting with public blueprints and sandboxes -- **Automation API**: Used for sandbox orchestration and administrative operations in CloudShell -- **Quali API**: Used for managing automation suites and sandbox attachments, and importing and exporting blueprint packages -- **Packaging API**: Used for modifying blueprint packages -- **New Job Scheduling API**: Used for managing New Job Scheduling servers and suite executions - -For additional details about each API, see below. - -## CloudShell Administration REST API - -A RESTful API that allows your admins to perform CloudShell administration tasks remotely, without having to open Resource Manager Client. As such, this API allows you to perform all the tasks provided by Resource Manager Client. This includes managing domains, groups, users, license pools, and also share blueprints/resources among different domains. For details, see [CloudShell Administration REST API](./cs-admin-rest-api/index.md). - -## Sandbox API - -A RESTful API designed to facilitate the consumption of public blueprints for CI and DevOps activities. It enables you to automate the deployment of CloudShell sandboxes and interact with sandbox components, and integrates with CI platforms such as Jenkins or Jetbrains TeamCity. CloudShell Sandbox API comes with an API gateway, which enables to interact with CloudShell without direct access to the server. For details, see [CloudShell Sandbox API](./cs-sandbox-api/index.md). - -## Automation API - -This API is an official Python package utilizing XMLRPC protocol to communicate with CloudShell. It's designed to automate CloudShell from Python scripts and drivers. The CloudShell Automation API is based on the XML RPC API. For details, see the [CloudShell Automation API](./shell-dev-blueprint-design-api/cs-automation-api.md) article, or check out our API guides. The Python package [API guide](pathname:///api-docs/2023.3/Python-API/) includes additional information like return objects and is intended for experienced Python developers, while for beginners, we recommend to use the [TestShell API Python Reference Guide](pathname:///api-docs/2023.3/TestShell-API/TestShell%20Python%20API.html), which features an easy to understand format and code examples. - -To learn how to implement this API in .NET or XML RPC, see [TestShell API](./shell-dev-blueprint-design-api/testshell-api.md). - -## Quali API - -A RESTful API designed to control the scheduling and queuing of test automation suites. Quali API can be used in several protocols (C#, TCL). This API is also used for importing and exporting packages and Shells, getting sandbox attachments, and execution server details. For details, see [Quali API](./quali-api.md), or check out the appropriate Quali API reference guide: - -- [Quali API Library Reference Guide](pathname:///api-docs/2023.3/Quali-API/Quali%20API%20Library.html): is available by default in the TestShell Studio tools and can be added as a DLL asset to a project in CloudShell Authoring. -- [Quali API C# Reference Guide](pathname:///api-docs/2023.3/Quali-API/Quali%20cSharp%20API.html "Quali API C# Reference Guide"): for .NET -- [Quali API REST Reference Guide](pathname:///api-docs/2023.3/Quali-API/Quali%20REST%20API.html "Quali API REST Reference Guide"): for APIs using the REST client - -The default port for Quali API in the Quali Server is 9000. - -## Packaging API - -Designed to automate the creation and configuration of CloudShell blueprint packages. For details, see [Packaging API](./packaging-api/index.md). - -## New Job Scheduling API - -A RESTful API dedicated to CloudShell's New Job Scheduling tool. This API is used to automate the execution of test suites. For details, see [New Job Scheduling REST API](./new-jss-rest-api/index.md). - -## Implementation Examples - -Code examples are available in the Dev Guide's [Available CloudShell APIs](../devguide/available-cs-api/index.md) diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/_category_.json b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/_category_.json deleted file mode 100644 index 4e1ef10b8e..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "CloudShell Sandbox API", - "position": 3 -} \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/_category_.json b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/_category_.json deleted file mode 100644 index 1ce5ceab93..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Cloudshell Sandbox API Version 1 Reference Guide", - "position": 2 -} \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/blueprint-identifier.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/blueprint-identifier.md deleted file mode 100644 index cf2063b9f0..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/blueprint-identifier.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Blueprint Identifier - -### Description - -Gets details and available actions for a particular public blueprint associated with the user's domain. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v1/blueprints/{blueprint_identifier}` - -| Parameter | Description/Comments | -| --- | --- | -| `blueprint_identifier` | The name or id of the blueprint (`string`). Can be retrieved via [blueprints](./blueprints.md). | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `blueprint identifier` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -The example response of the `blueprint identifier` method is similar to that of the [blueprints](./blueprints.md) method. However, in this case the output properties are displayed for a particular blueprint (as opposed to multiple ones), and includes any published blueprint and resource input parameters. The API can call a blueprint by name or ID. -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/blueprint-start.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/blueprint-start.md deleted file mode 100644 index 109b9cc178..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/blueprint-start.md +++ /dev/null @@ -1,183 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Blueprint Start - -### Description - -Creates a new sandbox from a specific public blueprint associated with the user's domain. Returns details about the sandbox such as ID and the actions that can be performed on the sandbox. (After the sandbox is created, you can view it in the Sandboxes dashboard in CloudShell Portal.) - -:::note Notes - -- You cannot reserve blueprints if there are conflicts with the reservation timeslot. For additional information see [Creating Sandboxes](../../../portal/sandboxes/creating-sandboxes.md). -- This method does not support persistent sandboxes. As such, starting a persistent sandbox will deploy a regular sandbox. - -::: - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v1/blueprints/{blueprint_identifier}/start` - -| Parameter | Description/Comments | -| --- | --- | -| `blueprint_identifier` | The name or id of the blueprint (`string`). Can be retrieved via [blueprints](./blueprints.md). | - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format for the `blueprint start` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -The scheduling and input parameters of the sandbox in JSON format. The elements of the `blueprint start` method include: - -| Parameter | Description/Comments | -| --- | --- | -| `name` | The name of the sandbox. `(string)`
    If you do not specify a name, you will get the following error message: "Reservation name and duration must be specified in request body". | -| `duration` | The duration for this sandbox. Time must be specified in ISO 8601 format (for example PT23H). `(string)`
    If you do not specify the duration, you will get the following error message: "Duration format must be a valid 'ISO 8601' (e.g 'PT23H' or 'PT4H2M')". | -| `params` | Any published input parameters defined for the blueprint and its abstract resources. Input parameters that have no default must be included in the request. Abstract resource input parameters must be associated to global inputs (specify the global inputs in the request). `(Array)`
    If you do not specify the input parameters, you will get the following error message: "Blueprint has invalid inputs". | -| `permitted_users` | Users permitted to use the sandbox. Permitted users must have access to the logged-in domain. | - -
    - -
    -Request example - -```javascript -{ - "name":"testbp-sndbx", - "duration":"PT2H5M", - "params":[ - { - "name":"global1", - "value":"value1" - }, - { - "name":"abstract resource 1.attribute4", - "value":"some value" - }, - { - "name":"abstract resource 1/sub resource.attribute4", - "value":"some value" - } - ], - "permitted_users":[ - "john.s", - "emily.b", - "lucas.w" - ] -} -``` -
    - -### Response - -
    -Response example - -The `blueprint start` method returns details about the new sandbox. The output includes details about the sandbox ID and the actions that can be performed on the sandbox: - -```javascript -{ - "name":"Test Blprnt2", - "id":"994bd534-740a-45f5-851f-ff452f2a17a2", - "state":"Ready", - "type":"Sandbox", - "components":[ - { - "name":"MySwitch", - "type":"Resource", - "component_type":"Generic Switch Model", - "description":"", - "attributes":[ - { - "type":"string", - "name":"vendor", - "value":"" - } - ], - "connection_interfaces":[ - { - "name":"Telnet", - "url":"" - } - ], - } - ], - "apps":[ - { - "name":"MyApp", - "type":"Application", - "description":"" - } - ], - "_links":{ - "self":{ - "href":"/sandboxes/994bd534-740a-45f5-851f-ff452f2a17a2", - "method":"GET", - "name":"get a sandbox' details", - "templated":true - }, - "stop":{ - "href":"/sandboxes/994bd534-740a-45f5-851f-ff452f2a17a2/stop", - "method":"POST", - "name":"stop a sandbox", - "templated":true - }, - "all":{ - "href":"/sandboxes", - "method":"GET", - "name":"get all sandboxes" - } - } -} -``` -
    - -
    -Response summary - -The response output properties of the `blueprint start` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `name` |   | The name of the sandbox. `(string)` | -| `id` |   | The ID of the sandbox. `(string)` | -| `state` |   | The current state of the sandbox. Possible values: Pending, Setup, Ready, Teardown, Error, Ended. `(string)` | -| `type` |   | The sandbox type ("Sandbox"). `(string)` | -| `components` |   | The resource model of the sandbox. `(array)` | -|   | `name` | The name of the component. `(string)` | -|   | `type` | The component ("resource", "application", or "service"). `(string)` | -|   | `component_type` | The resource model. `(string)` | -|   | `description` | A short description of the resource. | -|   | `attributes` | The attributes of the resource model. `(array)` | -|   | `type` | The attribute type. `(string)` | -|   | `name` | The attribute name. `(string)` | -|   | `value` | The attribute value. `(string)` | -|   | `connection_interfaces` | The connection interfaces of the resource. `(array)` | -|   | `name` | The name of the connection interface. `(string)` | -|   | `url` | The URL of the connection interface of the resource. `(string)` | -| `apps` |   | The Apps of the sandbox. `(string)` | -|   | `type` | The App type ("Application"). `(string)` | -|   | `name` | The name of the App (for example, App1). `(string)` | -|   | `description` | A short description of the App. `(string)` | -| `_links` |   | The actions that can be performed on the sandbox in the user's domain: | -|   | `self` | Provides a link to get the details for the sandbox via a `GET` request. | -|   | `stop` | Provides a link to get stop the sandbox via a `POST` request. | -|   | `all` | Provides a link to get all available sandboxes according to the user's domain via a `GET` request. | - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/blueprints.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/blueprints.md deleted file mode 100644 index 5d6b0a7af0..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/blueprints.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Blueprints - -### Description - -Gets a list of all the public blueprints associated with the user's domain. Returns blueprint details related to the user's domain and permissions, such as the blueprint GUID and the actions that can be performed on each blueprint. - -:::note -In CloudShell Portal, make sure to set the blueprints to "Public" as the API does not work with private blueprints. -::: - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v1/blueprints` - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `blueprints` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -The `blueprints` method returns a list of all the blueprints associated with the user's domain and permissions and the actions that can be performed on the individual blueprints: - -```javascript - { - "name":"WebApi", - "id":"c6abccb6-71eb-423b-b754-477c11d6bc2a", - "description":null, - "availability":"Not Available", - "categories":[ - - ], - "estimated_setup_duration":"PT25M", - "_links":{ - "self":{ - "href":"/blueprints/c6abccb6-71eb-423b-b754-477c11d6bc2a", - "method":"GET", - "name":"get a blueprint's details", - "templated":true - }, - "all":{ - "href":"/blueprints", - "method":"GET", - "name":"get available blueprints according to the user domain" - }, - "create_sandbox":{ - "href":"/blueprints/c6abccb6-71eb-423b-b754-477c11d6bc2a/start", - "method":"POST", - "name":"create a sandbox from the blueprint", - "templated":true - } - } - } - -``` -
    - -
    -Response summary - -The response output properties of the `blueprints` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `name` |   | The name of the blueprint. `(string)` | -| `id` |   | The ID of the blueprint. `(string)` | -| `description` |   | A short description about the blueprint. `(string)` | -| `availability` |   | The availability of the blueprint.
    Possible values: Available Now, Not Available. `(string)` | -| `categories` |   | The categories assigned to the blueprint. `(string)` | -| `estimated_setup_duration` |   | The estimated setup duration of the sandbox. The estimated duration's value is specified in ISO 8601 format. | -| `_links` |   | The actions that can be performed on the blueprints in the user's domain: | -|   | `self` | Provides a link to get the blueprint's details via a `GET` request. | -|   | `all` | Provides a link to get all available blueprints according to the user's domain via a `GET` request. | -|   | `create_sandbox` | Provides a link to create a sandbox from the blueprint via a `POST` request. | - -
    diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/index.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/index.md deleted file mode 100644 index e55192aef9..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/index.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudShell Sandbox API Version 1 Reference Guide - - -To use the live documentation pages, log in to the **Authentication API** page using your user credentials and the name of the appropriate CloudShell domain. Then, access the Sandbox API page to execute its methods on the public blueprints and sandboxes in the domain. - -:::note - Sandbox API can be configured to run in secure mode. See [Configuring Sandbox API to Work in HTTPS Mode](../../../install-configure/cloudshell-suite/secure-communication/config-secured-sandbox-api.md). -::: - diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/login.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/login.md deleted file mode 100644 index 0a986e30ce..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/login.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -sidebar_position: 1 ---- - - -# Login - -### Description - -Logs the user in to CloudShell, authenticates the user’s credentials and domain, and returns an authorization token to be used with all subsequent requests. Requests that contain this token return information relevant for the specified domain, per the user's permissions. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/login` - -### HTTP method - -`PUT` - -### Request - -
    -Headers - -Example header format for the `login` method: - -`Content-Type: application/json` - -
    - -
    -Request body - -The user credentials (in JSON format). The parameters of the `login` method include: - -| Parameter | Description | -| --- | --- | -| `username` | The user's name. `(string)` | -| `password` | The user's password. `(string)` | -| `domain` | The user's domain. `(string)` | - -
    - -
    -Request example - -Example request input for the `login` method in JSON format: - -```javascript -{ - "username":"admin", - "password":"admin", - "domain":"Global" -} -``` -
    - -### Response - -
    -Response example - -The following is a sample authorization token returned by the `login` method: - -`"a0IAmINiGUmVsoJS9IeG1A=="` - -
    - -
    -Response summary - -The `login` method returns an authorization token that must be added to the header of each API method. - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/sandbox-identifier.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/sandbox-identifier.md deleted file mode 100644 index 959cbcadaf..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/sandbox-identifier.md +++ /dev/null @@ -1,149 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Sandbox Identifier - -### Description - -Gets details and available actions for a particular sandbox. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v1/sandboxes/{sandbox_identifier}` - -| Parameter | Description/Comments | -| --- | --- | -| `sandbox_identifier` | The id of the sandbox (`string`). Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | - -### HTTP method - -`GET` - -### Request - - -
    -Headers - -Example header format for the `sandbox identifier` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -The `sandbox identifier` method returns details about a particular sandbox (as opposed to multiple ones). The output includes details about the sandbox ID and the actions that can be performed on the sandbox: - -```javascript -{ - "name":"Test Blprnt 2", - "id":"994bd534-740a-45f5-851f-ff452f2a17a2", - "state":"Ready", - "setup_stage":"Provisioning", - "type":"Sandbox", - "components":[ - { - "name":"MySwitch", - "type":"Resource", - "component_type":"Generic Switch Model", - "description":"", - "attributes":[ - { - "type":"string", - "name":"vendor", - "value":"" - } - ], - "connection_interfaces":[ - { - "name":"Telnet", - "url":"" - } - ], - } - ], - "apps":[ - { - "name":"MyApp", - "type":"Application", - "description":"" - } - ], - "permitted_users":[ - { - "john.s", - "emily.b", - "lucas.w" - } - ], - "_links":{ - "self":{ - "href":"/sandboxes/994bd534-740a-45f5-851f-ff452f2a17a2", - "method":"GET", - "name":"get a sandbox' details", - "templated":true - }, - "stop":{ - "href":"/sandboxes/994bd534-740a-45f5-851f-ff452f2a17a2/stop", - "method":"POST", - "name":"stop a sandbox", - "templated":true - }, - "all":{ - "href":"/sandboxes", - "method":"GET", - "name":"get all sandboxes" - } - } -} -``` - -
    - -
    -Response summary - -The response output properties of the `sandbox identifier` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `name` |   | The name of the sandbox. `(string)` | -| `id` |   | The ID of the sandbox. `(string)` | -| `blueprint_id` |   | The ID of the blueprint on which the sandbox is based. | -| `description` |   | A description of the sandbox `(string)` | -| `start_time` |   | The time when the sandbox started `(string)` | -| `end_time` |   | the time when the sandbox ended or is expected to end `(string)` | -| `state` |   | The current state of the sandbox. Possible values: Pending, Setup, Ready, Teardown, Error, Ended. `(string)` | -| `setup_stage` |   | (If the sandbox includes orchestration scripts) The current setup stage of the sandbox. Possible values: Provisioning, Connectivity, Configuration, Ended, None. `(string)` | -| `type` |   | The sandbox type ("Sandbox"). `(string)` | -| `components` |   | The resource model of the sandbox. `(array)` | -|   | `name` | The name of the component. `(string)` | -|   | `type` | The component ("resource", "application", or "service"). `(string)` | -|   | `component_type` | The resource model. `(string)` | -|   | `description` | A short description of the resource. | -|   | `attributes` | The attributes of the resource model. `(array)` | -|   | `type` | The attribute type. `(string)` | -|   | `name` | The attribute name. `(string)` | -|   | `value` | The attribute value. `(string)` | -|   | `connection_interfaces` | The connection interfaces of the resource. `(array)` | -|   | `name` | The name of the connection interface. `(string)` | -|   | `url` | The URL of the connection interface of the resource. `(string)` | -| `apps` |   | The Apps of the sandbox. `(string)` | -|   | `type` | The App type ("Application"). `(string)` | -|   | `name` | The name of the App (for example, App1). `(string)` | -|   | `description` | A short description of the App. `(string)` | -| `permitted_users` |   | Sandbox's permitted users list. Specify as a comma-separated list of the CloudShell user names. | -| `_links` |   | The actions that can be performed on the sandbox in the user's domain: | -|   | `self` | Provides a link to get the details for the sandbox via a `GET` request. | -|   | `stop` | Provides a link to stop the sandbox via a `POST` request. | -|   | `all` | Provides a link to get all available sandboxes according to the user's domain, via a `GET` request. | -|   | `blueprint` | Provides a link to get the details of the sandbox's blueprint via a `GET` request. | - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/sandbox-stop.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/sandbox-stop.md deleted file mode 100644 index 85caedfee2..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/sandbox-stop.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -sidebar_position: 7 ---- - -# Sandbox Stop - -### Description - -Ends a sandbox per specified sandbox ID. Returns a successful response when the sandbox is stopped. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v1/sandboxes/{sandbox_identifier}/stop` - -| Parameter | Description/Comments | -| --- | --- | -| `sandbox_identifier` | The id of the sandbox (`string`). Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format for the `sandbox stop` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -A successful response is displayed when the `sandbox stop` method ends the sandbox: - -```javascript -{ - "result":"success", - "_links":{ - "all":{ - "href":"/sandboxes", - "method":"GET" - } - } -} -``` -
    - diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/sandboxes.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/sandboxes.md deleted file mode 100644 index eb8b11a368..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/sandboxes.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Sandboxes - -### Description - -Gets a list of all the running and pending sandboxes (regular and persistent sandboxes) associated with the user's domain, as well as each sandbox's details, including the sandbox ID and the available actions that can be performed on it. It can also show completed sandboxes related to the user's domain. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v1/sandboxes` - -### HTTP method - -`GET` - -### Request - -Headers - -Example header format for the `sandboxes` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -:::note -To also include completed sandboxes in the response, add the parameter `show_historic` to the request URL: -The default value for this parameter is `false`. -::: - -### Response - -
    -Response example - -The `sandboxes` method returns a list of all the sandboxes and the actions that can be performed on each sandbox. - -```javascript -[ - { - "name":"Test Blprnt2", - "id":"11491c80-6f79-4e9c-b592-78242c6dc698", - "description":"This is a list of sandboxes in this user domain", - "state":"Ready", - "blueprint":{ - "name":"Test Blprnt2", - "id":"2f4c972b-5c64-4b08-bae4-73408d7b171d" - }, - "_links":{ - "self":{ - "href":"/sandboxes/11491c80-6f79-4e9c-b592-78242c6dc698", - "method":"GET", - "name":"get a sandbox' details", - "templated":true - }, - "components":{ - "href":"/sandboxes/11491c80-6f79-4e9c-b592-78242c6dc698/components", - "method":"GET" - }, - "stop":{ - "href":"/sandboxes/11491c80-6f79-4e9c-b592-78242c6dc698/stop", - "method":"POST", - "name":"stop a sandbox", - "templated":true - }, - "all":{ - "href":"/sandboxes", - "method":"GET", - "name":"get all sandboxes" - } - } - } -] -``` - -
    - -
    -Response summary - -The response output properties of the `sandboxes` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `name` |   | The name of the sandbox. `(string)` | -| `id` |   | The ID of the sandbox. `(string)` | -| `description` |   | A text description of the sandbox. `(string)` | -| `state` |   | The current state of the sandbox. Possible values: Pending, Setup, Ready, Teardown, Error, Ended. `(string)` | -| `blueprint` |   | The details of the sandbox's blueprint `(Array)` | -|   | `name` | The name of the blueprint `(string)` | -|   | `id` | The id of the blueprint `(string)` | -| `_links` |   | The actions that can be performed on a sandbox in the user's domain: | -|   | `self` | Provides a link to get a specific sandbox's details per specified sandbox ID via a `GET` request. | -|   | `stop` | Provides a link to end an active sandbox per specified sandbox ID via a `POST` request. | -|   | `all` | Provides a link to get all available sandboxes according to the user's domain via a `GET` request. | - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/_category_.json b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/_category_.json deleted file mode 100644 index fe81e3e79a..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Cloudshell Sandbox API Version 2 Reference Guide", - "position": 3 -} \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprint-identifier.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprint-identifier.md deleted file mode 100644 index f7dc53ca5f..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprint-identifier.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Blueprint Identifier - -### Description - -Gets details and available actions for a particular public blueprint associated with the user's domain. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/blueprints/{blueprint_identifier}` - -| Parameter | Description/Comments | -| --- | --- | -| `blueprint_identifier` | The name or id of the blueprint (`string`). Can be retrieved via [blueprints](./blueprints.md). | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `blueprint identifier` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -The example response of the `blueprint identifier` method is similar to that of the [blueprints](./blueprints.md) method. However, in this case the output properties are displayed for a particular blueprint (as opposed to multiple ones), and includes any published blueprint and resource input parameters. The API can call a blueprint by name or ID. - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprint-start-persistent.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprint-start-persistent.md deleted file mode 100644 index b0290dff6e..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprint-start-persistent.md +++ /dev/null @@ -1,186 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Blueprint Start Persistent - -### Description - -Creates a new persistent sandbox from a specific public persistent blueprint associated with the user's domain. Returns details about the persistent sandbox such as ID and the actions that can be performed on the sandbox. (After the sandbox is created, you can view it in the Sandboxes dashboard in CloudShell Portal.) - -:::note -- You cannot reserve blueprints if there are conflicts with the reservation timeslot. For additional information see [Creating Sandboxes](../../../portal/sandboxes/creating-sandboxes.md). -- This method does not support regular sandboxes. As such, attempting to start a regular blueprint will end in error. -::: - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/blueprints/{blueprint_identifier}/start-persistent` - -| Parameter | Description/Comments | -| --- | --- | -| `blueprint_identifier` | The name or id of the blueprint (`string`). Can be retrieved via [blueprints](./blueprints.md). | - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format for the `blueprint start` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -The scheduling and input parameters of the sandbox in JSON format. The elements of the `blueprint start` method include: - -| Parameter | Description/Comments | -| --- | --- | -| `name` | The name of the sandbox. `(string)`
    If you do not specify a name, you will get the following error message: "Reservation name must be specified in request body". | -| `params` | Any published input parameters defined for the blueprint and its abstract resources. Input parameters that have no default must be included in the request. Abstract resource input parameters must be associated to global inputs (specify the global inputs in the request). `(Array)`
    If you do not specify the input parameters, you will get the following error message: "Blueprint has invalid inputs". | -| `permitted_users` | Users permitted to use the sandbox. Permitted users must have access to the logged-in domain. | - -
    - -
    -Request example - -```javascript -{ - "name": "Persistent sandbox name", - "params": [ - ], - "permitted_users": [ - "steven", - "julia" - ] -} -``` -
    - -### Response - -
    -Response example - -The `blueprint start` method returns details about the new sandbox. The output includes details about the sandbox ID and the actions that can be performed on the sandbox: - -```javascript -{ - "name": "Persistent sandbox name", - "id": "8d653d03-9e12-47ce-9d30-19cae1a239c3", - "blueprint_id": "b4852f4b-d2bd-4dbc-b03a-f943941a9053", - "description": "Blueprint with preconfigured setup & teardown processes.Deploys Apps and resolves connections on Setup, and deletes App VMs on Teardown", - "start_time": "2021-08-02T09:22:00Z", - "end_time": null, - "state": "BeforeSetup", - "type": "Sandbox", - "components": [ - { - "id": "6644dc07-1cc1-4b28-9879-0c704f106c2b", - "name": "cloudshell-latest", - "type": "Application", - "component_type": "Generic App Model", - "app_lifecycle": "Undeployed", - "_links": { - "self": { - "href": "/sandboxes/8d653d03-9e12-47ce-9d30-19cae1a239c3/components/6644dc07-1cc1-4b28-9879-0c704f106c2b", - "method": "GET" - } - } - }, - { - "id": "92259d2a-3928-46ec-9da8-65eccc19b7f8", - "name": "dbs-latest-cloudshell", - "type": "Application", - "component_type": "Generic App Model", - "app_lifecycle": "Undeployed", - "_links": { - "self": { - "href": "/sandboxes/8d653d03-9e12-47ce-9d30-19cae1a239c3/components/92259d2a-3928-46ec-9da8-65eccc19b7f8", - "method": "GET" - } - } - } - ], - "parameters": [], - "setup_stage": "None", - "permitted_users": [ - "admin", - "julia", - "steven" - ], - "_links": { - "self": { - "href": "/sandboxes/8d653d03-9e12-47ce-9d30-19cae1a239c3", - "method": "GET" - }, - "components": { - "href": "/sandboxes/8d653d03-9e12-47ce-9d30-19cae1a239c3/components", - "method": "GET" - }, - "output": { - "href": "/sandboxes/8d653d03-9e12-47ce-9d30-19cae1a239c3/output", - "method": "GET" - }, - "stop": { - "href": "/sandboxes/8d653d03-9e12-47ce-9d30-19cae1a239c3/stop", - "method": "POST" - }, - "all": { - "href": "/sandboxes", - "method": "GET" - }, - "blueprint": { - "href": "/blueprints/b4852f4b-d2bd-4dbc-b03a-f943941a9053", - "method": "GET" - } - } -} -``` -
    - -
    -Response summary - -The response output properties of the `blueprint start` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `name` |   | The name of the sandbox. `(string)` | -| `id` |   | The ID of the sandbox. `(string)` | -| `state` |   | The current state of the sandbox. Possible values: Pending, BeforeSetup, Setup, Ready, Teardown, Error, Ended. `(string)` | -| `type` |   | The sandbox type ("Sandbox"). `(string)` | -| `components` |   | The resource model of the sandbox. `(array)` | -|   | `id` | Component's unique ID. `(string)` | -|   | `name` | The name of the component. `(string)` | -|   | `description` | A short description of the resource. | -|   | `type` | The component ("resource", "application", or "service"). `(string)` | -|   | `component_type` | The resource model. `(string)` | -|   | `attributes` | The attributes of the resource model. `(array)` | -|   | `type` | The attribute type. `(string)` | -|   | `name` | The attribute name. `(string)` | -|   | `value` | The attribute value. `(string)` | -|   | `connection_ interfaces` | The connection interfaces of the resource. `(array)` | -|   | `name` | The name of the connection interface. `(string)` | -|   | `url` | The URL of the connection interface of the resource. `(string)` | -|   | `app_lifecycle` | (Available for App components) The current state of the App ("undeployed"/"deployed"). `(string)` | -|   | `_links` | The actions that can be performed on the sandbox component (Get component details). | -| `_links` |   | The actions that can be performed on the sandbox in the user's domain: | -|   | `self` | Provides a link to get the details for the sandbox via a `GET` request. | -|   | `components` | Provides a link to get all components in the sandbox via a `GET` request. | -|   | `stop` | Provides a link to get stop the sandbox via a `POST` request. | -|   | `all` | Provides a link to get all available sandboxes according to the user's domain via a `GET` request. | -| `parameters` |   | Published inputs and additional info. | -| `permitted_users` |   | Users permitted to use the sandbox, including the owner. | - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprint-start.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprint-start.md deleted file mode 100644 index e027a1cded..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprint-start.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -sidebar_position: 4 ---- - - -# Blueprint Start - -### Description - -Creates a new sandbox from a specific public blueprint associated with the user's domain. Returns details about the sandbox such as ID and the actions that can be performed on the sandbox. (After the sandbox is created, you can view it in the Sandboxes dashboard in CloudShell Portal.) - -:::note -- You cannot reserve blueprints if there are conflicts with the reservation timeslot. For additional information see [Creating Sandboxes](../../../portal/sandboxes/creating-sandboxes.md). -- This method does not support persistent sandboxes. As such, starting a persistent sandbox will deploy a regular sandbox. -::: - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/blueprints/{blueprint_identifier}/start` - -| Parameter | Description/Comments | -| --- | --- | -| `blueprint_identifier` | The name or id of the blueprint (`string`). Can be retrieved via [blueprints](./blueprints.md). | - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format for the `blueprint start` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -The scheduling and input parameters of the sandbox in JSON format. The elements of the `blueprint start` method include: - -| Parameter | Description/Comments | -| --- | --- | -| `name` | The name of the sandbox. `(string)`
    If you do not specify a name, you will get the following error message: "Reservation name and duration must be specified in request body". | -| `duration` | The duration for this sandbox. Time must be specified in ISO 8601 format (for example PT23H). `(string)`
    If you do not specify the duration, you will get the following error message: "Duration format must be a valid 'ISO 8601' (e.g 'PT23H' or 'PT4H2M')". | -| `params` | Any published input parameters defined for the blueprint and its abstract resources. Input parameters that have no default must be included in the request. Abstract resource input parameters must be associated to global inputs (specify the global inputs in the request). `(Array)`
    If you do not specify the input parameters, you will get the following error message: "Blueprint has invalid inputs". | -| `permitted_users` | Users permitted to use the sandbox. Permitted users must have access to the logged-in domain. | - -
    - -
    -Request example - -```javascript -{ - "name":"testbp-sndbx", - "duration":"PT2H5M", - "params":[ - { - "name":"global1", - "value":"value1" - }, - { - "name":"abstract resource 1.attribute4", - "value":"some value" - }, - { - "name":"abstract resource 1/sub resource.attribute4", - "value":"some value" - } - ], - "permitted_users":[ - "john.s", - "emily.b", - "lucas.w" - ] -} -``` -
    - -### Response - -
    -Response example - -The `blueprint start` method returns details about the new sandbox. The output includes details about the sandbox ID and the actions that can be performed on the sandbox: - -```javascript -{ - "name":"Test Blprnt2", - "id":"994bd534-740a-45f5-851f-ff452f2a17a2", - "state":"Ready", - "type":"Sandbox", - "components":[ - { - "id":"82159835-2d95-46a9-95ec-9251963d203d", - "name":"MyApp", - "type":"Application", - "component_type":"Generic App Model", - "app_lifecycle":"undeployed", - "_links":{ - "self":{ - "href":"/sandboxes/994bd534-740a-45f5-851f-ff452f2a17a2/components/82159835-2d95-46a9-95ec-9251963d203d", - "method":"GET" - } - } - } - ], - "_links":{ - "self":{ - "href":"/sandboxes/994bd534-740a-45f5-851f-ff452f2a17a2", - "method":"GET", - }, - "components":{ - "href":"/sandboxes/994bd534-740a-45f5-851f-ff452f2a17a2/components", - "method":"GET" - }, - "stop":{ - "href":"/sandboxes/994bd534-740a-45f5-851f-ff452f2a17a2/stop", - "method":"POST", - }, - "all":{ - "href":"/sandboxes", - "method":"GET", - } - } -``` -
    - -
    -Response summary - -The response output properties of the `blueprint start` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `name` |   | The name of the sandbox. `(string)` | -| `id` |   | The ID of the sandbox. `(string)` | -| `state` |   | The current state of the sandbox. Possible values: Pending, Setup, Ready, Teardown, Error, Ended. `(string)` | -| `type` |   | The sandbox type ("Sandbox"). `(string)` | -| `components` |   | The resource model of the sandbox. `(array)` | -|   | `name` | The name of the component. `(string)` | -|   | `type` | The component ("resource", "application", or "service"). `(string)` | -|   | `component_type` | The resource model. `(string)` | -|   | `app_lifecycle` | (Available for App components) The current state of the App ("undeployed"/"deployed"). `(string)` | -|   | `_links` | The actions that can be performed on the sandbox component (Get component details). | -| `_links` |   | The actions that can be performed on the sandbox in the user's domain: | -|   | `self` | Provides a link to get the details for the sandbox via a `GET` request. | -|   | `components` | Provides a link to get all components in the sandbox via a `GET` request. | -|   | `stop` | Provides a link to get stop the sandbox via a `POST` request. | -|   | `all` | Provides a link to get all available sandboxes according to the user's domain via a `GET` request. | - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprints.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprints.md deleted file mode 100644 index d602328360..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/blueprints.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Blueprints - -### Description - -Gets a list of all the public blueprints associated with the user's domain. Returns blueprint details related to the user's domain and permissions, such as the blueprint GUID and the actions that can be performed on each blueprint. - -:::note -In CloudShell Portal, make sure to set the blueprints to "Public" as the API does not work with private blueprints. -::: - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/blueprints` - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `blueprints` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -The `blueprints` method returns a list of all the blueprints associated with the user's domain and permissions and the actions that can be performed on the individual blueprints: - -```javascript -[ - { - "name":"WebApi", - "id":"c6abccb6-71eb-423b-b754-477c11d6bc2a", - "description":null, - "availability":"Not Available", - "categories":[ - - ], - "estimated_setup_duration":"PT25M", - "_links":{ - "self":{ - "href":"/blueprints/c6abccb6-71eb-423b-b754-477c11d6bc2a", - "method":"GET", - "name":"get a blueprint's details", - "templated":true - }, - "all":{ - "href":"/blueprints", - "method":"GET", - "name":"get available blueprints according to the user domain" - }, - "create_sandbox":{ - "href":"/blueprints/c6abccb6-71eb-423b-b754-477c11d6bc2a/start", - "method":"POST", - "name":"create a sandbox from the blueprint", - "templated":true - } - } - } -] -``` -
    - -
    -Response summary - -The response output properties of the `blueprints` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `name` |   | The name of the blueprint. `(string)` | -| `id` |   | The ID of the blueprint. `(string)` | -| `description` |   | A short description about the blueprint. `(string)` | -| `availability` |   | The availability of the blueprint.
    Possible values: Available Now, Not Available. `(string)` | -| `categories` |   | The categories assigned to the blueprint. `(string)` | -| `estimated_setup_duration` |   | The estimated setup duration of the sandbox. The estimated duration's value is specified in ISO 8601 format. | -| `_links` |   | The actions that can be performed on the blueprints in the user's domain: | -|   | `self` | Provides a link to get the blueprint's details via a `GET` request. | -|   | `all` | Provides a link to get all available blueprints according to the user's domain via a `GET` request. | -|   | `create_sandbox` | Provides a link to create a sandbox from the blueprint via a `POST` request. | -
    - diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/component-command-name.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/component-command-name.md deleted file mode 100644 index 6914caa60d..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/component-command-name.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -sidebar_position: 11 ---- - - -# Component Command Name - -### Description - -Gets details about a particular command for a specific component (resource, service, or App) in a sandbox. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/{sandbox_identifier}/components/{component_id}/commands/{command_name}` - -| Parameter | Description/Comments | -| --- | --- | -| `sandbox_identifier` | The id of the sandbox (`string`). Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | -| `component_id` | The id of the component (`string`). Can be retrieved via [sandbox components](./sandbox-components.md) and [blueprint start](./blueprint-start.md). | -| `command_name` | The name of the command (`string`). Can be retrieved via [sandbox component commands](./sandbox-component-commands.md). | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `component command name` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -The `component command name` method returns details about a specific component command in a particular sandbox and the actions that can be performed on the command. - -```javascript -{ - "name":"my_command", - "description":"", - "params":[ - { - "name":"param1", - "description":"", - "type":"numeric", - "possible values":[ - - ], - "default value":"", - "mandatory":false - } - ], - "executions":[ - { - "id":"0daead01-8e57-4064-81d4-84911effa911", - "status":"Pending", - "supports_cancellation":"false", - "_links":{ - "self":{ - "href":"/executions/0daead01-8e57-4064-81d4-84911effa911", - "method":"GET" - }, - "stop":{ - "href":"/executions/0daead01-8e57-4064-81d4-84911effa911", - "method":"DELETE" - } - } - } - ], - "_links":{ - "self":{ - "href":"/sandboxes/0daead01-8e57-4064-81d4-84911effa000/components/0daead01-8e57-4064-81d4-84911effa933/commands/my-command", - "method":"GET" - }, - "start":{ - "href":"/sandboxes/0daead01-8e57-4064-81d4-84911effa000/components/0daead01-8e57-4064-81d4-84911effa933/commands/my-command/start", - "method":"POST" - } - } -} -``` - -
    - - -
    -Response summary - -The response output properties of the `component command name` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `name` |   | The name of the command. `(string)` | -| `description` |   | A short description of the command. `(string)` | -| `params` |   | The parameters needed for the command execution. `(array)` | -|   | `name` | The parameter name. `(string)` | -|   | `description` | The parameter description. `(string)` | -|   | `type` | The parameter type ("string", "numeric", or "lookup"). `(string)` | -|   | `possible values` | All the possible values for this parameter. `(array)` | -|   | `default value` | The default value of the parameter. `(string)` | -|   | `mandatory` | Whether or not the parameter is mandatory for the command execution. `(bool)` | -| `executions` |   | The execution history for this command. `(array)` | -|   | `id` | The ID of the execution. `(string)` | -|   | `status` | The current status of the command execution ("pending", "running", "stopping", "canceled", `(string)` | -|   | `supports_cancellation` | Whether or not stopping the execution before it is completed is supported. `(bool)` | -|   | `_links` | The actions that can be performed on the execution (Get execution details, Delete execution) | -| `_links` |   | The actions that can be performed on the sandbox's component command in the user's domain: | -|   | `self` | Provides a link to get the command's details via a `GET` request. | -|   | `start` | Provides a link to get start the command's execution via a `POST` request. | -| `command_tag` | string | (For connected commands only) Tag defined for the command. Options are "power" or "remote_(remote command name)" | - - - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/component-command-start.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/component-command-start.md deleted file mode 100644 index 02a30fdad9..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/component-command-start.md +++ /dev/null @@ -1,127 +0,0 @@ ---- -sidebar_position: 12 ---- - - -# Component Command Start - -### Description - -Executes a particular command or connected command for a specific component (resource, service, or App) in a sandbox. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/{sandbox_identifier}/components/{component_id}/commands/{command_name}/start` - -| Parameter | Description/Comments | -| --- | --- | -| `sandbox_identifier` | The id of the sandbox (`string`). Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | -| `component_id` | The id of the component (`string`). Can be retrieved via [sandbox components](./sandbox-components.md) and [blueprint start](./blueprint-start.md). | -| `command_name` | The name of the command (`string`). Can be retrieved via [sandbox component commands](./sandbox-component-commands.md). | - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format for the `component command start` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -The input parameters of the command in JSON format. The elements of the `component command start` method include. - -| Parameter | Description/Comments | -| --- | --- | -| `command_tag` | Tag defined for the connected command. Connected command tags are used to define categories of functionality.`(string)` -Possible values:
    - power
    - remote_\: For example, "remote_save_snapshot" for vCenter VM save snapshot. | -| params | Any input parameters required for running the command must be included in the request.(array)
    If you do not specify the input parameters, you will get the following error message: "No values were provided for the following mandatory inputs: \{Parameter name}". | -| `connected_ports_full_path` | List of connected ports to use in this operation. (array)
    Include the full path from the root resource to each port, separated by slashes. For example: Switch20/Blade5/PowerPort1. Leave blank to perform the connected operation on all of the specified resource’s connected ports. | -| `printOutput` | Whether or not the command output is displayed in the console or command line. `(bool)` | -
    - -
    -Request example for regular commands - -```javascript -{ - "params":[ - { - "name":"Version", - "value":"1.0.223.7" - } - ], - "printOutput":"true/false" -} -``` -
    - -
    -Request example for connected commands - -```javascript -{ - "command_tag": "power", - "params": [ - { - "name": "Version", - "value": "1.0.223.7" - } - ], - "connected_ports_full_path": [ - "Switch20/Blade5/PowerPort1" - ], - "printOutput": true -} -``` -
    - -### Response - -
    -Response example - -The `component command start` method returns details about a specific execution of the sandbox component command. The response includes the command's execution ID and the actions that can be performed on the execution. - -```javascript -{ - "executionId":"1DEB29BF-22B0-4CF6-B7BE-02173520EB81", - "supports_cancellation":true, - "_links":{ - "self":{ - "href":"/execution/1DEB29BF-22B0-4CF6-B7BE-02173520EB81", - "method":"GET" - }, - "stop":{ - "href":"/executions/1DEB29BF-22B0-4CF6-B7BE-02173520EB81", - "method":"DELETE" - } - } -} -``` -
    - -
    -Response summary - -The response output properties of the `component command start` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `executionId` |   | The ID of the execution. `(string)` | -| `supports_cancellation` |   | Whether or not stopping the execution before it is completed is supported. `(bool)` | -| `_links` |   | The actions that can be performed on the execution: | -|   | `self` | Provides a link to get a the execution's details via a `GET` request. | -|   | `stop` | Provides a link to end the execution via a `DELETE` request. | - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/execution-id.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/execution-id.md deleted file mode 100644 index dace7cff72..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/execution-id.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -sidebar_position: 20 ---- - -# Execution Id - -### Description - -Gets details about a specific execution of a sandbox or component command, per specified execution ID. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/executions/{execution_id}` - -| Parameter | Description/Comments | -| --- | --- | -| `execution_id` | The id of the command's execution (`string`). Can be retrieved via the [component command start](./component-command-start.md) and the [sandbox command start](./sandbox-command-start.md) methods. | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `execution id` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -The `execution id` method returns details about a specific execution of a sandbox or component command and the actions that can be performed on the execution. - -```javascript -{ - "id":"1DEB29BF-22B0-4CF6-B7BE-02173520EB81", - "supports_cancellation":"true", - "started":"", - "ended":"", - "status":"", - "output":"", - "_links":{ - "self":{ - "href":"/executions/1DEB29BF-22B0-4CF6-B7BE-02173520EB81", - "method":"GET" - }, - "stop":{ - "href":"/executions/1DEB29BF-22B0-4CF6-B7BE-02173520EB81", - "method":"DELETE" - } - } -} -``` -
    - -
    -Response summary - -The response output properties of the `execution id` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `id` |   | The ID of the execution. `(string)` | -| `supports_cancellation` |   | Whether or not stopping the execution before it is completed is supported. `(bool)` | -| `started` |   | The date and time at which the execution started. `(string)` | -| `ended` |   | The date and time at which the execution ended. `(string)` | -| `status` |   | The current status of the command execution - "pending", "running", "stopping", "canceled". `(string)` | -| `output` |   | (If the command returns an output message) The command's output. `(string)` | -| `_links` |   | The actions that can be performed on the execution: | -|   | `self` | Provides a link to get the execution's details via a `GET` request. | -|   | `stop` | (If the execution supports cancellation and is still running) Provides a link to end the execution via a `DELETE` request. | - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/execution-stop.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/execution-stop.md deleted file mode 100644 index 1dbe566043..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/execution-stop.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -sidebar_position: 21 ---- - - -# Execution Stop - -### Description - -Ends an execution of a component or sandbox command, per specified execution ID. Returns a successful response when the execution is stopped. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/executions/{execution_id}` - -| Parameter | Description/Comments | -| --- | --- | -| `execution_id` | The id of the command's execution (`string`). Can be retrieved via the [component command start](./component-command-start.md) and the [sandbox command start](./sandbox-command-start.md) methods. | - -### HTTP method - -`DELETE` - -### Request - -
    -Headers - -Example header format for the `execution stop` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -A successful response is displayed when the `execution stop` method ends the execution: - -```javascript -{ -"result": "success", -} -``` -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/index.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/index.md deleted file mode 100644 index 900c107f09..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/index.md +++ /dev/null @@ -1,8 +0,0 @@ - -# CloudShell Sandbox API Version 2 Reference Guide - -To use the live documentation pages, log in to the **Authentication API** page using your user credentials and the name of the appropriate CloudShell domain. Then, access the **Sandbox API** page to execute its methods on the public blueprints and sandboxes in the domain. - -:::note -Sandbox API can be configured to run in secure mode. See [Configuring Sandbox API to Work in HTTPS Mode](../../../install-configure/cloudshell-suite/secure-communication/config-secured-sandbox-api.md). -::: \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/login.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/login.md deleted file mode 100644 index cc943104f4..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/login.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Login - -### Description - -Logs the user in to CloudShell, authenticates the user’s credentials and domain, and returns an authorization token to be used with all subsequent requests. Requests that contain this token return information relevant for the specified domain, per the user's permissions. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/login` - -### HTTP method - -`PUT` - -### Request - -
    -Headers - -Example header format for the `login` method: - -`Content-Type: application/json` - -
    - -
    -Request body - -The user credentials (in JSON format). The parameters of the `login` method include: - -| Parameter | Description | -| --- | --- | -| `username` | The user's name. `(string)` | -| `password` | The user's password. `(string)` | -| `domain` | The user's domain. `(string)` | - -
    - -
    -Request example - -Example request input for the `login` method in JSON format: - -```javascript -{ - "username":"admin", - "password":"admin", - "domain":"Global" -} -``` -
    - -### Response - -
    -Response example - -The following is a sample authorization token returned by the `login` method: - -`"a0IAmINiGUmVsoJS9IeG1A=="` -
    - -
    -Response summary - -The `login` method returns an authorization token that must be added to the header of each API method. - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-activity.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-activity.md deleted file mode 100644 index 77832cf46a..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-activity.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -sidebar_position: 13 ---- - - -# Sandbox Activity - -### Description - -Gets the content of CloudShell Portal's Activity Feed for a particular sandbox. This displays information about actions performed in the sandbox by the user and automation process. - -The maximum number of entries in the response is configured by the administrator. If this number of entries is exceeded, the response will include multiple pages. For more information, see [Setting the response page size for the Sandbox API live documentation pages](../../../admin/setting-up-cloudshell/cloudshell-configuration-options/advanced-cloudshell-customizations.md#setting-the-response-page-size-for-the-sandbox-api-live-documentation-pages). - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/{sandbox_identifier}/activity?tail=100&from_event_id` - -| URL Parameters | Description/Comments | -| --- | --- | -| `sandbox_identifier` | Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | - -You may add the following optional parameters to the end of the method's URL to filter the number of events. For example - displaying the last 100 errors: - -| Query Parameters | Description/Comments | -| --- | --- | -| `error_only` | Returns only "error" type events. `(bool)` | -| `since` | Time from which to return all events. Time must be specified in ISO 8601 format (for example PT23H).`(string)` | -| `tail` | Last number of events to return. `(integer)` | -| `from_event_id` | ID of the first event in the response page to display, which is returned in the `next_event_id` property of the response. `(string)` | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `sandbox activity` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -By default, the method's response includes all the events that occurred during the sandbox's lifecycle. - -
    - -### Response - -
    -Response example - -The `sandbox activity` method returns the events from the Activity Feed of a particular sandbox. The response includes : - -```javascript -{ - "num_returned_events":"20", - "more_pages":"false", - "next_event_id":"99434", - "events":[ - { - "id":"82159835-2d95-46a9-95ec-9251963d203d", - "event_type":"success", - "event_text":"Sandbox 'MyBlueprint' has started", - "output":"Null", - "time":"2017-01-15T09:51:17Z", - "execution_server": null - }, - { - "id":"79549eaf-7f1a-4180-a88b-e7da27e5075b", - "event_type":"success", - "event_text":"'Deploy' resource command on 'vCenter VM From...' started", - "output":"Null", - "time":"2017-01-15T09:51:17Z", - "execution_server": "WIN-ES-NY" - } - ] -} -``` -
    - -
    -Response summary - -The response output properties of the `sandbox activity` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `number_of_returned_events` |   | The number of events in the Activity Feed that match the filter criteria in the request. `(integer)` | -| `more_pages` |   | (Relevant if the response includes multiple pages) `true` indicates that there are additional events that are not displayed in this response page `(bool)` | -| `next_event_id` |   | (Relevant if the response includes multiple pages) The ID of the first event on the next page of the response. `(integer)`
    Note: To get the next page, run the method again with this value in the `from_event_id` input parameter. | -| `events` |   | The details of the Activity Feed events `(array)` | -|   | `id` | The ID of the event `(string)` | -|   | `event_type` | The type of event ("success"/"error") `(string)` | -|   | `event_text` | The text displayed in the Activity Feed for the event `(string)` | -|   | `output` | (Events related to command execution) Text displayed as output of the command `(string)` | -|   | `time` | The time in which the Activity Feed event was logged `(string)` | -| | `execution_server` | Name of the execution server that executed the command. `(string)` | - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-command-name.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-command-name.md deleted file mode 100644 index eb3a86a3ca..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-command-name.md +++ /dev/null @@ -1,115 +0,0 @@ ---- -sidebar_position: 18 ---- - -# Sandbox Command Name - -### Description - -Gets details about a particular blueprint command in a specific sandbox. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/{sandbox_identifier}/commands/{command_name}` - -| Parameter | Description/Comments | -| --- | --- | -| `sandbox_identifier` | The id of the sandbox (`string`). Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | -| `command_name` | The name of the sandbox command (`string`). Can be retrieved via [sandbox commands](./sandbox-commands.md) | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `sandbox command name` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -The `sandbox command name` method returns details about a specific command for a particular sandbox and the actions that can be performed on the command. - -```javascript -{ - "name":"my_command", - "description":"", - "params":[ - { - "name":"param1", - "description":"", - "type":"numeric", - "possible values":[ - - ], - "default value":"", - "mandatory":false - } - ], - "executions":[ - { - "id":"0daead01-8e57-4064-81d4-84911effa911", - "status":"Pending", - "supports_cancellation":"false", - "_links":{ - "self":{ - "href":"/executions/0daead01-8e57-4064-81d4-84911effa911", - "method":"GET" - }"stop":{ - "href":"/executions/0daead01-8e57-4064-81d4-84911effa911", - "method":"DELETE" - } - } - } - ], - "_links":{ - "self":{ - "href":"/sandboxes/0daead01-8e57-4064-81d4-84911effa000/commands/my-command", - "method":"GET" - }, - "start":{ - "href":"/sandboxes/0daead01-8e57-4064-81d4-84911effa000/commands/my-command/start", - "method":"POST" - } - } -} -``` -
    - -
    -Response summary - -The response output properties of the `sandbox command name` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `name` |   | The name of the command. `(string)` | -| `description` |   | A short description of the command. `(string)` | -| `params` |   | The parameters needed for the command execution. `(array)` | -|   | `name` | The parameter name. `(string)` | -|   | `description` | The parameter description. `(string)` | -|   | `type` | The parameter type ("string", "numeric", or "lookup"). `(string)` | -|   | `possible values` | All the possible values for this parameter. `(array)` | -|   | `default value` | The default value of the parameter. `(string)` | -|   | `mandatory` | Whether or not the parameter is mandatory for the command execution. `(bool)` | -| `executions` |   | The execution history for this command. `(array)` | -|   | `id` | The ID of the execution. `(string)` | -|   | `status` | The current status of the command execution ("pending", "running", "stopping", "canceled". `(string)` | -|   | `supports_cancellation` | Whether or not stopping the execution before it is completed is supported. `(bool)` | -|   | `_links` | The actions that can be performed on the execution (Get execution details, Delete execution) | -| `_links` |   | The actions that can be performed on the sandbox's blueprint command in the user's domain: | -|   | `self` | Provides a link to get the command's details via a `GET` request. | -|   | `start` | Provides a link to start the command's execution via a `POST` request. | - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-command-start.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-command-start.md deleted file mode 100644 index 386a0260c5..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-command-start.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -sidebar_position: 19 ---- - -# Sandbox Command Start - -### Description - -Executes a particular command for a specific sandbox. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/{sandbox_identifier}/commands/{command_name}/start` - -| Parameter | Description/Comments | -| --- | --- | -| `sandbox_identifier` | The id of the sandbox (`string`). Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | -| `command_name` | The name of the command (`string`). Can be retrieved via [sandbox commands](./sandbox-commands.md). | - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format for the `sandbox command start` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -The input parameters of the command in JSON format. The elements of the `sandbox command start` method include. - -| Parameter | Description/Comments | -| --- | --- | -| `params` | Any input parameters required for running the command must be included in the request. If you do not specify the input parameters, you will get the following error message: "No values were provided for the following mandatory inputs: \{Parameter name}". `(Array)` | -| `printOutput` | Whether or not the command output is displayed in the console or command line. `(bool)` | -
    - -
    -Request example - -```javascript -{ - "params":[ - { - "name":"string", - "value":"string" - } - ] -} -``` -
    - -### Response - -
    -Response example - -The `sandbox command start` method returns details about a specific execution of the sandbox command. The response includes the command's execution ID and the actions that can be performed on the execution. - -```javascript -{ - "executionId":"1DEB29BF-22B0-4CF6-B7BE-02173520EB81", - "supports_cancellation":true, - "_links":{ - "self":{ - "href":"/execution/1DEB29BF-22B0-4CF6-B7BE-02173520EB81", - "method":"GET" - }, - "stop":{ - "href":"/executions/1DEB29BF-22B0-4CF6-B7BE-02173520EB81", - "method":"DELETE" - } - } -} -``` -
    - -
    -Response summary - -The response output properties of the `sandbox command start` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `executionId` |   | The ID of the execution. `(string)` | -| `supports_cancellation` |   | Whether or not stopping the execution before it is completed is supported. `(bool)` | -| `_links` |   | The actions that can be performed on the execution: | -|   | `self` | Provides a link to get the execution's details via a `GET` request. | -|   | `stop` | Provides a link to end the execution via a `DELETE` request. | - -
    diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-commands.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-commands.md deleted file mode 100644 index a4139fc0c0..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-commands.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -sidebar_position: 17 ---- - - -# Sandbox Commands - -### Description - -Gets details for all the blueprint commands in the sandbox. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/{sandbox_identifier}/commands` - -| Parameter | Description/Comments | -| --- | --- | -| `sandbox_identifier` | The id of the sandbox (`string`). Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `sandbox commands` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -The `sandbox commands` method returns details about the blueprint commands in a particular sandbox and the actions that can be performed on each command. - -```javascript -[ - { - "name":"my_command", - "description":"", - "params":[ - { - "name":"param1", - "description":"", - "type":"numeric", - "possible values":[ - - ], - "default value":"", - "mandatory":false - } - ], - "executions":[ - { - "id":"0daead01-8e57-4064-81d4-84911effa911", - "status":"Pending", - "supports_cancellation":"false", - "_links":{ - - } - } - ], - "_links":{ - "self":{ - "href":"/sandboxes/0daead01-8e57-4064-81d4-84911effa000/commands/my-command", - "method":"GET" - }, - "start":{ - "href":"/sandboxes/0daead01-8e57-4064-81d4-84911effa000/commands/my-command/start", - "method":"POST" - } - } - } -] -``` -
    - -
    -Response summary - -The response output properties of the `sandbox commands` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `name` |   | The name of the command. `(string)` | -| `description` |   | A short description of the command. `(string)` | -| `params` |   | The parameters needed for the command execution. `(array)` | -|   | `name` | The parameter name. `(string)` | -|   | `description` | The parameter description. `(string)` | -|   | `type` | The parameter type ("string", "numeric", or "lookup"). `(string)` | -|   | `possible values` | All the possible values for this parameter. `(array)` | -|   | `default value` | The default value of the parameter. `(string)` | -|   | `mandatory` | Whether or not the parameter is mandatory for the command execution. `(bool)` | -| `executions` |   | The execution history for this command. `(array)` | -|   | `id` | The ID of the execution. `(string)` | -|   | `status` | The current status of the command execution ("pending", "running", "stopping", "canceled", `(string)` | -|   | `supports_cancellation` | Whether or not stopping the execution before it is completed is supported. `(bool)` | -|   | `_links` | The actions that can be performed on the execution (Get execution details, Delete execution) | -| `_links` |   | The actions that can be performed on a sandbox's blueprint command in the user's domain: | -|   | `self` | Provides a link to get a command's details via a `GET` request. | -|   | `start` | Provides a link to get start a command's execution via a `POST` request. | - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-component-commands.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-component-commands.md deleted file mode 100644 index 5fc5f4bc77..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-component-commands.md +++ /dev/null @@ -1,113 +0,0 @@ ---- -sidebar_position: 10 ---- - - -# Sandbox Component Commands - -### Description - -Gets details about all the commands and connected commands provided for a particular component (resource, service, or App) in a specific sandbox. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/{sandbox_identifier}/components/{component_id}/commands` - -| Parameter | Description/Comments | -| --- | --- | -| `sandbox_identifier` | The id of the sandbox (`string`). Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | -| `component_id` | The id of the component (`string`). Can be retrieved via [sandbox components](./sandbox-components.md) and [blueprint start](./blueprint-start.md). | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `sandbox component commands` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -The `sandbox component commands` method returns details about all the commands provided for a specific component of a particular sandbox and the actions that can be performed on each command. - -```javascript -[ - { - "name":"my_command", - "description":"", - "params":[ - { - "name":"param1", - "description":"", - "type":"numeric", - "possible values":[ - - ], - "default value":"", - "mandatory":false - } - ], - "executions":[ - { - "id":"0daead01-8e57-4064-81d4-84911effa911", - "status":"Pending", - "supports_cancellation":"false", - "_links":{ - - } - } - ], - "_links":{ - "self":{ - "href":"/sandboxes/0daead01-8e57-4064-81d4-84911effa000/components/0daead01-8e57-4064-81d4-84911effa933/my_command", - "method":"GET" - }, - "start":{ - "href":"/sandboxes/0daead01-8e57-4064-81d4-84911effa000/components/0daead01-8e57-4064-81d4-84911effa933/commands/my_command/start", - "method":"POST" - } - } - } -] -``` -
    - -
    -Response summary - -The response output properties of the `sandbox component commands` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `name` |   | The name of the command. `(string)` | -| `description` |   | A short description of the command. `(string)` | -| `params` |   | The parameters needed for the command execution. `(array)` | -|   | `name` | The parameter name. `(string)` | -|   | `description` | The parameter description. `(string)` | -|   | `type` | The parameter type ("string", "numeric", or "lookup"). `(string)` | -|   | `possible values` | All the possible values for this parameter. `(array)` | -|   | `default value` | The default value of the parameter. `(string)` | -|   | `mandatory` | Whether or not the parameter is mandatory for the command execution. `(bool)` | -| `executions` |   | The execution history for this command. `(array)` | -|   | `id` | The ID of the execution. `(string)` | -|   | `status` | The current status of the command execution ("pending", "running", "stopping", "canceled"). `(string)` | -|   | `supports_cancellation` | Whether or not stopping the execution before it is completed is supported. `(bool)` | -|   | `_links` | The actions that can be performed on the execution (Get execution details, Delete execution) | -| `_links` |   | The actions that can be performed on a sandbox's component command in the user's domain: | -|   | `self` | Provides a link to get a command's details via a `GET` request. | -|   | `start` | Provides a link to start a command's execution via a `POST` request. | -| command_tag | string | (For connected commands only) Tag defined for the command. Options are "power" or "remote_\" | - -
    diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-component-id.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-component-id.md deleted file mode 100644 index c08b7c4050..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-component-id.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -sidebar_position: 9 ---- - - -# Sandbox Component Id - -### Description - -Gets details and available actions for a particular component (resource, service, or App) in a specific sandbox. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/{sandbox_identifier}/components/{component_id}` - -| Parameter | Description/Comments | -| --- | --- | -| `sandbox_identifier` | The id of the sandbox (`string`). Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | -| `component_id` | The id of the component (`string`). Can be retrieved via [sandbox components](./sandbox-components.md) and [blueprint start](./blueprint-start.md). | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `sandbox component id` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -The `sandbox component id` method returns details about a specific component of a particular sandbox, and the actions that can be performed on the component. - -```javascript -{ - "id":"0daead01-8e57-4064-81d4-84911effa933", - "name":"MyApp", - "type":"Application", - "component_type":"Generic App Model", - "description":"", - "active_deployment_name":"", - "template_name":"", - "app_lifecycle":"undeployed", - "attributes":[ - { - "type":"string", - "name":"user", - "value":"" - } - ], - "connection_interfaces":[ - { - "name":"RDP", - "url":"" - } - ], - "_links":{ - "self":{ - "href":"/sandboxes/0daead01-8e57-4064-81d4-84911effa000/components/0daead01-8e57-4064-81d4-84911effa933", - "method":"GET" - }, - "commands":{ - "href":"/sandboxes/0daead01-8e57-4064-81d4-84911effa000/components/0daead01-8e57-4064-81d4-84911effa933/commands", - "method":"GET" - } - } -} -``` -
    - -
    -Response summary - -The response output properties of the `sandbox component id` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `id` |   | The ID of the component. `(string)` | -| `name` |   | The name of the component. `(string)` | -| `type` |   | The component ("resource", "application", or "service"). `(string)` | -| `component_type` |   | The resource model. `(string)` | -| `description` |   | A short description of the component. `(string)` | -| `active_deployment_name` |   | (Available for App components) The name of the deployment path for the App. `(string)` | -| `template_name` |   | (Available for App components) The name of the App template. `(string)` | -| `app_lifecycle` |   | (Available for App components) The current state of the App ("undeployed"/"deployed"). `(string)` | -| `attributes` |   | The attributes of the resource model. `(array)` | -|   | `type` | The attribute type. `(string)` | -|   | `name` | The attribute name. `(string)` | -|   | `value` | The attribute value. `(string)` | -| `connection_ interfaces` |   | The connection interfaces of the resource. `(array)` | -|   | `name` | The name of the connection interface. `(string)` | -|   | `url` | The URL of the connection interface of the component. `(string)` | -| `_links` |   | The actions that can be performed on the component of a sandbox in the user's domain: | -|   | `self` | Provides a link to get the component's details via a `GET` request. | -|   | `commands` | Provides a link to get all the resource commands for the component via a `GET` request. | - -
    - diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-components.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-components.md deleted file mode 100644 index dfd77ed31d..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-components.md +++ /dev/null @@ -1,130 +0,0 @@ ---- -sidebar_position: 8 ---- - - -# Sandbox Components - -### Description - -Gets details about the components (resources, services, and Apps) of a particular sandbox. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/{sandbox_identifier}/components` - -| Parameter | Description/Comments | -| --- | --- | -| `sandbox_identifier` | The id of the sandbox (`string`). Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `sandbox components` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -The `sandbox components` method returns details about all the components of a particular sandbox and the actions that can be performed on each component. - -```javascript -[ - { - "id":"0daead01-8e57-4064-81d4-84911effa933", - "name":"MyApp", - "type":"Application", - "component_type":"Generic App Model", - "description":"", - "active_deployment_name":"", - "template_name":"", - "app_lifecycle":"undeployed", - "attributes":[ - { - "type":"string", - "name":"user", - "value":"" - } - ], - "connection_interfaces":[ - { - "name":"SSH", - "url":"" - } - ], - "_links":{ - "self":{ - "href":"/sandboxes/0daead01-8e57-4064-81d4-84911effa000/components/0daead01-8e57-4064-81d4-84911effa933", - "method":"GET" - } - } - }, - { - "id":"0daead01-8e57-4064-81d4-84911effa911", - "name":"MySwitch", - "type":"Resource", - "component_type":"Generic Switch Model", - "description":"", - "attributes":[ - { - "type":"string", - "name":"vendor", - "value":"" - } - ], - "connection_interfaces":[ - { - "name":"Telnet", - "url":"" - } - ], - "_links":{ - "self":{ - "href":"/sandboxes/0daead01-8e57-4064-81d4-84911effa000/components/0daead01-8e57-4064-81d4-84911effa911", - "method":"GET" - } - } - } -] -``` -
    - -
    -Response summary - -The response output properties of the `sandbox components` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `id` |   | The ID of the component. `(string)` | -| `name` |   | The name of the component. `(string)` | -| `type` |   | The component ("resource", "application", or "service"). `(string)` | -| `component_type` |   | The resource model. `(string)` | -| `description` |   | A short description of the component. `(string)` | -| `active_deployment_name` |   | (Available for App components) The name of the deployment path for the App. `(string)` | -| `template_name` |   | (Available for App components) The name of the App template. `(string)` | -| `app_lifecycle` |   | (Available for App components) The current state of the App ("undeployed"/"deployed"). `(string)` | -| `attributes` |   | The attributes of the resource model. `(array)` | -|   | `type` | The attribute type. `(string)` | -|   | `name` | The attribute name. `(string)` | -|   | `value` | The attribute value. `(string)` | -| `connection_interfaces` |   | The connection interfaces of the resource. `(array)` | -|   | `name` | The name of the connection interface. `(string)` | -|   | `url` | The URL of the connection interface. `(string)` | -| `_links` |   | The actions that can be performed on the component of a sandbox in the user's domain: | -|   | `self` | Provides a link to get the component's details via a `GET` request. | - -
    diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-extend.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-extend.md deleted file mode 100644 index 67bd5d33c0..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-extend.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -sidebar_position: 15 ---- - - -# Sandbox Extend - -### Description - -Extends the duration of a particular sandbox by a specified timeframe. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/{sandbox_identifier}/extend` - -| Parameter | Description/Comments | -| --- | --- | -| `sandbox_identifier` | The id of the sandbox (`string`). Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format for the `sandbox extend` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -The scheduling parameter of the sandbox in JSON format. The elements of the `sandbox extend` method include: - -| Parameter | Description/Comments | -| --- | --- | -| `extended_time` | The additional duration required for the sandbox. Time must be specified in ISO 8601 format (for example PT23H). `(string)`
    If you do not specify a value, the following error message will be displayed: "Parameter is not a valid extended time". | - -
    - -
    -Request example - -```javascript -{ - "extended_time":"PT2H5M" -} -``` -
    - -### Response - -
    -Response example - -The `sandbox extend` method returns details about the extended sandbox. The output includes details about the sandbox ID and the new time of the sandbox's duration: - -```javascript -{ - "id":"994bd534-740a-45f5-851f-ff452f2a17a2", - "name":"Test Blprnt2", - "start_time":"2017-01-01T10:30:00Z", - "end_time":"2017-01-01T12:35:00Z", - "remaining_time":"PT24H30M" -} -``` -
    - -
    -Response summary - -The response output properties of the `sandbox extend` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `id` |   | The ID of the sandbox. `(string)` | -| `name` |   | The name of the sandbox. `(string)` | -| `start_time` |   | The time when the sandbox started `(string)` | -| `end_time` |   | The time when the extended sandbox ends. `(string)` | -| `remaining_time` |   | The time left for the sandbox `(string)` | - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-identifier.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-identifier.md deleted file mode 100644 index 268a2c2a4a..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-identifier.md +++ /dev/null @@ -1,150 +0,0 @@ ---- -sidebar_position: 7 ---- - -# Sandbox Identifier - -### Description - -Gets details and available actions for a particular sandbox. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/{sandbox_identifier}` - -| Parameter | Description/Comments | -| --- | --- | -| `sandbox_identifier` | The id of the sandbox (`string`). Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `sandbox identifier` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -The `sandbox identifier` method returns details about a particular sandbox (as opposed to multiple ones). The output includes details about the sandbox ID and the actions that can be performed on the sandbox: - -```javascript -{ - "name":"Test Blprnt 2", - "id":"994bd534-740a-45f5-851f-ff452f2a17a2", - "blueprint id":"44ec66d1-4ac8-4e4b-a3e8-c733482ea176", - "description":"", - "start_time":"2017-01-01T10:30:00Z", - "end_time":"2017-01-01T12:00:00Z", - "state":"Ready", - "setup_stage":"Provisioning", - "type":"Sandbox", - "components":[ - { - "id":"82159835-2d95-46a9-95ec-9251963d203d", - "name":"MyApp", - "type":"Application", - "component_type":"Generic App Model", - "app_lifecycle":"undeployed", - "_links":{ - "self":{ - "href":"/sandboxes/994bd534-740a-45f5-851f-ff452f2a17a2/components/82159835-2d95-46a9-95ec-9251963d203d", - "method":"GET" - } - } - } - ], - "parameters":[ - { - "name":"Param1", - "value":"" - }, - { - "name":"Param2", - "value":"" - } - ], - "permitted_users":[ - { - "john.s", - "emily.b", - "lucas.w" - } - ], - "_links":{ - "self":{ - "href":"/sandboxes/994bd534-740a-45f5-851f-ff452f2a17a2", - "method":"GET", - }, - "components":{ - "href":"/sandboxes/994bd534-740a-45f5-851f-ff452f2a17a2/components", - "method":"GET" - }, - "output":{ - "href":"/sandboxes/994bd534-740a-45f5-851f-ff452f2a17a2/output", - "method":"GET" - }, - "stop":{ - "href":"/sandboxes/994bd534-740a-45f5-851f-ff452f2a17a2/stop", - "method":"POST", - }, - "all":{ - "href":"/sandboxes", - "method":"GET", - }, - "blueprint":{ - "href":"/blueprints/44ec66d1-4ac8-4e4b-a3e8-c733482ea176", - "method":"GET" - } - } -} -``` -
    - -
    -Response summary - -The response output properties of the `sandbox identifier` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `name` |   | The name of the sandbox. `(string)` | -| `id` |   | The ID of the sandbox. `(string)` | -| `blueprint_id` |   | The ID of the blueprint on which the sandbox is based. | -| `description` |   | A description of the sandbox `(string)` | -| `start_time` |   | The time when the sandbox started `(string)` | -| `end_time` |   | the time when the sandbox ended or is expected to end `(string)` | -| `state` |   | The current state of the sandbox. Possible values: Pending, Setup, Ready, Teardown, Error, Ended. `(string)` | -| `setup_stage` |   | (If the sandbox includes orchestration scripts) The current setup stage of the sandbox. Possible values: Provisioning, Connectivity, Configuration, Ended, None. `(string)` | -| `type` |   | The sandbox type ("Sandbox"). `(string)` | -| `components` |   | The resource model of the sandbox. `(array)` | -|   | `name` | The name of the component. `(string)` | -|   | `type` | The component ("resource", "application", or "service"). `(string)` | -|   | `component_type` | The resource model. `(string)` | -|   | `app_lifecycle` | (Available for App components) The current state of the App ("undeployed"/"deployed"). `(string)` | -|   | `_links` | The actions that can be performed on the sandbox component (Get component details). | -| `parameters` |   | Any published input parameters defined for the sandbox's blueprint and the blueprint's resources. | -|   | `name` | The parameter name `(string)` | -|   | `value` | The parameter value `(string)` | -| `permitted_users` |   | Sandbox's permitted users list. Specify as a comma-separated list of the CloudShell user names. | -| `_links` |   | The actions that can be performed on the sandbox in the user's domain: | -|   | `self` | Provides a link to get the details for the sandbox via a `GET` request. | -|   | `components` | Provides a link to get all components in the sandbox via a `GET` request. | -|   | `output` | Provides a link to get all messages printed to the Output console via a `GET` request. | -|   | `stop` | Provides a link to stop the sandbox via a `POST` request. | -|   | `all` | Provides a link to get all available sandboxes according to the user's domain, via a `GET` request. | -|   | `blueprint` | Provides a link to get the details of the sandbox's blueprint via a `GET` request. | - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-output.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-output.md deleted file mode 100644 index 49cff5ddb0..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-output.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -sidebar_position: 14 ---- - -# Sandbox Output - -### Description - -Gets the content of CloudShell Portal's Output console for a particular ACTIVE sandbox. This displays execution information related to running blueprint and resource commands. - -The maximum number of entries in the response is configured by the administrator. If this number of entries is exceeded, the response will include multiple pages. For more information, see [Setting the response page size for the Sandbox API live documentation pages](../../../admin/setting-up-cloudshell/cloudshell-configuration-options/advanced-cloudshell-customizations.md#setting-the-response-page-size-for-the-sandbox-api-live-documentation-pages). - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/{sandbox_identifier}/output` - -| Parameter | Description/Comments | -| --- | --- | -| `sandbox_identifier` | The id of the sandbox (`string`). Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | - -You may add the following optional parameters to the end of the method's URL to filter the number of events. For example - displaying the last 100 events: -| Query parameters | Description/Comments | -| --- | --- | -| `tail` | Last number of entries to return. `(integer)` | -| `from_entry_id` | ID of the first entry in the response page to display, which is returned in the `next_entry_id` property of the response `(string)` | -| `since` | Time from which to return all entries. Time must be specified in ISO 8601 format (for example PT23H).`(string)` | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `sandbox output` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -By default, the method returns all the output messages that were displayed during the sandbox's lifecycle. - -
    - -### Response - -
    -Response example - -The `sandbox output` method returns the entries from the Output console of a particular sandbox. The response includes : - -```javascript -{ - "number_of_returned_entries":"2", - "next_entry_id":"99434", - "more_pages":"false", - "entries":[ - { - "id":"82159835-2d95-46a9-95ec-9251963d203d", - "time":"2017-01-15T09:51:17Z", - "text":"Beginning sandbox setup" - }, - { - "id":"79549eaf-7f1a-4180-a88b-e7da27e5075b", - "time":"2017-01-15T09:51:20Z", - "text":"Resource: \"\" is now: Online" - } - ], - "_links":{ - "self":{ - "href":"/sandboxes/994bd534-740a-45f5-851f-ff452f2a17a2/output", - "method":"GET" - } - } -} -``` -
    - -
    -Response summary - -The response properties of the `sandbox output` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `number_of_returned_entries` |   | The number of entries in the Output console that match the filter criteria in the request. `(integer)` | -| `next_entry_id` |   | (Relevant if the response includes multiple pages) The ID of the first entry on the next page of the response `(integer)`
    Note: To get the next page, run the method again with this value in the `from_entry_id` input parameter. | -| `more_pages` |   | (Relevant if the response includes multiple pages) `true` indicates that there are additional entries that are not displayed in this response page `(bool)` | -| `entries` |   | The details of the output console entry `(array)` | -|   | `id` | The ID of the entry `(string)` | -|   | `time` | The time in which the Output entry was logged `(string)` | -|   | `text` | The text displayed in the Output console for this entry `(string)` | -| `_links` |   | The actions that can be performed on the Output console entries of a sandbox in the user's domain: | -|   | `self` | Provides a link to get the Output console entries for the sandbox via a `GET` request. | - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-owner-identifier.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-owner-identifier.md deleted file mode 100644 index b34b46f2ef..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-owner-identifier.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -sidebar_position: 22 ---- - -# Owner Sandboxes - -### Description - -Returns list of sandboxes for a specific owner name - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/owners/{owner_identifier}` - -| Parameter | Description/Comments | -| --- | --- | -| `owner_identifier` | The name of the user (`string`). | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `sandboxes` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -This method returns a list of all the active sandboxes a specific owner has. - -```javascript -[ - { - "name": "Sanity Testing on Latest Build", - "id": "fa4a313a-061d-4a40-9815-9730dd7c916f", - "description": "Blueprint with preconfigured sanity tests to be run on the latest build.", - "state": "Ready", - "blueprint": { - "name": "Sanity Testing Blueprint", - "id": "506f1880-5ba0-48ad-9385-d259edcf885b" - } - }, - { - "name": "System Diagnostics Test", - "id": "0b0747f3-b3bb-4de1-b0f0-9c15b7327bb9", - "description": "Blueprint that automates system diagnostics checks on the local network.", - "state": "Ready", - "blueprint": { - "name": "System Diagnostics Blueprint", - "id": "07e70b79-3cba-4f1a-a957-fb4b0552fb33" - } - } -] -``` -
    - -
    -Response summary - -The response output properties of the `sandboxes` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `name` |   | The name of the sandbox. `(string)` | -| `id` |   | The ID of the sandbox. `(string)` | -| `description` |   | A text description of the sandbox. `(string)` | -| `state` |   | The current state of the sandbox. Possible values: Pending, Setup, Ready, Teardown, Error, Ended. `(string)` | -| `blueprint` |   | The details of the sandbox's blueprint `(Array)` | -|   | `name` | The name of the blueprint `(string)` | -|   | `id` | The id of the blueprint `(string)` | - -
    diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-stop.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-stop.md deleted file mode 100644 index 4c065e1447..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandbox-stop.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -sidebar_position: 16 ---- - -# Sandbox Stop - -### Description - -Ends a sandbox per specified sandbox ID. Returns a successful response when the sandbox is stopped. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes/{sandbox_identifier}/stop` - -| Parameter | Description/Comments | -| --- | --- | -| `sandbox_identifier` | The id of the sandbox (`string`). Can be retrieved via [sandboxes](./sandboxes.md), [blueprint start](./blueprint-start.md) and from the sandbox ID segment in the CloudShell Portal URL. | - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format for the `sandbox stop` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example - -A successful response is displayed when the `sandbox stop` method ends the sandbox: - -```javascript -{ - "result":"success", - "_links":{ - "all":{ - "href":"/sandboxes", - "method":"GET" - } - } -} -``` - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandboxes.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandboxes.md deleted file mode 100644 index 456fae1e5b..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/sandboxes.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Sandboxes - -### Description - -Gets a list of all the running and pending sandboxes (regular and persistent sandboxes) associated with the user's domain, as well as each sandbox's details, including the sandbox ID and the available actions that can be performed on it. It can also show completed sandboxes related to the user's domain. - -### URL - -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes` - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format for the `sandboxes` method: - -`Authorization: Basic ` - -`Content-Type: application/json` - -:::note -To also include completed sandboxes in the response, add the parameter `show_historic` to the request URL: -`http://{CloudShell Sandbox API Gateway IP address}:{port#}/api/v2/sandboxes?show_historic=true` -The default value for this parameter is `false`. -::: - -
    - -### Response - -
    -Response example - -The `sandboxes` method returns a list of all the sandboxes and the actions that can be performed on each sandbox. - -```javascript -[ - { - "name":"Test Blprnt2", - "id":"11491c80-6f79-4e9c-b592-78242c6dc698", - "description":"This is a list of sandboxes in this user domain", - "state":"Ready", - "blueprint":{ - "name":"Test Blprnt2", - "id":"2f4c972b-5c64-4b08-bae4-73408d7b171d" - }, - "_links":{ - "self":{ - "href":"/sandboxes/11491c80-6f79-4e9c-b592-78242c6dc698", - "method":"GET", - "name":"get a sandbox' details", - "templated":true - }, - "components":{ - "href":"/sandboxes/11491c80-6f79-4e9c-b592-78242c6dc698/components", - "method":"GET" - }, - "stop":{ - "href":"/sandboxes/11491c80-6f79-4e9c-b592-78242c6dc698/stop", - "method":"POST", - "name":"stop a sandbox", - "templated":true - }, - "all":{ - "href":"/sandboxes", - "method":"GET", - "name":"get all sandboxes" - } - } - } -] -``` -
    - -
    -Response summary - -The response output properties of the `sandboxes` method are described in the following table. - -| Property | Sub Property | Description/Comments | -| --- | --- | --- | -| `name` |   | The name of the sandbox. `(string)` | -| `id` |   | The ID of the sandbox. `(string)` | -| `description` |   | A text description of the sandbox. `(string)` | -| `state` |   | The current state of the sandbox. Possible values: Pending, Setup, Ready, Teardown, Error, Ended. `(string)` | -| `blueprint` |   | The details of the sandbox's blueprint `(Array)` | -|   | `name` | The name of the blueprint `(string)` | -|   | `id` | The id of the blueprint `(string)` | -| `_links` |   | The actions that can be performed on a sandbox in the user's domain: | -|   | `self` | Provides a link to get a specific sandbox's details per specified sandbox ID via a `GET` request. | -|   | `components` | Provides a link to get all components in a sandbox per specified sandbox ID, via a `GET` request. | -|   | `stop` | Provides a link to end an active sandbox per specified sandbox ID via a `POST` request. | -|   | `all` | Provides a link to get all available sandboxes according to the user's domain via a `GET` request. | - -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/get-started-with-cs-sandbox-api.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/get-started-with-cs-sandbox-api.md deleted file mode 100644 index 0fbda18672..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/get-started-with-cs-sandbox-api.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Getting Started with CloudShell Sandbox API - -The following article explain the steps required for using CloudShell Sandbox API with CloudShell. - -## CloudShell Sandbox API workflow - -1. Install the CloudShell Sandbox API service (via the CloudShell Sandbox API installer available during the CloudShell Suite/Quali Server installation). For details, see the CloudShell Installation Guide. - - :::note - The default port for the CloudShell Sandbox API in the Quali Server is 82. You can customize this port number in the CloudShell Configuration wizard - CloudShell Sandbox API configuration page. - ::: - - Upon installation of the Quali Server, the CloudShell Server Proxy and CloudShell Sandbox API services will automatically start running. These services transmit requests and responses to and from the Quali Server database via the CloudShell Sandbox API, as follows: - - 1. Developers use the CloudShell Sandbox API to send a request to the CloudShell Server Proxy service. - 2. The CloudShell Server Proxy service transmits the request to the Quali Server database. - 3. The Quali Server database returns a response to the CloudShell Server Proxy and CloudShell Sandbox API services, and finally to the developer code. -2. Install an API testing tool, such as the [Postman Chrome App](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en), or [Swagger UI](http://swagger.io/swagger-ui/). This is recommended so that you can test the API before integrating it into your code. -3. Run the login method: - - - [login](../cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/login.md) method for version 1 - - [login](../cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/login.md) method for version 2 - -Once you have the authorization token (per the specified user and domain), you must include it in the method request header for any of the CloudShell Sandbox API methods on the public blueprints and sandboxes in the desired domain. For a complete list of the available methods access the relevant version: - -For version 1, see [CloudShell Sandbox API Version 1 Reference Guide](../cs-sandbox-api/cs-sandbox-api-version-1-reference-guide/index.md). - -For version 2, see [CloudShell Sandbox API Version 2 Reference Guide](../cs-sandbox-api/cs-sandbox-api-version-2-reference-guide/index.md). - -### Common response codes - -When running the methods, you may get some of the following response codes: - -| Status Code | Message example | Description | -| --- | --- | --- | -| 200 | "Successful response" | Process completed successfully | -| 202 | "Accepted" (Note: This is not yet implemented in the live documentation) | The request has been accepted, but was not yet processed. | -| 400 | "Parameter is not a valid", "The request didn't contain authentication" | Invalid request - the request didn't contain one or more of the required elements. | -| 401 | "Login failed for user" | Authentication problems - User credentials are not in order. | -| 403 | "User is not allowed to view this entity" | The user does not have permission to access the information. | -| 404 | "Entity could not be found" | The element for which you request information was not found.
    Tip: CloudShell Sandbox API only works with public blueprints and sandboxes that are based on public blueprints. | - -:::note - For additional information about HTTP status codes, see [https://developer.mozilla.org/en-US/docs/Web/HTTP/Status](http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml). -::: - -To use the live documentation pages, log in to the **Authentication API** page using your user credentials and the name of the appropriate CloudShell domain. Then, access the **Sandbox API** page to execute its methods on the public blueprints and sandboxes in the domain. - -:::note - Sandbox API can be configured to run in secure mode. See [Configuring Sandbox API to Work in HTTPS Mode](../../install-configure/cloudshell-suite/secure-communication/config-secured-sandbox-api.md). -::: -## Related Topics - -- [CloudShell Sandbox API](./index.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/index.md b/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/index.md deleted file mode 100644 index 6e34018bcc..0000000000 --- a/versioned_docs/version-2023.3/api-guide/cs-sandbox-api/index.md +++ /dev/null @@ -1,35 +0,0 @@ -# CloudShell Sandbox API - -CloudShell Sandbox API allows developers to use CloudShell via software interfaces. The CloudShell Sandbox API is a RESTful API that can be used to provide sandboxes as a service for a Continuous Integration/DevOps process, or for integration of Quali's software with external software and processes. - -CloudShell Sandbox API allows developers to quickly connect to Quali Server and get details about blueprints and sandboxes related to particular domains, and their contents. - -Developers can use the CloudShell Sandbox API to retrieve information and automate the deployment of CloudShell sandboxes and their components for testing and development purposes. Thus, developers can quickly analyze the required data in order to optimize development of sandboxes as services and continuous integration processes, and run, test, and validate their code as required. Continuous integration can be done automatically using Jenkins or via command line. - -:::note -CloudShell Sandbox API only works with public blueprints. -::: - -For more information, see [Automating CloudShell Sandboxes for DevOps](../../devguide/available-cs-api/automate-cs-sandboxes-for-devops.md). - -## CloudShell Sandbox API live documentation page - -The CloudShell Sandbox RESTful API live documentation page allows you to test and experiment with the APIs, providing information on its different methods and parameters. - -The CloudShell RESTful API live documentation has two page versions. Version 1 (CloudShell version 7.0 and up) includes methods to get basic information about blueprints and sandboxes, create a sandbox from a specific blueprint, and to tear it down. Version 2 (CloudShell version 8.0 and up) also includes information about sandbox components, and blueprint and resource commands. - -The API live documentation pages for both API versions are installed with CloudShell. To access them, browse to the relevant default addresses: - -- Login method (for both versions): **http://\[CloudShellPortalAddress\]:82/api/explore/.** -- Blueprint and sandbox methods: **http://\[CloudShellPortalAddress\]:82/api/v1/explore/** (for version 1)
    and **http://\[CloudShellPortalAddress\]:82/api/v2/explore/ (for version 2).** - -If you are accessing the links from the machine on which CloudShell Portal is installed, or from the CloudShell SDK edition machine, you can use "localhost” or "127.0.0.1”. - -:::note -The default port for the CloudShell Sandbox API on the CloudShell Portal machine is 82. You can customize this port number, as required, in the CloudShell Configuration wizard - CloudShell Sandbox API configuration page. -The default port for the Quali Proxy is 8033 and is not configurable (this port provides access to the proxy via HTTP protocol and is used by CloudShell Portal). -::: - -To use the live documentation page, log in to the page with your credentials and the relevant domain name. - -![](/Images/API/SWAGGER-login2.png) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/_category_.json b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/_category_.json deleted file mode 100644 index 1f33276e6f..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "New Job Scheduling REST API", - "position": 7 -} diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/api-support-for-jss-and-js.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/api-support-for-jss-and-js.md deleted file mode 100644 index 471750663c..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/api-support-for-jss-and-js.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -sidebar_position: 20 ---- - -# API Support for New Job Scheduling and Job Scheduling (1st Gen) - -The section compares the APIs for the different Job Scheduling features. The New Job Scheduling has a dedicated RESTful API while the original Job Scheduling uses the [Quali API](pathname:///api-docs/2023.3/Quali-API/Quali%20API%20Library.html). - -:::note -For brevity, the term "Job Scheduling (1st Gen)" denotes the original Job Scheduling which is accessed via CloudShell Portal. -::: - -### API support - -|   | New Job Scheduling | 1st Gen Job Scheduling | -| --- | --- | --- | -| **Authentication operations:** | | | -| Login | Available
    **Syntax:**
    `POST /api/Account/login` | Available via `(/API/Auth/Login)` API | -| Refresh | Available
    **Syntax:**
    `GET /api/Token/refresh/{refresh_token}` |   | -| Revoke | Available
    **Syntax:**
    `POST /api/Token/revoke API` |   | -| **Execution Server management operations:** | -| Get execution servers | **Syntax:**
    `GET /api/ExecutionServer` API | Available via Get Execution Servers API | -| Get execution server details | Available
    **Syntax:**
    `GET /api/ExecutionServer` API |   | -| Delete execution server | Available
    **Syntax:**
    `DELETE /api/ExecutionServer/{id}` |   | -| **Suite management operations:** | -| Get available suite templates |   | Available via Get Available Suite Templates API | -| Get suite template details | Available
    **Syntax:**
    `GET http:///api/spaces//SuiteTemplate/` | Available via Get Suite Template Details API
    **Syntax:**
    `GET http://:9000/API/Scheduling/SuiteTemplates/suiteTemplateName` | -| Delete suite template | Available
    **Syntax:**
    `DELETE /api/spaces/{space_name}/SuiteTemplate/{id}` |   | -| Change suite owner | Available
    **Syntax:**
    `PUT ​/api​/spaces​/{space_name}​/SuiteTemplate​/{id}​/changeowner` |   | -| Get suite details | Available
    **Syntax:**
    `GET "http:///api/spaces//SuiteExecution/` | Available via Get Suite Details API
    **Syntax:**
    `GET http://:9000/API/Scheduling/Suites/suiteId` | -| Get suite status | Available
    **Syntax:**
    `GET /api/spaces/{space_name}/SuiteTemplate/{id}` | Available via Get Suite Status API
    **Syntax:**
    `GET http://:9000/API/Scheduling/Suites/Status/suiteId` | -| Get test folder child elements |   | Available for TestShell Studio tests only | -| Get test information |   | Available for TestShell Studio tests only | -| **Suite execution operations:** | -| Get suite executions for specific template | Available
    **Syntax:**
    `GET ​/api​/spaces​/{space_name}​/SuiteExecution​/{id} GET API` |   | -| Stop suite execution | Available
    **Syntax:**`POST /api/spaces/{space_name}/SuiteExecution/{id}/stop` | Available via Stop Suite Execution API
    **Syntax:**
    `DELETE http://:9000/API/Scheduling/Suites/SuiteId` | -| Enqueue custom suite | Available via `/api/spaces/{space_name}/SuiteExecution/{id}` GET API
    **Syntax:**`POST http:///api/spaces/{space_name}/SuiteTemplate/{id}/start` |Available via Enqueue Custom Suite API
    **Syntax:**
    `POST http://:9000/API/Scheduling/Suites` | -| Enqueue custom job |   | Available via Enqueue Custom Job API | -| Get job details | Available
    **Syntax:**
    `GET /api/spaces/{space_name}/SuiteExecution/{id}` | Available via Get Job Details API | -| Stop job execution | Not supported for specific job executions. Supported for suite executions via `/api/spaces/{space_name}/SuiteExecution/{id}/stop` API | Available via Stop Job Execution API | -| Get jobs in queue |   | Available via Get Queued Jobs API | -| Get running jobs |   | Available via Get Running Jobs API | -| Deploy dedicated reservation per job | Available | Available | -| Generate suite execution report | Available
    **Syntax:**
    `GET/api/spaces/{space_name}/TestExecution/{id}/Report` |   | -| **Reservation operations:**
    The following APIs are available for both Job Scheduling features via Quali API. | -| Get reservation attachment |   |   | -| Get reservation attachment details |   |   | -| Delete file from reservation |   |   | -| **Configuration operations:**
    The following APIs are available for both Job Scheduling features via Quali API. | -| Import package |   |   | -| Export package |   |   | - -## Related Topics - -- [REST API Page](../../jss/jss-portal/jss-rest-api.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/change-suite-owner.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/change-suite-owner.md deleted file mode 100644 index f4e51e8e1a..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/change-suite-owner.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -sidebar_position: 12 ---- - -# Change suite owner - -### Description - -Changes a suite template's owner. - -### URL - -`http://{Job Scheduling API IP}:{port#}/api/spaces/{space_name}/SuiteTemplate/{id}/changeowner` - -| Parameter | Description/Comments | -| --- | --- | -| space_name | CloudShell domain in which the suite was executed. (string) | -| id | Suite template's id - included in suite's URL. For example:
    http://192.168.74.11/Test%20Lab/suite/b25d72e0-4f44-4b62-949c-02596196b157/ | - -### HTTP method - -`PUT` - -### Request - -
    -Headers - -Example header format: - -`Content-Type: application/json` -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| ownerUsername | CloudShell username to set as the new owner. (string) | -
    - -
    -Request example -```javascript -{ - "ownerUsername": "user1" -} -``` -
    - diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/delete-suite-template.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/delete-suite-template.md deleted file mode 100644 index d7d395b2c6..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/delete-suite-template.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -sidebar_position: 9 ---- - -# Delete suite template - -### Description - -Deletes a specific suite template. - -### URL - -`http://{Job Scheduling API IP}:{port#}/api/spaces/{space_name}/SuiteTemplate/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| space_name | CloudShell domain in which the suite was executed. (string) | -| id | Suite execution's ID - included in the suite's URL. (string)
    For example:
    http://192.168.74.11/Test%20Lab/execution/1ab91be7-6136-4fd5-b22d-72c462947459/ | - -### HTTP method - -`DELETE` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -```javascript -200 OK -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/delete-test-discovery-service.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/delete-test-discovery-service.md deleted file mode 100644 index 5e4b193450..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/delete-test-discovery-service.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -sidebar_position: 15 ---- - -# Delete Test Discovery Service - -### Description - -Deletes a Test Discovery Service. - -:::warning Important -Before you delete a test repository, please note that this action will remove from CloudShell all tests that were discovered by the repository's discovery server. Any suites that use these tests will be rendered unusable. -::: - -### URL - -`http://{Job Scheduling API IP}:{port#}/{space_name}/DiscoveryServer/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| id | Test Discovery Service's id, which can be retrieved via [Get Test Discovery Services](./get-test-discovery-services) method. | - -### HTTP method - -`DELETE` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -```javascript -200 OK -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/delete-test-execution-service.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/delete-test-execution-service.md deleted file mode 100644 index b904ed7672..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/delete-test-execution-service.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -sidebar_position: 17 ---- - -# Delete Test Execution Service - -### Description - -Deletes a Test Execution Service. - -:::info Notes -When deleting a Test Execution Service, it is marked as deleted and the following takes place: - -- The Test Execution Service will not get new execution tasks. -- Test that are pending/running on the Test Execution Service will be terminated. -- The status of jobs assigned to the Test Execution Service will be set to terminated with the reason being that the Test Execution Service was deleted. -::: - -### URL - -`http://{Job Scheduling API IP}:{port#}/{space_name}/ExecutionServer/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| id | Test Execution Service's id, which can be retrieved via [Get Test Execution Services](./get-test-execution-services) method. | - -### HTTP method - -`DELETE` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -```javascript -200 OK -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-suite-execution.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-suite-execution.md deleted file mode 100644 index 79518b95a2..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-suite-execution.md +++ /dev/null @@ -1,214 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Get suite execution - -### Description - -Get a suite execution's details. - -### URL - -`http://{Job Scheduling API IP}:{port#}/api/spaces/{space_name}/SuiteExecution/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| space_name | CloudShell domain in which the suite was executed. (string) | -| id | Suite execution's ID- included in the suite's URL. (string)
    For example:
    http://192.168.74.11/Test%20Lab/execution/1ab91be7-6136-4fd5-b22d-72c462947459/ | - -### HTTP method - -`GET` - -### Request - -
    -Headers - - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -```javascript -200 OK -``` - -
    -Response example -```javascript -{ - "id": "1ab91be7-6136-4fd5-b22d-72c462947459", - "counter": 1, - "suiteTemplateDescription": "", - "createdDate": "2020-10-28T10:30:22.035Z", - "executedByName": "admin", - "executedByUsername": "admin", - "suiteTemplateName": "Hardware Network Test", - "suiteTemplateId": "b25d72e0-4f44-4b62-949c-02596196b157", - "startedDate": "2020-10-28T10:30:31.14Z", - "endedDate": "2020-10-28T10:31:01.43Z", - "status": 2, - "statusDescription": "Succeeded", - "jobs": [ - { - "id": "205aac56-5826-4b5e-a96a-5887b0940b40", - "name": "job 1", - "description": null, - "startedDate": "2020-10-28T10:30:31.14Z", - "endedDate": "2020-10-28T10:31:01.43Z", - "status": 2, - "statusDescription": "Succeeded", - "testExecutionServerName": "My TES2", - "blueprint": { - "id": "0e1e151f-a581-4e6d-b9e2-7473b1d2297e", - "name": "CloudShell Sandbox Template", - "url": "http://192.168.30.6/RM/Diagram/Index/0e1e151f-a581-4e6d-b9e2-7473b1d2297e?diagramType=Topology" - }, - "tests": [ - { - "id": "672df5e3-e103-46ad-b324-88ca9b520c97", - "testId": "17936298/demo_tests1/new_test (1).robot", - "name": "new_test (1).robot", - "path": "demo_tests1", - "repositoryName": "ROBOT Tests", - "result": 1, - "resultDescription": "Passed", - "startedDate": "2020-10-28T10:30:31.14Z", - "endedDate": "2020-10-28T10:31:01.43Z", - "inputs": [ - { - "name": "additional_parameters", - "value": "" - } - ], - "errorCode": 0, - "errorMessage": "", - "hasReport": true - } - ], - "sandbox": { - "id": "46dccae6-88ff-47cf-9d67-f1f058a125a0", - "name": "job 1 #1", - "url": "http://192.168.30.6/RM/Diagram/Index/46dccae6-88ff-47cf-9d67-f1f058a125a0", - "inputs": null - }, - "errorCode": null, - "errorMessage": null - } - ] -} -``` -
    - -
    -Response summary - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ParameterDescription/Comments
    idSuite execution id. (guid)
    counterSuite execution number. (numeric)
    suiteTemplateDescriptionSuite execution description. (string)
    createdDateSuite execution creation time. (ISO 8601 Date/Time format)
    executedByNameFirst and Last name of the CloudShell user who executed the suite. (ISO 8601 Date/Time format)
    executedByUserNameCloudShell username who executed the suite. (string)
    suiteTemplateNameSuite template name. (string)
    suiteTemplateIdSuite template id - included in the suite's URL. (guid)
    startedDateSuite execution start time. (ISO 8601 Date/Time format)
    endedDateSuite execution completion time. (ISO 8601 Date/Time format)
    statusSuite execution status code. (numeric)
    - For details, see [Statuses and results](./jss-rest-api-response-codes).
    statusDescriptionSuite execution status description. (string)
    - For details, see [Statuses and results](./jss-rest-api-response-codes).
    jobs - Job details:
    - - **id**: Job ID. (guid) - - **name**: Job name. (string) - - **description**: Job description, if defined. (string) - - **startedDate**: Job execution start time. (ISO 8601 Date/Time format) - - **endedDate**: Job execution completion time. (ISO 8601 Date/Time format) - - **status**: Job status code. (numeric) For details, see [Statuses and results](./jss-rest-api-response-codes). - - **statusDescription**: Job status description. (string) For details, see [Statuses and results](./jss-rest-api-response-codes). - - **testExecutionServerName**: Test Execution Service that handled the suite's execution. (string) - - **blueprint**: Details of the job's blueprint. - - **id**: Blueprint ID - included in the blueprint's URL. (guid) -
    - For example: -
    - http://192.168.30.6/RM/Diagram/Index/0e1e151f-a581-4e6d-b9e2-7473b1d2297e?diagramType=Topology - - **Name**: Blueprint name. (string) - - **URL**: Blueprint URL. (string) - - **tests**: Details of the job's tests. - - **id**: Unique id of the test’s execution. (guid) - - **testID**: Test path on the online test repository. (string) - - **name**: Test name. (string) - - **path**: Test's folder path on the online test repository. (string) - - **repositoryName**: Name of online repository containing the test. (string) - - **result**: Test result code. (numeric) For details, see [Statuses and results](./jss-rest-api-response-codes). - - **resultDescription**: Test result description. (string) For details, see [Statuses and results](./jss-rest-api-response-codes). - - **startedDate**: Test execution start time. (ISO 8601 Date/Time format) - - **EndedDate**: Test execution completion time. (ISO 8601 Date/Time format) - - **Inputs**: Details about the test's inputs: - - **name**: Input name. (string) - - **Value**: Input value, if defined. (string) - - **errorCode**: Test error code. (numeric) For details, see [Statuses and results](./jss-rest-api-response-codes). - - **errorMessage**: Test error message. (string) For details, see [Statuses and results](./jss-rest-api-response-codes). - - **hasReport**: Test report, if generated. (bool) - - **sandbox**: Details about the sandbox spun up for the job's execution. - - **id**: Sandbox ID - included in the sandbox URL. (guid) - - **name**: Sandbox name, composed of job name, dash and job execution number. (string) For example: "job 1 #1" - - **url**: Sandbox URL. (string) - - **inputs**: Sandbox inputs, if defined. (string) - - **errorCode**: Job error code. (numeric) For details, see [Statuses and results](./jss-rest-api-response-codes). - - **errorMessage**: Job error message. (string) For details, see [Statuses and results](./jss-rest-api-response-codes). -
    -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-suite-template-details.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-suite-template-details.md deleted file mode 100644 index 5f06a738d8..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-suite-template-details.md +++ /dev/null @@ -1,219 +0,0 @@ ---- -sidebar_position: 9 ---- - -# Get suite template details - -### Description - -Gets a detailed summary of a suite template in a domain. - -### URL - -`http://{Job Scheduling API IP}:{port#}/api/spaces/{space_name}/SuiteTemplate/{id}` - -| Parameter | Description/Comments | -| --- | --- | -| space_name | CloudShell domain in which the suite was executed. (string) | -| id | Suite execution's ID- included in the suite's URL. (string)
    For example:
    http://192.168.74.11/Test%20Lab/execution/1ab91be7-6136-4fd5-b22d-72c462947459/ | - -### HTTP method - -`GET` - -### Request - -
    -Headers - - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example -```javascript -{ - "id": "b25d72e0-4f44-4b62-949c-02596196b157", - "createdDate": "2020-10-28T10:30:19.122Z", - "ownerUsername": "admin", - "ownerName": "admin", - "modifiedDate": "2020-10-28T11:10:07.78Z", - "modifiedByUsername": "admin", - "modifiedByName": "admin", - "testTypeName": "Robot", - "testTypeId": "59aabbe8-dc0b-48c4-81af-d76f915b47b1", - "spaceId": "35f2d31b-7ce2-45b1-b7aa-7e5002a9031c", - "spaceName": "Test Lab", - "name": "Hardware Network Test", - "description": "", - "cronTrigger": null, - "shouldStartAutomatically": false, - "jobs": [ - { - "name": "job 1", - "description": "", - "durationBufferInMinutes": 0, - "blueprint": { - "id": "0e1e151f-a581-4e6d-b9e2-7473b1d2297e", - "name": "CloudShell Sandbox Template", - "inputs": [] - }, - "tests": [ - { - "id": "17936298/demo_tests1/new_test (1).robot", - "name": "new_test (1).robot", - "path": "demo_tests1", - "durationInMinutes": 1, - "inputs": [ - { - "name": "additional_parameters", - "value": "" - } - ], - "repositoryName": "ROBOT Tests" - }, - { - "id": "17936298/140_tests_tsivya2/b (101).robot", - "name": "b (101).robot", - "path": "140_tests_tsivya2", - "durationInMinutes": 1, - "inputs": [ - { - "name": "additional_parameters", - "value": "fghfgh" - } - ], - "repositoryName": "ROBOT Tests" - }, - { - "id": "17936298/140_tests_tsivya2/b (102).robot", - "name": "b (102).robot", - "path": "140_tests_tsivya2", - "durationInMinutes": 3, - "inputs": [ - { - "name": "additional_parameters", - "value": "dfgsd" - } - ], - "repositoryName": "ROBOT Tests" - }, - { - "id": "17936298/140_tests_tsivya2/b (103).robot", - "name": "b (103).robot", - "path": "140_tests_tsivya2", - "durationInMinutes": 4, - "inputs": [ - { - "name": "additional_parameters", - "value": "dfg" - } - ], - "repositoryName": "ROBOT Tests" - } - ] - } - ] -} -``` -
    - -
    -Response summary - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ParameterDescription/Comments
    idSuite execution id. (guid)
    createdDateSuite template creation time. (ISO 8601 Date/Time format)
    ownerUserNameCloudShell username who owns the suite template. (string)
    ownerNameFirst and Last name of the CloudShell user who owns the suite template. (string)
    modifiedDateLast modification time of suite template. (string)
    modifiedByUserNameCloudShell user who last modified the template. (string)
    testTypeNameTesting framework of suite's tests. (string)
    testTypeIdID of the test type. (guid)
    spaceIdID of domain in which the suite template resides. (guid)
    spaceNameDomain in which the suite template resides. (string)
    nameSuite template name. (string)
    descriptionSuite template description. (string)
    cronTriggerConfigured recurring executions of this suite, in cron. (cron expression)
    shouldStartAutomaticallySpecifies if suite execution is set to start automatically (true). (bool)
    jobs - Job details:
    - - **name**: Job name. (string) - - **description**: Job description, if defined. (string) - - **durationBufferInMinutes**: Buffer period, in minutes. (numeric) - - **blueprint**: Details of the job's blueprint. - - **id**: Blueprint ID - included in the blueprint's URL. (guid) -
    - For example: -
    - http://192.168.30.6/RM/Diagram/Index/0e1e151f-a581-4e6d-b9e2-7473b1d2297e?diagramType=Topology - - **name**: Blueprint name. (string) - - **inputs**: Inputs defined on the job's blueprint. (string) (string) - - **tests**: Details of the job's tests. - - **id**: Test ID. (guid) - - **name**: Test name. (string) - - **path**: Test path from the root. (string) - - **durationInMinutes**: Test's duration, in minutes. (numeric) - - **inputs**: Details about the test's inputs: - - **name**: Input name. (string) - - **Value**: Input value, if defined. (string) - - **repositoryName**: Name of online repository containing the test. (string) -
    -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-suite-template-executions.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-suite-template-executions.md deleted file mode 100644 index 046d52fae1..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-suite-template-executions.md +++ /dev/null @@ -1,278 +0,0 @@ ---- -sidebar_position: 10 ---- - -# Get suite template executions - -### Description - -Gets the executions of a specific suite template, including job and test details. - -### URL - -`http://{Job Scheduling API IP}:[port#]/api/spaces/{space_name}/SuiteTemplate/{id}/executions?createdBy={createdBy}$count={count}` - -| Parameter | Description/Comments | -| --- | --- | -| space_name | CloudShell domain in which the suite was executed. (string) | -| id | Suite execution's ID- included in the suite's URL. (string)
    For example:
    http://192.168.74.11/Test%20Lab/execution/1ab91be7-6136-4fd5-b22d-72c462947459/ | -| createdBy | CloudShell user who started the execution. You can provide a specific CloudShell username or enter 'anyone' to return all results. (string) | -| count | Number of executions to get, starting with the last. For example, if the template has 5 executions, a count of "3" will return executions 5, 4, and 3. (number) | - -### HTTP method - -`GET` - -### Request - -
    -Headers - - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -```javascript -200 OK -``` - -
    -Response example -```javascript -[ - { - "id": "fde35ef4-eb00-4d49-a24c-107f55e2192e", - "counter": 9, - "suiteTemplateDescription": "", - "createdDate": "2020-10-28T12:47:44.64Z", - "executedByName": "admin", - "executedByUsername": "admin", - "suiteTemplateName": "Hardware Network Test", - "suiteTemplateId": "b25d72e0-4f44-4b62-949c-02596196b157", - "startedDate": "2020-10-28T12:47:50.66Z", - "endedDate": "2020-10-28T12:49:51.887Z", - "status": 2, - "statusDescription": "Succeeded", - "jobs": [ - { - "id": "7a1b3d9c-ff65-461e-a7e6-fff538af3159", - "name": "job 1", - "description": null, - "startedDate": "2020-10-28T12:47:50.66Z", - "endedDate": "2020-10-28T12:49:51.887Z", - "status": 2, - "statusDescription": "Succeeded", - "testExecutionServerName": "My TES2", - "blueprint": { - "id": "0e1e151f-a581-4e6d-b9e2-7473b1d2297e", - "name": "CloudShell Sandbox Template", - "url": null - }, - "tests": [ - { - "id": "89c85ae0-2563-45ad-b810-8a0581a0f526", - "testId": "17936298/demo_tests1/new_test (1).robot", - "name": "new_test (1).robot", - "path": "demo_tests1", - "repositoryName": "ROBOT Tests", - "result": 1, - "resultDescription": "Passed", - "startedDate": "2020-10-28T12:47:50.66Z", - "endedDate": "2020-10-28T12:48:20.962Z", - "inputs": [ - { - "name": "additional_parameters", - "value": "" - } - ], - "errorCode": 0, - "errorMessage": "", - "hasReport": false - }, - { - "id": "9b3fbf41-a006-426d-8d09-b5463895106b", - "testId": "17936298/140_tests_tsivya2/b (101).robot", - "name": "b (101).robot", - "path": "140_tests_tsivya2", - "repositoryName": "ROBOT Tests", - "result": 1, - "resultDescription": "Passed", - "startedDate": "2020-10-28T12:48:20.967Z", - "endedDate": "2020-10-28T12:48:51.312Z", - "inputs": [ - { - "name": "additional_parameters", - "value": "fghfgh" - } - ], - "errorCode": 0, - "errorMessage": "", - "hasReport": false - }, - { - "id": "17cc6edf-0899-4e29-b69f-a7c6899fddac", - "testId": "17936298/140_tests_tsivya2/b (102).robot", - "name": "b (102).robot", - "path": "140_tests_tsivya2", - "repositoryName": "ROBOT Tests", - "result": 1, - "resultDescription": "Passed", - "startedDate": "2020-10-28T12:48:51.32Z", - "endedDate": "2020-10-28T12:49:21.584Z", - "inputs": [ - { - "name": "additional_parameters", - "value": "dfgsd" - } - ], - "errorCode": 0, - "errorMessage": "", - "hasReport": false - }, - { - "id": "3c63a8ce-348e-4b5d-acb2-41d3d9f9ecaf", - "testId": "17936298/140_tests_tsivya2/b (103).robot", - "name": "b (103).robot", - "path": "140_tests_tsivya2", - "repositoryName": "ROBOT Tests", - "result": 1, - "resultDescription": "Passed", - "startedDate": "2020-10-28T12:49:21.589Z", - "endedDate": "2020-10-28T12:49:51.887Z", - "inputs": [ - { - "name": "additional_parameters", - "value": "dfg" - } - ], - "errorCode": 0, - "errorMessage": "", - "hasReport": false - } - ], - "sandbox": { - "id": "b1824a49-d204-40fc-ae51-fed6e7396960", - "name": "job 1 #9", - "url": null, - "inputs": null - }, - "errorCode": null, - "errorMessage": null - } - ] - }, -] -``` -
    - -
    -Response summary - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ParameterDescription/Comments
    idSuite execution id. (guid)
    counterSuite execution number. (numeric)
    suiteTemplateDescriptionSuite execution description. (string)
    createdDateSuite execution creation time. (ISO 8601 Date/Time format)
    executedByNameFirst and Last name of the CloudShell user who executed the suite. (ISO 8601 Date/Time format)
    executedByUserNameCloudShell username who executed the suite. (string)
    suiteTemplateNameSuite template name. (string)
    suiteTemplateIdSuite template id - included in the suite's URL. (guid)
    startedDateSuite execution start time. (ISO 8601 Date/Time format)
    endedDateSuite execution completion time. (ISO 8601 Date/Time format)
    statusSuite execution status code. (numeric)
    - For details, see [Statuses and results](./jss-rest-api-response-codes).
    statusDescriptionSuite execution status description. (string)
    - For details, see [Statuses and results](./jss-rest-api-response-codes).
    jobs - Job details:
    - - **id**: Job ID. (guid) - - **name**: Job name. (string) - - **description**: Job description, if defined. (string) - - **startedDate**: Job execution start time. (ISO 8601 Date/Time format) - - **endedDate**: Job execution completion time. (ISO 8601 Date/Time format) - - **status**: Job status code. (numeric) For details, see [Statuses and results](./jss-rest-api-response-codes). - - **statusDescription**: Job status description. (string) For details, see [Statuses and results](./jss-rest-api-response-codes). - - **testExecutionServerName**: Test Execution Service that handled the suite's execution. (string) - - **blueprint**: Details of the job's blueprint. - - **id**: Blueprint ID - included in the blueprint's URL. (guid) -
    - For example: -
    - http://192.168.30.6/RM/Diagram/Index/0e1e151f-a581-4e6d-b9e2-7473b1d2297e?diagramType=Topology - - **Name**: Blueprint name. (string) - - **URL**: Blueprint URL. (string) - - **tests**: Details of the job's tests. - - **id**: Unique id of the test’s execution. (guid) - - **testID**: Test path on the online test repository. (string) - - **name**: Test name. (string) - - **path**: Test's folder path on the online test repository. (string) - - **repositoryName**: Name of online repository containing the test. (string) - - **result**: Test result code. (numeric) For details, see [Statuses and results](./jss-rest-api-response-codes). - - **resultDescription**: Test result description. (string) For details, see [Statuses and results](./jss-rest-api-response-codes). - - **startedDate**: Test execution start time. (ISO 8601 Date/Time format) - - **EndedDate**: Test execution completion time. (ISO 8601 Date/Time format) - - **Inputs**: Details about the test's inputs: - - **name**: Input name. (string) - - **Value**: Input value, if defined. (string) - - **errorCode**: Test error code. (numeric) For details, see [Statuses and results](./jss-rest-api-response-codes). - - **errorMessage**: Test error message. (string) For details, see [Statuses and results](./jss-rest-api-response-codes). - - **hasReport**: Test report, if generated. (bool) - - **sandbox**: Details about the sandbox spun up for the job's execution. - - **id**: Sandbox ID - included in the sandbox URL. (guid) - - **name**: Sandbox name, composed of job name, dash and job execution number. (string) For example: "job 1 #1" - - **url**: Sandbox URL. (string) - - **inputs**: Sandbox inputs, if defined. (string) - - **errorCode**: Job error code. (numeric) For details, see [Statuses and results](./jss-rest-api-response-codes). - - **errorMessage**: Job error message. (string) For details, see [Statuses and results](./jss-rest-api-response-codes). -
    -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-suite-templates.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-suite-templates.md deleted file mode 100644 index 4a3cf1f6d8..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-suite-templates.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -sidebar_position: 8 ---- - -# Get suite templates - -### Description - -Gets a basic summary of all suite templates in a specific domain. - -### URL - -`http://{Job Scheduling API IP}:{port#}/api/spaces/{space_name}/SuiteTemplate/Summary` - -| Parameter | Description/Comments | -| --- | --- | -| space_name | CloudShell domain in which the suite was executed. (string) | - -### HTTP method - -`GET` - -### Request - -
    -Headers - - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example -```javascript -[ - { - "id": "b25d72e0-4f44-4b62-949c-02596196b157", - "name": "Hardware Network Test", - "description": "", - "ownerName": "admin", - "ownerUsername": "admin", - "createdDate": "2020-10-28T10:30:19.122Z", - "modifiedDate": "2020-10-28T11:10:07.78Z" - } -] -``` -
    - -
    -Response summary - -| Parameter | Description/Comments | -| --- | --- | -| id | Suite template id. (guid) | -| name | Suite template name. (string) | -| description | Suite template description, if defined. (string) | -| ownerName | First and last name of the CloudShell user who owns the suite. (string) | -| ownerUserName | CloudShell username who owns the suite. (string) | -| createdDate | Suite template creation time. (ISO 8601 Date/Time format) | -| modifiedDate | Last modification time of suite template. (ISO 8601 Date/Time format) | -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-test-discovery-services.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-test-discovery-services.md deleted file mode 100644 index 376650a0e7..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-test-discovery-services.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -sidebar_position: 16 ---- - -# Get Test Discovery Services - -### Description - -Gets all registered Test Discovery Services, including each server's details (server id, address, name, etc.). - -### URL - -`http://{Job Scheduling API IP}:{port#}/api/DiscoveryServer` - -### HTTP method - -`GET` - -### Request - -
    -Headers - - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example -```javascript -[ - { - "id": "df80242a-0372-46f7-b2cb-6766cd343c4b", - "address": "test-discovery-service-svc", - "name": "Robot Discovery Service", - "description": "Robot Discovery Service", - "testTypeName": "robot", - "isOnline": true, - "repository": { - "url": "", - "displayName": "ROBOT Tests" - } - } -] -``` -
    - -
    -Response summary - -| Parameter | Description/Comments | -| --- | --- | -| id | Test Discovery Service id. (guid) | -| address | Test Discovery Service address. (string) | -| name | Test Discovery Service name. (string) | -| description | Test Discovery Service description, if defined. (string) | -| testTypeName | Test Discovery Service's supported test type. (string)
    For example, Robot. | -| isOnline | Whether the Test Discovery Service is currently online. (bool) | -| repository | Details of the online test repository associated to this Test Discovery Server.
    • **url**: Online test repository URL. (string)
    • **displayName**: Name of the online test repository. (string)
    | -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-test-execution-report.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-test-execution-report.md deleted file mode 100644 index ec0b385cea..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-test-execution-report.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -sidebar_position: 19 ---- - -# Get test execution report - -### Description - -Gets a specific test execution's report. - -### URL - -`http://{Job Scheduling API IP}:[port#]/api/spaces/{space_name}/TestExecution/{id}/Report` - -| Parameter | Description/Comments | -| --- | --- | -| space_name | CloudShell domain in which the suite was executed. (string) | -| id | Suite execution's ID- included in the suite's URL. (string)
    For example:
    http://192.168.74.11/Test%20Lab/execution/1ab91be7-6136-4fd5-b22d-72c462947459/ - included in [Get suite execution](./get-suite-execution) | - - -### HTTP method - -`GET` - -### Request - -
    -Headers - - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example -```javascript -{ - "testResult": 1, - "name": "new_test (1).robot", - "path": "demo_tests1", - "startTime": "2020-10-28T20:05:07.472Z", - "endTime": "2020-10-28T20:05:37.653Z", - "testExecutionServerName": "My TES2", - "executedBy": "steven.g", - "report": "Test request data: {\"domainName\": \"Test Lab\", \"test\": \"demo_tests1/new_test (1).robot\", \"reportsFullPath\": \"/home/jrobot/app/nfs/quali/archive/e1a812cd-192d-4617-8046-be5c5861d46c_steven.g\", \"reservationID\": \"e1a812cd192d46178046be5c5861d46c\", \"executionID\": \"9dc164b376004515ac94da4b933d1d7c\", \"testInactivityTimeoutInMinutes\": 2, \"username\": \"steven.g\", \"job\": null, \"parameters\": \"\", \"suite\": null, \"robot\": null, \"inputs\": null}", - "errorCode": 0, - "errorMessage": "" -} -``` -
    - -
    -Response summary - -| Parameter | Description/Comments | -| --- | --- | -| testResult | Test result code. (numeric)
    For details, see [Statuses and results](../../jss/statuses-and-results.md). | -| name | Test name. (string) | -| path | Test's folder path on the online test repository. (string) | -| startTime | Test execution's start time. (ISO 8601 Date/Time format) | -| endTime | Test execution's completion time. (ISO 8601 Date/Time format) | -| testExecutionServerName | Test Execution Service used to execute the test. (string) | -| executedBy | CloudShell user who executed the test. (string) | -| report | Test execution report. (json) | -| errorCode | Test execution's error code. (numeric)
    For details, see [Statuses and results](../../jss/statuses-and-results.md). | -| errorMessage | Test execution's error message. (string)
    For details, see [Statuses and results](../../jss/statuses-and-results.md). | -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-test-execution-services.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-test-execution-services.md deleted file mode 100644 index d801eae7e8..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/get-test-execution-services.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -sidebar_position: 18 ---- - -# Get Test Execution Services - -### Description - -Gets all registered Test Execution Services, including each server's details (server id, address, test type, capacity, etc.). - -### URL - -`http://{Job Scheduling API IP}:{port#}/api/ExecutionServer` - -### HTTP method - -`GET` - -### Request - -
    -Headers - - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example -```javascript -[ - { - "id": "94f4ab95-5c58-46b1-adce-fab88f9196e4", - "name": "My TES1", - "testTypeId": "59aabbe8-dc0b-48c4-81af-d76f915b47b1", - "testTypeName": "Robot", - "address": "http://test-exec-srv.test-exec-srv-2.default.svc.cluster.local:8250", - "capacity": 200, - "description": "Cloudshell Execution Service for running Robot tests", - "runningJobsCount": 0, - "leasedJobsCount": 0, - "isOnline": true, - "isIncluded": true, - "excludedByUsername": null, - "excludedByName": null, - "excludeReason": null, - "spaces": [] - }, -] -``` -
    - -
    -Response summary - -| Parameter | Description/Comments | -| --- | --- | -| id | Test Execution Service id. (guid) | -| name | Test Execution Service name. (string) | -| testTypeId | Id of the test type. (guid) | -| testTypeName | Test Execution Service supported test type. (string)
    For example, Robot. | -| address | Test Execution Service address. (string) | -| capacity | Maximum supported number of concurrent job executions. (numeric) | -| description | Test Execution Service description, if defined. (string) | -| runningJobsCount | Number of jobs currently running on the Test Execution Service.
    Note that the sum total of the leasedJobsCount and runningJobsCount cannot exceed the defined capacity. (numeric) | -| leasedJobsCount | Job slots allocated to a suite execution while the job’s sandbox is being created. (numeric)
    Note that the sum total of the leasedJobsCount and runningJobsCount cannot exceed the defined capacity. | -| isOnline | Whether the Test Execution Service is currently online. (bool) | -| isIncluded | Whether the Test Execution Service is currently included. (bool) | -| excludedByUsername | (Applies only if the Test Execution Service is currently excluded) CloudShell username who excluded the Test Execution Service. (string) | -| excludedByName | (Applies only if the Test Execution Service is currently excluded) First and last name of the CloudShell user who excluded the Test Execution Service. (string) | -| excludeReason | (Applies only if the Test Execution Service is currently excluded) Reason provided for excluding the Test Execution Service. (string) | -| spaces | Domains in which this Test Execution Service is used. (string) | -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/index.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/index.md deleted file mode 100644 index 9f941d3bd1..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/index.md +++ /dev/null @@ -1,54 +0,0 @@ -# New Job Scheduling REST API - -The New Job Scheduling REST API enables developers to perform certain administrative actions, including managing your Test Execution and Discovery services and integrating Job Scheduling operations as part of a CI/CD process. - -## Live documentation page - -The New Job Scheduling live documentation page allows you to test and experiment with the API. It is accessed directly from the Job Scheduling Portal, by clicking the REST API tab on the left. For details, see [REST API Page](./jss-api-login.md). - -To use the API's methods, you must pass an authentication token. To obtain the token, execute the [New Job Scheduling API Login](./jss-api-login.md) method. There's also a [Refresh login](./refresh-login.md) method for situations where your token's validity period has expired and you need to renew it. - -The following New Job Scheduling REST API methods are available: - -**Account:** - -- [New Job Scheduling API Login](./jss-api-login.md) -- [Revoke login](./revoke-login.md) -- [Refresh login](./refresh-login.md) - -**Suite Executions:** - -- [Get suite execution](./get-suite-execution.md) -- [Stop suite execution](./stop-suite-execution.md) - -**AdHoc Suites:** - -- [Start adhoc suite execution](./start-adhoc-suite-execution.md) - -**Suite Templates:** - -- [Get suite templates](./get-suite-templates.md) -- [Get suite template details](./get-suite-template-details.md) -- [Delete suite template](./delete-suite-template.md) -- [Get suite template executions](./get-suite-template-executions.md) -- [Change suite owner](./change-suite-owner.md) -- [Start suite execution](./start-suite-execution.md) - -**Test Discovery Servers:** - -- [Delete Test Discovery Service](./delete-test-discovery-service.md) -- [Get Test Discovery Services](./get-test-discovery-services.md) - -**Test Execution Servers:** - -- [Delete Test Execution Service](./delete-test-execution-service.md) -- [Get Test Execution Services](./get-test-execution-services.md) - -**Test Executions:** - -- [Get test execution report](./get-test-execution-report.md) - -## Related Topics - -- [API Support for New Job Scheduling and Job Scheduling (1st Gen)](./api-support-for-jss-and-js.md) -- [New Job Scheduling REST API Response Codes](./jss-rest-api-response-codes.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/jss-api-login.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/jss-api-login.md deleted file mode 100644 index 42dc8a99b4..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/jss-api-login.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -sidebar_position: 2 ---- - -# New Job Scheduling API Login - -### Description - -Both the new CloudShell Job Scheduling Portal and the API use token-based authentication. When a user logs in, an access token is generated for the user's session together with a refresh-token that can be used to create new access tokens in case the access token expires, providing you with maximum control over access to the system by 3rd party applications and users. - -:::note -The New Job Scheduling does not include the Global domain. This means two things: - -- There is no central location for reviewing activity from all domains in the Job Scheduling Portal. -- Users associated only with the Global domain cannot access the Job Scheduling Portal or API. -::: - -### URL - -`http://{Job Scheduling API IP}:{port#}/api/Account/login` - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format: - -`Content-Type: application/json` -
    - -
    -Request body - -| Parameter | Description/Comments | -| --- | --- | -| username | CloudShell admin username. (string) | -| password | CloudShell admin password. (string) | -
    - -
    -Request example -```javascript -{ - "username": "string", - "password": "string" -} -``` -
    - -### Response - -
    -Response example -```javascript -{ - "accessToken": "oHk5r-5R-lYlB7ekIjdk6FVKHs7GXwIdZxU6s7M9Rdo", - "refreshToken": "rXd4YhgsW0GdoYuim6k-TeZPugPAOr5uN-kWjGMPNzo", - "tokenType": "Bearer", - "expiresIn": 18000 -} -``` -
    - -
    -Response summary - -| Parameter | Description/Comments | -| --- | --- | -| accessToken | Token for authorizing REST API calls. (guid) | -| refreshtoken | Token for refreshing expires accessToken. (guid) | -| tokenType | Token type. (string) | -| expiresIn | Validity period in seconds. (Numeric) | -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/jss-rest-api-response-codes.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/jss-rest-api-response-codes.md deleted file mode 100644 index 1e27d7d0c4..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/jss-rest-api-response-codes.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -sidebar_position: 1 ---- - -# New Job Scheduling REST API Response Codes - -Each API call you make returns a server response. For example: - -![](/Images/JSS/JssRestApiServerResponse_520x271.png) - -Possible response codes are: - -| Code | Description | Result | -| --- | --- | --- | -| 200 | Success | API call was successfully executed. | -| 400 | Error: Bad request | API call is not applicable. For example, attempting to stop an already completed suite execution. | -| 401 | Error: Unauthorized | Authorization issue. `accessToken` may have expired. | \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/refresh-login.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/refresh-login.md deleted file mode 100644 index 02a9d15e64..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/refresh-login.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Refresh login - -### Description - -Refreshes an expired access token. - -### URL - -`http://{Job Scheduling API IP}:{port#}/api/Token/refresh/{refresh_Token}` - -| Parameter | Description/Comments | -| --- | --- | -| refresh_token | refreshToken to use. (string) | - -### HTTP method - -`GET` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example -```javascript -{ - "accessToken": "oHk5r-5R-lYlB7ekIjdk6FVKHs7GXwIdZxU6s7M9Rdo", - "refreshToken": "rXd4YhgsW0GdoYuim6k-TeZPugPAOr5uN-kWjGMPNzo", - "tokenType": "Bearer", - "expiresIn": 18000 -} -``` -
    - -
    -Response summary - -| Parameter | Description/Comments | -| --- | --- | -| accessToken | Token for authorizing REST API calls. (guid) | -| refreshtoken | Token for refreshing expires accessToken. (guid) | -| tokenType | Token type. (string) | -| expiresIn | Validity period in seconds. (Numeric) | -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/revoke-login.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/revoke-login.md deleted file mode 100644 index b7dad5af85..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/revoke-login.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Revoke login - -### Description - -Deactivates accessToken. - -### URL - -`http://{Job Scheduling API IP}:{port#}/api/Token/revoke` - - -### HTTP method - -`POST` - -### Request - -:::note -You must log in with the token you created. -::: - -### Response - -```javascript -200 OK -``` diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/start-adhoc-suite-execution.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/start-adhoc-suite-execution.md deleted file mode 100644 index ca94b45c5c..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/start-adhoc-suite-execution.md +++ /dev/null @@ -1,178 +0,0 @@ ---- -sidebar_position: 14 ---- - -# Start adhoc suite execution - -### Description - -Runs an adhoc suite execution. Adhoc suites are created on-the-fly for the execution and cannot be edited, deleted nor rerun. - -### URL - -`http://{Job Scheduling API IP}:{port#}/{space_name}/SuiteExecution/start` - -| Parameter | Description/Comments | -| --- | --- | -| space_name | CloudShell domain in which the suite was executed. (string) | - -### HTTP method - -`POST` - -### Request - -
    -Headers - - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -
    -Request body - -Suite details. The parameters of the adhoc suite execution method include: - - - - - - - - - - - - - - - - - - - - -
    ParameterDescription/Comments
    nameName of the suite execution. (string)
    descriptionOptional description for the suite execution. (string)
    testTypeNameType of tests to run. (string)
    Currently, the value to use is "Robot".
    jobs - Job details:
    - - **name**: Job name. (string) - - **description**: Job description, if defined. (string) - - **durationBufferInMinutes**: Job's execution buffer, in minutes. (Numeric) - - **blueprint**: Details of the job's blueprint. - - **name**: Blueprint name. (string) - - **inputs**: Published global inputs defined in the job's blueprint. - - **name**: global input's name. (string) - - **value**: global input's value. (string) - - **abstractRequirements**: Published requirements in the blueprint's abstract resources. - - **type**: Type of abstract requirement. (string) - There are two options: - - "**Quantity**" when specifying the number of abstract resources to select. - - "**Attribute**" for any other attribute requirement. - - **resource**: Name of the abstract resource. (string) - - **name**: Name of the abstract requirement. Specify "Quantity" to indicate the number of abstract resources to select. - - **value**: Requirement's value. (string, numeric for Quantity) - - **additionalInputs**: Published additional inputs in the blueprint's abstract resources. - - **resource**: Name of the abstract resource. (string) - - **name**: Name of the additional info. (string) - - **value**: Additional info's value. (string) - - **serviceInputs**: Published inputs belonging to services in the blueprint. - - **resource**: Name of the service. (string) - - **name**: Name of the service input. (string) - - **value**: Service input's value. (string) - - **tests**: Details of the job's tests. - - **name**: Name of the test. (string) - - **path**: Path to the test's containing folder. (string) - - **durationInMinutes**: Test's duration in minutes. (Numeric) - - **inputs**: Test's inputs. - - **name**: Input name. (string) - - **Value**: Input value. (string) - - **repositoryName**: Name of online repository containing the test. (string) -
    -
    - -
    -Request example -```javascript -{ - "name": "my ad-hoc robot execution", - "description": "string", - "testTypeName": "Robot", - "jobs": [ - { - "name": "job 1", - "description": "string", - "durationBufferInMinutes": 3, - "blueprint": { - "name": "my blueprint", - "inputs": [ - { - "name": "Sandbox number", - "value": "4" - }], - "abstractRequirements": [ - { - "type": "Quantity", - "resource": "DUT resource", - "name": "Quantity", - "value": "1" - }], - "additionalInputs": [{ - "resource": "DUT resource", - "name": "Firmware version", - "value": "1.00.2" - }], - "serviceInputs": [{ - "resource": "Controller service", - "name": "Service.Address", - "value": "192.168.45.112" - }] - }, - "tests": [ - { - "name": "run-traffic.robot", - "path": "Traffic tests", - "durationInMinutes": 1, - "inputs": [ - { - "name": "Additional CMD Parameters", - "value": "" - } - ], - "repositoryName": "GitHub" - } - ] - } -] -} -``` -
    - -### Response - -
    -Response example -```javascript -{ - "id": "a7f13fe5-ddee-4ec8-971f-a0e6784c8387" -} -``` -
    - -
    -Response summary - - - - - - - - - -
    ParameterDescription/Comments
    idSuite execution id. (guid)
    -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/start-suite-execution.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/start-suite-execution.md deleted file mode 100644 index 4589df1bd1..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/start-suite-execution.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -sidebar_position: 13 ---- - -# Start suite execution - -### Description - -Runs a suite template (starts execution). - -### URL - -`http://{Job Scheduling API IP}:{port#}/{space_name}/SuiteTemplate/{id}/start` - -| Parameter | Description/Comments | -| --- | --- | -| space_name | CloudShell domain in which the suite was executed. (string) | -| id | Suite execution's ID- included in the suite's URL. (string)
    For example:
    http://192.168.74.11/Test%20Lab/execution/1ab91be7-6136-4fd5-b22d-72c462947459/ | - -### HTTP method - -`POST` - -### Request - -
    -Headers - - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example -```javascript -{ - "id": "a7f13fe5-ddee-4ec8-971f-a0e6784c8387" -} -``` -
    - -
    -Response summary - - - - - - - - - -
    ParameterDescription/Comments
    idSuite execution id. (guid)
    -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/stop-job-execution.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/stop-job-execution.md deleted file mode 100644 index fbc6e72e0b..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/stop-job-execution.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -sidebar_position: 7 ---- - -# Stop job execution - -### Description - -Stops a specific job's execution. - -### URL - -`http://{Job Scheduling API IP}:{port#}/{space_name}/SuiteExecution/{id}/JobExecution/{job_execution_id}/stop` - -| Parameter | Description/Comments | -| --- | --- | -| space_name | CloudShell domain in which the suite was executed. (string) | -| id | Suite execution's ID- included in the suite's URL. (string)
    For example:
    http://192.168.74.11/Test%20Lab/execution/1ab91be7-6136-4fd5-b22d-72c462947459/ | -| job_execution_id | Job's id - included in the **jobs** section of the [Get suite execution](./get-suite-execution)'s response. For example:
    `..."jobs": [{"id": "205aac56-5826-4b5e-a96a-5887b0940b40",...` | - -### HTTP method - -`POST` - -### Request - -
    -Headers - - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -
    - -### Response - -
    -Response example -```javascript -{ - "errors": [ - { - "message": "'843b572e-e768-47d7-8333-48b2c6f23d8b': Execution already completed", - "name": "ExecutionCompleted", - "code": 1007 - } - ] -} -``` -
    - -
    -Response summary - - - - - - - - - -
    ParameterDescription/Comments
    nameExecutionCompleted (string)
    -
    \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/stop-suite-execution.md b/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/stop-suite-execution.md deleted file mode 100644 index cf143c3fe1..0000000000 --- a/versioned_docs/version-2023.3/api-guide/new-jss-rest-api/stop-suite-execution.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Stop suite execution - -### Description - -Stop an active suite execution. - -### URL - -`http://{Job Scheduling API IP}:{port#}/api/spaces/{space_name}/SuiteExecution/{id}/stop` - -### HTTP method - -`POST` - -### Request - -
    -Headers - -Example header format: - -`Authorization: Basic ` - -`Content-Type: application/json` - -| Parameter | Description/Comments | -| --- | --- | -| space_name | CloudShell domain in which the suite was executed. (string) | -| id | Suite execution's ID - included in the suite's URL. (string)
    For example:
    http://192.168.74.11/Test%20Lab/execution/1ab91be7-6136-4fd5-b22d-72c462947459/ | -
    - -### Response - -```javascript -200 OK -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/_category_.json b/versioned_docs/version-2023.3/api-guide/packaging-api/_category_.json deleted file mode 100644 index 8dc34e4e81..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Packaging API", - "position": 6 -} diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/_category_.json b/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/_category_.json deleted file mode 100644 index 3a0ec8b9f6..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Creating and Loading a Blueprint Package", - "position": 2 -} diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/index.md b/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/index.md deleted file mode 100644 index 4cdb7b6ae6..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/index.md +++ /dev/null @@ -1,5 +0,0 @@ -# Creating and Loading a Blueprint Package - -The following functions describe the initial steps to creating and loading blueprints to CloudShell.  - -![](/Images/API/Packaging-API/Creating-Loading-Package.png) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/_category_.json b/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/_category_.json deleted file mode 100644 index 99e85ab6f0..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Packaging Functions", - "position": 2 -} diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/create.md b/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/create.md deleted file mode 100644 index af1bd3135a..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/create.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Create (an Empty Blueprint Package) - -**Description:** Create a new empty package in the specified path. - -**Signature:** `create(path)` - -**Parameters:** - -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| path | In | Yes | The folder path and file name where the package zip file should be stored | - - - -**Sample:** -```javascript -`packageEditor.create('c:\\temp\\TestPackage.zip')` -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/get-blueprint-details-as-xml.md b/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/get-blueprint-details-as-xml.md deleted file mode 100644 index baaa4e5d2f..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/get-blueprint-details-as-xml.md +++ /dev/null @@ -1,110 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Get Blueprint Details as XML - -**Description:** Retrieve the blueprint details of the specified blueprint as an xml. - -**Signature:** `get_topology_xml(topology_name)` - -**Parameters** - -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| `topology_name` | In | Yes | The name of the blueprint that you want to retrieve. | -| | Out | | XML representation of all the blueprint details. | - -**Sample:** - -```javascript -packageEditor.get_topology_xml('environment1') -output: ' - - \n -
    - \n - These are my instructions. - \n - - \n - - \n -
    - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n - - \n -
    -``` diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/get-topology-names.md b/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/get-topology-names.md deleted file mode 100644 index b9e5c9d190..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/get-topology-names.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Get Topology Names - -**Description:** Retrieve the list of blueprint names in the loaded package. The returned names are used in other functions as the blueprint identifiers. - -**Signature:** `get_topology_names()` - -**Parameters:** - -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| | Out | | The list of blueprints that exist in the loaded package. | - -**Sample:** - -```javascript -`packageEditor.get_topology_names()` -``` - -```javascript -`output: ['TestEnvironment1']` -``` diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/index.md b/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/index.md deleted file mode 100644 index 3dd39f817c..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/index.md +++ /dev/null @@ -1,8 +0,0 @@ -# Packaging Functions - -The following packaging functions are available: - -- [Create (an Empty Blueprint Package)](./create.md) -- [Load (a Blueprint Package for Modification)](./load.md) -- [Get Topology Names](./get-topology-names.md) -- [Get Blueprint Details as XML](./get-blueprint-details-as-xml.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/load.md b/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/load.md deleted file mode 100644 index 192296044b..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/creat-and-load-blueprint-pkg/packaging-functions/load.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -sidebar_position: 2 ---- -# Load (a Blueprint Package for Modification) - -**Description:** Load a package from the specified path and prepare it for edit. This function must be called before any other function that modifies the package. - -**Signature:** `load(path)` - -**Parameters:** - -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| path | In | Yes | The folder path where the package zip file is stored | - - -**Sample:** - -```javascript -`packageEditor.load('c:\\temp\\TestPackage.zip')` -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/get-start-with-pkg-api.md b/versioned_docs/version-2023.3/api-guide/packaging-api/get-start-with-pkg-api.md deleted file mode 100644 index e26a7c2c09..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/get-start-with-pkg-api.md +++ /dev/null @@ -1,161 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Getting Started with Packaging API - -## Prerequisites - -- Python 3 (version 3.6 and above) -- [.NET Framework 4.7](https://dotnet.microsoft.com/en-us/download/dotnet-framework) -- [.NET 5 Runtime](https://dotnet.microsoft.com/en-us/download/dotnet/5.0) (on Windows Execution Servers that will be used for packaging API operations) -- quali\_utils.3.3.0.tar.gz: Version 3.3.0 is cross-platform (supported on Windows/Linux) and requires both .NET Framework 4.7 and .NET 5 Runtime to work (Alternatively, you can use version 3.2, which is not cross-platform, and does require .NET 5 Runtime. - - ```javascript - pip install - ``` - - Note: quali\_utils.3.3.0 is supported by CloudShell 2022.1 and above. For previous versions, see [earlier versions](https://help-archive.quali.com/help%20versions/All%20Versions%20Help/Content/Versions.htm) of CloudShell Help. - - -## Installation - -1. Make sure you have a compatible Python version installed on your machine. -2. To download the Python Package Editor that applies to your installed CloudShell version, visit the [Python Package Editor Download Page](https://support.quali.com/hc/en-us/articles/360038314833). -3. Do one of the following: - -
    -Windows installation: - - - Run the pip tool to install the package. - -
    - -
    -Linux installation: - - You can install Packaging API on Linux environments that have .NET 5 Runtime. - - **Installation instructions for various Linux environments:** - - - Ubuntu: [Microsoft-us/dotnet/core/install/linux-ubuntu](https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu) - - Alpine: [https://docs.microsoft.com/en-us/dotnet/core/install/linux-alpine](https://docs.microsoft.com/en-us/dotnet/core/install/linux-alpine) - - Centos: [https://docs.microsoft.com/en-us/dotnet/core/install/linux-centos](https://docs.microsoft.com/en-us/dotnet/core/install/linux-centos) - - Debian: [https://docs.microsoft.com/en-us/dotnet/core/install/linux-debian](https://docs.microsoft.com/en-us/dotnet/core/install/linux-debian) - - Fedora: [https://docs.microsoft.com/en-us/dotnet/core/install/linux-fedora](https://docs.microsoft.com/en-us/dotnet/core/install/linux-fedora) - - OpenSUSE: [https://docs.microsoft.com/en-us/dotnet/core/install/linux-opensuse](https://docs.microsoft.com/en-us/dotnet/core/install/linux-opensuse) - - Red Hat Enterprise Linux: [https://docs.microsoft.com/en-us/dotnet/core/install/linux-rhel](https://docs.microsoft.com/en-us/dotnet/core/install/linux-rhel) - - SLES: [https://docs.microsoft.com/en-us/dotnet/core/install/linux-sles](https://docs.microsoft.com/en-us/dotnet/core/install/linux-sles) - - Please note that the required version in "dotnet-runtime-5.0” is not as listed in the documentation - "dotnet-runtime-6.0” - - **Example: Installing Packaging API on Ubuntu 18.04:** - - 1. Set up Python 3, pip 3: - - ```javascript - sudo apt update - sudo apt install python3 - sudo apt-get -y install python3-pip - pip3 install --upgrade pip - ``` - - 2. Set up .NET 5 support: - - ```javascript - wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb - sudo dpkg -i packages-microsoft-prod.deb - - rm packages-microsoft-prod.deb - sudo apt-get update - sudo apt-get install -y apt-transport-https - sudo apt-get update - sudo apt-get install -y dotnet-runtime-5.0 - ``` - - 3. Install quali\_utils 3.3.0: - - 1. Copy file quali\_utils-3.3.0.tar.gz to /tmp folder. - - 1. Run command: - - ```javascript - pip3 install /tmp/quali_utils-3.3.0.tar.gz - ``` - - 4. Validate the installation: - - 1. Copy files package\_editor\_linux.py and TestPackage.zip to /tmp - - 1. Run python command: - - ```javascript - python3 package_editor_linux.py - ``` - - Output: - - ![](../../Images/API/Packaging API/LinuxInstallOutput.png) - - 2. Run the `dir` command and see if CreatedPackage2.zip was created. - 3. Make sure the package TestPackage.zip now includes 2 new global inputs in topology. - -
    - -## Code Sample - -The following code sample provides an example of how to create new blueprints using the API. This example demonstrates how to perform the following flow: - -![](/Images/API/Packaging-API/code-sample.png) - -This example uses the "requests” python module. - -```python -from quali_utils.quali_packaging import PackageEditor -``` - -```python -import requests - -#Create a new package in the local file system - -p = PackageEditor() - -p.create("c:\\myfolder\\mypack.zip") - - - - -#Load the package and prepare for edit - -p.load("c:\\myfolder\\mypack.zip") - -#Edit the package: f.e add new family - -p.add_family("Ball", "", ["Game", "3D Shape", "MoreStuff"], False, False, False, False, True) - - -#Import the package into CloudShell - -# 1 – authenticate - -r = requests.put('http://localhost:9000/Api/Auth/Login', {"username": "admin", "password": "admin", "domain": "Global"}) - -authcode = "Basic " + response._content[1:-1] - - -#2 – Open the package before import - -fileobj = open("c:\\p.zip", 'rb') - -#3 – Send to CloudShell by calling Import Package REST API - -r = requests.post('http://localhost:9000/API/Package/ImportPackage', - - headers={"Authorization": authcode}, - - files={"file": fileobj}) -print r._content - -print r.ok -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/index.md b/versioned_docs/version-2023.3/api-guide/packaging-api/index.md deleted file mode 100644 index 84b65454ab..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/index.md +++ /dev/null @@ -1,7 +0,0 @@ -# Packaging API - -The packaging API automates the creation and configuration of CloudShell blueprint packages. Using packages, blueprints can be shared between CloudShell deployments and exported locally for backup purposes. With the packaging API, you can also create new blueprints and modify the settings and data model (families, models, attributes, drivers, etc.) of new or existing blueprints before packaging. For details, see [Getting Started with Packaging API](./get-start-with-pkg-api.md). - -A package is a zip file that includes a set of folders and files that can be imported into a CloudShell database by using the web portal or by calling the Quali REST API. - -To learn more about the contents of the blueprint package, see [Exporting a Blueprint Package](../../portal/blueprints/creating-blueprints/export-blueprints/export-a-package.md). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/_category_.json b/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/_category_.json deleted file mode 100644 index 2cc6458fb3..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Updating the Data Model", - "position": 3 -} diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-attribute-to-family.md b/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-attribute-to-family.md deleted file mode 100644 index 01cc07b6e6..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-attribute-to-family.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Add an Attribute to a Family - -**Description**: Attach an existing attribute to a family. - -**Signature**: `attach_attribute_to_family(family_name, attribute_name, user_input, allowed_values)` - -**Parameters**: - -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| `family_name` | In | Yes | The name of the family | -| `attribute_name` | In | Yes | The name of the attribute | -| `user_input` | In | Yes | In case of service family, specify if this attribute should be presented to the user who using the service | -| `allowed_values` | In | No | Specify the list of allowed values for this attribute (comma separated) | - - -**Sample**: - -```javascript -`packageEditor.attach_attribute_to_family('Generic Chassis','attribute1',False,'')` -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-attribute-to-model.md b/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-attribute-to-model.md deleted file mode 100644 index a08b6c254c..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-attribute-to-model.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Add an Attribute to a Model - -Description: Attach an existing attribute to a specific model. - -**Signature**: `attach_attribute_to_model(model_name, attribute_name, user_input, allowed_values)` - -**Parameters**: - -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| `model_name` | In | Yes | The name of the model | -| `attribute_name` | In | Yes | The name of the attribute | -| `user_input` | In | Yes | In case of service family, specify if this attribute should be presented to the user who using the service | -| `allowed_values` | In | No | Specify the list of allowed values for this attribute | - -**Sample**: - -```javascript -`packageEditor.attach_attribute_to_model('Generic Chassis Model','attribute1',False,'')` -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-family.md b/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-family.md deleted file mode 100644 index 96179d26fa..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-family.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Add a Family - -**Description**: Add a new family to the package. - -When importing the package into CloudShell, if the family doesn’t exist, it will be created. Otherwise it will be modified. - -**Signature**: `add_family(family_name, description, categories, connectable, admin_only, shared_by_default, service_family, searchable)` - -**Parameters**: - -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| `family_name` | In | Yes | The name of the family that you want to create or modify | -| `description` | In | No | A short description of the family | -| `categories` | In | No | In case this family represents a family of services, specify the category for the family to be | -| `connectable` | In | Yes | Specify if the resources / services from this family can be connected to other resources / services | -| `admin_only` | In | Yes | Specify if the resources / services from this family can only be viewed by admins | -| `shared_by_default` | In | Yes | Specify if the resources / services from this family are shared with other users by default | -| `service_family` | In | Yes | Specify if this family represents a family of services | -| `searchable` | In | Yes | Specify if resources from this family appear in search results | - - -**Sample**: -```javascript -`packageEditor.add_family("Family1",'This is a test',[],True,True,False,False,False)` - -`packageEditor.add_family("ServiceFamily1",'This is a test',[‘Cat1’,’Cat2/Sub1’], False, False,False,True,False)` -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-model-to-family.md b/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-model-to-family.md deleted file mode 100644 index 2372769482..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-model-to-family.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Add a Model to a Family - -**Description**: Create a new model under a specific family. - -When importing the package into CloudShell, if the model doesn’t exist it will be created. Otherwise it will be modified. - -**Signature**: `add_model_to_family(family_name, model_name, description)` - -**Parameters**: - -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| `family_name` | In | Yes | The name of the family | -| `model_name` | In | No | The name of the model | -| `description` | In | No | A short description of the model | - -**Sample**: - -```javascript -`packageEditor.add_model_to_family('Generic Chassis', 'Special Chassis','This is a special Chassis model')` -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-or-update-attributes.md b/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-or-update-attributes.md deleted file mode 100644 index 348fdb1369..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-or-update-attributes.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -sidebar_position: 11 ---- - - -# Add or Update Attributes - -**Description**: Add a new attribute to the data model, or modify an existing attribute. - -**Signature**: `add_or_update_attribute(attribute_name, default_value, description, attribute_type, lookup_values, rules)` - -**Parameters**: - -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| `attribute_name` | In | Yes | The name of the attribute that you want to add or modify | -| `default_value` | In | No | The default value that you want to assign to the attribute in case it is left empty when used | -| `description` | In | No | A short description for the attribute | -| `attribute_type` | In | Yes | One of the following values: DateTime, Numeric, String, Boolean, Lookup, Password | -| `lookup_values` | In | No | If the attribute type is Lookup, specify the list of allowed values | -| `rules` | In | No | Specify 0 or more capabilities for the attribute, available values:
  • Editable After Run (System Administrators)
  • Editable After Run (Everyone)
  • Configuration
  • Setting
  • Display In Diagram
  • Link Configurations
  • Variable Capability
  • Constant Capability
  • Displayed In Route Creation
  • Available For Abstract Resources
  • Displayed In Search Filters
  • Execution Server Selector
  • Monitor Modifications
  • Admin Only
  • | - - -**Sample**: - -```javascript -`packageEditor.add_or_update_attribute('AttString','','String Attribute','String','','')` - -`packageEditor.add_or_update_attribute('AttLookup','A','Lookup Attribute','Lookup',['A','B','C'],'')` - -`packageEditor.add_or_update_attribute('AttString','AAA','String Attribute1','String','',['Editable After Run (System Administrators)','Editable After Run (Everyone)','Configuration','Setting','Displayed In Diagram','Link Configurations','Variable Capability','Constant Capability','Displayed In Route Creation','Available For Abstract Resources','Displayed In Search Filters','Execution Server Selector','Monitor Modifications','Admin Only','Editable After Run'])` -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-rsrc-driver-to-model.md b/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-rsrc-driver-to-model.md deleted file mode 100644 index c5c30483d4..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-rsrc-driver-to-model.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -sidebar_position: 9 ---- - -# Add a Resource Driver to a Model - -**Description**: Add a driver to a specific model. - -**Signature**: `add_driver_to_model(model_name, driver_name, driver_file_path)` - -**Parameters**: - -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| `model_name` | In | Yes | Specify the model name you want the driver to be connected to | -| `driver_name` | In | Yes | Specify the name of the resource driver to be removed | -| `driver_file_path` | In | Yes | Specify the full path to the driver file (including file name). py and dll files are supported. | - - -**Sample**: -```javascript -`packageEditor.add_driver_to_model('Generic Chassis Model','ResDriver' ,'C:\\Work\\Drivers\\Resource-Service\\ResourceDriver.Compilation\\ResourceDriver.dll')` -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-rsrc-script-to-model.md b/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-rsrc-script-to-model.md deleted file mode 100644 index e184e2b75d..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/add-rsrc-script-to-model.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -sidebar_position: 7 ---- - -# Add a Resource Script to a Model - -**Description**: Add a resource script to a specific model. - -**Signature**: `add_script_to_model(model_name, script_name, script_file_path, version, script_alias, parameters, category)` - -**Parameters**: - -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| `model_name` | In | Yes | Specify the model name you want the driver to be connected to | -| `script_name` | In | Yes | Specify the name of the resource script you want to add | -| `script_file_path` | In | Yes | To replace the current script file with another one, specify the full path to the script file (including file name). py files and zip packages are supported. | -| `version` | In | No | Set a version number for the script | -| `script_alias` | In | No | Specify an alias for the service | -| `parameters` | In | No | Specify a list of inputs required by the script. For example: \["key1, value1”, "key2, value2”\] | -| `category` | In | No | Script's category. The script will be arranged under this category in the resource/App/service's Commands pane | - -**Sample**: - -```javascript -`add_script_to_model('Generic Chassis Model','Debugging script' ,'C:\\Work\\Scripts\\Resource-Service\\resource_debugging_script_v1.4.zip', '', 'Generic Resources', [], 'Infra')` -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/create-model-hierarchy.md b/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/create-model-hierarchy.md deleted file mode 100644 index e5df12fdec..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/create-model-hierarchy.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -sidebar_position: 5 ---- - - -# Create a Model Hierarchy - -**Description**: Create the model hierarchy, link the specified model under the list of parent models. - -**Signature**: `add_parent_model(model_name, parent_models)` - -**Parameters**: - -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| `model_name` | In | Yes | The name of the model to modify | -| `parent_models` | In | Yes | The list of models to be added to the list of parents for this model | - -**Sample**: -```javascript -`packageEditor.add_parent_model('Generic Ethernet Port',['Generic Chassis Model', 'Bridge Generic Model'])` -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/index.md b/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/index.md deleted file mode 100644 index 7157795c64..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/index.md +++ /dev/null @@ -1,17 +0,0 @@ -# Updating the Data Model - -![](/Images/API/Packaging-API/UpdatingDataModel.png) - -This section explains how to: - -- [Add a Family](./add-family.md) -- [Add an Attribute to a Family](./add-attribute-to-family.md) -- [Add a Model to a Family](./add-model-to-family.md) -- [Add an Attribute to a Model](./add-attribute-to-model.md) -- [Create a Model Hierarchy](./create-model-hierarchy.md) -- [Remove a Parent Model](./remove-parent-model.md) -- [Add a Resource Script to a Model](./add-rsrc-script-to-model.md) -- [Remove a Resource Script from a Model](./remove-rsrc-script-from-model.md) -- [Add a Resource Driver to a Model](./add-rsrc-driver-to-model.md) -- [Remove a Resource Driver from a Model](./remove-rsrc-driver-from-model.md) -- [Add or Update Attributes](./add-or-update-attributes.md) diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/remove-parent-model.md b/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/remove-parent-model.md deleted file mode 100644 index 69dc093eef..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/remove-parent-model.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Remove a Parent Model - -**Description**: Modify the model hierarchy, remove the specified model from the list of parent models. - -**Signature**: `remove_parent_model(model_name, parent_models)` - -**Parameters**: - -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| `model_name` | In | Yes | The name of the model to modify | -| `parent_models` | In | Yes | The list of models to be removed from the list of parents for this model | - -**Sample**: - -```javascript -`packageEditor.remove_parent_model('Generic Ethernet Port',['Generic Chassis Model'])` -``` diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/remove-rsrc-driver-from-model.md b/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/remove-rsrc-driver-from-model.md deleted file mode 100644 index 6ad9d998a7..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/remove-rsrc-driver-from-model.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -sidebar_position: 10 ---- - -# Remove a Resource Driver from a Model - -**Description**: Remove the py or dll driver from a specific model. - -**Signature**: `remove_driver_from_model(model_name, driver_name)` - -**Parameters**: -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| `model_name` | In | Yes | Specify the model name you want the driver to be removed from | -| `driver_name` | In | Yes | Specify the name of the driver you want to remove | - -**Sample**: - -```javascript -`packageEditor.remove_driver_from_model('Generic Chassis Model','ResDriver')` -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/remove-rsrc-script-from-model.md b/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/remove-rsrc-script-from-model.md deleted file mode 100644 index ced5301e7c..0000000000 --- a/versioned_docs/version-2023.3/api-guide/packaging-api/update-the-data-model/remove-rsrc-script-from-model.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -sidebar_position: 8 ---- - -# Remove a Resource Script from a Model - -**Description**: Remove a Resource Script from a specific model. - -**Signature**: `remove_script_from_model(model_name, script_name)` - -**Parameters**: - -| Name | Direction | Required | Description | -| --- | --- | --- | --- | -| `model_name` | In | Yes | Specify the model name from which you want the driver to be removed | -| `script_name` | In | Yes | Specify the name of the resource script to be removed | - - -**Sample**: - -```javascript -`packageEditor.remove_script_from_model('Generic Chassis Model','Debugging script')` -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/quali-api.md b/versioned_docs/version-2023.3/api-guide/quali-api.md deleted file mode 100644 index 1e9e2b7b50..0000000000 --- a/versioned_docs/version-2023.3/api-guide/quali-api.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Quali API - -The Quali API enables users and administrators to control the scheduling and queuing of the execution of TestShell suites and jobs, which may be using CloudShell to provide Sandboxes-as-a-Service. In addition, administrators can use this API to integrate CloudShell scheduling and queuing with external Continuous Integration (CI) systems. - -For additional information, see the following Quali API guides: - -- **Quali API Library**: is available by default in the TestShell Studio tools and can be added as a DLL asset to a project in CloudShell Authoring, the driver builder. - -For the complete list of Quali API Library functions, see [Quali API Library Reference Guide](pathname:///api-docs/2023.3/Quali-API/Quali%20API%20Library.html). - -- **Quali C# API**: for .NET - - For the complete list of Quali API C# functions, see [Quali API C# Reference Guide](pathname:///api-docs/2023.3/Quali-API/Quali%20cSharp%20API.html "Quali API C# Reference Guide"). - -- **Quali REST API**: for APIs using the REST client - - For the complete list of Quali API REST functions, see [Quali API REST Reference Guide](pathname:///api-docs/2023.3/Quali-API/Quali%20REST%20API.html "Quali API REST Reference Guide"). - - :::note Notes for Quali REST API: - - Input parameters must be in JSON format. - - The header must include the application/json content type. For example: - - `headers = {'Authorization': Basic auth_code, 'Content-Type': 'application/json` - ::: - - -The default port for Quali API in Quali Server is 9000. - -## Related Topics - -- [Configuring Quali API to Work in HTTPS Mode](../install-configure/cloudshell-suite/secure-communication/config-secured-quali-api.md). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/shell-dev-blueprint-design-api/_category_.json b/versioned_docs/version-2023.3/api-guide/shell-dev-blueprint-design-api/_category_.json deleted file mode 100644 index cdf50479de..0000000000 --- a/versioned_docs/version-2023.3/api-guide/shell-dev-blueprint-design-api/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Shell Development and Blueprint Design API", - "position": 4, - "link": { - "type": "generated-index", - "description": "To learn more about the APIs available for blueprint design and Shell development, check out the following articles:" - } -} diff --git a/versioned_docs/version-2023.3/api-guide/shell-dev-blueprint-design-api/cs-automation-api.md b/versioned_docs/version-2023.3/api-guide/shell-dev-blueprint-design-api/cs-automation-api.md deleted file mode 100644 index eb7b052658..0000000000 --- a/versioned_docs/version-2023.3/api-guide/shell-dev-blueprint-design-api/cs-automation-api.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -sidebar_position: 1 ---- - -# CloudShell Automation API - -The **CloudShell Automation API** package is the recommended way to automate CloudShell from Python scripts and drivers, for example, to get more information or perform more operations using CloudShell. - -The CloudShell Automation API package is installed in the Python environment installation directory upon pip installation, in the following file location in your local directory: `...\python\2.7.18\Lib\site-packages\cloudshell\`. - -The CloudShell Automation API package includes the following API modules for use with Python scripts and drivers: - -- **cloudshell\_api.py**: allows you to use the CloudShell API from Python. -- **common\_cloudshell\_api.py**: is a helper file required to run methods from **cloudshell\_api.py**. -- **cloudshell\_scripts\_helpers.py**: provides a convenient way to initialize the CloudShell API and get blueprint variables in your script. -- **cloudshell\_dev\_helpers.py**: allows developers to run and debug their code on their local machine as if their scripts are running in CloudShell. - -The CloudShell Automation API reference documentation comes in two versions: - -The Python package [API guide](pathname:///api-docs/2023.3/Python-API/) includes additional information like class structure and return objects and is intended for experienced Python developers, while the [TestShell API Python Reference Guide](pathname:///api-docs/2023.3/TestShell-API/TestShell%20Python%20API.html) is intended for developers who are newer to Python, as it features an easy to understand format and code examples. - -:::note -CloudShell Automation API uses UTC timezone by default, but you can change to a different timezone using the [CloudShellAPISession](pathname:///api-docs/2023.3/Python-API/cloudshell.api.html#cloudshell.api.cloudshell_api.CloudShellAPISession). -::: - -For information about installing Python and pip, and for further information about using Python scripts and drivers, see [The CloudShell DevGuide](../../devguide/index.md). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/api-guide/shell-dev-blueprint-design-api/testshell-api.md b/versioned_docs/version-2023.3/api-guide/shell-dev-blueprint-design-api/testshell-api.md deleted file mode 100644 index 8349457f2c..0000000000 --- a/versioned_docs/version-2023.3/api-guide/shell-dev-blueprint-design-api/testshell-api.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -sidebar_position: 2 ---- - -# TestShell API - -TestShell API allows you to automate CloudShell (in a similar manner as in [CloudShell Automation API](./cs-automation-api.md)), and is especially useful for writing drivers or tests, and to get information about CloudShell resources and blueprints. Administrators can use this API to create scripts and automation that run administrative tasks, such as moving resources between domains or updating relationships between user groups. - -The TestShell API library is the main library of the lab management API. It supports most of the actions available in CloudShell Portal and in Resource Manager. The default port for TestShell API Library and TestShell C# API in the Quali Server is 8028. The default port for TestShell XML RPC API and TestShell TCL API in the Quali Server is 8029. - -The TestShell API provided implementations are available from the following links: - -- **TestShell API Library**: The TestShell API library is available by default in TestShell Authoring tools, and can be added as a DLL asset to a project in CloudShell Authoring, the driver builder. - -For the complete list of TestShell API Library functions, see [TestShell API Library Reference Guide](pathname:///api-docs/2023.3/TestShell-API/TestShell%20API%20Library.html). - -- **TestShell C# API**: It is possible to add the TestShell API library to a C# project and use its methods. - - For the complete list of TestShell API C# functions, see [TestShell API C# Reference Guide](pathname:///api-docs/2023.3/TestShell-API/TestShell%20cSharp%20API.html). - -- **TestShell TCL API**: Each CloudShell version comes with a TCL client that supports all the TestShell API methods using TCL syntax. The TCL client can be found in `%InstallationFolder%\Integration\TestShell API\TestShell TCL API`. - - For the complete list of TestShell API TCL functions, see [TestShell API TCL Reference Guide](pathname:///api-docs/2023.3/TestShell-API/TestShell%20TCL%20API.html "TestShell API TCL Reference Guide") - -- **TestShell XML RPC API**: Direct XML (Remote Procedure Call) RPC commands are also supported for TestShell API methods. When using XML RPC API, the data needs to be wrapped in a specific way and sent to the relevant port in the server. To test XML RPC API, Quali uses an internal tool that creates this wrap automatically, and so you only need to insert the parameters for the various methods. - - For the complete list of TestShell API XML RPC functions, see [TestShell API XML RPC Reference Guide](pathname:///api-docs/2023.3/TestShell-API/TestShell%20XML%20RPC%20API.html "TestShell API XML RPC Reference Guide"). - - -The TestShell API library is a DLL file that is loaded to the database. (You can view and edit the library file and version in the **Libraries** tab in the TestShell Studio while logged as an admin.) - -Since TestShell API is a lab management client, it requires login credentials, therefore the session should include user credentials and a domain. Following the login step, it is possible write an automated flow of actions. - -For example, you can create the following scenario: - -1. Create a resource. -2. Create sub-resources to the resource. -3. Set the values of the resource’s attributes. -4. Update the physical connection of the resource/sub-resources to other connectable resources. -5. Get resource details (as a data matrix or XML). -6. Reserve the resource. -7. Add a route request and connect it. -8. Get the route segments. -9. End the sandbox. - -Once the scenario is created, it can be run automatically. - -:::note General notes about TestShell API: - -- Some actions that are possible in Resource Manager and in CloudShell Portal are not supported in TestShell API. For example, you cannot create and edit a blueprint using TestShell API. There are other solutions for that, such as creating and editing a sandbox and then saving it as a blueprint or importing a Quali package. -- Many operations have two versions, a "single” version and a "bulk” version. For example, it is possible to create a single resource using the "CreateResource" method or to create many resources at once using the "CreateResources” operation. This is not always the fastest way performance-wise, but it is sometime easier to write and edit. The bulk operation usually gets a matrix as an input, and sometimes has special rules (such as the fact you cannot have the sub-resource creation line before the resource line). -- Any function that requires a resource full path can also get the resource name without the folders it is located in. -::: \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/_category_.json b/versioned_docs/version-2023.3/devguide/_category_.json deleted file mode 100644 index 8387a73741..0000000000 --- a/versioned_docs/version-2023.3/devguide/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "The CloudShell DevGuide", - "position": 11 -} diff --git a/versioned_docs/version-2023.3/devguide/available-cs-api/_category_.json b/versioned_docs/version-2023.3/devguide/available-cs-api/_category_.json deleted file mode 100644 index 9d821ba12b..0000000000 --- a/versioned_docs/version-2023.3/devguide/available-cs-api/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Available CloudShell APIs", - "position": 7 -} diff --git a/versioned_docs/version-2023.3/devguide/available-cs-api/automate-cs-sandboxes-for-devops.md b/versioned_docs/version-2023.3/devguide/available-cs-api/automate-cs-sandboxes-for-devops.md deleted file mode 100644 index 835e75b223..0000000000 --- a/versioned_docs/version-2023.3/devguide/available-cs-api/automate-cs-sandboxes-for-devops.md +++ /dev/null @@ -1,177 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Automating CloudShell Sandboxes for DevOps - -In this section, we’ll look at different recipes for creating and using CloudShell Sandboxes as a part of your CI/CD or other DevOps pipelines. In this context, we’ll concentrate on the use case of automating CloudShell externally from scripts or other platforms. - -## Available APIs - -CloudShell currently supports two different sets of APIs which can be used to automate and integrate Sandboxes with DevOps. - -- The CloudShell Automation API (cloudshell\-automation-api package) - This Python package contains a comprehensive set of APIs for anything from managing inventory and connections to administrating users and groups as well as managing sandboxes and blueprints. The package allows developers to use the TestShell API in shell drivers and Python scripts. -- The CloudShell Sandbox APIs - This RESTful API is intended for automating the consumption of sandboxes outside of CloudShell. As such, it provides a specific set of commands focused on the workflow of starting and ending sandboxes, and running automation. - -### Which API to choose? - -If the functionality you’re looking for is covered in the Sandbox APIs, it is recommended to use it over the CloudShell Automation API package. If not, you can consider using the Sandbox API for whatever subset of the required functionality it does offer and complement that with CloudShell Automation API calls. - -### Where are the APIs documented? - -#### CloudShell Sandbox API - -The Sandbox API live documentation page is installed with CloudShell. To access it, simply browse to the following default address: [http://\[CloudShellPortalAddress\]:82/api/v2/explore/]. If you’re accessing the link from the CloudShell Portal machine itself, or from the CloudShell SDK edition machine, you can simply use "localhost” or "127.0.0.1”. The API documentation page allows you to test and experiment with the APIs as well as provide information on the different operations and parameters. - -#### CloudShell Automation API - -The latest Automation API online help is available [here](pathname:///api-docs/2023.3/Python-API). - -When using the cloudshell\-automation-api package, make sure to install the version of the API which is compatible with your CloudShell version. To make the task of finding the right version easier, this package follows a versioning schema different from other CloudShell packages. The major and minor version of the cloudshell\-automation-api package will always match the CloudShell release its compatible with. Therefore, to install the latest compatible version you need to add these version requirements when installing from pip. - -For example, to install the latest cloudshell\-automation-api compatible with CloudShell 8.1, run: - -```python -python -m pip install "cloudshell-automation-api>;=8.1,<8.2" -``` - -To install the latest cloudshell\-automation-api compatible with CloudShell 8.0, run: - -```python -python -m pip install "cloudshell-automation-api>;=7.1,<8.0" -``` - -## Starting and stopping a sandbox - -The simplest and recommended way to start or stop a new sandbox instance from a blueprint is using the Sandbox API. The Sandbox API live documentation page contains the details of the response and request format. The basic URLs of these operations are **/blueprints/\{blueprint\_identifier\}/start** and **/sandboxes/\{sandbox\_id\}/stop**. - -### Using the Sandbox API from Python - -The following code sample demonstrates how to use the Sandbox APIs for a simple flow - creating a sandbox from a blueprint and then ensuring setup completes successfully after running some tests. - -https://github.com/QualiSystems/devguide_examples/blob/master/devops_integration/sandbox_api_python_2_and_3/sandbox_api_example.py - -[This Github Sample](https://github.com/QualiSystems/devguide_examples/blob/master/devops_integration/sandbox_api_python_2_and_3/sandbox_api_example.py) is by [QualiSystems](https://github.com/QualiSystems) - -devops\_integration/sandbox\_api\_python\_2\_and\_3/sandbox\_context\_example.py [view raw](https://raw.githubusercontent.com/QualiSystems/devguide_examples/master/devops_integration/sandbox_api_python_2_and_3/sandbox_api_example.py) - -```python -def main(): - """ - Example workflow of starting a sandbox, waiting for it to setup, then stopping it - :return: - """ - api_example = SandboxRESTAPI('localhost', '8032') - api_example.login("admin", "admin", "Global") - sandbox_id = api_example.start_sandbox('Simple blueprint', datetime.timedelta(hours=2), 'test_sandbox') - sandox_details = api_example.wait_for_sandbox_setup(sandbox_id) - run_some_tests_or_other_code(sandox_details) - api_example.stop_sandbox(sandbox_id) - api_example.wait_for_sandbox_teardown(sandbox_id) -``` - -This code uses a simple wrapper around the Sandbox API which uses the requests package. You can find the source code for that implementation [here](https://github.com/QualiSystems/devguide_examples/blob/master/devops_integration/sandbox_api_python_2_and_3/sandbox_api/sandbox_apis.py). - -Since sandboxes used this way are really a scope for testing. It can be beneficial to use Python’s with statement to ensure a sandbox is always set up and torn down properly with every usage. The following code wraps the Sandbox API as a context, ensuring proper cleanup and providing convenient access to the sandbox details. - -[This Github Sample](https://github.com/QualiSystems/devguide_examples/blob/master/devops_integration/sandbox_api_python_2_and_3/sandbox_context_example.py) is by [QualiSystems](https://github.com/QualiSystems) - -devops\_integration/sandbox\_api\_python\_2\_and\_3/sandbox\_context\_example.py [view](https://github.com/QualiSystems/devguide_examples/blob/master/devops_integration/sandbox_api_python_2_and_3/sandbox_context_example.py) [raw](https://raw.githubusercontent.com/QualiSystems/devguide_examples/master/devops_integration/sandbox_api_python_2_and_3/sandbox_context_example.py) - -```python -def main(): - """ - Example workflow of starting a sandbox, waiting for it to setup, then stopping it - :return: - """ - api_example = SandboxRESTAPI('localhost', '8032') - api_example.login("admin", "admin", "Global") - sandbox_id = api_example.start_sandbox('Simple blueprint', datetime.timedelta(hours=2), 'test_sandbox') - sandox_details = api_example.wait_for_sandbox_setup(sandbox_id) - run_some_tests_or_other_code(sandox_details) - api_example.stop_sandbox(sandbox_id) - api_example.wait_for_sandbox_teardown(sandbox_id) -``` - -**Both of the above examples are Python 2/3-compatible.** - -### Using the Automation API from Python - -The following code demonstrates implementing the same basic flow using the CloudShell Automation API package: - -[This Github Sample](https://github.com/QualiSystems/devguide_examples/blob/master/devops_integration/python_api/python_api_example.py) is by [QualiSystems](https://github.com/QualiSystems) - -devops\_integration/python\_api/python\_api\_example.py [view](https://github.com/QualiSystems/devguide_examples/blob/master/devops_integration/python_api/python_api_example.py) [raw](https://raw.githubusercontent.com/QualiSystems/devguide_examples/master/devops_integration/python_api/python_api_example.py) - -```python -def main(): - """ - Example workflow of starting a sandbox, waiting for it to setup, then stopping it - :return: - """ - - session = CloudShellAPISession('localhost', "admin", "admin", "Global") - # Create the sandbox - sandbox = session.CreateImmediateTopologyReservation('test sandbox', owner='admin', - durationInMinutes=120, - topologyFullPath='Simple Blueprint1', - globalInputs=[UpdateTopologyGlobalInputsRequest('Target Cloud', 'AWS')]).Reservation - - sandbox_details = SandboxHelpers().wait_for_sandbox_setup(sandbox.Id, session,10) - run_some_tests_or_other_code(session, sandbox_details) - session.EndReservation(sandbox.Id) -``` - -Similar to the Sandbox API example, we can wrap the setup and teardown of the sandbox in a context object and take advantage of the Python with operator to simplify the flow. - -[This Github Sample](https://github.com/QualiSystems/devguide_examples/blob/master/devops_integration/python_api/python_api_context_example.py) is by [QualiSystems](https://github.com/QualiSystems) - -devops\_integration/python\_api/python\_api\_context\_example.py [view](https://github.com/QualiSystems/devguide_examples/blob/master/devops_integration/python_api/python_api_context_example.py) [raw](https://raw.githubusercontent.com/QualiSystems/devguide_examples/master/devops_integration/python_api/python_api_context_example.py) - -```python -def main(): - """ - Example workflow of starting a sandbox, waiting for it to setup, then stopping it - :return: - """ - connectivity_params = QualiConnectivityParams(api_service_host='localhost', domain='Global', - password='admin', username='admin') - inputs = BlueprintInputs(global_inputs=[UpdateTopologyGlobalInputsRequest('Target Cloud', 'AWS')]) - - with SandboxContext(connectivity_params=connectivity_params, - blueprint_name='Simple Blueprint1', duration=120, - blueprint_inputs=inputs) as sandbox: - run_some_tests_or_other_code(sandbox) -``` - -## Sandbox API Missing and Upcoming Features - -Currently, the Sandbox API does not support the creation of future (pending) sandboxes. If your CloudShell environment requires this feature, you may need to fall back to the cloudshell\-automation-api package API for sandbox reservation (using the *CreateReservation* method). - -## Executing Orchestration Commands - -Executing orchestration commands from the Sandbox API is supported using the **/sandboxes/\{sandbox\_identifier\}/commands/\{command\_name\}/start** method. In addition, the Automation API package provides the necessary APIs to execute orchestration scripts in the sandbox: - -[This Github Sample](https://github.com/QualiSystems/devguide_examples/blob/master/devops_integration/python_api/python_api_example.py) is by [QualiSystems](https://github.com/QualiSystems) - -devops\_integration/python\_api/python\_api\_example.py [view](https://github.com/QualiSystems/devguide_examples/blob/master/devops_integration/python_api/python_api_example.py) [raw](https://raw.githubusercontent.com/QualiSystems/devguide_examples/master/devops_integration/python_api/python_api_example.py) - -```python -def run_some_tests_or_other_code(session, sandox_details): - session.ExecuteEnvironmentCommand(reservationId=sandox_details.Id, commandName='Update Version', - commandInputs=InputNameValue(Name='Version', Value='1.1')) - pp = pprint.PrettyPrinter(indent=4) - pp.pprint(jsonpickle.dumps(sandox_details)) - - time.sleep(10) -``` - -## Integrating with CI tools - -The same basic workflow demonstrated in the above examples can be used to implement a plugin for CI frameworks such as Jenkins, Travis or TeamCity. - -Several Quali community projects already provide readymade solutions for some CI tools. - -The [Sandbox-Jenkins-Plugin](https://github.com/jenkinsci/cloudshell-sandbox-plugin) provides build steps for creating and ending sandboxes for Jenkins, as well as integration with the new PipeLines feature for continuous delivery and DevOps automation. - -The [Sandbox-Teamcity-Plugin](https://github.com/QualiSystems/Sandbox-TeamCIty-Plugin) provides similar build steps and integration for TeamCity. diff --git a/versioned_docs/version-2023.3/devguide/available-cs-api/index.md b/versioned_docs/version-2023.3/devguide/available-cs-api/index.md deleted file mode 100644 index 2f23c437ed..0000000000 --- a/versioned_docs/version-2023.3/devguide/available-cs-api/index.md +++ /dev/null @@ -1,55 +0,0 @@ -# Available CloudShell APIs - -In this article, we’ll discuss the different CloudShell APIs. - -CloudShell applications have multiple APIs, which enable you to get services from the Quali Server and to utilize CloudShell’s capabilities for Shell automation, blueprint orchestration, sandbox deployment and test automation. CloudShell APIs can be classified as outbound and inbound APIs. In other words, APIs that are used to serve CloudShell in a wider context (our RESTful Sandbox API), like CI/CD processes, and APIs used to extend CloudShell automation and orchestration. For additional information, visit the [CloudShell API Guide](../../api-guide/cs-api-overview.md). - -## CloudShell Sandbox API - -**CloudShell Sandbox API** is a RESTful API that allows you to use CloudShell sandboxes as part of your CI/CD process. For example, you can start, extend and stop sandboxes, run sandbox orchestration and automation commands, and get information about your sandboxes and execution activity. For additional information, see [CloudShell Sandbox API](../../api-guide/cs-sandbox-api/index.md). - -### Examples - -For implementation examples, visit our [TeamCity](https://github.com/QualiSystems/Sandbox-TeamCIty-Plugin/blob/master/README.md) or [Jenkins](https://plugins.jenkins.io/cloudshell-sandbox) plugin documentation, which leverages CloudShell Sandbox API to automate the consumption of sandboxes as part of the devops cycle. - -## CloudShell Automation API - -CloudShell Automation API is a Python open source package you can use to develop CloudShell orchestration and automation capabilities. Using the CloudShell Automation API, you can design orchestration scripts that communicate and run operations on CloudShell, from administrative operations like adding users, to sandbox-level operations like provisioning resources, resolving connectivity and running health check on the sandbox’s elements. For additional information, see [CloudShell Automation API](../../api-guide/shell-dev-blueprint-design-api/cs-automation-api.md) and [CloudShell Automation API Reference Guide](pathname:///api-docs/2023.3/Python-API). - -Note that since CloudShell Automation API can perform sandbox and CloudShell\-level operations, it mostly applies to orchestration scripts and is not recommended to be used in shells. Having said that, there are two methods in the API that apply directly to shells: WriteMessageToReservationOutput allows the driver to print messages in real time to the output console, and SetResourceLiveStatus allows the driver to indicate the resource’s state with an icon. For example, online and offline. - -### Examples - -See [Useful CloudShell Automation API Code Examples](./available-cs-api/useful-cs-api-examples/). - -## TestShell API - -The **TestShell API** allows designing orchestration and automation using C#, TCL API and XML RPC. It is intended for performing a wide variety of operations within CloudShell; from administrative tasks, such as managing inventory or users, to sandbox operations, such as executing commands and controlling both resource and sandbox live statuses. It is especially useful for writing tests, and obtaining information about resources, blueprints and sandboxes. TestShell API and CloudShell Automation API provide the same capabilities and functionality. - -For additional information, see the appropriate TestShell API Reference Guide: - -- [TestShell API Library Reference Guide](pathname:///api-docs/2023.3/testshell-api/TestShell%20API%20Library.html) - -- [TestShell API C# Reference Guide](pathname:///api-docs/2023.3/testshell-api/TestShell%20cSharp%20API.html) - -- [TestShell API TCL Reference Guide](pathname:///api-docs/2023.3/testshell-api/TestShell%20TCL%20API.html) - -- [TestShell API XML RPC Reference Guide](pathname:///api-docs/2023.3/testshell-api/TestShell%20XML%20RPC%20API.html) - - -## Quali API - -Quali API allows you to automate the scheduling and queuing of test automation suites. It can be used in C# and TCL, and is also used for getting sandbox attachments and execution server details. - -For additional information, see the appropriate Quali API Reference Guide: - -- [Quali API Library Reference Guide](pathname:///api-docs/2023.3/quali-api/Quali%20API%20Library.html) - -- [Quali API C# Reference Guide](pathname:///api-docs/2023.3/quali-api/Quali%20cSharp%20API.html) - -- [Quali API REST Reference Guide](pathname:///api-docs/2023.3/quali-api/Quali%20REST%20API.html) - - -## Packaging API - -**CloudShell Packaging API** allows you to automate the creation configuration of CloudShell blueprint packages, which can be used for backup purposes and for sharing blueprints between different CloudShell deployments. For additional information and implementation examples, see the [Packaging API](../../api-guide/packaging-api/index.md). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/available-cs-api/sso-login-to-cs-api.md b/versioned_docs/version-2023.3/devguide/available-cs-api/sso-login-to-cs-api.md deleted file mode 100644 index 05d633352f..0000000000 --- a/versioned_docs/version-2023.3/devguide/available-cs-api/sso-login-to-cs-api.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -sidebar_position: 3 ---- - -# SSO Login to CloudShell APIs - -This article explains how to use CloudShell APIs via SSO. This option provides user access to our APIs directly from your identity provider (IdP) using an authentication token. -:::note -SSO login is not supported for New Job Scheduling API. -::: - -## Prerequisites - -- **IDPUserInfoUrl** Server configuration key. -
    - More... - - **To set the IDPUserInfoUrl:** - - 1. Open the Server `customer.config` file (usually at `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config`) - 2. Add the following in a new line: - - ```javascript - - ``` - - For example: - - ```javascript - - -- IdP user profile that contains an email address ("email" claim and value). To register new users, see the [To define user groups for SAML SSO:](../../admin/cloudshell-identity-management/access-control-and-authentication/saml-authentication-configuration-sso-slo/configure-sso/index.md#to-define-user-groups-for-saml-sso) section. -- JWT token generated in your IdP. Note that the authorization token is valid for 5 hours by default, but the validity period can be extended using the `AuthToken.ExpirationSpanMinutes` configuration key. - -## API authentication token creation flow - -![](/Images/Devguide-reference/SsoApiFlow_817x252.png) - -1. User sends to Quali Server a login request containing the JWT token and CloudShell domain name. -2. Quali Server validates the JWT token against the user's IdP. -3. The IdP returns to Quali Server the user's details in a UserInfo object. - - For example: - - ![](/Images/Devguide-reference/ApiSsoFlow2.png) - - Quali Server uses the IdP user's email address to identify an existing CloudShell user or create a new one to be used in the authentication token. - -4. Quali Server sends the user a response containing the authentication token. - - If the API calls time out, consider extending the request timeout period for API POST requests over SSO using the `IDPRequestTimeout` configuration key. -
    - More... - - **To extend the timeout period for API POST requests over SSO:** - - 1. Open the Server `customer.config` file (usually at `C:\Program Files (x86)\QualiSystems\CloudShell\Server\customer.config`) - 2. Add the following in a new line and set the desired period, in seconds (default is 10): - - ```javascript - - ``` - - 3. Save the file. - - 4. Restart the **Quali Server** service. -
    - - -## Login request example - -![](/Images/Devguide-reference/ApiSsoFlow1.png) - -## API call using an API authentication token - -```python -from cloudshell.api.cloudshell_api import CloudShellAPISession - -api = CloudShellAPISession(host="localhost", token_id="eyJhbGciOiJSUzI....zHMyOeJYu-0xodJ_yghhbg", domain="Global") - -result = api.AddTopologiesToDomain(topologyNames=["CloudShell Sandbox Template"],domainName="Domain A") -print(f'{result}') -``` diff --git a/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/_category_.json b/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/_category_.json deleted file mode 100644 index 8900df82a9..0000000000 --- a/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Useful CloudShell Automation API Code Examples", - "position": 2 -} diff --git a/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/edit-app-in-sandbox.md b/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/edit-app-in-sandbox.md deleted file mode 100644 index bc0a6486fa..0000000000 --- a/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/edit-app-in-sandbox.md +++ /dev/null @@ -1,181 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Editing Apps in a Sandbox - -The `EditAppsInReservation` API enables you to programmatically modify an App in a sandbox. Generally, the classic flow is to call this API using CloudShell Automation API during the **Preparation** phase of the setup script (before the **Provisioning** phase that deploys the Apps). - -:::note Notes for EditAppsInReservation: -- Applies to undeployed Apps in the sandbox. -- Supported in CloudShell Automation API and TestShell API. -- All attributes in the deployment path must be specified with the desired values. Attribute values that are omitted in the API command will have empty values. In other words, your automation needs to read the existing values, copy them into the API request and modify the desired attributes as appropriate (see the example below). -- This API method does not support Configuration Management modifications, but you can use the Automation API's `ConfigureApps` method to update parameter values. -::: -## How it works - -`EditAppsInReservation` accepts two parameters: reservation id and an "app details" object. - -"app details" defines the modified App. - -- In python, you define the App's details as part of your script, as shown in the next section. -- In TestShell API, you build the json in a text editor and copy it into a variable, which you define in the **TestShell API** step's `EditAppsInReservation` command. This json object mirrors the structure of the CloudShell Automation API object. - -## The app details json - -The json has several sections: - -- App's general details like name, new name and description -- **AppDetails** section containing the App Resource attributes (User, Password, etc.), deployed App shell (**ModelName** parameter), **Driver** parameter is used for Apps based on 1st Gen cloud provider shells -- **DefaultDeployment** section defines the App's deployment path to use as well as the deployment attributes. As mentioned in the notes, all deployment path attributes must be specified, even ones you do not want to change. - -```javascript -[ - { - "Name": "vcenter test", - "NewName": "new name test", - "Description": "my description", - "AppDetails": { - "Attributes": [ - { - "Name": "User", - "Value": "Testshell Test User" - } - ], - "Driver": null, - "ModelName": "Generic App Model" - }, - "DefaultDeployment": { - "Name": "vcenter 110 - 2G - VMware vCenter Cloud Provider 2G.vCenter VM From Linked Clone 2G", - "Deployment": { - "Attributes": [ - { - "Name": "VMware vCenter Cloud Provider 2G.vCenter VM From Linked Clone 2G.CPU", - "Value": "6" - } - ] - } - } - } -] -``` - -## Custom setup script example - -Here's a [custom setup script](https://github.com/QualiSystemsLab/cloudshell-api-script-samples/tree/master/generic-orchestration-samples/setup/setup_edit_app_sample) from our community that demonstrates how to use this API. - -This script has 3 files: - -- `edit_apps.py` has two functions: - - **edit\_target\_app\_in\_sandbox** modifies specific deployment attributes in a specific App in the sandbox. - - **edit\_apps\_in\_sandbox** is a wrapper for the setup orchestration. - -- `__main__.py` is the entry point to the setup script. -- `requirements.txt` - -**edit\_apps.py:** - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox -from cloudshell.api.cloudshell_api import CloudShellAPISession, ApiEditAppRequest, AppDetails, DefaultDeployment, Deployment, \ - NameValuePair - - -def edit_target_app_in_sandbox(app_name, new_app_name, api, sb_id, target_deployment_attrs): - """ - Function to replace specific deployment attributes on a specific app - the target deployment attrs ignores namespacing and case sensitivity. - This will work for the hdd and cpu attrs - [("hdd", "3"), ("cpu", "5")] - :param str app_name: - :param str new_app_name: - :param CloudShellAPISession api: - :param str sb_id: - :param list target_deployment_attrs: example [("hdd", "3"), ("cpu", "5")] - :return: - """ - - # guard clause - if not target_deployment_attrs: - return - - # find target app to modify - apps = api.GetReservationDetails(sb_id, disableCache=True).ReservationDescription.Apps - if not apps: - return - target_app_search = [app for app in apps if app.Name == app_name] - if not target_app_search: - return - target_app = target_app_search[0] - - # copy over logical resource attributes - new_resource_attrs = [] - for curr_attr in target_app.LogicalResource.Attributes: - new_resource_attrs.append(NameValuePair(curr_attr.Name, curr_attr.Value)) - - default_deployment = [x for x in target_app.DeploymentPaths if x.IsDefault][0] - - # copy over all deployment attributes, modify target attributes - new_deployment_attrs_map = {} - for curr_attr in default_deployment.DeploymentService.Attributes: - for update_attr_name, update_attr_value in target_deployment_attrs: - if curr_attr.Name.lower().endswith(update_attr_name.lower()): - new_deployment_attrs_map[curr_attr.Name] = update_attr_value - break - - if curr_attr.Name not in new_deployment_attrs_map: - new_deployment_attrs_map[curr_attr.Name] = curr_attr.Value - - # build out app edit request - new_deployment_attrs_list = [NameValuePair(x[0], x[1]) for x in new_deployment_attrs_map.items()] - new_deployment = Deployment(new_deployment_attrs_list) - app_details = AppDetails(ModelName=target_app.LogicalResource.Model, - Attributes=new_resource_attrs, - Driver=target_app.LogicalResource.Driver) - new_default_deployment = DefaultDeployment(Name=default_deployment.Name, Deployment=new_deployment) - app_edit_requests = [ApiEditAppRequest(Name=app_name, - NewName=new_app_name, - Description="", - AppDetails=app_details, - DefaultDeployment=new_default_deployment)] - api.EditAppsInReservation(reservationId=sb_id, editAppsRequests=app_edit_requests) - - -def edit_apps_in_sandbox(sandbox, components): - """ - :param Sandbox sandbox: - :param components: - :return: - """ - api = sandbox.automation_api - sb_id = sandbox.id - APP_NAME = "TEST" - NEW_NAME = "NATTI" - target_deployment_attrs = [("hdd", "3"), ("cpu", "5")] - - edit_target_app_in_sandbox(app_name=APP_NAME, - new_app_name=NEW_NAME, - api=api, - sb_id=sb_id, - target_deployment_attrs=target_deployment_attrs) -``` - -**\_\_main\_\_.py:** - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox -from cloudshell.workflow.orchestration.setup.default_setup_orchestrator import DefaultSetupWorkflow -from edit_apps import edit_apps_in_sandbox - -sandbox = Sandbox() - -DefaultSetupWorkflow().register(sandbox) -sandbox.workflow.add_to_preparation(edit_apps_in_sandbox) - -sandbox.execute_setup() -``` - -**requirements.txt:** - -```javascript -cloudshell-orch-core>=3.4.0.0,<3.5.0.0 -``` diff --git a/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/find-blueprints-with-rsrc-serv-or-app.md b/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/find-blueprints-with-rsrc-serv-or-app.md deleted file mode 100644 index 3e443bd697..0000000000 --- a/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/find-blueprints-with-rsrc-serv-or-app.md +++ /dev/null @@ -1,174 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Finding Blueprints Containing a Specific Resource, Service or App - -The following Python scripts utilize the CloudShell Automation API to print a list of the blueprints that have a specific component and should be run from an IDE that can access the Quali Server. - -## Print blueprints that have a resource - -To use this script, replace `resource name` with the name of the resource and set the CloudShell details. - -```python -from cloudshell.api.cloudshell_api import CloudShellAPISession -from pprint import pprint - -# specify target resource name -TARGET_RESOURCE_NAME = "resource name" - -# specify api session details -user = "admin" -password = "admin" -server = "localhost" -domain = "Global" - -api = CloudShellAPISession(host=server, username=user, password=password, domain=domain) - - -def is_resource_list_in_blueprint(api, blueprint_name, target_resource_name): - """ - search current blueprint resources for presence of the Target Resource - :param CloudShellAPISession api: - :param str blueprint_name: - :param str target_resource_name: - :return: - """ - details = api.GetTopologyDetails(blueprint_name) - bp_resources = details.Resources - for curr_resource in bp_resources: - if curr_resource.Name == target_resource_name: - return True - return False - - -all_blueprints = api.GetTopologiesByCategory().Topologies -target_blueprints = [bp_name for bp_name in all_blueprints - if is_resource_list_in_blueprint(api, bp_name, TARGET_RESOURCE_NAME)] - -if not target_blueprints: - print("No blueprints in system with target resource") -else: - print("=== Target Blueprints containing '{}' ===".format(TARGET_RESOURCE_NAME)) - pprint(target_blueprints) - - # add to text file - with open('target_blueprints.txt', 'w') as f: - for bp in target_blueprints: - print >> f, bp -``` - -## Print blueprints that have a service - -To use this script, replace `service alias` with the alias of the service and set the CloudShell details. - -```python -from cloudshell.api.cloudshell_api import CloudShellAPISession - -# set list of service "Alias" -TARGET_SERVICES = ["service alias"] - -# api session details -user = "admin" -password = "admin" -server = "localhost" -domain = "Global" - -api = CloudShellAPISession(host=server, username=user, password=password, domain=domain) - - -def is_resource_list_in_blueprint(api, blueprint_name, target_service_names): - """ - search current blueprint resources for presence of the Target Resource - :param CloudShellAPISession api: - :param str blueprint_name: - :param [str] target_service_names: - :return: - """ - details = api.GetTopologyDetails(blueprint_name) - bp_services = details.Services - bp_service_names = [service.Alias for service in bp_services] - for service_name in target_service_names: - for bp_service_name in bp_service_names: - if service_name == bp_service_name: - return True - else: - continue - - -all_blueprints = api.GetTopologiesByCategory().Topologies -target_blueprints = [bp_name for bp_name in all_blueprints - if is_resource_list_in_blueprint(api, bp_name, TARGET_SERVICES)] - -if not target_blueprints: - print("No blueprints in system with target services") -else: - print("=== Target Blueprints containing '{}' resources ===".format(TARGET_SERVICES)) - print(target_blueprints) - - # add blueprints to text file - with open('target_blueprints.txt', 'w') as f: - for bp in target_blueprints: - print >> f, bp -``` - -## Print blueprints containing Apps with a deployment type based on a specific cloud provider resource - -This script looks for blueprints with Apps that contain a deployment path from a particular cloud provider resource. To use, replace `cloud provider resource name` with the name of the cloud provider resource and set the CloudShell details. - -```python -from cloudshell.api.cloudshell_api import CloudShellAPISession -from pprint import pprint -from timeit import default_timer - -# set list of target resources -TARGET_CLOUD_PROVIDER_RESOURCE = "cloud provider resource name" - -# api session details -user = "admin" -password = "admin" -server = "localhost" -domain = "Global" - -api = CloudShellAPISession(host=server, username=user, password=password, domain=domain) - - -def is_resource_list_in_blueprint(api, blueprint_name, target_cloud_provider): - """ - search current blueprint resources for presence of the Target Resource - :param CloudShellAPISession api: - :param str blueprint_name: - :param str target_cloud_provider: - :return: - """ - details = api.GetTopologyDetails(blueprint_name) - bp_apps = details.Apps - for curr_app in bp_apps: - deployment_paths = curr_app.DeploymentPaths - for dp in deployment_paths: - curr_cloud_provider = dp.DeploymentService.CloudProvider - if curr_cloud_provider == target_cloud_provider: - return True - return False - -start = default_timer() -all_blueprints = api.GetTopologiesByCategory().Topologies - -print("searching {} blueprints for results...".format(len(all_blueprints))) - -target_blueprints = [bp_name for bp_name in all_blueprints - if is_resource_list_in_blueprint(api, bp_name, TARGET_CLOUD_PROVIDER_RESOURCE)] - -if not target_blueprints: - print("No blueprints in system with target resource") -else: - print("=== Target Blueprints containing '{}' ===".format(TARGET_CLOUD_PROVIDER_RESOURCE)) - pprint(target_blueprints) - - # add to text file - with open('target_blueprints.txt', 'w') as f: - for bp in target_blueprints: - print >> f, bp - -print("Done after {} seconds.".format(default_timer() - start)) -``` diff --git a/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/index.mdx b/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/index.mdx deleted file mode 100644 index 5044b88c65..0000000000 --- a/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/index.mdx +++ /dev/null @@ -1,9 +0,0 @@ - -# Useful CloudShell Automation API Code Examples - -This section provides different code examples that can be used for reference. - -import DocCardList from '@theme/DocCardList'; -import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; - - \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/peform-actions-on-rsrc-in-sandbox.md b/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/peform-actions-on-rsrc-in-sandbox.md deleted file mode 100644 index cfad7f27a8..0000000000 --- a/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/peform-actions-on-rsrc-in-sandbox.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Performing Actions on Resources in the Sandbox - -## Adding resources, connecting L1 routes and setting live status - -This script adds resources to the sandbox, creates L1 resource connections and sets the ‘online’ live status icon on the resources. - -```python -import time - - -defexecute(): - from cloudshell.workflow.orchestration.sandbox import Sandbox - Sandbox = Sandbox() - Reservation_Id = Sandbox.reservationContextDetails.id - - Resource_List =['PUT Mock','PUT Mock/Port 1','Traffic Mock','Traffic Mock/Port 1'] - - time.sleep(3) - - # add resources - Sandbox.automation_api.AddResourcesToReservation(reservationId=Reservation_Id, resourcesFullPath=Resource_List) - time.sleep(1) - print"" - Sandbox.automation_api.WriteMessageToReservationOutput(Reservation_Id,"resources added to sandbox") - - time.sleep(3) - # set resource live status - Sandbox.automation_api.SetResourceLiveStatus('PUT Mock','Online',"Active") - Sandbox.automation_api.SetResourceLiveStatus('Traffic Mock','Online',"Active") - - time.sleep(1) - Sandbox.automation_api.WriteMessageToReservationOutput(Reservation_Id,"resources are online") - - time.sleep(3) - # connect L1 routes - Sandbox.automation_api.CreateRouteInReservation(reservationId=Reservation_Id, - sourceResourceFullPath='PUT Mock/Port 1', - targetResourceFullPath='Traffic Mock/Port 1', - mappingType='bi', routeAlias='API-created route') - - time.sleep(1) - Sandbox.automation_api.WriteMessageToReservationOutput(Reservation_Id,"resources connected") -``` - -## Connecting L2 routes - -While connecting L1 routes is done via the CreateRouteInReservation API (example above), L2 "Connector” routes are established using the SetConnectorRequest API. - -```python -import time - - -def execute_L2(): - from cloudshell.api.cloudshell_api import SetConnectorRequest - from cloudshell.workflow.orchestration.sandbox import Sandbox - Sandbox = Sandbox() - Reservation_Id = Sandbox.reservationContextDetails.id - - time.sleep(3) - connector_request = SetConnectorRequest('PUT Mock/Port 1', 'Traffic Mock/Port 1', 'bi', 'API-created route') - sandbox.automation_api.SetConnectorsInReservation(reservationId=reservation_id, connectors=[connector_request]) -``` diff --git a/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/start-api-outside-cs.md b/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/start-api-outside-cs.md deleted file mode 100644 index 28a591e328..0000000000 --- a/versioned_docs/version-2023.3/devguide/available-cs-api/useful-cs-api-examples/start-api-outside-cs.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Starting an API Session Outside of CloudShell - -This script starts an API session from your IDE. This is useful for performing admin tasks outside of the scope of the blueprint or sandbox. - -As this requires the use of the CloudShell Automation API package, make sure to first install the package. From command-line, run pip install cloudshell-automation-api. - -```python -from cloudshell.api.cloudshell_api import CloudShellAPISession - -# add credentials -user = "admin" -password = "admin" -server = "localhost" -domain = "Global" - -# start session -api = CloudShellAPISession(host=server, username=user, password=password, domain=domain) - -# find resources of target model -res_details = api.FindResources(resourceModel="Putshell") -``` diff --git a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/_category_.json b/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/_category_.json deleted file mode 100644 index 54676e43d3..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Developing Configuration Management Scripts for Apps", - "position": 4 -} diff --git a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/_category_.json b/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/_category_.json deleted file mode 100644 index 49596e1350..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/_category_.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "label": "Ansible Playbook Development for Apps", - "position": 3, - "link": { - "slug": "devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps", - "type": "generated-index", - "description": "This chapter will take you through the development process of an Ansible playbook for CloudShell App deployment." - } -} diff --git a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/add-playbook-to-app.md b/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/add-playbook-to-app.md deleted file mode 100644 index 951a9d3b83..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/add-playbook-to-app.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Add the Playbook to an App - -Now that we have tested and debugged our playbook, the next step is to add it to an App template. For details, see [Adding App templates](../../../admin/cloudshell-manage-dashboard/manage-app-templates/index.md#adding-app-templates). -:::note -The playbook runs once during the **Setup** phase for all of the sandbox's Apps that use that playbook, after CloudShell has finished deploying their VMs. This is done both to improve performance and support cross-server logic where multiple applications need to be installed and configured in a certain way. -::: -1. In CloudShell Portal, open the **Manage>Apps** page. - -2. Edit or create an App. - -3. Open the **Configuration Management** tab. - -4. From the **Select Tool** drop-down list, select **Ansible**. - -5. Select the **Connection** Method, depending on the VM’s operating system. Select **Windows Remote Management** for Windows machines, or **SSH** for Linux. - -6. Specify the URL to the playbook YAML or ZIP file. Make sure you specify the raw version of the URL (GitHub, GitLab and BitBucket are supported). For example: `https://raw.githubusercontent.com/QualiSystemsLab/private-repo-zip-download/master/README.zip` - - The playbook can be a yaml file for a single playbook or a zip file containing several playbooks. For simple tasks, a single yaml file should be enough, but for more complex configuration logic, and for using roles, a zip file may be required (for a sample zip file, click [here](https://github.com/QualiSystems/app-starter-pack/blob/dev/Playbooks/wordpress-rhel7.zip)). The zip file must contain a least one yaml (if there are several yaml files, the main one must be named site.yaml). In order to use roles, include in the zip a folder named roles, and add the roles to it. - :::important - If the URL is private (HTTPS), the VM will need to have a valid SSL certificate. To disable the certificate check, open **Resource Manager Client>Resource Families>Configuration Services (Ansible Configuration or Custom Script Configuration)** and set the **Verify Certificate** attribute to **False**. - ::: -7. If the URL is protected, specify the **Username** and **Password**, or **Token**. - -8. In the **Inventory Groups** field, specify the inventory groups, separated by semicolons ";”. For details, see the [Inventory Groups](./ansible-playbook-examples.md#inventory-groups) example. - -9. To add parameters to the playbook, click **Add Parameter**, and enter each parameter’s name and value. Repeat for additional parameters. - - -Note that the parameters are added to the App template. - -![Discovery Dialog](/Images/Devguide-configuration-management/Adding-the-Playbook-to-an_2_624x444.png) - -You can add parameters to the App template in the following ways: - -- Provide the value as part of the App template, making it the default value for every instance of this App template. -- Specify a static value in the App in the blueprint. -- Specify a dynamic value in the App in the blueprint, linking the parameter to one of the blueprint’s Global Inputs. To do so, just enter the global input’s name in curly brackets as the parameter value, or click the "plus” button to select an available Global Input. -- Pass a value using the API, as illustrated in this [Parameters](./ansible-playbook-examples.md#parameters). This will replace any value provided in the App template or in the blueprint. - -1. Open the **App Resource** tab, and enter the VM’s access credentials. - - ![Discovery Dialog](/Images/Devguide-configuration-management/Config-manage-Adding-Your_5_624x444.png) - -2. Click **Done**. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/ansible-playbook-examples.md b/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/ansible-playbook-examples.md deleted file mode 100644 index 944ac8086f..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/ansible-playbook-examples.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Ansible Playbook Examples - -## Examples - -We’ve put together some basic playbook examples to help you get started. If you are new to Ansible development, feel free to test them out. - -### Hello World - -A basic playbook that prints “Hello World”, just to make sure we’re communicating with the VM, and are able to run the playbook. When run as part of an App’s deployment in CloudShell, the message will be displayed in the sandbox diagram’s Output window. - -For example, the site.yml file may look something like this: - -```javascript ---- -- hosts: all - tasks: - - name: Print Hello World - debug: msg="Hello World" -``` - -### Parameters - -A playbook that prints the parameter defined in an App template or API call (see below). Such playbooks are useful for debugging and making sure parameter variables are set with the correct values. Note that the parameters are stored as environment variables on the App instance in the sandbox. - -The site.yml file will look something like this: - -```javascript ---- -- hosts: all - vars: - - msg: "{{P1|default('No Message')}}" - tasks: - - name: Print P1 - debug: var=msg -``` - -Parameter defined in the App template: - -![Discovery Dialog](/Images/Devguide-configuration-management/Custom-Scripts_2_624x164.png) - -Parameter defined in the `ConfigureApps` API method (Python file): - -```python -from cloudshell.api.cloudshell_api import * - -session = CloudShellAPISession('localhost', 'admin', 'admin', 'Global') -session.ConfigureApps( - reservationId='dfb2df41-334e-4630-8bc6-ec846eb072d6', - appConfigurations=[AppConfiguration('LinuxVmApp_9cb2-72d6', [ConfigParam('P1', 'Hello World From Here!')])], - printOutput=True -) -``` - -:::note -Since this script uses parameters defined on the App template, it will not work when run manually outside of CloudShell. For this to work, you will need to edit the Python code as follows: -::: - -- Update the CloudShell settings passed to the `session` variable, if needed. - -- Specify the ID of an active sandbox (in the `reservationId` field of the Python code). - -- Replace `LinuxVmApp_9cb2-72d6` with the App’s name. - - -### Inventory Groups - -In some cases, a playbook contains plays that target many different VMs that require configuration. In order to have the playbook run only the plays that are relevant to a specific VM, or to a group of hosts (VMs) that your VM belongs to, you can use the Inventory Groups field in the App template. In this field, specify the groups that your VM belongs to (more than one group can be provided). Use semicolons ";” to separate multiple groups. - -For example , specifying groups “servers/http” and servers/sql”: - -![Discovery Dialog](/Images/Devguide-configuration-management/Ansible-Playbook-Examples_4.png) - -This example shows how these groups entered in the App’s **Configuration Management** page should be written in the Ansible hosts file. - -```javascript -hosts -[servers:children] -http -sql - -[http] -192.168.1.2 - -[sql] -192.168.1.12 -``` - -### Privilege escalation - -Now let’s say you want Ansible to dynamically get the user and password from the App when running a task on a particular App’s VM. This is useful if the VM credentials on the App are not strong enough for the task you wish to run. To achieve this, you will need to add the following two parameters to your App’s Configuration Management tab: - -- **ansible\_become\_user** - the user with the stronger permissions (probably a root user) - -- **ansible\_become\_pass** - the password to that user - - -For example: - -![Discovery Dialog](/Images/Devguide-configuration-management/Ansible-Playbook-Examples_5.png) - -And modify the site.yml file to get the relevant VM’s user and password from these parameters for each task: - -```javascript ---- -- hosts: all - tasks: - - name: Get sudoers file content - become: yes - become_method: su - command: cat /etc/sudoers - register: cmd_var - - - name: Print output - debug: msg= "{{ cmd_var.stdout }}" -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/configure-es-for-ansible.md b/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/configure-es-for-ansible.md deleted file mode 100644 index f44957b0bd..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/configure-es-for-ansible.md +++ /dev/null @@ -1,128 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Configure Execution Server for Ansible - -The first thing you need to do is set up an Execution Server that can execute Ansible configuration management. For this you will need a Linux Execution Server with the following utilities and configurations: - -- Execution Server installed on Linux machine, with the ansible attribute enabled. See [Linux Execution Server Installation and Configuration](../../../install-configure/linux-virtual-appliance/). -- Python 3.7 (Python 3.9.x is provided out of the box with the **Linux Execution Server** virtual appliance or script) -- Ansible 2.9.27 -- pywinrm 0.4.2 -- CentOS sshpass - -## Indicate Execution Servers that run Ansible - -This section explains how to indicate that the Execution Server installation has Ansible installed and therefore can support Ansible operations on Apps. - -:::note Notes -- If the Execution Server VM does not have an internet connection, make sure the OfflinePackageRepository zip file is extracted to the local PyPi Server repository. For details, see [Add the out-of-the-box dependencies package to the local PyPi Server repository](../../../admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/configuring-cloudshell-to-execute-python-commands-in-offline-mode.md#add-the-out-of-the-box-dependencies-package-to-the-local-pypi-server-repository). -- Quali Server must be running when configuring the Execution Server. -::: - -**To configure an Execution Server using CloudShell Portal:** - -1. In the Execution Server machine, log in to CloudShell Portal as administrator. -2. In the **Manage** dashboard, click **Execution Servers** and then select **Servers**. -3. In the **Servers** page, click the Execution Server's name. - - The **Attributes** window pops up. - - ![](/Images/Admin-Guide/Inventory-Operations/AnsibleAttributesPane.png) - -4. Select the **Supports Ansible** check box to use this Execution Server for Ansible configuration management. -5. If you have several Execution Servers that support Ansible but want to use this one, see the following section: - - This is recommended for geographically distributed deployments where you want a local Execution Server to perform operations on cloud providers that are physically nearest that Execution Server. For more information, see [Managing Public Cloud Apps in Domains](../../../admin/supported-cloud-providers-in-cloudshell/public-cloud-provider-support-in-cloudshell/managing-public-cloud-apps-in-domains.md) or [Managing Private Cloud Apps in Domains](../../../admin/supported-cloud-providers-in-cloudshell/private-cloud-provider-support-in-cloudshell/managing-private-cloud-apps-in-domains.md). - - **To set a specific Execution Server for Ansible configuration management:** - - 1. Select the attribute and specify a value. - 2. Specify the same value on the **Execution Server Selector** attribute in the cloud provider resource and/or in the **Resource Manager Client \> Configuration Services \> Ansible Configuration** service model. - - By default, CloudShell will use the Execution Server defined in the cloud provider resource. If it is not available, CloudShell will use the Execution Server defined in the **Ansible Configuration** model. Execution Servers specified on the deployed App shell/resource are not used for configuration management. - :::note - You can also configure the designated Ansible Execution Server to perform additional operations, such as running shells or commands. - ::: -6. Click **Done**. - -**To configure an Execution Server via command-line:** - -1. In the Execution Server machine, run command-line as administrator. -2. Navigate to the `/root/ExecutionServer` folder (or `opt/ExecutionServer` for Linux machines on Azure or AWS). -3. Run the following command with your details: - - ```python - mono QsExecutionServerConsoleConfig.exe /s:localhost /u:admin /p:admin /esn:my_es /ansible /a:"{'Execution Server Selector':'CloudShell domain'}" *** - ``` - - | Attribute | Description | - | --- | --- | - | /s | Quali Server IP address or hostname | - | /u | CloudShell admin to connect to CloudShell server | - | /p | CloudShell admin's password | - | /esn | Execution Server name to register with CloudShell | - | /ansible | Parameter indicating to Ansible configuration management that this Execution Server supports Ansible operations | - | /a | Additional attributes to set on the Execution Server. For example, passing to that option the value `{'attributeName1':'attributeValue1', 'attributeName2':'attribauteValue2'}` adds two attributes and their values.
    Note that the attributes must have the **Execution Server Selector** rule. | - - :::note Notes - - If the Execution Server VM does not have an internet connection, make sure the `OfflinePackageRepository` zip file is extracted to the local PyPi Server repository. For details, see [Add the out-of-the-box dependencies package to the local PyPi Server repository](../../../admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/configuring-cloudshell-to-execute-python-commands-in-offline-mode.md#add-the-out-of-the-box-dependencies-package-to-the-local-pypi-server-repository). - - Quali Server must be running when configuring the Execution Server. - - Depending on your flavor of Linux, you may need to escape parameter values containing special characters with single or double quotes. For example: `"admin1234!"` - ::: - - -## Perform additional configurations on the Execution Server machine - -To run Ansible configuration management on this Execution Server, several additional configurations are needed. - -**To configure the Execution Server to run Ansible:** - -1. Install Ansible as globally available command line utility. - - ```javascript - python3 -m pip install ansible - ``` - - :::note To install in an offline environment: - 1. Download the offline dependencies from [here](https://help-archive.quali.com/help%20versions/attachments/PY39-linux-ansible-reqs-2.14.0.zip). - 2. Place them in the Quali Server offline repository: - - `C:\Program Files (x86)\QualiSystems\CloudShell\Server\Config\Pypi Server Repository` - - 3. Run the following command: - - ```javascript - python3 -m pip install ansible --index-url=http://:8036/simple --trusted-host - ``` - - Replace \ with the IP of the machine containing the offline packages. - - **index-url** tells pip to download from local repo rather than public pypi, and **trusted-host** says you can trust this local server - ::: - -2. Verify install by running: - - ```javascript - ansible --version - ``` - - ![](../../Images/Linux2/ansible status.png) - -3. Install **pywinrm** into same python environment as global Ansible. This library is required by Ansible to connect to Windows Apps. - - ```javascript - python3 -m pip install pywinrm - ``` - -4. Install the **CentOS sshpass** module to allow password authentication to Apps. - - ```javascript - yum install sshpass - ``` - - -## Next... - -Make sure to [Enable WinRM on Windows VMs to Support Configuration Management](../../enable-winrm-on-win-vm-for-cfg-mng.md). diff --git a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/test-ansible-on-linux-es.md b/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/test-ansible-on-linux-es.md deleted file mode 100644 index 87612ce537..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/test-ansible-on-linux-es.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Test Ansible Playbooks on the Linux Execution Server - -Before running the playbook in an App, it is recommended to test it manually. To do that, follow these steps: - -1. On a Linux Execution Server machine, access the `/etc/ansible/ansible.cfg` file and uncomment the line: - - `host_key_checking = False` - - :::note Notes - - At runtime, the Ansible driver creates a local `ansible.cfg` file and adds the above key. - - In addition, this local `ansible.cfg` takes priority over all other config files. See this [Ansible documentation page](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#the-configuration-file) for details about Ansible config file hierarchies. - ::: -2. Create a folder that will be the root of your test. This folder will contain the Ansible playbook as well as any additional folders and files required by the playbook. - -3. Add an inventory file with hosts and their groups (optional) for testing. - - ![Discovery Dialog](/Images/Devguide-configuration-management/Ansible_10.png) - -4. Add one or more playbook files. - :::note - If you plan on using several playbook files in the App, make sure the main one is named *site.yml*. - ::: - ![Discovery Dialog](/Images/Devguide-configuration-management/Ansible_11_484x265.png) - -5. (Optional) Add a "roles” folder. - - ![Discovery Dialog](/Images/Devguide-configuration-management/Ansible_12_624x319.png) - -6. (Optional) Populate it with the desired roles. - - ![Discovery Dialog](/Images/Devguide-configuration-management/Ansible_13_624x319.png) - -7. Test the playbook by running `ansible-playbook –i `. For some sample playbooks, see [Ansible Playbook Examples](./ansible-playbook-examples.md). - - ![Discovery Dialog](/Images/Devguide-configuration-management/Ansible_14_624x813.png) - -8. Once you are done developing your playbook, zip the playbook files along with the roles folder, upload it to a repository, and set the URL in the App template, as explained in [Add the Playbook to an App](./add-playbook-to-app.md). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/tips-and-tricks-for-ansible-playbooks.md b/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/tips-and-tricks-for-ansible-playbooks.md deleted file mode 100644 index 1aef6ba8f7..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps/tips-and-tricks-for-ansible-playbooks.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Tips and Tricks for Ansible Playbooks - -Please take the following under consideration when developing your playbook: - -- Make sure the Execution Server can access the script’s raw URL. -- When setting the VM user’s credentials in the App, make sure you provide the credentials of a user that has the necessary permissions to successfully execute all the playbook’s tasks. -- There's no need to include a hosts file in the playbook ZIP. At runtime, the Execution Server does the following: - - 1. Creates a dedicated hosts file, listing any groups specified in the App's **Inventory Groups** field along with the App's IP. - 2. Packages the playbook ZIP with the new hosts file. - 3. Sends the playbook package to the Ansible Server. -- If the App’s VM takes a long time to fully load, you may want to adjust the maximum time for the machine to respond, by setting the **Timeout Minutes** attribute on the **Custom Script Configuration** resource model (in Resource Manager Client’s **Resource Families** explorer). -- Use the **Ansible Additional Arguments** attribute to specify more parameters that should run along with the `ansible-playbook` command (e.g. `-vvv` for easier debugging). The attribute resides in Resource Manager Client>**Resource Families** explorer>**Configuration Services**. For details about supported arguments, see the official Ansible [documentation](https://docs.ansible.com/ansible/2.4/ansible-playbook.html). -- To use an Ansible playbook on a Windows VM, make sure WinRM is configured and loaded automatically to allow the playbook to communicate with that VM. A script for this is provided in [Enable WinRM on Windows VMs to Support Configuration Management](../../enable-winrm-on-win-vm-for-cfg-mng.md). -- Error "Failed to connect to the host via ssh: Warning: Permanently added '192.168.11.12' (RSA) to the list of known hosts.": - - When you first start using Ansible, by default, it has host verification enabled. This might result in warnings about ssh verification issue. You can disable it by setting a key (in the Ansible config file) or an environment variable: [https://docs.ansible.com/ansible/latest/inventory\_guide/connection\_details.html#managing-host-key-checking](https://docs.ansible.com/ansible/latest/inventory_guide/connection_details.html#managing-host-key-checking) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/custom-script-dev-for-apps/_category_.json b/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/custom-script-dev-for-apps/_category_.json deleted file mode 100644 index 66e12fb6b0..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/custom-script-dev-for-apps/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Custom Script Development for Apps", - "position": 2 -} diff --git a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/custom-script-dev-for-apps/add-script-to-app.md b/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/custom-script-dev-for-apps/add-script-to-app.md deleted file mode 100644 index d5f7c42040..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/custom-script-dev-for-apps/add-script-to-app.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Add Your Script to an App - -Now that we have tested and debugged our script, the next step is to add it to an App template. For details, see [Adding App templates](../../../admin/cloudshell-manage-dashboard/manage-app-templates/index.md#adding-app-templates). - -1. In CloudShell Portal, open the **Manage>Apps** page. - -2. Edit or create an App. - -3. Open the **Configuration Management** tab. - -4. From the **Select Tool** drop-down list, select **Script**. - -5. Select the appropriate **Connection Method**, depending on the VM’s operating system. Select **Windows Remote Management** for Windows machines, or **SSH** for Linux. - -6. Specify the script’s **URL**. Make sure you specify the raw version of the URL (GitHub, GitLab and BitBucket are supported). - - If the selected **Connection Method** is WinRM, the script file should have a .ps1 extension. Similarly, if **SSH** is selected, the script file extension can be either .sh or .bash. - - If the URL is protected by Basic Authentication, specify the **Username** and **Password**, or **Token**. - :::important - If the URL is private (HTTPS), the VM will need to have a valid SSL certificate. To disable the certificate check, open **Resource Manager Client>Resource Families>Configuration Services** (**Ansible Configuration** or **Custom Script Configuration**) and set the **Verify Certificate** attribute to **False**. - ::: -7. To pass parameters to the script (as environment variables), click **Add Parameter** and enter each parameter’s name and value. - - You can add parameters to the App template in the following ways: - - - Provide the value as part of the App template, making it the default value for every instance of this App template - - - Specify a static value in the App in the blueprint - - - Specify a dynamic value in the App in the blueprint, linking the parameter to one of the blueprint’s Global Inputs. To do so, just enter the global input’s name in curly brackets as the parameter value, or click the "plus” button to select an available Global Input. - - - Pass a value using the API, as illustrated in [Parameters](../custom-script-dev-for-apps/index.md#parameters). This will replace any value provided in the App template or in the blueprint - - ![Discovery Dialog](/Images/Devguide-configuration-management/Config-manage-Adding-Your_4_624x444.png) - - -8. Open the **App Resource** tab, and enter the VM’s access credentials. - - ![Discovery Dialog](/Images/Devguide-configuration-management/Config-manage-Adding-Your_5_624x444.png) - -9. Click **Done**. diff --git a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/custom-script-dev-for-apps/index.md b/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/custom-script-dev-for-apps/index.md deleted file mode 100644 index f960c5b7b9..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/custom-script-dev-for-apps/index.md +++ /dev/null @@ -1,67 +0,0 @@ -# Custom Script Development for Apps - -This article will take you through the development process of a custom script for CloudShell App deployment. CloudShell supports PowerShell scripts for Windows VMs, and bash or sh scripts for Linux VMs. When developing your script, we recommend you first simulate/debug it by running it manually on a similar machine. - -## Examples - -Here are several examples of custom scripts to help you get started. If you are new to script development, feel free to test them out. - -### Hello World - -A basic script, just to make sure we’re communicating with the VM and are able to run a script. When run with an App, the output should be shown in the sandbox diagram’s **Output** window. - -```css -Windows / Linux -echo “Hello World“ -``` - -### Parameters - -A basic script that prints out the parameter defined in an App template or API call (see below). This is useful for debugging the script and making sure the parameter is received with the correct value. Note that the parameters are stored as environment variables on the App instance in the sandbox. - -```css -Windows -echo $env:P1 -Linux -echo $P1 -``` - -Specified in the App template: - -![Discovery Dialog](/Images/Devguide-configuration-management/Custom-Scripts_2_624x164.png) - -Specified in the ConfigureApps API method: - -```python -Python -from cloudshell.api.cloudshell_api import * - -session = CloudShellAPISession('localhost', 'admin', 'admin', 'Global') -session.ConfigureApps( - reservationId='dfb2df41-334e-4630-8bc6-ec846eb072d6', - appConfigurations=[AppConfiguration('LinuxVmApp_9cb2-72d6', [ConfigParam('P1', 'Hello World From Here!')])], - printOutput=True -) -``` - -:::note Notes -Since this script uses parameters defined on the App template, it will not work when run manually outside of CloudShell. For this to work, you will need to edit the Python code as follows: - -- Update the CloudShell settings passed to the `session` variable, if needed. -- Specify the ID of an active sandbox (in the `reservationId` field of the Python code). -- Replace `LinuxVmApp_9cb2-72d6` with the App’s name. -::: -### Linux privilege escalation - -If the deployed App resource is set with the credentials of a “regular” user, you may specify the root credentials in the parameters (see the Parameters example above), to use them in the script. - -```css -Linux -echo $pass | su $user –c ‘ls /root’ -or -Linux -su - $user <**Note:** The arguments are defined globally for all Apps using Ansible.
    **Important:** To configure Ansible to connect to certified hosts only (Linux VMs with a valid 'known\_hosts' key), include the following additional arguments: `--ssh-extra-args='-o StrictHostKeyChecking=yes'` | - | Execution Server Selector | Enables CloudShell administrators to indicate which Execution Server or group of Execution Servers will be used to perform configuration management operations on App VMs. This is recommended for CloudShell deployments that have different sites or domains. | - | Supports Ansible | (For Ansible) Indicates that an Execution Server has a compatible version of Ansible and can run the Ansible configuration management operations. Enabled by default. | - | Timeout Minutes | Maximum number of minutes allowed for connection to the target machine. App deployment will fail when the timeout period has passed. 20 minutes by default. | - -5. Click **Edit Rules**. - - The **Attribute Rules** dialog box is displayed. - -6. You can also specify a **Default Value** for this attribute. -7. Click **OK**. -8. Save your changes. diff --git a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/getting-started-with-cfg-mng-dev.md b/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/getting-started-with-cfg-mng-dev.md deleted file mode 100644 index 5bd33a49ed..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/getting-started-with-cfg-mng-dev.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Getting Started with Configuration Management Development - -Configuration management allows you to run scripts that install applications on the virtual machines (VMs) deployed in the sandbox or run post-deployment configuration. This configuration can be executed as part of the sandbox setup, or later on in a live sandbox. Configuration management operations can be performed using custom scripts or Ansible playbooks. Custom scripts are typically used for simple operations, like installing a program on the VM or printing some messages, while Ansible is used for more complex tasks. - -## Developing configuration management - -The flow for developing configuration management is as follows, with minor differences depending on whether you’re using a script or playbook. - -1. Write the script or playbook. - -2. Manually simulate/debug the script or playbook. - -3. Add the script or playbook to an App and deploy the App. diff --git a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/index.md b/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/index.md deleted file mode 100644 index 12dfd484c5..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/index.md +++ /dev/null @@ -1,15 +0,0 @@ -# Developing Configuration Management Scripts for Apps - -Configuration management extends CloudShell Apps by enabling the execution of custom scripts and Ansible playbooks on virtual machines (VMs) deployed in the sandbox. This configuration can be executed as part of the sandbox setup or later on in a live sandbox. - -:::note -These procedures require system administrator permissions. -::: - -## In this chapter - -- [Getting Started with Configuration Management Development](./getting-started-with-cfg-mng-dev.md) -- [Custom Script Development for Apps](./custom-script-dev-for-apps/index.md) -- [Ansible Playbook Development for Apps](../devguide/develop-config-management-scripts-for-apps/ansible-playbook-dev-for-apps) -- [Customizing Configuration Management Settings](./customize-cfg-mng-settings.md) -- [Passing Variables From the Setup Script to Configuration Management](./passing-variables-to-cfg-mng.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/passing-variables-to-cfg-mng.md b/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/passing-variables-to-cfg-mng.md deleted file mode 100644 index 56bad4cc39..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-config-management-scripts-for-apps/passing-variables-to-cfg-mng.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Passing Variables From the Setup Script to Configuration Management - -A common use case for configuration management scripts is to inject environment data during the sandbox's setup phase. This is done using a custom setup script that prepares the data and passes it to predefined or dynamically-created variables on the App's configuration management. - -For illustration purposes, the following [setup script](https://github.com/QualiSystemsLab/cloudshell-api-script-samples/tree/master/generic-orchestration-samples/setup/setup_set_user_mail_on_apps) gets the sandbox owner's email from their CloudShell user profile and passes it to a dynamically-created parameter called "USER\_MAIL" on target Apps that have an "Update Mail" attribute. - -The main files in the script are: - -- `__main__.py`: Entry point to the script. Note that the file includes an `enable_configuration=False` flag, which disables the default out-of-the-box **Configuration** step to allow our custom code to run instead. -- `configure_apps.py`: Custom orchestration function that replaces the out-of-the-box Configuration step in the sandbox's setup phase - -**To use the script:** - -1. In **Resource Manager Client > Resource Families** explorer, do the following: - 1. Create an Update Mail attribute (Boolean, default: **False**). - 2. Set the attribute on the **Generic App Family**. -2. Upload the script to CloudShell. -3. Create a blueprint and replace the out-of-the-box Setup script. -4. Add the suitable Apps to the blueprint. -5. Set the attribute to **True** in the blueprint Apps. - -## Related Topics - -- [Managing Assets](./../../admin/cloudshell-manage-dashboard/managing-automation/managing-assets.md) -- [Managing App Templates](../../admin/cloudshell-manage-dashboard/manage-app-templates/index.md) -- [Create a Blueprint](../../portal/blueprints/creating-blueprints/create-blueprint.md) -- [Configure Blueprint Orchestration](../../portal/blueprints/creating-blueprints/configure-orchestration.md) diff --git a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/_category_.json b/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/_category_.json deleted file mode 100644 index 91cd7eea80..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/_category_.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "label": "Developing Custom Cloud Provider Shells", - "position": 6, - "link": { - "slug": "devguide/develop-custom-cloud-provider-shells", - "type": "generated-index", - "description": "The Custom Cloud Provider Shell enables sandbox end users to deploy virtual applications on any on prem or public cloud provider or Kubernetes cluster. Note that we're adding cloud provider shells to Quali Repositories all the time. However, to deploy VMs on other cloud providers, or create a modified version of an existing cloud provider shell, you will need to create a shell that allows this to happen." - } -} diff --git a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/app-deployment.md b/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/app-deployment.md deleted file mode 100644 index 496897dc55..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/app-deployment.md +++ /dev/null @@ -1,658 +0,0 @@ ---- -sidebar_position: 10 ---- - -# App Deployment - -In this article, we’ll learn how to implement the App’s deployment. - -To deploy an App successfully, you need to implement the following 4 methods: - -- [Deploy method](#deploy-method) creates the App’s VM instance. -- [PowerOn method](#poweron-method) spins up the VM. -- [remote\_refresh\_ip](#remote_refresh_ip) updates the deployed App’s IP address. -- [GetVmDetails method](#getvmdetails-method) gets information about the VM itself, its operating system, specifications and networking information. - -These methods are executed in the above order during the deployment of an App in the sandbox (either automatically as part of the default sandbox setup script that runs when reserving a sandbox or manually by the user after adding an App to an active sandbox). Once the App is deployed, these methods can be run as individual commands from the deployed App’s commands pane, with the exception of the *Deploy* command which is no longer needed once the App is deployed. - -## Deploy method - -Creates the App’s VM instance. - -### Signature - -The *deploy* method accepts three inputs: *context*, *request*, and *cancellation\_context*. - -[This Github Sample](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/865f356f4aec14e170cd9e5f30b575c48f2dc865/src/driver.py) is by [QualiSystems](https://github.com/QualiSystems) - -src/driver.py [view](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/865f356f4aec14e170cd9e5f30b575c48f2dc865/src/driver.py) [raw](https://raw.githubusercontent.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/865f356f4aec14e170cd9e5f30b575c48f2dc865/src/driver.py) - -```python -def Deploy(self, context, request, cancellation_context=None): -``` - -### Inputs - -#### context - -**context:** *context* is a *ResourceCommandContext* object that contains: - -- reservation - current reservation details -- connectors – details of any visual connectors between the Cloud Provider App and other endpoints in the sandbox -- connectivity - CloudShell server connectivity data for authentication with CloudShell Automation API -- resource - resource configuration settings entered when creating the Cloud Provider resource in the **Inventory** dashboard - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -class ResourceCommandContext: - def __init__(self, connectivity, resource, reservation, connectors): - self.connectivity = connectivity # Connectivity details that can help connect to the APIs - """:type : ConnectivityContext""" - self.resource = resource # The details of the resource using the driver - """:type : ResourceContextDetails""" - self.reservation = reservation # The details of the reservation - """:type : ReservationContextDetails""" - self.connectors = connectors # The list of visual connectors and routes that are connected to the resource (the resource will be considered as the source end point) - """:type : list[Connector]""" -``` - -#### Request - -**request:** *request* is an *AppContext* object that contains: - -- Resource deployment path (in the App template’s **Deployment Paths** page) -- Deployed App configuration (in the App template’s **App Resource** page) -
    -Example: app\_request\_json for App "Ubuntu OCI 18.04" that is connected to a single subnet service... - -```javascript -{ - " ""driverRequest":" "{ - " ""actions":" "[ - " "{ - " ""actionParams":" "{ - " ""cidr":" ""10.0.1.32/28", - " ""subnetId":" ""ocid1.subnet.oc1.uk-london-1.aa...ovena", - " ""isPublic":" true", - " ""vnicName":" null", - " ""subnetServiceAttributes":" "[ - " " - ], - " ""type":" ""connectToSubnetParams"" " - }, - " ""actionId":" ""bw23c565-5aba-40wa-9fba-69287rf542cf", - " ""type":" ""connectSubnet"" " - }, - " "{ - " ""actionParams":" "{ - " ""appName":" ""Ubuntu OCI 18.04", - " ""deployment":" "{ - " - ""deploymentPath":" ""OCI Shell.OCI VM from Image", - " ""attributes":" "[ - " "{ - " ""attributeName":" ""OCI Shell.OCI VM from Image.Inbound Ports", - " ""attributeValue":" ""22", - " ""type":" ""attribute"" " - }, - " "{ - " ""attributeName":" ""OCI Shell.OCI VM from Image.Skip VNIC src or dst check", - " ""attributeValue":" ""False", - " ""type":" ""attribute"" " - }, - " "{ - " ""attributeName":" ""OCI Shell.OCI VM from Image.Autoload", - " ""attributeValue":" ""True", - " ""type":" ""attribute"" " - }, - " "{ - " ""attributeName":" ""OCI Shell.OCI VM from Image.Wait for IP", - " ""attributeValue":" ""True", - " ""type":" ""attribute"" " - }, - " "{ - " ""attributeName":" ""OCI Shell.OCI VM from Image.Image ID", - " ""attributeValue":" ""ocid1.image.oc1.uk-london-1.aausaaaagcmjzblg9wliwb2fxpr7t4nv7j4ertujgosyoctlkismlwi3cbq", - " ""type":" ""attribute"" " - }, - " "{ - " ""attributeName":" ""OCI Shell.OCI VM from Image.VM Shape", - " ""attributeValue":" ""VM.Standard2.4", - " ""type":" ""attribute"" " - }, - " "{ - " ""attributeName":" ""OCI Shell.OCI VM from Image.Add Public IP", - " ""attributeValue":" ""True", - " ""type":" ""attribute"" " - }, - " "{ - " ""attributeName":" ""OCI Shell.OCI VM from Image.Requested Private IP", - " ""attributeValue":" ""32.2.2.4;11.0.0.4;35.0.0.20", - " ""type":" ""attribute"" " - }" " - ], - " ""type":" ""deployAppDeploymentInfo"" " - }, - " ""appResource":" "{ - " ""attributes":" "[ - " "{ - " ""attributeName":" ""Password", - " ""attributeValue":" ""encrypted password here", - " ""type":" ""attribute"" " - }, - " "{ - " ""attributeName":" ""Public IP", - " ""attributeValue":" """, - " ""type":" ""attribute"" " - }, - " "{ - " ""attributeName":" ""User", - " ""attributeValue":" ""ubuntu", - " ""type":" ""attribute"" " - }" " - ], - " ""type":" ""appResourceInfo"" " - }, - " ""type":" ""deployAppParams"" " - }, - " ""actionId":" ""c1256ebf-01d9-4804-4oi9-63ad31s4s281", - " ""type":" ""deployApp"" " - }" " - ]" " - } -} -``` -
    - -#### cancellation\_context - -CloudShell supports the canceling of App command executions. - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -def __init__(self): - self.is_cancelled = False - """:type : bool""" -``` - -To allow the cancellation of a command on the Cloud Provider’s Apps, we need to: - -1. Check for cancellation before each operation. If cancelled, delete cloud objects created by operation. -2. Return the appropriate result. - -**Usage example:** - -[This Github Sample](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/865f356f4aec14e170cd9e5f30b575c48f2dc865/src/heavenly_cloud_service_wrapper.py) is by [QualiSystems](https://github.com/QualiSystems) - -src/heavenly\_cloud\_service\_wrapper.py [view](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/865f356f4aec14e170cd9e5f30b575c48f2dc865/src/heavenly_cloud_service_wrapper.py) [raw](https://raw.githubusercontent.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/865f356f4aec14e170cd9e5f30b575c48f2dc865/src/heavenly_cloud_service_wrapper.py) - -```python -if cancellation_context.is_cancelled: - # rollback what we created for current executing command then raise exception - # HeavenlyCloudService.rollback() - raise Exception('Operation cancelled') -``` - -### Output - -*DriverResponse* object that contains a list of action results. - -### Error handling - -If App deployment fails, return a "success false” action result. - -### Deploy method implementation - -The deploy method should perform the following steps: - -1. [Retrieve the cloud provider resource’s connection credentials](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/a9a14e87570fdc52d9994950e161b104c62401fb/src/driver.py#L91). - -2. [Retrieve the Deploy action](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/a9a14e87570fdc52d9994950e161b104c62401fb/src/driver.py#L92-L95). - -3. [Call the Deploy logic of the selected deployment type](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/a9a14e87570fdc52d9994950e161b104c62401fb/src/driver.py#L99-L106). - -4. *(Steps 4 - 8 are performed within the deploy logic)* [Generate a unique name for the App. For example, "My-App\_968e-a950”](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/4aa0c863da205686952e414e16a0baea954b2bfa/src/heavenly_cloud_service_wrapper.py#L22). Deployed Apps are classified as resources in CloudShell and therefore must have a unique name. - -5. [Create a VM instance using the deployment path attributes](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/a9a14e87570fdc52d9994950e161b104c62401fb/src/heavenly_cloud_service_wrapper.py#L47-L48) (the HeavenlyCloud service represents your custom cloud SDK). - -6. If VM deployment is successful: - - - [Collect VM details](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/a9a14e87570fdc52d9994950e161b104c62401fb/src/heavenly_cloud_service_wrapper.py#L78-L79) (operating system, specifications, networking information). - - Optionally, [override App resource attribute values](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/a9a14e87570fdc52d9994950e161b104c62401fb/src/heavenly_cloud_service_wrapper.py#L59-L62). For [example](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/a9a14e87570fdc52d9994950e161b104c62401fb/src/heavenly_cloud_service_wrapper.py#L51-L58), if we generate a unique password for each VM instance, we will also want to update this password in the Password attribute on the Deployed App Resource for future use (to allow the sandbox end-user to connect to the VM). - - If needed, [add additional data to the action result](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/a9a14e87570fdc52d9994950e161b104c62401fb/src/heavenly_cloud_service_wrapper.py#L84-L88). This key-value data will be available from all API resource queries. It can be useful for implementing custom logic during the lifecycle of the sandbox. [Example](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/a9a14e87570fdc52d9994950e161b104c62401fb/src/heavenly_cloud_service_wrapper.py#L245-L249). - -7. If VM deployment fails, [return a "fail” result](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/a9a14e87570fdc52d9994950e161b104c62401fb/src/heavenly_cloud_service_wrapper.py#L74-L76). - -8. [*Return DeployAppResult*](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/a9a14e87570fdc52d9994950e161b104c62401fb/src/heavenly_cloud_service_wrapper.py#L92-L99). - -9. [*Return DriverResponse*](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/a9a14e87570fdc52d9994950e161b104c62401fb/src/driver.py#L112). - - -Note that the links in the above workflow pertain to a driver of an L2 implementation. However, the only difference between L2 and L3 driver implementations is that L2 implements *ApplyConnectivityChanges* while L3 uses the *PrepareSandboxInfra* and *CleanSandboxInfra* methods. - -### DeployAppResult JSON example -
    -Example... - -```javascript -{ - " ""actionId":"aac7cc0c-a215-4aee-8fc1-f72020.1.034423", - " ""deployedAppAdditionalData":{ - - }, - " ""deployedAppAddress":"192.168.0.5", - " ""deployedAppAttributes":[ - " "{ - " ""attributeName":"Password", - " ""attributeValue":"123456"" " - }, - " "{ - " ""attributeName":"User", - " ""attributeValue":"super user"" " - }" " - ], - " ""errorMessage":"", - " ""infoMessage":"", - " ""success":true, - " ""type":"DeployApp", - " ""vmDetailsData":{ - " ""appName":"", - " ""errorMessage":"", - " ""vmInstanceData":[ - " "{ - " ""hidden":false, - " ""key":"Cloud Name", - " ""value":"white"" " - }, - " "{ - " ""hidden":false, - " ""key":"Cloud Index", - " ""value":"0"" " - }, - " "{ - " ""hidden":false, - " ""key":"Cloud Size", - " ""value":"not so big"" " - }, - " "{ - " ""hidden":false, - " ""key":"Instance Name", - " ""value":"angel vm__ca11f5"" " - }, - " "{ - " ""hidden":true, - " ""key":"Hidden stuff", - " ""value":"something not for UI"" " - }" " - ], - " ""vmNetworkData":[ - " "{ - " ""interfaceId":0, - " ""isPredefined":false, - " ""isPrimary":true, - " ""networkData":[ - " "{ - " ""hidden":false, - " ""key":"MaxSpeed", - " ""value":"1KB"" " - }, - " "{ - " ""hidden":false, - " ""key":"Network Type", - " ""value":"Ethernet"" " - }" " - ], - " ""networkId":0, - " ""privateIpAddress":"10.0.0.0", - " ""publicIpAddress":"8.8.8.0"" " - }, - " "{ - " ""interfaceId":1, - " ""isPredefined":false, - " ""isPrimary":false, - " ""networkData":[ - " "{ - " ""hidden":false, - " ""key":"MaxSpeed", - " ""value":"1KB"" " - }, - " "{ - " ""hidden":false, - " ""key":"Network Type", - " ""value":"Ethernet"" " - }" " - ], - " ""networkId":1, - " ""privateIpAddress":"10.0.0.1", - " ""publicIpAddress":"8.8.8.1"" " - }" " - ]" " - }, - " ""vmName":"angel vm__ca11f5", - " ""vmUuid":"027ad770-9ecb-4936-a7df-aeaf526dfc34" -} -``` -
    - -### DeployAppResult properties - -| Name | Type | Description | -| --- | --- | --- | -| actionId | string | (Mandatory) The action GUID as received (deploy\_app\_action.actionId) result must include the action id it results for, so server can match result to action. | -| deployedAppAddress | string | (Mandatory) The primary ip address of the VM instance. This value will be set as the deployed App’s resource address in CloudShell. | -| errorMessage | string | (Optional) Error message to be displayed to the sandbox end-user if VM deployment fails. | -| infoMessage | string | (Optional) Info message to be displayed to the sandbox end-user if VM deployment succeeds. | -| success | bool | (Mandatory) | -| type | string | (Read only) *DeployApp* object type. It is automatically set in *DeployAppResult* object type (in cloudshell-cp-core). | -| vmName | string | Unique name of the resource in CloudShell. | -| vmUuid | string | Unique resource id. Populate *vmUuid* with the unique id of the resource in your custom cloud provider. Cloudshell does not use this id, but will keep it for other method calls. | -| deployedAppAdditionalData | dictionary | Container used to persist custom data in resource, similar to AWS Tags. Included in all resource API query results. For [example](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ac94224fd2368aaa9b589bcdfd30e449a53c90ce/src/heavenly_cloud_service_wrapper.py#L209-L213), reading the custom data and returning it in the VM Details. | -| deployedAppAttributes | array | Contains data describing the deployed app attributes, and are displayed in the App’s Attributes pane in the sandbox. It should be used to change default attribute values on the deployed App resource. For example User & Password attributes exist as part of the default deployed App model. If your custom cloud provider generates a password in runtime for the VM, you should update the *deployedAppAttributes* property accordingly. | -| vmDetailsData | object | Contains vmNetworkData and vmInstanceData. Displayed in the App’s VM Details pane. For details about the return data, see the [GetVmDetails method](#getvmdetails-method)’s Return value section below. | - -## PowerOn method - -The *PowerOn* method spins up the VM. It is run automatically when reserving the sandbox, as part of CloudShell’s default sandbox setup script, and can also be run manually by the sandbox end-user from the deployed App’s commands pane. During *PowerOn*, the VM’s IP address and a green live status icon are displayed on the App in sandbox. - -You don’t have to implement this method if the *deploy* method has been configured to spin up the VM. If *PowerOn* does not fail, CloudShell will set resource state to "online” once the VM is up. - -### Signature - -```python -def PowerOn(self, context, ports) -``` - -### Inputs - -#### context - -**context:** *context* is a [ResourceRemoteCommandContext](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py#L171-L180) object that contains: - -- connectivity - CloudShell server connectivity data for authentication with CloudShell Automation API -- resource - resource configuration settings entered by the user when creating the Cloud Provider resource in the **Inventory** dashboard -- remote\_reservation – reservation details -- remote\_endpoints- will contain a single [ResourceContextDetails](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py#L38-L64) object which provides data for the operation. - -#### Ports - -Legacy argument. Obsolete for custom cloud providers. - -### PowerOn method implementation - -The *PowerOn* method should perform the following steps: - -1. Retrieve the cloud provider resource’s connection credentials. - -2. Convert the *deployed\_app\_json* context from string to object. - - The json contains information about the CloudShell server, the deployed App and reservation. - - For details, copy the json contents into your preferred JSON editor. For example: - - ![PowerOn JSON](/Images/Devguide-cloud-providers/App-Deployment.png) - -3. Power on the deployed App resource. - - -### PowerOn implementation example - -[This Github Sample](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ea88bab874c42d69508ba5b2542e867c5b375d5f/src/driver.py) is by [QualiSystems](https://github.com/QualiSystems) - -src/driver.py [view](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ea88bab874c42d69508ba5b2542e867c5b375d5f/src/driver.py) [raw](https://raw.githubusercontent.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/ea88bab874c42d69508ba5b2542e867c5b375d5f/src/driver.py) - -```python -def PowerOn(self, context, ports): - """ - Will power on the compute resource - :param ResourceRemoteCommandContext context: - :param ports: - """ - with LoggingSessionContext(context) as logger, ErrorHandlingContext(logger): - self._log(logger, 'power_on_context', context) - self._log(logger, 'power_on_ports', ports) - cloud_provider_resource = L2HeavenlyCloudShell.create_from_context(context) - resource_ep = context.remote_endpoints[0] - deployed_app_dict = json.loads(resource_ep.app_context.deployed_app_json) - vm_uid = deployed_app_dict['vmdetails']['uid'] - HeavenlyCloudServiceWrapper.power_on(cloud_provider_resource,vm_uid) -``` - -### Return value - -None - -### Error handling - -In case of an error, the command should raise an exception. - -## remote\_refresh\_ip - -The *remote\_refresh\_ip* method retrieves the VM’s updated IP address from the cloud provider and sets it on the deployed App resource. The IP of the main network interface also needs to be retrieved from the cloud provider. Both private and public IPs are retrieved, as appropriate. - -*remote\_refresh\_ip* is run automatically during the sandbox’s setup, after the VM is created and connected to networks, and can also be run manually by the sandbox end-user by running the **Refresh IP** command in the sandbox. - -**Note:** This method is mandatory. However, you can choose to disable the call to this method during setup using the **Wait for IP** attribute. For details, see [Controlling App Deployment Orchestration](./controlling-app-deployment-orch.md). - -### Signature - -```python -def remote_refresh_ip(self, context, ports, cancellation_context): -``` - -### Inputs - -#### context - -**context:** *context* is a [ResourceRemoteCommandContext](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py#L171-L180) object that contains: - -- connectivity - CloudShell server connectivity data for authentication with CloudShell Automation API -- resource - resource configuration settings entered when creating the Cloud Provider resource in the *Inventory* dashboard -- remote\_reservation – reservation details -- remote\_endpoints - will contain a single [ResourceContextDetails](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py#L38-L64) object which provides data for the operation. - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -def __init__(self, connectivity, resource, remote_reservation, remote_endpoints): - self.connectivity = connectivity # Connectivity details that can help connect to the APIs - """:type : ConnectivityContext""" - self.resource = resource # The details of the resource using the driver - """:type : ResourceContextDetails""" - self.remote_reservation = remote_reservation # The details of the remote reservation - """:type : ReservationContextDetails""" - self.remote_endpoints = remote_endpoints - """:type : list[ResourceContextDetails]""" -``` - -#### Ports - -Legacy argument. Obsolete for custom cloud providers. - -#### Cancellation context - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -def __init__(self): - self.is_cancelled = False - """:type : bool""" -``` - -### Return value - -None. - -Unlike other methods that update data using the result, *remote\_refresh\_ip* updates the deployed App resource with the IP by calling *cloudshell-automation-api*. However, if you implemented a return output, make sure to convert the *remote\_refresh\_ip* object to a string and pass the value to the "IP” attribute on the deployed App. - -### Error handling - -If the operation fails, the command should raise an exception. - -### remote\_refresh\_ip method implementation - -This method should perform the following steps: - -1. [Retrieve the Cloud Provider resource’s connection credentials](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ede6f78b4d4a78ae61b628696f6903d684e2224b/src/driver.py#L200). - -2. [Convert the deployed\_app\_json context from string to object](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ede6f78b4d4a78ae61b628696f6903d684e2224b/src/driver.py#L201). - -3. [Retrieve previously known private/public IPs (if there are any), VM instance id](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ede6f78b4d4a78ae61b628696f6903d684e2224b/src/driver.py#L202-L212). - -4. [Verify that the deployed App’s private IP is the same as the ip in the cloud provider](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ede6f78b4d4a78ae61b628696f6903d684e2224b/src/heavenly_cloud_service_wrapper.py#L294). If it’s different, update the deployed App ip with the IP on the cloud provider. - - - If the IPs are different, [update the deployed App IP with the IP on the cloud provider by calling *UpdateResourceAddress*](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ede6f78b4d4a78ae61b628696f6903d684e2224b/src/heavenly_cloud_service_wrapper.py#L294-L295). - - - If the operation fails, display an error to the sandbox end-user. - - -5. If needed, verify that the deployed App’s public IP is the same as the ip in the cloud provider. - - - If the IPs are different, [update the deployed App ip with the ip on the cloud provider by calling *SetAttributeValue* and setting the Public IP attribute](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ede6f78b4d4a78ae61b628696f6903d684e2224b/src/heavenly_cloud_service_wrapper.py#L297-L298). - - If the operation fails, display an error to the sandbox end-user. - -## GetVmDetails method - -The *GetVmDetails* method gets information about the App’s VM, operating system, specifications and networking information. It is called by the default setup script when reserving the sandbox, after the *RefreshIp* method is called, and can also be run manually by the sandbox end-user on deployed Apps from the App’s **VM Details** pane. - -**Note:** The implementation is expected to query the cloud provider for the details, but not return any cached or stored data. - -### Signature - -```python -def GetVmDetails(self, context, requests, cancellation_context): -``` - -### Inputs - -#### context - -**context:** *context* is a *ResourceCommandContext* object that contains: - -- connectivity - CloudShell server connectivity data for authentication with CloudShell Automation API - -- resource - resource configuration settings entered when creating the Cloud Provider resource in the **Inventory** dashboard - -- reservation – reservation details - -- connectors – details of any visual connectors between the Cloud Provider App and other endpoints in the sandbox - - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -class ResourceCommandContext: - def __init__(self, connectivity, resource, reservation, connectors): - self.connectivity = connectivity # Connectivity details that can help connect to the APIs - """:type : ConnectivityContext""" - self.resource = resource # The details of the resource using the driver - """:type : ResourceContextDetails""" - self.reservation = reservation # The details of the reservation - """:type : ReservationContextDetails""" - self.connectors = connectors # The list of visual connectors and routes that are connected to the resource (the resource will be considered as the source end point) - """:type : list[Connector]""" -``` - -#### Requests - -JSON string that contains a list of items containing App requests and deployed App data. This method can be called for a set of VMs. - -#### Cancellation request - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -def __init__(self): - self.is_cancelled = False - """:type : bool""" -``` - -### Return value - -*VmDetailsData* object in a serialized JSON. - -[This Github Sample](https://github.com/QualiSystems/cloudshell-cp-core/blob/d58c094d9600b5a6232da16dada1d3a408a88ac9/package/cloudshell/cp/core/models.py) is by [QualiSystems](https://github.com/QualiSystems) - -package/cloudshell/cp/core/models.py [view](https://github.com/QualiSystems/cloudshell-cp-core/blob/d58c094d9600b5a6232da16dada1d3a408a88ac9/package/cloudshell/cp/core/models.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-cp-core/d58c094d9600b5a6232da16dada1d3a408a88ac9/package/cloudshell/cp/core/models.py) - -```python -def __init__(self, vmInstanceData=None, vmNetworkData=None,appName = '',errorMessage = ''): - """ - :param vmInstanceData: [VmDetailsProperty] - :param vmNetworkData: [VmDetailsNetworkInterface] - :param appName: str - :param errorMessage: str - """ - - self.vmInstanceData = vmInstanceData if vmInstanceData else [] # type: [VmDetailsProperty] - self.vmNetworkData = vmNetworkData if vmNetworkData else [] # type: [VmDetailsNetworkInterface] - self.appName = appName - self.errorMessage = errorMessage -``` - -### vmDetailsData properties - -*vmDetailsData* is used to describe the App’s VM. All properties are optional. - -| Name | Type | Description | -| --- | --- | --- | -| appName | String | The App’s name. No need to assign it in the deploy operation. Must be assigned in *getVmDetails* method. | -| errorMessage | string | Indication message to be displayed to the sandbox end-user when getting the vmDetails. | -| vmNetworkData | array | Array of cloudshell-cp-core VmDetailsNetworkInterface object. Create a *vmNetworkData* object for each VM NIC you wish to associate with resource. See the VmDetailsNetworkInterface table below. | -| vmInstanceData | array | Array of cloudshell-cp-core’s *VmDetailsProperty*. Contains data about the VM instance attributes. It should be used to change persist values of the VM resource. For example to persist Storage and operating system data. See the VmDetailsProperty table below. | - -### VmDetailsNetworkInterface - -| Name | Type | Description | -| --- | --- | --- | -| interfaceId | String | The network interface id with which the address is associated. | -| networkId | string | The unique id of the network associated with the network interface. | -| isPrimary | bool | Determines if NIC is primary. Primary affects the default selected network in VmDetailsTab in cloudshell | -| isPredefined | bool | Determines if NIC is predefined. Predefined means that the network existed before the sandbox reservation. for example, a Static Management network that is not modeled in the blueprint. | -| networkData | array | Array of cloudshell-cp-core VmDetailsProperty. Contains data describing the NIC. Examples of network properties include Device Index and MAC Address. | -| privateIpAddress | string | NIC address. | -| publicIpAddress | string | The public ip associated with the NIC’s private ip. | - -### VmDetailsProperty - -| Name | Type | Description | -| --- | --- | --- | -| key | string | | -| value | string | | -| hidden | bool | Determines if the property is displayed to the sandbox end-user. | - -### GetVmDetails method implementation - -This method should perform the following steps: - -1. [Retrieve cloud provider resource connection credentials](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ede6f78b4d4a78ae61b628696f6903d684e2224b/src/driver.py#L177). - -2. [Convert the JSON string to object](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ede6f78b4d4a78ae61b628696f6903d684e2224b/src/heavenly_cloud_service_wrapper.py#L228) - -3. For each request, do the following: - - - [Retrieve identifiers](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/d17640899a06fb69e61ac678d620301d76dfd3cb/src/heavenly_cloud_service_wrapper.py#L237-L239). - - - [Query the cloud provider for the VM’s configuration and networks](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/d17640899a06fb69e61ac678d620301d76dfd3cb/src/heavenly_cloud_service_wrapper.py#L241). - - - [Populate vmInstanceData with the data (key-value) you wish to persist on the VM resource](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/d17640899a06fb69e61ac678d620301d76dfd3cb/src/heavenly_cloud_service_wrapper.py#L242). For example to persist the VM’s Storage & operating system data. - - - [Create *vmNetworkData*](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/d17640899a06fb69e61ac678d620301d76dfd3cb/src/heavenly_cloud_service_wrapper.py#L243). [*vmNetworkData*](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/d17640899a06fb69e61ac678d620301d76dfd3cb/src/heavenly_cloud_service_wrapper.py#L194-L215) is a list of *VmDetailsNetworkInterface*, one for each VM NIC you wish to associate with the resource. - - - [Collect as VmDetailsData result](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/d17640899a06fb69e61ac678d620301d76dfd3cb/src/heavenly_cloud_service_wrapper.py#L251-L252). - - -4. [Convert to JSON and return the result](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ede6f78b4d4a78ae61b628696f6903d684e2224b/src/driver.py#L178-L180). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/configure-the-deployment-paths.md b/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/configure-the-deployment-paths.md deleted file mode 100644 index 9f4932e0ac..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/configure-the-deployment-paths.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Configuring Deployment Paths - -In this article, we’ll learn how to set up the App’s deployment paths. - -The shell’s deployment paths are defined in the shell project’s **Deployments** folder. The folder includes a **deployment\-path.yaml** file, which represents a single deployment path. You can create multiple deployment paths for your shell by creating additional copies of the file and modifying their settings. - -Note that since Cloud Provider is a 2nd Gen shell, the deployment paths are not available in Resource Manager Client’s **Resource Families** explorer. - -## Setting up the deployment type and image - -Let’s start by configuring a new deployment path. - -1. In the **Deployments** folder, rename the **deployment\-path.yaml** to the name of the deployment option. For example, "my-deployment\-path.yaml”. - -2. Open the yaml and locate the following line: - - `vendor.resource.MyDeploymentPath:` - -3. Replace "MyDeploymentPath” with the new display name of the deployment path (spaces are supported). For example: "My Test Path”. - - `vendor.resource.My Test Path:` - -4. Install the shell on CloudShell and in the **Manage>Apps** page, create an App template. You should be able to see the new deployment option in the **Select Deployment Type** area: - - ![Resource information](/Images/Devguide-cloud-providers/Configuring-Deployment-Paths_624x380.png) - - -We can also change the icon of the deployment path by placing the new image file in the **Deployments** folder and replacing **shell-icon.png** in the yaml's `artifacts:` section with the new file name. - -For example, setting image file "my-icon.png”: - -```css -artifacts: - icon: - file: my-icon.png - type: tosca.artifacts.File -``` - -## Adding attributes - -Next, add the required attributes. - -:::note Notes -- You cannot modify an attribute's type and name, nor any attributes that are associated with the shell’s family as this will affect other shells that use this family. -- CloudShell allows upgrading shells with old/deprecated attributes. For details, see [Overriding Old/Deprecated Shell Attributes](../developing-shells/override-old-shell-attributes.md). -::: -Place the cursor at the end of the `derived_from:` line and press the **\[Enter\]** key. Type "properties:” and press **\[Enter\]** again. Press the **\[Tab\]** key and add the attribute. ***To make the attribute visible to the user in CloudShell, make sure to include the "tags: \[user\_input\]” line.*** For example, adding a string attribute called "My attribute”: - -```css -node_types: - - vendor.resource.My Test Path: - derived_from: cloudshell.nodes.CustomDeploymentOption - properties: - My attribute: - type: string - tags: [user_input] # supported types are: string, integer, float, boolean, cloudshell.datatypes.Password -``` - -The deployment path should look something like this: - -![Resource information](/Images/Devguide-cloud-providers/Configuring-Deployment-Paths_1_624x444.png) - -Same as with attributes in the **shell-definition.yaml**, you can also specify additional details, like default value, description and possible values (`constraints` property). For example: - -```css -My attribute: - type: string - default: value 1 - description: "This is my my attribute." - constraints: value 1, value 2, value 3 - tags: [user_input] -``` - -## Setting attributes as read only in the blueprint - -In some cases, you may want a specific deployment attribute to be unavailable for editing from the blueprint, possibly because it defines critical VM properties, like the image ID. If this is the case, you can set the attribute to only be editable by the admin in the App template. To do so, add the `editable_only_in_app_template` rule to the attribute. For example: - -```css -My attribute: - type: string - default: value 1 - description: "This is my attribute." - constraints: value 1, value 2, value 3 - tags: [user_input, editable_only_in_app_template] -``` - -Note that the `editable_only_in_app_template` rule only blocks admins from editing the attribute value in the blueprint but not in the sandbox, where the attribute is available for editing by design. Regular users cannot edit the attribute in blueprints and sandboxes. - -The attribute will be read only in the blueprint. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/controlling-app-deployment-orch.md b/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/controlling-app-deployment-orch.md deleted file mode 100644 index 3221c7509a..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/controlling-app-deployment-orch.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -sidebar_position: 7 ---- - -# Controlling App Deployment Orchestration - -In this article, we’ll learn how to customize the App’s behavior during the sandbox’s out-of-the-box Setup process. This article does not apply to Teardown, which by design powers off and deletes the App VMs from the cloud provider. - -Customizing the App’s orchestration is done through the use of attributes, which are included with the App. - -- **Auto Power On** powers on the VM at setup. Note that this attributes will affect the live status icon, so setting "Auto Power On = False” will result in the App not being powered on in the sandbox, and the App will have an offline live status icon. - -- **Autoload** discovers the deployed App. This includes attribute values and the VM’s structure, if the VM represents a virtual device that has a resource structure like blades and ports. For example, vRouters and vSwitches. - -- **Wait for IP** determines if CloudShell will refresh the VM’s IP after it is powered on. The decision depends on the cloud provider’s deployment behavior. In other words, does the cloud provider refresh the IP after the VM is powered on (for example VMware vCenter), or is the IP immediately available once the VM is created (like on AWS EC2). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/create-cp-shell.md b/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/create-cp-shell.md deleted file mode 100644 index aee2e08511..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/create-cp-shell.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Creating the Cloud Provider Shell - -Before you start, make sure to set up your machine for shell development and implementations, as explained in [Getting Started with Cloud Provider Development](./getting-started-with-cp-dev.md). - -## Creating the cloud provider shell - -The first step is to create the Cloud Provider shell. As with other shells, this is done using the shellfoundry command-line tool to create and install the shell on CloudShell. - -Since the Cloud Provider shell only works with CloudShell 9.0 and above, make sure to associate shellfoundry with a CloudShell 9.0 (or later) installation by running the `shellfoundry config` command in command-line. For example, associating shellfoundry to CloudShell Server 192.168.85.13: - -`shellfoundry config host 192.168.85.13` - -Navigate to the folder that will contain the Cloud Provider shell and create the shell. For example, creating a shell called CLPShell: - -`shellfoundry new clp-shell --template gen2/cloud-provider` - -The shell is created in the folder. - -Note that the shell project comprises the same files and folders as any other shell, with one exception, the Cloud Provider shell also includes a **Deployments** folder, which contains the deployment paths for the Cloud Provider’s App templates. More on this in [Configuring Deployment Paths](./configure-the-deployment-paths.md). For details about the shell project structure, see [The Shell Project Guide](../developing-shells/the-shell-project-guide.md). - -Let’s make sure the shell was imported into CloudShell. In command-line, navigate to the shell’s root folder and run: - -`shellfoundry install` - -In CloudShell Portal, open the **Manage>Shells** page to see the Cloud Provider shell. - -## Setting the shell’s metadata and image - -Now that we have created the Cloud Provider, we need to set its general details, including the Cloud Provider’s author, version and image. - -- **template\_name** is the Cloud Provider name that is displayed to the CloudShell administrator in CloudShell Portal’s Shells management page. - -- **template\_author** is the Cloud Provider developer’s name. By default, the template author is the author defined in the shellfoundry config command. - -- **template\_version** defines the version number of the Cloud Provider. When extending Cloud Providers, make sure you update the version number. It is also best practice to version any code/project you write according to semantic versioning, to avoid breaking changes. This also allows us to better support customers that will encounter issues with their Cloud Providers. - -- **template\_icon**: The Cloud Provider includes a default image. This image is displayed on the Cloud Provider’s resources in CloudShell Portal, and resides in the Cloud Provider shell’s root folder. To change the image, simply replace the image in the file. - - -Install the Cloud Provider shell again. This will replace the old version of the shell with the new one. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/extend-the-shell-data-model.md b/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/extend-the-shell-data-model.md deleted file mode 100644 index 8c9a04dc90..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/extend-the-shell-data-model.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Extending the Shell's Data Model - -In this article, we will learn how to add attributes to our shell. For information about modifying or deleting attributes from the shell, scroll down to the bottom of this article. - -Attributes can be added to the cloud provider shell or to the deployment path on the App template. Attributes on the shell are for general authentication/authorization purposes and for setting general configurations for the cloud provider integration, while attributes on the deployment path are typically settings that apply to the App’s VM. For example, Region applies to the cloud provider shell and Image ID applies to the deployment path. We will cover deployment path attributes in the next article. - -CloudShell allows upgrading shells with old/deprecated attributes. For details, see [Overriding Old/Deprecated Shell Attributes](../developing-shells/override-old-shell-attributes.md). - -## Adding an attribute to the shell - -Adding attributes to the shell is done in the shell’s **shell-definition.yaml** file. - -Let’s start by adding the **VLAN Type** attribute from the standard. Attributes that are included on the shell’s standard, like this attribute, need to be added to the `capabilities` section, under `properties`: - -```css -node_types: - vendor.resource.ClpShell: - derived_from: cloudshell.nodes.CustomCloudProvider - capabilities: - concurrent_execution: - type: cloudshell.capabilities.SupportConcurrentCommands - auto_discovery_capability: - type: cloudshell.capabilities.AutoDiscovery - properties: - VLAN Type: - type: string # supported types are: string, integer, float, boolean, cloudshell.datatypes.Password -``` - -Let’s see how it looks on CloudShell. Install the shell: - -`shellfoundry install` - -Log in to CloudShell Portal, and open the required domain to enable the Apps based on this cloud provider resource to be usable in this domain. In the **Inventory** dashboard, create a resource from the shell. - -The attribute is displayed in the resource’s **Validation & Discovery** page: - -![Resource information](/Images/Devguide-cloud-providers/Extending-the-Shell-s-Data_624x427.png) - -Note that since the **VLAN Type** attribute is defined on the family, the attribute’s settings (possible values in this case) are inherited from the standard itself. The attribute’s name and type are required, but you can also set the attribute’s default value, description, and rules (`tags` property). For example: - -```css -properties: - VLAN Type: - type: string - default: VLAN - description: "Select the VLAN type to use - VLAN or VXLAN" - tags: [setting, configuration] # supported tags are: configuration, setting, search_filter, abstract_filter, include_in_insight, readonly_to_users, display_in_diagram, connection_attribute, read_only -``` - -However, if the attribute is not included in the shell’s family, you will need to set it both in the `properties:` section, and in the `capabilities:` section’s `properties`. We’ll add an attribute called "my discovery attribute”. - -First we’ll add it to the `capabilities` section: - -```css -node_types: - vendor.resource.ClpShell: - derived_from: cloudshell.nodes.CustomCloudProvider - capabilities: - concurrent_execution: - type: cloudshell.capabilities.SupportConcurrentCommands - auto_discovery_capability: - type: cloudshell.capabilities.AutoDiscovery - properties: - my discovery attribute: - type: string -``` - -And then we’ll add it to the `properties:` section as well (note that this section is missing, so you’ll need to add it directly under the `derived_from:` line: - -```css -node_types: - vendor.resource.MyCustomClp1: - derived_from: cloudshell.nodes.CustomCloudProvider - properties: - my discovery attribute: - type: string -``` - -Install the shell and return to CloudShell Portal, in the **Inventory** dashboard, click the resource’s more actions button and select **Discover**: - -![Resource information](/Images/Devguide-cloud-providers/Extending-the-Shell-s-Data_1_624x274.png) - -The resource’s **Validation & Discovery** page is displayed, showing the new discovery attribute we created. - -![Resource information](/Images/Devguide-cloud-providers/Extending-the-Shell-s-Data_2_624x427.png) - -You can also set additional settings. Since this attribute is not included in the family, you can also set possible values (`constraints` property). - -For example: - -```css -properties: - my discovery attribute: - type: string - default: value 3 - description: "This is my discovery attribute." - constraints: [value 1, value 2, value 3] - tags: [setting, configuration] -``` - -## Modifying an attribute on a shell - -You cannot modify an attribute's **type** and **name**, nor any attributes that are associated with the shell’s family as this will affect other shells that use this family. To find the attributes defined in the shell’s standard, see the [documentation page](https://github.com/QualiSystems/cloudshell-standards/tree/master/Documentation) of your shell’s standard. - -## Deleting an attribute from a shell - -Deleting any of the shell’s default attributes (those that come with the standard) is not supported. It is also not possible to customize a 2nd Gen shell’s data model (families and models) and its structure, which is as defined in the Cloud Provider Shell Standard. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/getting-started-with-cp-dev.md b/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/getting-started-with-cp-dev.md deleted file mode 100644 index 0fc8a2a777..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/getting-started-with-cp-dev.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Getting Started with Cloud Provider Development - -In this chapter, we’ll learn how to create a Cloud Provider shell. The goal is to demonstrate the end-to-end cycle, from generating a new shell project to implementing the cloud provider interface and automation processes, as well as testing the shell in CloudShell. - -## What is a Cloud Provider shell? - -The Cloud Provider shell standard is a project used to define a new cloud provider in CloudShell. The Cloud Provider shell is used to extend the system, allowing deployment of applications to an additional L2 or L3 cloud. The Cloud Provider Standard may also be used to implement deployment of applications as part of deployment containers. - -A Cloud Provider shell may include more than one deployment type, allowing a variety of options to base the virtual instance on (for example, selecting the image from the marketplace or loading a custom one). - -## How is a Cloud Provider shell created? - -The basic creation and implementation process is as follows: - -1. Create a new Cloud Provider shell. - -2. Set up the Cloud Provider interface. In other words, implement the cloud provider driver that will be called by the server when interaction with the cloud provider is needed. - -3. If the shell requires the use of Python dependencies, which aren’t available in the public PyPi repository, add them to the local PyPi Server repository. See [PyPi Server - Managing Python Shell and Script Dependencies](../../admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/pypi-server-managing-python-shell-and-script-dependencies.md). - -4. Debug the shell. - -5. Install the shell on CloudShell. - -6. In CloudShell, create a resource based on the new shell and make sure it works. - - -Before developing your shell, please watch the following video to determine whether you need to create a new shell or customize an existing one: - - - -## Supported versions - CloudShell v9.0 and up - -As of version 9.0, CloudShell supports the ability to define custom cloud providers (using the `cloud_provider` shell template), as well as the out-of-the-box cloud providers VMware vCenter, AWS EC2 and Microsoft Azure. Note that the out-of-the-box cloud provider shells cannot be modified. - -## Prerequisites - -- [Get CloudShell](http://info.quali.com/cloudshell-developer-edition-download): Download the latest CloudShell SDK VM and deploy it. - -- [Python](https://www.python.org/downloads/): Make sure the appropriate Python version - 2.7.x and/or 3.x - (latest recommended) is installed on your machine. - Starting with CloudShell 9.3, CloudShell comes with out-of-the-box support for Python 3 for shells. - - Python 3 automation requires Microsoft Visual C++ Redistributable 2015 x86 and x64 to be installed on the Execution Server(s). - :::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. - ::: - -- **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. - -- **Shellfoundry: Shellfoundry** is our CLI tool that allows you to quickly and easily generate and distribute Shells. Make sure to install it on your machine. See [Installing or Updating Shellfoundry](./../developing-shells/getting-started.md) for details. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/l2-network-connectivity.md b/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/l2-network-connectivity.md deleted file mode 100644 index a3ac22eb0f..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/l2-network-connectivity.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -sidebar_position: 12 ---- - -# L2 Network Connectivity - -Now that we’ve set up the cloud provider shell’s automation, let’s learn how to implement network connectivity. CloudShell supports two networking modes, L2 for VLAN-level management and L3 for subnet-level management. This article discusses layer 2 connectivity. If you’re developing an L3 cloud provider, skip to the next article. - -## ApplyConnectivityChanges method - -To add support for L2 VLAN connectivity in a custom cloud provider, we need to implement the *ApplyConnectivityChanges* method. This method is used to connect the VMs in the sandbox to the network elements. - -The VLAN IDs are allocated by Quali Server, according to the settings of the VLAN service. These IDs are sent to the command as parameters. The implementation of this method needs to be able to support Access mode, Trunk mode, VLAN and VXLAN ranges, if supported by your cloud provider. Additionally, the implementation needs to support a range of VLAN IDs. - -The *ApplyConnectivityChanges* method can receive a list of actions of type **setVlan** or **removeVlan**. The method receives an action for each connection that needs to be created or disconnected. In case of P2P connections, the method receives two requests, one for each App. - -Like other methods, this method needs to return an action result in the response per connection. If the method’s execution fails, CloudShell needs to indicate the failure in the returned action or raise an exception. - -### Called when - -It is run automatically when reserving the sandbox, as part of CloudShell’s default sandbox setup script, and is also called in an active sandbox when a deployed App is connected or disconnected from a VLAN service or from another deployed App in a P2P connection. - -### Error handling - -If *ApplyConnectivityChanges* fails, CloudShell needs to indicate the failure in the returned action or raise an exception. - -### Signature - -```python -def ApplyConnectivityChanges(self, context, request): -``` - -### Inputs - -**context**: *context* is a *ResourceCommandContext* object that contains: - -- connectivity - CloudShell server connectivity data for authentication with CloudShell Automation API - -- resource - resource configuration settings entered when creating the Cloud Provider resource in the **Inventory** dashboard - -- reservation - current reservation details - -- connectors – details of any visual connectors between the Cloud Provider App and other endpoints in the sandbox. - - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -class ResourceCommandContext: - def __init__(self, connectivity, resource, reservation, connectors): - self.connectivity = connectivity # Connectivity details that can help connect to the APIs - """:type : ConnectivityContext""" - self.resource = resource # The details of the resource using the driver - """:type : ResourceContextDetails""" - self.reservation = reservation # The details of the reservation - """:type : ReservationContextDetails""" - self.connectors = connectors # The list of visual connectors and routes that are connected to the resource (the resource will be considered as the source end point) - """:type : list[Connector]""" -``` - -#### Handle Request - -**setVlan action request:** - -- The requested VLAN mode is indicated in a property called mode under *connectionParams*. The VLAN id array can receive many VLAN id permutations. Please refer to the online help for all support permutations. - -- If the cloud provider supports VXLAN or both VLAN and VXLAN, it is required to expose a discoverable attribute on the cloud provider’s **VLAN Type** call. The default value is **VLAN** and cloudshell permits VLAN ids in the 2-4096 range. If the **VLAN Type** attribute is set to **VXLAN**, CloudShell will permit VLAN ids to be allocated in the 2-16,000,000 range. - -- *customAttributes* is a list of special attributes for a specific action. The *setVlan* action can get a custom attribute called **vNIC Name**. When this attribute exists, we can use it in custom logic that will allocate a specific VNIC to the App’s VM. For example, the **vNIC Name** value is 1 and the cloud provider shell needs to create the VLAN connection on eth1. [Code example](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ac94224fd2368aaa9b589bcdfd30e449a53c90ce/src/heavenly_cloud_service_wrapper.py#L299). - - -**removeVlan action request:** - -- The *actionTarget* property is an object that indicates on which compute resource we need to apply the *removeVlan* action request. - -- The target resource might have more than one network interface so to determine on which interface to perform the *removeVlan* action, you need to find the *interface* attribute value. The *removeVlan* request contains an array of all connector attributes. The unique identifier of the network interface to disconnect is the value of the Interface attribute. - - -#### Method result - -**setVlan action result:** - -If the action is successful, you need to set *updatedInterface* property. The value of this property is set on an attribute on the relevant connector. Each connector in CloudShell has a source and a target component. Cloudshell automatically determines if the action result is for source or target of the connector and sets this value on the appropriate attribute - **Source Interface** or **Target Interface**. - -[Code example](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/e5a7fffbda4e661b58dc30f9e6355981dfc0bb86/src/heavenly_cloud_service_wrapper.py#L300-L302) - -**removeVlan action result:** - -You only need to indicate if the action is successful or not. - -[Code example](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/e5a7fffbda4e661b58dc30f9e6355981dfc0bb86/src/heavenly_cloud_service_wrapper.py#L340-L344) - -## ApplyConnectivityChanges method implementation - -The *ApplyConnectivityChanges* method should perform the following steps: - -1. [Retrieve cloud provider resource connection credentials](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/625d52ae7740cf3d77e529f6b0b0f8d05df472b2/src/driver.py#L229). - -2. [Retrieve actions from request](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/625d52ae7740cf3d77e529f6b0b0f8d05df472b2/src/driver.py#L230). - -3. [Handle Remove Vlan actions](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/625d52ae7740cf3d77e529f6b0b0f8d05df472b2/src/driver.py#L232-L234). - - 1. [Retrieve requested interface to disconnect](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/7bd55725d8e8dbd741270f5d082f05062c1d1fab/src/heavenly_cloud_service_wrapper.py#L371). - - 2. [Retrieve requested VM id to disconnect](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/7bd55725d8e8dbd741270f5d082f05062c1d1fab/src/heavenly_cloud_service_wrapper.py#L372). - - 3. [Disconnect](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/7bd55725d8e8dbd741270f5d082f05062c1d1fab/src/heavenly_cloud_service_wrapper.py#L373). - - 4. [Return the result](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/7bd55725d8e8dbd741270f5d082f05062c1d1fab/src/heavenly_cloud_service_wrapper.py#L375). - - -4. [Handle setVlan actions](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/7bd55725d8e8dbd741270f5d082f05062c1d1fab/src/driver.py#L236-L237). - - 1. [Retrieve VLAN parameters (VNIC name, VLAN mode, VLAN id)](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/7bd55725d8e8dbd741270f5d082f05062c1d1fab/src/heavenly_cloud_service_wrapper.py#L320-L324). - - 2. [Connect](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/e5a7fffbda4e661b58dc30f9e6355981dfc0bb86/src/heavenly_cloud_service_wrapper.py#L300). - - 3. [Add a new interface id to the result](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/7bd55725d8e8dbd741270f5d082f05062c1d1fab/src/heavenly_cloud_service_wrapper.py#L325). - - -5. [Return the appropriate result](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/625d52ae7740cf3d77e529f6b0b0f8d05df472b2/src/driver.py#L239). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/l3-network-connectivity.md b/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/l3-network-connectivity.md deleted file mode 100644 index c82046d2b2..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/l3-network-connectivity.md +++ /dev/null @@ -1,229 +0,0 @@ ---- -sidebar_position: 13 ---- - -# L3 Network Connectivity - -In this article, we’ll learn how to implement L3 network connectivity. Cloudshell recognizes a cloud provider shell as an L3 networking cloud provider if the method *PrepareSandboxInfra* exists in the shell driver. If the method doesn’t exist, CloudShell considers the shell as an L2 networking shell. - -To add support for L3 subnet connectivity in a custom cloud provider, we’ll need to implement 3 methods: - -- *PrepareSandboxInfra* is used to prepare the infrastructure required for a sandbox operating with L3 connectivity. - -- *Deploy* should be extended to support *connectToSubnet* action requests. - -- *CleanupSandboxInfra* cleans any sandbox-level entities created in the cloud provider, usually entities created by the *PrepareSandboxInfra* command. This is the last command to be called in the orchestration flow. - - -## PrepareSandboxInfra method - -The *PrepareSandboxInfra* method is the 1st method to be called in the sandbox setup. It creates the required infrastructure for the sandbox. The network address space of the sandbox is allocated automatically by CloudShell and represented using CIDR notation and provided in the actions request. - -It must support these three action types: - -- **prepareCloudInfra** - - When handling this action, you need to create/allocate the requested CIDR to the sandbox in your cloud provider. This is also the place to create/allocate cloud resource that will be used by the entire sandbox. For example, an AWS shell might create an S3 bucket that will be used by the entire sandbox, and a shared Security Group, which will be attached to all AWS VM instances, to allow inbound traffic from specific QualiX and Execution Server VM instances for secure connectivity to the VMs and configuration management. - - Generally this is the 1st action you should handle before proceeding to other actions. There is always one instance of this type of action. - - -- **prepareSubnet** - - *prepareSubnet* gets one or more actions from this type. When handling this action, you need to create/allocate a subnet for each action according to the CIDR and **Subnet** service attributes in the blueprint. A subnet can be declared as public or private by the blueprint designer. A subnet is considered private if it is not accessible from outside the sandbox, and is considered public if it is possible to access the subnet from outside the sandbox. As a general best practice, it is recommended to allow outbound traffic from private subnets to elements outside of the sandbox. - - CloudShell sends a *prepareSubnet* action for each **Subnet** service in the blueprint. If there are no **Subnet** services in the blueprint, CloudShell will create a single subnet for the sandbox, by sending a *prepareSubnet* action with the default values. In a "single subnet” scenario, it is assumed that the sandbox components are all located in the same default subnet. Note that the driver still needs to create/allocate a subnet in "single subnet” mode. - - The result for this action must include a *subnetId* property. This must be an id that can be used to uniquely identify the subnet in the cloud provider. The "subnet id” will be passed as part of *connectToSubnet* actions in the *Deploy* method and should be used to identify the subnets that the App wants to connect to. - -- **createKey** - - There is always one instance of this type of action. This action type has no metadata. To handle this action, you return an ssh key that will be used by CloudShell to connect to Linux VMs in the sandbox. If you don’t want to use ssh keys, you can simply ignore this action without returning any *createKeys* action results. - - Cloudshell stores the ssh key securely and if the deployed App has an empty password attribute or no password attribute, it will try to authenticate with the VM using the value in the **Username** attribute and the ssh key when using QualiX to ssh to a deployed App. - - The *Deploy* method is responsible to create the VM with the sandbox ssh key that was generated in the *prepareSandboxInfra* method. Cloudshell does not pass the ssh key to the *Deploy* method and it’s the responsibility of the shell developer to store this ssh key in a secure place that is accessible during the *Deploy* method. An example for this implementation for an aws shell is to use an S3 bucket that is used only by the sandbox. - -:::note -*PrepareSandboxInfra* can be called multiple times in a sandbox. Setup can be called multiple times in the sandbox, and every time setup is called, the *PrepareSandboxInfra* method will be called again. So your implementation needs to support this use case and take under consideration that the cloud resource might already exist. It’s recommended to follow the "get or create” pattern when implementing this method. -::: -### Called when - -This command is called for L3 Networking type implementations in the beginning of the orchestration flow (preparation stage), even before Deploy is called. - -### Error handling - -If failure occurs, return a "success false” action result. - -### Signature - -```python -def PrepareSandboxInfra(self, context, request, cancellation_context) -``` - -### Inputs - -**context**: *context* is a *ResourceCommandContext* object that contains: - -- connectivity - CloudShell server connectivity data for authentication with CloudShell Automation API - -- resource - resource configuration settings entered when creating the Cloud Provider resource in the **Inventory** dashboard - -- reservation - current reservation details - -- connectors – details of any visual connectors between the Cloud Provider App and other endpoints in the sandbox. - - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -class ResourceCommandContext: - def __init__(self, connectivity, resource, reservation, connectors): - self.connectivity = connectivity # Connectivity details that can help connect to the APIs - """:type : ConnectivityContext""" - self.resource = resource # The details of the resource using the driver - """:type : ResourceContextDetails""" - self.reservation = reservation # The details of the reservation - """:type : ReservationContextDetails""" - self.connectors = connectors # The list of visual connectors and routes that are connected to the resource (the resource will be considered as the source end point) - """:type : list[Connector]""" -``` - -Here’s a code sample that extracts the cloud provider data from the context: - -`cloud_provider_resource = HeavenlyCloudsShell.create_from_context(context)` - -**Request** - -JSON string that contains the requested actions. - -**Cancelation context** - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -def __init__(self): - self.is_cancelled = False - """:type : bool""" -``` - -### PrepareSandboxInfra method implementation - -1. [Retrieve the cloud provider resource connection credentials](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/a9a14e87570fdc52d9994950e161b104c62401fb/src/driver.py#L91). - -2. [Retrieve requested actions (1 PrepareCloudInfra, 1 CreateKeys, >=1 PrepareSubnet)](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/6f62a52ca2a66b8f37bf4d2364c92ec8dc89c383/src/driver.py#L248-L258). - - 1. [Handle PrepareCloudInfra](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/6f62a52ca2a66b8f37bf4d2364c92ec8dc89c383/src/heavenly_cloud_service_wrapper.py#L429-L443). - - 2. [Optionally, handle CreateKeys](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/6f62a52ca2a66b8f37bf4d2364c92ec8dc89c383/src/heavenly_cloud_service_wrapper.py#L447-L456). - - 3. [Handle the PrepareSubnet action(s)](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/6f62a52ca2a66b8f37bf4d2364c92ec8dc89c383/src/heavenly_cloud_service_wrapper.py#L460-L471). - - 4. [Return the action results](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/6f62a52ca2a66b8f37bf4d2364c92ec8dc89c383/src/heavenly_cloud_service_wrapper.py#L475). - - -3. [Return the driver’s response](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/6f62a52ca2a66b8f37bf4d2364c92ec8dc89c383/src/driver.py#L260-L269). - - -## Deploy method with L3 connectivity - -When working with L3 connectivity, the subnets and shared sandbox resources are created in the *PrepareSandboxInfra* method. The *Deploy* method is executed only after *PrepareSandboxInfra* completes successfully. *Deploy* can receive 0 or more *connectToSubnet* actions in addition to the single *deployApp* action. The *connectToSubnet* actions tell the VM that we are creating the subnets that the VM should be connected to. The **subnetId** property in the *connectToSubnet* action should be used to uniquely identify the subnet in the cloud provider. - -The *connectToSubnet* action contains a special property called **vnicName**. When this property contains a value, it means that the blueprint designer specified a request from the cloud provider shell to create a connection on a specific network interface. For example, if the **vnicName** value is 1, we need to create the network interface for the relevant subnet from the action on eth1. - -**Note:** In case the shell supports ssh key authentications for linux vms it’s the responsibility of the deploy method implementation to get the ssh key created during prepareSandboxInfra. Cloudshell will not send the ssh key to the deploy method in the request. - -### L3 Deploy method implementation - -In L3, the *Deploy* method should perform the following steps: - -1. [Retrieve the cloud provider resource connection credentials](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/a9a14e87570fdc52d9994950e161b104c62401fb/src/driver.py#L91). - -2. [Retrieve the Deploy action](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/f26b3b5d92da04ecfac1238aa8334ba86a89a301/src/driver.py#L92-L95). - -3. [Retrieve CononectToSubnetActions](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/f26b3b5d92da04ecfac1238aa8334ba86a89a301/src/driver.py#L97-L98). - - 1. [Call the Deploy logic of the selected deployment type](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/f26b3b5d92da04ecfac1238aa8334ba86a89a301/src/driver.py#L100-L117). - - 1. [(Steps 4-a to -4-e are performed by the Deploy logic) Generate a unique App name](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/6f62a52ca2a66b8f37bf4d2364c92ec8dc89c383/src/heavenly_cloud_service_wrapper.py#L118). - - 2. [Create the network configuration plan to use when calling the cloud provider SDK VM instance deploy](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/f26b3b5d92da04ecfac1238aa8334ba86a89a301/src/sdk/heavenly_cloud_service.py#L105-L123). - - 3. [Create the VM instance using the deployment path attributes and network plan](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/47e55422d3ef155fc6d126ee75be5d85be909496/src/heavenly_cloud_service_wrapper.py#L136-L142). - - 4. If Deploy succeeds, do the following: - - 1. [Collect the VM’s details (operating system, specifications, networking information)](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/47e55422d3ef155fc6d126ee75be5d85be909496/src/heavenly_cloud_service_wrapper.py#L146-L147). - - 2. [Create ConnectToSubnet results](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/47e55422d3ef155fc6d126ee75be5d85be909496/src/heavenly_cloud_service_wrapper.py#L165-L169). - - 5. [Return results](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/47e55422d3ef155fc6d126ee75be5d85be909496/src/heavenly_cloud_service_wrapper.py#L173). - -5. [Return the driver’s response](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/47e55422d3ef155fc6d126ee75be5d85be909496/src/driver.py#L122). - - -## CleanupSandboxInfra - -This method is responsible for cleaning any sandbox-level entities created in the cloud provider, usually entities created in the *PrepareSandboxInfra* command. - -### Called When - -This method is the last method to be called during the sandbox’s teardown (before the sandbox is completed). - -### Error handling - -If a failure occurs, return a "success false” action result. - -### Signature - -```python -def CleanupSandboxInfra(self, context, request): -``` - -### Inputs - -**context**: *context* is a *ResourceCommandContext* object that contains: - -- connectivity - CloudShell server connectivity data for authentication with CloudShell Automation API - -- resource - resource configuration settings entered when creating the Cloud Provider resource in the **Inventory** dashboard - -- reservation - current reservation details - -- connectors – details of any visual connectors between the Cloud Provider App and other endpoints in the sandbox. - - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -class ResourceCommandContext: - def __init__(self, connectivity, resource, reservation, connectors): - self.connectivity = connectivity # Connectivity details that can help connect to the APIs - """:type : ConnectivityContext""" - self.resource = resource # The details of the resource using the driver - """:type : ResourceContextDetails""" - self.reservation = reservation # The details of the reservation - """:type : ReservationContextDetails""" - self.connectors = connectors # The list of visual connectors and routes that are connected to the resource (the resource will be considered as the source end point) - """:type : list[Connector]""" -``` - -**Request** - -JSON string contains single *CleanupSandboxInfra* action. - -### CleanupSandboxInfra method implementation - -1. [Retrieve the cloud provider resource connection credentials](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/4666a14a0634e82a01692a60a3da1314cd4d863c/src/driver.py#L284). - -2. [Retrieve the CleanupSandboxInfra action](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/4666a14a0634e82a01692a60a3da1314cd4d863c/src/driver.py#L286-L290). - - \* [Clean the sandbox-created infrastructure resources and return a success result](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/4666a14a0634e82a01692a60a3da1314cd4d863c/src/heavenly_cloud_service_wrapper.py#L477-L479). - -3. [Return result](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example/blob/4666a14a0634e82a01692a60a3da1314cd4d863c/src/driver.py#L296). \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/power-off-and-delete-vm.md b/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/power-off-and-delete-vm.md deleted file mode 100644 index 2a10eea6ae..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/power-off-and-delete-vm.md +++ /dev/null @@ -1,173 +0,0 @@ ---- -sidebar_position: 11 ---- - -# Power off and Delete VM - -In this article, we’ll learn how to implement the PowerOff and DeleteInstance commands, which shut down and delete the VM from the cloud provider, respectively. - -## PowerOff method - -The *PowerOff* method shuts down (or powers off) the VM instance. It is run automatically as part of the sandbox’s teardown, and can also be run manually by the sandbox end-user from the deployed App’s commands pane. When *PowerOff* completes, the green ‘online’ live status icon is replaced with a grey one on the App resource, indicating it is offline. - -**Note:** CloudShell sets the resource state to ‘offline’ if *PowerOff* completed successfully. - -### Signature - -```python -def PowerOff(self, context, ports) -``` - -### Inputs - -**context**: *context* is a [ResourceRemoteCommandContext](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py#L171-L180) object that contains: - -- connectivity - CloudShell server connectivity data for authentication with CloudShell Automation API - -- resource - resource configuration settings entered by the user when creating the Cloud Provider resource in the **Inventory** dashboard - -- remote\_reservation – reservation details - -- remote\_endpoints - will contain a single [ResourceContextDetails](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py#L38-L64) object which provides data for the operation. - - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -def __init__(self, connectivity, resource, remote_reservation, remote_endpoints): - self.connectivity = connectivity # Connectivity details that can help connect to the APIs - """:type : ConnectivityContext""" - self.resource = resource # The details of the resource using the driver - """:type : ResourceContextDetails""" - self.remote_reservation = remote_reservation # The details of the remote reservation - """:type : ReservationContextDetails""" - self.remote_endpoints = remote_endpoints - """:type : list[ResourceContextDetails]""" -``` - -#### Ports - -Legacy argument. Irrelevant for custom cloud providers. - -### Error handling - -If an error occurs during the *PowerOff* operation, the command should raise an exception. - -### PowerOff method implementation - -The *PowerOff* method should perform the following steps: - -1. Retrieve the cloud provider resource’s connection credentials - -2. Convert context deployed\_app\_json string to object - -3. Power off the deployed App resource - - -### PowerOff implementation example - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -def PowerOff(self, context, ports): - """ - Will power off the compute resource - :param ResourceRemoteCommandContext context: - :param ports: - """ - with LoggingSessionContext(context) as logger, ErrorHandlingContext(logger): - self._log(logger, 'power_off_context', context) - self._log(logger, 'power_off_ports', ports) - cloud_provider_resource = L2HeavenlyCloudShell.create_from_context(context) - resource_ep = context.remote_endpoints[0] - deployed_app_dict = json.loads(resource_ep.app_context.deployed_app_json) - vm_uid = deployed_app_dict['vmdetails']['uid'] - HeavenlyCloudServiceWrapper.power_off(cloud_provider_resource, vm_uid) -``` - -### Return value - -None - -## DeleteInstance method - -The *DeleteInstance* method powers off the VM, deletes the VM from the cloud provider and removes the App from the sandbox. It is run when removing the deployed App from the sandbox or during the sandbox’s teardown. - -### Signature - -def DeleteInstance(self, context, ports) - -### Inputs - -**context**: *context* is a [ResourceRemoteCommandContext](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py#L171-L180) object that contains: - -- connectivity - CloudShell server connectivity data for authentication with CloudShell Automation API - -- resource - resource configuration settings entered by the user when creating the Cloud Provider resource in the **Inventory** dashboard - -- remote\_reservation – reservation details - -- remote\_endpoints- will contain a single [ResourceContextDetails](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py#L171-L180) object which provides data for the operation. - - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -def __init__(self, connectivity, resource, remote_reservation, remote_endpoints): - self.connectivity = connectivity # Connectivity details that can help connect to the APIs - """:type : ConnectivityContext""" - self.resource = resource # The details of the resource using the driver - """:type : ResourceContextDetails""" - self.remote_reservation = remote_reservation # The details of the remote reservation - """:type : ReservationContextDetails""" - self.remote_endpoints = remote_endpoints - """:type : list[ResourceContextDetails]""" -``` - -#### Ports - -Legacy argument. Obsolete for custom cloud providers. - -### DeleteInstance method implementation - -The *DeleteInstance* method should perform the following steps: - -1. Retrieve the cloud provider resource’s connection credentials. - -2. Convert the *deployed\_app\_json* context string to object. - -3. Delete the VM instance from the cloud provider. - - -### DeleteInstance implementation example - -[This Github Sample](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ea88bab874c42d69508ba5b2542e867c5b375d5f/src/driver.py) is by [QualiSystems](https://github.com/QualiSystems) - -src/driver.py [view](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/ea88bab874c42d69508ba5b2542e867c5b375d5f/src/driver.py) [raw](https://raw.githubusercontent.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/ea88bab874c42d69508ba5b2542e867c5b375d5f/src/driver.py) - -```python -def DeleteInstance(self, context, ports): - """ - Will delete the compute resource - :param ResourceRemoteCommandContext context: - :param ports: - """ - with LoggingSessionContext(context) as logger, ErrorHandlingContext(logger): - self._log(logger, 'DeleteInstance_context', context) - self._log(logger, 'DeleteInstance_ports', ports) - cloud_provider_resource = L2HeavenlyCloudShell.create_from_context(context) - resource_ep = context.remote_endpoints[0] - deployed_app_dict = json.loads(resource_ep.app_context.deployed_app_json) - vm_uid = deployed_app_dict['vmdetails']['uid'] - HeavenlyCloudServiceWrapper.delete_instance(cloud_provider_resource, vm_uid) -``` - -### Return value - -None \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/remove-the-address-field.md b/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/remove-the-address-field.md deleted file mode 100644 index d54f1a31c6..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/remove-the-address-field.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Removing the Address Field - -For some cloud providers, like AWS EC2 and Azure, the **Address** field is irrelevant. If this is the case, you can easily remove the field from the shell by setting the **hide_address** property in the shell-definition.yaml. In the `capabilities` section, under `properties`, uncomment the property and set it to ***true***: - -```yaml -node_types: - vendor.resource.ClpShell: - derived_from: cloudshell.nodes.CustomCloudProvider - properties: - my discovery attribute: - type: string - capabilities: - concurrent_execution: - type: cloudshell.capabilities.SupportConcurrentCommands - auto_discovery_capability: - type: cloudshell.capabilities.AutoDiscovery - properties: - my discovery attribute: - type: string - VLAN Type: - type: string - enable_auto_discovery: - type: boolean - default: true - auto_discovery_description: - type: string - default: Describe the auto discovery - inventory_description: - type: string - default: Describe the resource shell template -# hide_address: -# type: string -# default: false -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/resource-discovery.md b/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/resource-discovery.md deleted file mode 100644 index 5c10d5c790..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/resource-discovery.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -sidebar_position: 9 ---- - -# Resource Discovery - -The *get\_inventory* command "discovers” the resource in CloudShell, or in other words, validates the values of the cloud provider attributes that were entered by the user. It is executed when creating the resource in CloudShell, and can be manually run later on, for example, if you change some of the resource’s attribute values. - -For example, in a vCenter cloud provider, *get\_inventory* would check the value provided in the **Default DataCenter** attribute to validate that such a datacenter exists in the vCenter Server. - -In addition, this is the place to assign values to optional attributes that were not given a value by the CloudShell admin. - -## Signature - -```python -def get_inventory(self, context) -``` - -## Inputs - -**context**: *context* is an *AutoLoadCommandContext* object that contains: - -- connectivity - CloudShell server connectivity data for authentication with CloudShell Automation API - -- resource - resource configuration settings entered by the user when creating the new resource in the **Inventory** dashboard - - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -def __init__(self, connectivity, resource): - self.connectivity = connectivity # Connectivity details that can help connect to the APIs - """:type : ConnectivityContext""" - self.resource = resource # The details of the resource using the driver - """:type : ResourceContextDetails""" -``` -:::note -The convention for specifying *context.resource.attributes* keys in the driver files(s) is: `my_shell_name.attribute_name`. -::: -## Return value - -The *AutoLoadDetails* class that represents details discovered by the *get\_inventory* function. - -[This Github Sample](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) is by [QualiSystems](https://github.com/QualiSystems) - -cloudshell/shell/core/driver\_context.py [view](https://github.com/QualiSystems/cloudshell-shell-core/blob/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) [raw](https://raw.githubusercontent.com/QualiSystems/cloudshell-shell-core/36009fdec45134ae38cb9273328b7686be66e553/cloudshell/shell/core/driver_context.py) - -```python -def __init__(self, resources, attributes): - self.resources = resources # the list of resources (root and sub) that were discovered - """:type : list[AutoLoadResource]""" - self.attributes = attributes # the list of attributes for the resources - """:type : list[AutoLoadAttribute]""" -``` - -## Error handling - -If one of the validations failed, an error indication will be displayed in CloudShell and the resource will be marked as excluded. - -## get\_inventory method implementation example - -[This Github Sample](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/865f356f4aec14e170cd9e5f30b575c48f2dc865/src/driver.py) is by [QualiSystems](https://github.com/QualiSystems) - -src/driver.py [view](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/blob/865f356f4aec14e170cd9e5f30b575c48f2dc865/src/driver.py) [raw](https://raw.githubusercontent.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example/865f356f4aec14e170cd9e5f30b575c48f2dc865/src/driver.py) - -```python -def get_inventory(self, context): - ## uncomment - if there is nothing to validate - # return AutoLoadDetails([], []) - # read from context - cloud_provider_resource = L2HeavenlyCloudShell.create_from_context(context) - with LoggingSessionContext(context) as logger, ErrorHandlingContext(logger): - self._log(logger, 'get_inventory_context_json', context) - # validating - if cloud_provider_resource.name == 'evil': - raise ValueError('evil cannot use heaven ') - if cloud_provider_resource.region == 'sun': - raise ValueError('invalid region, sorry cannot deploy instances on the sun') - # using your cloud provider sdk - if not HeavenlyCloudService.can_connect(cloud_provider_resource.user, cloud_provider_resource.password, - context.resource.address): # TODO add address to resource (gal shellfoundry team) - raise ValueError('could not connect using given credentials') - # discovering - using your prefered custom cloud service you can discover and then update values - if not cloud_provider_resource.heaven_cloud_color: - cloud_provider_resource.heaven_cloud_color = HeavenlyCloudService.get_prefered_cloud_color() - return cloud_provider_resource.create_autoload_details() -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/the-cloud-provider-interface.md b/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/the-cloud-provider-interface.md deleted file mode 100644 index 78b8faa5db..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/the-cloud-provider-interface.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -sidebar_position: 8 ---- - -# The Cloud Provider Interface - -The rest of this chapter is dedicated to implementing the cloud provider driver that will be called by the server when interaction with the cloud provider is needed. This includes setting up communication between CloudShell and the cloud provider of choice, implementing the driver commands required from the resource, such as Deploy App, Power On and Refresh IP, and setting the resource’s live status icon (for example, "online” and "offline”). - -The articles are: - -- [Resource Discovery](./resource-discovery.md) -- [App Deployment](./app-deployment.md) -- [Power off and Delete VM](./power-off-and-delete-vm.md) -- [L2 Network Connectivity](./l2-network-connectivity.md) -- [L3 Network Connectivity](./l3-network-connectivity.md) - -For illustration purposes, we will use a mock shell called HeavenlyCloud, which demonstrates the use and implementation of a custom cloud provider. We’ve created two versions of the shell, **L2HeavenlyCloudShell** for L2 clouds [(download here)](https://github.com/QualiSystems/Custom-L2-Cloud-Provider-Shell-Example) and **L3HeavenlyCloudShell** for L3 clouds [(download here)](https://github.com/QualiSystems/Custom-L3-Cloud-Provider-Shell-Example). The difference between the two is in the networking connectivity implementation. - -To see how the HeavenlyCloud cloud provider works, let’s create a resource using the HeavenlyCloud shell in CloudShell Portal. First, download the appropriate mock shell .zip file from GitHub and extract it to your computer. - -![Shell Commands](/Images/Devguide-cloud-providers/The-Cloud-Provider-Interface_624x375.png) - -Install the shell on CloudShell by running this command-line from the extracted shell project folder: - -`shellfoundry install` - -In CloudShell Portal, open the **Inventory** dashboard and create a resource from the **HeavenlyCloud** shell. - -In the **Manage>Apps** page, create a new App template. Note that two new deployment types have been added, HeavenlyCloudAngelDeployment and HeavenlyCloudManDeployment. Select a deployment type and carry on setting the App template. - -![Shell Commands](/Images/Devguide-cloud-providers/The-Cloud-Provider-Interface_1_624x380.png) - -In the **Deployment Paths** page of the dialog box, make sure to select the new HeavenlyCloud cloud provider resource you created. - -Next, let’s implement the *get\_inventory* function, which discovers and validates the resource against the cloud provider of choice. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/the-cp-shell-mode.md b/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/the-cp-shell-mode.md deleted file mode 100644 index 0e96c17506..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-custom-cloud-provider-shells/the-cp-shell-mode.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -sidebar_position: 3 ---- - -# The Cloud Provider Shell Model - -In this article, we’ll learn about the Cloud Provider shell’s model. - -The [Cloud Provider Standard](https://github.com/QualiSystems/cloudshell-standards/blob/master/Documentation/cloud_provider_standard.md) defines two elements: the Cloud Provider shell and the Deployment Type service. The Cloud Provider shell is responsible for accessing the cloud provider and executing the App’s automation commands (like deploy VM, power on, power off, refresh IP). And the deployment type service shell sets the deployment path on the App template, including the VM’s definition. The service contains the attributes of the deployment type, but has no driver since the automation commands are defined in the Cloud Provider shell’s driver. - -- The cloud provider model extension includes the attributes that control the behavior of the cloud provider as a whole. For example the region name and default values for elements created in the cloud. - -- The deployment type extension needs to include the attributes that are needed for every deployment method in this cloud. You can set these attributes to be visible in the **Deployment Paths** tab of the App template dialog box (we’ll learn how to do this later on this chapter). - - -The Cloud Provider shell is created using the gen2/cloud-provider shellfoundry template. The project folder includes a shell-definition.yaml file for the cloud provider model definition, and a skeleton of the cloud provider model. Inside the **Deployments** folder, there is a deployment-path.yaml file for the deployment type model. If more than one deployment type is needed, additional yaml files may be added to this folder. - -The association between the cloud provider and its relevant deployment types is implicit. \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/_category_.json b/versioned_docs/version-2023.3/devguide/develop-orch-scripts/_category_.json deleted file mode 100644 index 792cfa37dd..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Developing Orchestration Scripts", - "position": 3 -} diff --git a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/common-orch-script-recipes.md b/versioned_docs/version-2023.3/devguide/develop-orch-scripts/common-orch-script-recipes.md deleted file mode 100644 index 7c1d4bb89c..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/common-orch-script-recipes.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Common Orchestration Script Recipes - -In this section, we’ll provide a few handy examples of common script operations. The intention is to grow this into a good source to copy paste common code from. All of the examples are available in the [DevGuide Examples](https://github.com/QualiSystems/devguide_examples) repository under the `orchestration_scripts_examples` folder. - -## Executing commands on sandbox resources - -The following script attempts to execute a command only on resources that support it. If a resource does not support the command, the script will simply ignore it and move on to the next resource. - -[This Github Sample](https://github.com/QualiSystems/devguide_examples/blob/master/orchestration_scripts_examples/try_execute_commands/try_execute_commands.py) is by [QualiSystems](https://github.com/QualiSystems) - -orchestration\_scripts\_examples/try\_execute\_commands/try\_execute\_commands.py [view](https://github.com/QualiSystems/devguide_examples/blob/master/orchestration_scripts_examples/try_execute_commands/try_execute_commands.py) [raw](https://raw.githubusercontent.com/QualiSystems/devguide_examples/master/orchestration_scripts_examples/try_execute_commands/try_execute_commands.py) - -```python -def try_execute_command_on_resources(session, reservation_id, command_name, command_inputs=[]): - - """ - This function will try to execute a command on all app resources that support it - :param CloudShellAPISession session: CloudShell API Session - :param str reservation_id: The reservation Id to run the commands on - :param str command_name: The command to try and execute - :param list[InputNameValue] command_inputs: Inputs parameters for the command - :return: The aggregated results of the successful calls - :rtype: dict[str,str] - """ - - results = {} - - for resource in session.GetReservationDetails(reservation_id).ReservationDescription.Resources: - try: - result = session.ExecuteCommand(reservation_id, resource.Name, "Resource", command_name, command_inputs) - results[resource.Name] = result.Output - - except CloudShellAPIError as exc: - # Ignore the error if the command doesn't exist on the resource or its not assigned a driver - if exc.code not in (NO_DRIVER_ERR,DRIVER_FUNCTION_ERROR): - raise - - return results -``` - -## Configuring Apps in a Sandbox - -App configuration in a sandbox, initiated either by setup orchestration or a dedicated orchestration script, can be performed in parallel or ordered by custom logic using the **app\_configuration** methods. - -In the following example, we will configure all the ‘web servers’ Apps after configuring the ‘application server’ App. Also, to enable connection between the deployed Apps, we will pass the application server’s address to the web servers configuration: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox - - -sandbox = Sandbox() - -## configure Application server -application_server = sandbox.components.get_apps_by_name_contains('application server')[0] - -sandbox.apps_configuration.apply_apps_configurations(application_server) - -application_server_address = sandbox.components.get_apps_by_name_contains('application server')[0].deployed_app.FullAddress - -for server in web_servers: - ## set application server as app param (application_server_address is pre-configured on the app) - sandbox.apps_configuration.set_config_param(server, 'script alias', 'application_server_address', application_server_address) - -## configure web servers -sandbox.apps_configuration.apply_apps_configurations(web_servers) -``` - -Make sure to add a `requirements.txt` file that will include the *cloudshell-orch-core* package to use this example. - -Note the code in the components helper’s method to get the correct Apps from the sandbox and the usage in the App object rather than the name of the App for other methods like **apps\_configuration.set\_config\_param**. - -Configuration of a sandbox’s Apps can be streamlined by using the OOB setup logic, as explained in [Extending the OOB Setup Orchestration Scripts](./cs-oob-orch/index.md#extending-the-oob-setup-orchestration-scripts). diff --git a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/cs-oob-orch/_category_.json b/versioned_docs/version-2023.3/devguide/develop-orch-scripts/cs-oob-orch/_category_.json deleted file mode 100644 index f08eb642e2..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/cs-oob-orch/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "CloudShell's OOB Orchestration", - "position": 6 -} diff --git a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/cs-oob-orch/customize-guest-os-vcenter-command.md b/versioned_docs/version-2023.3/devguide/develop-orch-scripts/cs-oob-orch/customize-guest-os-vcenter-command.md deleted file mode 100644 index e54c817164..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/cs-oob-orch/customize-guest-os-vcenter-command.md +++ /dev/null @@ -1,115 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Customize Guest OS vCenter Command Implementation - -The **Customize Guest OS** command is supported in vCenter 2G shell version 3.5.0 and above and enables you to run vCenter's "Customize Guest OS" command on a vCenter App's VM before it is powered on. - -![](/Images/Devguide-orchestration-scripts/Customize-Guest-OS.png) - -**Customize Guest OS** is a hidden command that can only be run via the CloudShell Automation API's **ExecuteCommand** method and is designed to be executed as part of the sandbox setup orchestration. - -Example scenarios include: - -- Running several customization specifications on the same VM by running this command for each customization specification, followed by a power cycle (Power Off and then Power On) each time -- Having a custom setup script that reserves the VM's MAC addresses from the IP management system (IPMS) and then runs the **Customize Guest OS** command to assign the reserved IP addresses to the VM's network interfaces - -## How "Customize Guest" OS works - -When executed, the command sends (to the App's VM) the customization specification defined either in the vCenter App or as an input of the command. If missing from both the App and command, a default customization specification is created and sent to the VM. *The customization specification is applied when the VM is powered on.* If the VM is online while running the **Customize Guest OS** command, the VM will need to be powered off and then powered on again. - -Customization specifications are applied in the following scenarios: - -1. Customization specification defined only in the App -2. Customization specification defined only in the command -3. Hostname and IP Address defined in the App (creates a customization specification that updates the VM's hostname and IP address as defined in the App) -4. Customization specification parameters defined in the command - -All combinations are allowed except for 1 and 2. In other words, customization specifications cannot be defined both in the App and in the **Customize Guest OS** command. - -When scenario 3 is combined with another scenario, the hostname and IP address are updated on the VM without creating another customization specification. - -## Prerequisites - -- **Auto Power On** global attribute must be set to **False** (Default is **True**) - -## Command inputs - -- **Customization Spec Name**: Name of the customization specification to execute. -- **Override Customization Spec**: Override any customization specification defined in the App. -- **Customization Spec Parameters**: Parameters to be used to create/update the customization specification. If a customization specification is not defined in the command, the Customization Spec Parameters will be applied to the customization specification defined in the App. - - The syntax is a concatenated JSON string where customization specification elements are written in lower case and underscores instead of spaces. For example, "Registration Info" is written as "registration\_info" in the JSON. - - The full strings are: - - - Linux Customization Spec JSON Schema: - - ```javascript - {'additionalProperties': false, '$schema': 'http://json-schema.org/draft-04/schema#', 'type': 'object', 'properties': 'dns_settings': {'additionalProperties': false, 'type': 'object', 'properties': {'secondary_dns_server': {'type': 'string'}, 'dns_search_paths': {'items': {'type': 'string'}, 'type': 'array'}, 'primary_dns_server': {'type': 'string'}, 'tertiary_dns_server': {'type': 'string'}}}, 'domain_name': {'type': 'string'}, 'computer_name': {'type': 'string'}, 'networks': {'items': {'additionalProperties': false, 'type': 'object', 'properties': {'ipv4_address': {'type': 'string'}, 'use_dhcp': {'type': 'boolean'}, 'default_gateway': {'type': 'string'}, 'alternate_gateway': {'type': 'string'}, 'subnet_mask': {'type': 'string'}}}, 'type': 'array'}}, 'title': 'Linux Customization Spec'} - ``` - - - - Windows Customization Spec JSON Schema: - - ```javascript - '{'additionalProperties': false, '$schema': 'http://json-schema.org/draft-04/schema#', 'type': 'object', 'properties': {'workgroup': {'type': 'string'}, 'license': {'additionalProperties': false, 'type': 'object', 'properties': {'include_server_license_info': {'type': 'boolean'}, 'server_license_mode': {'enum': ['perServer', 'perSeat'], 'type': 'string'}, 'product_key': {'type': 'string'}, 'max_connections': {'type': 'integer'}}}, 'registration_info': {'additionalProperties': false, 'type': 'object', 'properties': {'owner_name': {'type': 'string'}, 'owner_organization': {'type': 'string'}}}, 'auto_logon_count': {'type': 'integer'}, 'auto_logon': {'type': 'boolean'}, 'computer_name': {'type': 'string'}, 'password': {'type': 'string'}, 'commands_to_run_once': {'items': {'type': 'string'}, 'type': 'array'}, 'networks': {'items': {'additionalProperties': false, 'type': 'object', 'properties': {'ipv4_address': {'type': 'string'}, 'use_dhcp': {'type': 'boolean'}, 'default_gateway': {'type': 'string'}, 'alternate_gateway': {'type': 'string'}, 'subnet_mask': {'type': 'string'}}}, 'type': 'array'}, 'windows_server_domain': {'additionalProperties': false, 'type': 'object', 'properties': {'username': {'type': 'string'}, 'domain': {'type': 'string'}, 'password': {'type': 'string'}}}}, 'title': 'Windows Customization Spec'}' - ``` - - -## Examples - Command input JSONs - -**Windows:** - -```javascript -{ "registration_info": { - "owner_name": "Owner_Name", - "owner_organization": "Owner_Organization", - }, - "computer_name": "TestWindows", - "auto_logon": False, - "auto_logon_count": 2, - "license": { - "product_key": "Testing", - "include_server_license_info": True, - "server_license_mode": "perSeat", - "max_connections": 5, - }, - "password": "Administrator_Password", - "commands_to_run_once": ["test1", "test2"], - "workgroup": "TestWorkGroup", - "windows_server_domain": { - "domain": "DOMAIN", - "username": "Username", - "password": "Password", - } -} -``` - -**Linux:** - -```javascript -{ - "computer_name": "TestLinux", - "networks": [ - { - "use_dhcp": True, - }, - { - "use_dhcp": False, - "ipv4_address": "11.20.36.20", - "subnet_mask": "11.24.42.1", - "default_gateway": "20.8.34.1", - "alternate_gateway": "142.0.32.8", - } - ], - "domain_name": "internal2.com", - "dns_settings": { - "primary_dns_server": "", - "secondary_dns_server": "", - "tertiary_dns_server": "", - "dns_search_path": [], - }, -} -``` diff --git a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/cs-oob-orch/index.md b/versioned_docs/version-2023.3/devguide/develop-orch-scripts/cs-oob-orch/index.md deleted file mode 100644 index 36c56482b5..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/cs-oob-orch/index.md +++ /dev/null @@ -1,475 +0,0 @@ -# CloudShell's OOB Orchestration - -Every CloudShell installation includes out of the box workflows. These reflect some common workflows we see across many of our customers that we’ve decided to integrate as default behavior. The OOB setup and teardown processes handle App deployment and startup, connectivity, App discovery and installation. The OOB Save and Restore processes are used for saving the sandbox state and restoring it as a new sandbox. - -## Setup and Teardown Orchestration - -The following diagram describes the OOB setup and teardown flow: - -![Setup Workflow](/Images/Devguide-orchestration-scripts/CloudShell-s-OOB-Orchestration.png) - -These OOB setup and teardown scripts can be found in the **Scripts – Blueprint** management page. You can review their source code in the [cloudshell-orch-sandbox repository](https://github.com/QualiSystems/cloudshell-orch-sandbox/tree/v8.1/SandboxOrchestration/environment_scripts). - -The default setup and teardown logic is provided in a Python package called *cloudshell-orch-core*. The default blueprint template includes a reference to the *cloudshell-orch-core* package using the `requirements.txt` mechanism, which is supported for orchestration scripts. - -Here is the implementation of the OOB setup script: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox -from cloudshell.workflow.orchestration.setup.default_setup_orchestrator import DefaultSetupWorkflow - - -sandbox = Sandbox() - -DefaultSetupWorkflow().register(sandbox) - -sandbox.execute_setup() -``` - -As you can see, to use the default orchestration logic, we instantiated the *DefaultSetupWorkflow* class and registered the sandbox to use the default behavior. Sandbox setup is divided into 4 stages: preparation, provisioning, connectivity and configuration. It’s possible to disable the default implementation of each stage (except for preparation, which is mandatory) by setting **enable\_stageName=False**, as illustrated in this example: - -```python -DefaultSetupWorkflow().register(Sandbox, enable_connectivity=False) -``` - -The OOB setup and teardown scripts can easily be customized or extended. Click [here](https://github.com/QualiSystems/cloudshell-orch-sandbox/blob/develop/Samples/Setup/ordered_configuration_example.py) for an example on how to customize the app configuration order in the setup stage, or see [other samples](https://github.com/QualiSystems/cloudshell-orch-sandbox/tree/develop/Samples) to learn how to extend the OOB orchestration scripts. - -### Extending the OOB Setup Orchestration Scripts - - - -Setup script logic is divided into 4 stages – Preparation, Provisioning, Connectivity and Configuration. Each Setup stage has a specific logic functionality. - -- **Preparation** is empty in the default Setup script. This is the place to enter any code that logically has to be executed before Setup logic is initiated. - -- **Provisioning** deploys and discovers all apps. - -- **Connectivity** connects all layer 1/layer 2/subnet connections, powers on and refreshes IPs on deployed apps. - -- **Configuration** applies any additional configuration on deployed apps - -Note that the OOB setup already includes some default logic in each of the stages as depicted in the diagram at the top of this page. However, the OOB setup can easily be extended using the following extension methods: - -- add\_to\_preparation - -- on\_preparation\_ended - -- add\_to\_provisioning - -- on\_provisioning\_ended - -- add\_to\_connectivity - -- on\_connectivity\_ended - -- add\_to\_configuration - -- on\_configuration\_ended - - -Each stage has an interim **on\_\_\[stage\]\_ended** step which allows the execution of any code that has to run between stages. Note that all the functions you add to a stage (using **add\_to\_configuration**, for example) run in parallel, while **on\_\_\[stage\]\_ended** functions run sequentially. - -You can extend the OOB setup and teardown scripts by adding additional steps, or controlling the order of execution. In this section we will focus on the setup script, for examples about how to extend the teardown, see [Extending the OOB Teardown Orchestration Scripts](#extending-the-oob-teardown-orchestration-scripts) below. An example for extending the OOB Setup script can be calling additional commands to validate Apps or resource states, launching additional orchestration, or controlling the order in which the sandbox is provisioned. - -1. Create a copy of the appropriate script, (see below for extension options), and upload the updated version separately into CloudShell Portal as a **Setup** script. DO NOT remove any step in the setup workflow. However, you can add your own steps or change the order of execution. - -2. Make sure to give your extended script a more specific name than simply 'setup'. The name ‘teardown’ is a reserved name, which may cause unexpected behavior during the setup operation. - - -You can extend the Setup script to implement the required logic in one of the setup stages: preparation, provisioning, connectivity and configuration or as a post stage for validation. Make sure to add a `requirements.txt` file that will include the *cloudshell-orch-core* package. For example, adding some logic to the configuration stage can be made in the following way: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox -from cloudshell.workflow.orchestration.setup.default_setup_orchestrator import DefaultSetupWorkflow - - -Sandbox = Sandbox() - -DefaultSetupWorkflow().register(Sandbox) - -sandbox.workflow.add_to_configuration(my_custom_login, components) -``` - -Each of the following methods gets a custom function and list of components to use in the function. For example, executing some custom logic to validate resource configuration: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox -from cloudshell.workflow.orchestration.setup.default_setup_orchestrator import DefaultSetupWorkflow - - -def custom_function(sandbox, components): - pass - -sandbox = Sandbox() - -DefaultSetupWorkflow().register(sandbox) - -resources = sandbox.components.get_resources_by_model('Generic Resource Model') - -sandbox.workflow.on_configuration_ended(custom_function, resources) -``` - -Note that all methods of the OOB setup logic in the same stage are executed in parallel. The custom function should get arrays of the sandbox and its components as inputs. It’s recommended to use this function template as a starting point: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox - -def custom_func(sandbox, components): - """ - :param Sandbox sandbox: - :return: - """ - pass -``` - -Here is an implementation example of custom configuration logic for a 3 tier application where each type of App is configured consecutively while passing some global inputs and configuration parameters between the Apps: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox -from cloudshell.workflow.orchestration.setup.default_setup_orchestrator import DefaultSetupWorkflow - -def main(): - sandbox = Sandbox() - sandbox.automation_api.WriteMessageToReservationOutput(reservationId=sandbox.id, - message='Starting to execute the cool stuff!') - DefaultSetupWorkflow().register(sandbox, enable_configuration=False) # Disable OOB configuration - sandbox.workflow.add_to_configuration(function=configure_apps, - components=sandbox.components.apps) - sandbox.execute_setup() - -def configure_apps(sandbox, components): - """ - :param Sandbox sandbox: - :return: - """ - sandbox.automation_api.WriteMessageToReservationOutput(reservationId=sandbox.id, - message='configure_apps started') - build_id = sandbox.global_inputs['build_id'] - - # Configure databases - databases = sandbox.components.get_apps_by_name_contains('Database') - sandbox.automation_api.WriteMessageToReservationOutput(reservationId=sandbox.id, - message='Configuring Databases') - for app in databases: - sandbox.apps_configuration.set_config_param(app=app, - alias='config alias', - key='build_id', - value=build_id) - sandbox.automation_api.WriteMessageToReservationOutput(reservationId=sandbox.id, - message='Database configured with build_id {0}'.format(str(build_id))) - sandbox.apps_configuration.apply_apps_configurations(databases) - sandbox.automation_api.WriteMessageToReservationOutput(reservationId=sandbox.id, - message='Finished to configure databases') - - # Configure Application Servers - app_servers = sandbox.components.get_apps_by_name_contains('Application') - - sandbox.automation_api.WriteMessageToReservationOutput(reservationId=sandbox.id, - message='Configuring Application Servers') - - database = sandbox.components.get_apps_by_name_contains('Database')[0].deployed_app.FullAddress - - for app_server in app_servers: - sandbox.apps_configuration.set_config_param(app=app_server, - alias='config alias', - key='build_id', - value=build_id) - sandbox.apps_configuration.set_config_param(app=app_server, - alias='config alias', - key='DB_address', - value=database) - sandbox.automation_api.WriteMessageToReservationOutput(reservationId=sandbox.id, - message='Application Server configured with build_id {0} , and DB address {1}' - .format(str(build_id), str(database))) - - sandbox.apps_configuration.apply_apps_configurations(app_servers) - sandbox.automation_api.WriteMessageToReservationOutput(reservationId=sandbox.id, - message='Finished to configure Application Servers') - - # Configure web servers - application_server_address = sandbox.components.get_apps_by_name_contains('Application')[0].deployed_app.FullAddress - - web_servers = sandbox.components.get_apps_by_name_contains('Web') - - for app in web_servers: - sandbox.apps_configuration.set_config_param(app=app, - alias='config alias', - key='Application Server', - value=application_server_address) - sandbox.apps_configuration.set_config_param(app=app, - alias='config alias', - key='build_id', - value=build_id) - sandbox.automation_api.WriteMessageToReservationOutput(reservationId=sandbox.id, - message='Web Server configured with build_id {0}, and Application Server address {1}' - .format(str(build_id), str(application_server_address))) - - - sandbox.apps_configuration.apply_apps_configurations(web_servers) - sandbox.automation_api.WriteMessageToReservationOutput(reservationId=sandbox.id, - message='Finished to configure Web Servers') - -main() -``` - -Here is another implementation that shows a scenario where some physical devices need to be loaded while few applications are deployed: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox -from cloudshell.workflow.orchestration.setup.default_setup_orchestrator import DefaultSetupWorkflow - - -def load_firmware_sequential(sandbox, components): - """ - :param Sandbox sandbox: - :param components: - :return: - """ - for component in components: - sandbox.automation_api.ExecuteCommand(reservationId=sandbox.id, - targetName=component.Name, - targetType='Resource', - commandName='load_configuration') - - -sandbox = Sandbox() -DefaultSetupWorkflow().register(sandbox) - -chassis = sandbox.components.get_resources_by_model('Generic Chassis Model') -sandbox.workflow.add_to_provisioning(function=load_firmware_sequential, - components=chassis) - -sandbox.execute_setup() -``` - -### Extending the OOB Teardown Orchestration Scripts - -You can extend the OOB Teardown script to execute custom steps prior to the out-of-the-box teardown orchestration, or to execute custom steps in parallel to the OOB teardown. This is done using the following extension methods, which are included in the workflow property in the **Sandbox** class: - -- add\_to\_teardown - -- before\_teardown\_started - -Each of the above methods gets a custom function and list of components to use in the function. All steps configured using the **before\_teardown\_started** method will be executed in a sequential manner, and all steps configured using the **add\_to\_teardown** method will be executed in parallel. - -Here is an example of how to execute a command on a resource prior to the default teardown orchestration, note that a `requirements.txt` file containing cloudshell-orch-core should be attached to the script: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox -from cloudshell.workflow.orchestration.teardown.default_teardown_orchestrator import DefaultTeardownWorkflow - - -def execute_resource_cleanup(sandbox, components): - """ - :param Sandbox sandbox: - :param components: - :return: - """ - for component in components: - sandbox.automation_api.ExecuteCommand(reservationId=sandbox.id, - targetName=component.Name, - targetType='Resource', - commandName='cleanup') - -sandbox = Sandbox() - -DefaultTeardownWorkflow().register(sandbox) - -chassis = sandbox.components.get_resources_by_model("Generic Chassis Model") -sandbox.workflow.before_teardown_started(execute_resource_cleanup, chassis) - -sandbox.execute_teardown() -``` - -Make sure to follow these steps when implementing a custom teardown orchestration: - -1. Create a copy of the appropriate script, (see below for extension options), and upload the updated version separately into CloudShell Portal as a **Teardown** script. DO NOT remove steps from the teardown workflow. However, you can add your own steps or change the order of execution. - -2. Make sure to give your extended script a more specific name than simply 'teardown'. The name ‘teardown’ is a reserved name, which may cause unexpected behavior during the teardown operation. - - -## Save and Restore Orchestration -:::note -*These orchestration scripts apply to customers who have purchased the **Save and Restore** paid add-on. Contact your account manager to obtain a license.* -::: -Save and Restore scripts are provided to support the capability to save and restore sandboxes. Save and Restore reside in a Python package called *cloudshell-orch-core*. The OOB default blueprint template includes these orchestration scripts and a reference to the *cloudshell-orch-core* package (required by these scripts) using the `requirements.txt` mechanism. Here is the implementation of the OOB Save script: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox - - -sandbox = Sandbox() - -sandbox.execute_save() -``` - -By running the **execute\_save** method on a sandbox, the script will call a server logic that will create a saved sandbox. For details about the saving process, see [Sandbox Save and Restore Overview](../../../portal/sandboxes/sandbox-save-and-restore-overview.md). - -### Extending the OOB Save Orchestration Script - -*Out of the box, the Save orchestration script only creates the saved sandbox, returns concrete resources to abstract if required, creates a clone of deployed Apps and creates an App in that saved sandbox that points to this clone. For details, see [Sandbox save logic](../../../portal/sandboxes/sandbox-workspace/save-sandbox.md).* - -You can extend the OOB Save script to execute custom steps before or after the default sandbox save process takes place. - -To do this, simply add your custom code before or after the line that executes the Save operation. For example, a Save orchestration script that sends a simple notification email when the Save operation completes: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox -import smtplib - - -sandbox = Sandbox() - -sandbox.execute_save() - -# code for sending email notification: -server = smtplib.SMTP('smtp.gmail.com', 587) - -server.ehlo() -server.starttls() -server.ehlo() - -#Next, log in to the server -server.login("", "") - -#Send the mail -msg = "Sandbox was saved successfully" -server.sendmail("", "", msg) -``` - -### Extending the OOB Restore Orchestration Script - -You can also extend the OOB Restore script to execute custom functionality at any point during the default sandbox restore process. The Restore script is a part of the sandbox setup process, and actually replaces the setup. Out of the box, the setup and restore logic are identical. However, if you customized the Setup script and you want the same customized script to be launched when restoring a sandbox, you should customize the Restore script as well, as the Restore script is the one that is being launched in a restored sandbox’s setup phase. It is also possible to customize the Restore script to have a different logic than the Setup script, to create a logic that is relevant only for restored sandboxes. For detailed explanations on how to extend the script’s stages and use its extension methods, see the [Setup and Teardown Orchestration](../cs-oob-orch/index.md#setup-and-teardown-orchestration) section above. For details about the OOB Restore script's operations, see [Restore a Saved Sandbox](../../../portal/sandboxes/saved-sandboxes/restore-saved-sandbox.md). -:::note -CloudShell does not support executing the Setup command directly via the Restore script using APIs, such as **ExecuteEnvironmentCommand** or **EnqueueEnvironmentCommand**. -::: -For example, a Restore script that writes a message to the **Output** console before the Restore workflow operation (to extend the workflow operation itself, use the extension methods in the [Extending the OOB Setup Orchestration Scripts](#extending-the-oob-setup-orchestration-scripts) section above): - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox -from cloudshell.workflow.orchestration.setup.default_setup_orchestrator import DefaultSetupWorkflow - - -sandbox = Sandbox() - -def func(sandbox, components): - sandbox.automation_api.WriteMessageToReservationOutput(sandbox.id, "my custom message") - -DefaultSetupWorkflow().register(sandbox) - -sandbox.workflow.add_to_configuration(func, None) - -sandbox.execute_restore() -``` - -As you can see, to use the default orchestration logic, we instantiated the *DefaultSetupWorkflow* class and registered the sandbox to use the default Setup orchestration behavior. Sandbox setup is divided into 4 stages: preparation, provisioning, connectivity and configuration. It’s possible to disable the default implementation of each stage by setting **enable\_stageName=False**, as illustrated in this example: - -```python -DefaultSetupWorkflow().register(sandbox, enable_connectivity=False) -``` - -### Save/Restore Physical Resource Configurations Examples - -In many cases, the sandbox's resources include configurations that apply to that sandbox specifically. Since physical resource configurations are not addressed in the out-of-the-box Save and Restore orchestration scripts, we will have to customize them as follows: - -- Save script that: - - 1. Creates a loop that runs `save` or `orchestration_save` on each physical resource in the sandbox. - 2. Gets each physical resource’s configurations (artifact names). - 3. Sets the "resource-artifact name” key pairs in the sandbox data. - -- Restore script that uses this sandbox data to restore each resource to its saved configuration. - -In the below examples, we used shell save/restore functions instead of `orchestration_save`/`orchestration_restore` for two reasons: - -- Visual effect: `orchestration_save`/`orchestration_restore` are hidden functions. While they are running, there is no indication that anything is happening on the screen, while with shell save/restore functions, the user can see all physical resources spinning in the sandbox diagram and knows the action is taking place. -- Easy testing/debugging: While `orchestration_save`/`orchestration_restore` encapsulates functionality and data very nicely, and the json data is helpful, it's easier to test with save/restore of a demo version shell which simply passes on restore and returns a valid string on save. -:::tip -For a more in-depth look, click [here](/attachments/save-restore-physical-resources.zip) to download the script packages. -::: -**Save script (bundled with and called by orchestration\_save):** - -```python -from cloudshell.api.cloudshell_api import InputNameValue -from cloudshell.api.cloudshell_api import SandboxDataKeyValue - - -def execute_save(self) - """ - :return: bool True for pass, False for fail - """ - inputs = list() - inputs.append(InputNameValue(Name='folder_path', Value=self.backup_path)) - inputs.append(InputNameValue(Name='configuration_type', Value=self.config_type)) - inputs.append(InputNameValue(Name='vrf_management_name', Value=self.vrf_management)) - - try: - response = self.api_session.ExecuteCommand(reservationId=self.sandbox_id, - targetName=self.resource_name, - targetType='Resource', - commandName='save', - commandInputs=inputs) - saved_artifact_info = response.Output - saved_file = self.backup_path + saved_artifact_info - # save the entire full path into sandbox data for restore to use, instead of relying on the - # Backup Location of the resource which may change between this save and later restore - d = SandboxDataKeyValue(Key=self.resource_name, Value=saved_file) - self.api_session.SetSandboxData(self.sandbox_id, [d]) - message = 'Successfully saved {} config to {}'.format(self.resource_name, saved_artifact_info) - message = '
    ' + message + '
    ' - self.api_session.WriteMessageToReservationOutput(self.sandbox_id, message) - - except Exception as ex: - message = '{}: {}'.format(type(ex).__name__, ex.message) - message = '
    ' + message + '
    ' - self.api_session.WriteMessageToReservationOutput(self.sandbox_id, message) - return False - - return True -``` - -**Restore script (bundled with and called by orchestration\_restore):** - -```python -from cloudshell.api.cloudshell_api import InputNameValue - - -def execute_restore(self): - """ - :return: bool True for pass, False for fail - """ - inputs = list() - inputs.append(InputNameValue(Name='path', Value=self.config_file_path)) - inputs.append(InputNameValue(Name='configuration_type', Value=self.config_type)) - inputs.append(InputNameValue(Name='restore_method', Value=self.restore_method)) - inputs.append(InputNameValue(Name='vrf_management_name', Value=self.vrf_management)) - - try: - self.api_session.ExecuteCommand(reservationId=self.sandbox_id, - targetName=self.resource_name, - targetType='Resource', - commandName='restore', - commandInputs=inputs) - - message = 'Successfully restored base config of {}'.format(self.resource_name) - message = '
    ' + message + '
    ' - self.api_session.WriteMessageToReservationOutput(self.sandbox_id, message) - - if self.action in ['setup', 'restore']: - self.api_session.SetResourceLiveStatus(self.resource_name, "Online", "Active") - - elif self.action == 'teardown': - self.api_session.SetResourceLiveStatus(self.resource_name, "Offline", "Restored to base config") - - except Exception as ex: - message = '{}: {}'.format(type(ex).__name__, ex.message) - message = '
    ' + message + '
    ' - self.api_session.WriteMessageToReservationOutput(self.sandbox_id, message) - - if self.action in ['setup', 'restore']: - self.api_session.SetResourceLiveStatus(self.resource_name, "Error", "Failed to restore to base config") - - return False - - return True -``` \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/getting-started-with-orch-scripts.md b/versioned_docs/version-2023.3/devguide/develop-orch-scripts/getting-started-with-orch-scripts.md deleted file mode 100644 index 19b3ddc5b7..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/getting-started-with-orch-scripts.md +++ /dev/null @@ -1,155 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Getting Started with Orchestration Scripts - -Orchestration scripts can enable automating sandbox workflows. You can use orchestration scripts to create setup and teardown procedures as well as other custom workflows that can be made available in the sandbox. Examples include saving and restoring state, starting test traffic, running failover scenarios and more. *Please note that sandbox environment automation and enhanced orchestration is available with CloudShell Premium Tier.* - -***Before developing scripts, please familiarize yourself with CloudShell by taking [Quali U courses](http://courses.quali.com/). These courses also include installation instructions for the CloudShell SDK package that deploys a developer edition of CloudShell on which you can perform your training and development activities.*** - -## Prerequisites - -- [Get CloudShell](http://info.quali.com/cloudshell-developer-edition-download): Download the latest CloudShell SDK VM and deploy it. - -- [Python](https://www.python.org/downloads/): Make sure the appropriate Python version - 2.7.x and/or 3.x - (latest recommended) is installed on your machine. - Starting with CloudShell 9.2, CloudShell comes with out-of-the-box support for python 3 for orchestration scripts. - - Python 3 automation requires Microsoft Visual C++ Redistributable 2015 x86 and x64 to be installed on the Execution Server(s). - :::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. - ::: - -- **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. - - -## Creating and using orchestration scripts in CloudShell - -This procedure shows the basic steps for creating and using orchestration scripts in CloudShell. - -1. Create a Python script. You can create a single python script, or a more complex orchestration that uses dependencies, as explained in [Script Deep Dive](./script-deep-dive.md) . - :::tip - It is highly recommended to extend CloudShell's out-of-the-box orchestration scripts as they already contain important orchestration capabilities you'd like to preserve. To do so, log in to CloudShell Portal as Global administrator, in the **Manage>Assets>Blueprint** page, download the desired script, make the necessary changes and save the script under a new name. - ::: -2. If the script requires the use of Python dependencies, which aren’t available in the public PyPi repository, add them to the local PyPi Server. See [Updating Python Dependencies for Shells, Drivers and Scripts](../../admin/cloudshell-execution-server-configurations/setting-up-python-virtual-environments/updating-python-dependencies-for-shells-drivers-and-scripts.md). - -3. Save the script (if it's a single file) or zip the package if it comprises multiple files. - :::important - Make sure the script's name is not the same as any of the out-of-the-box scripts. - ::: -4. Upload the script to CloudShell. When uploading the script, you can set it as a setup or teardown script, to have it run automatically in the sandbox, or leave it as a manually launched orchestration script. - -5. Attach the script to the blueprint. If it’s a setup or teardown script, remove the blueprint’s existing script first. - - -## Creating a simple blueprint script - -1. In your preferred IDE create a new Python file. - -2. For now we’ll want to keep its functionality very basic. So add some Python code to print ‘Hello CloudShell’. - - ```python - print 'hello CloudShell' - ``` - - - As a side note, in CloudShell the output of a script is displayed in the output widget in the sandbox workspace, so whatever you print in your script will find its way there. - -3. Save the file and give it any name, for example ‘hello.py’. - - -## Uploading the orchestration script to CloudShell - -1. In CloudShell Portal, open the **Manage** dashboard. - -2. In the left sidebar, click **Assets** and select the **Blueprint** option. The page should be similar to this: - - ![Scripts Management Page](/Images/Devguide-orchestration-scripts/Scripts-Getting-Started_624x376.png) - -3. Click the **Add Python Script** button and browse for the script. - -4. Once the script is uploaded, click **Edit**. - -5. For now, just provide a name for the script (the script’s file name is the default) and select the script’s Python version. - - ![Scripts Management Page](/Images/Devguide-orchestration-scripts/Scripts-Getting-Started_1_601x613.png) - -6. And click **Save** to seal the deal. - - Your script is now in CloudShell, all we need now is a blueprint where it can work its magic. - -## Attaching the script to a blueprint - -1. Open the **Blueprints** dashboard and click **Add New**. - - A new blueprint will be created and you’ll be taken to the blueprint’s workspace. - -2. Take a second to name your blueprint. You can do that by clicking the name next to the pencil icon. - -3. The last stop is the **Properties** page. This is where we’ll connect our new script. Click the **Blueprint** drop down menu and select **Properties**. - -4. Click the **Add Script** button to assign our new script to the blueprint and then click **Update** at the bottom of the page. - - That’s it! Our script is ready to be used. However, in order to run it, we’ll need to make our blueprint go live by creating a sandbox. - -5. Click the **Reserve** button to create a sandbox from the blueprint. Next, let’s run the script. - - -## Executing the script in the sandbox - -1. Click the **Commands** button on the toolbar to open the Blueprint Commands side-pane. - -2. Click the **Run** icon next to the command to launch it! - - If the command executed successfully you should see a check mark next to the command name and the **Output** pane will display the command output. - - ![Scripts Management Page](/Images/Devguide-orchestration-scripts/Scripts-Getting-Started_2_624x356.png) - - In the scope of this simple tutorial, we’ve seen how to link a trivial Python script with a CloudShell blueprint. We’ll look into more concrete examples and nuances in later sections of the guide. - - -## Best Practices for working with orchestration scripts - -When developing orchestration scripts, we recommend to download the latest default setup or teardown script from CloudShell Portal’s **Manage>Assets** page, make a copy and modify the contents. This will ensure you are using the right packages and structure. - -If you wish to develop an orchestration script from scratch or develop a script for a different CloudShell version, you will need to import the *cloudshell-orch-core* package, which provides the basic features and capabilities needed for CloudShell orchestration scripts. Use this table to decide which version to use: - -| CloudShell version | cloudshell-orch-core version | -| --- | --- | -| 8.3 GA | \>=1.7.5.0,\<1.7.6.0 | -| 9.0 GA | \>=2.0.0.0,\<2.1.0.0 | -| 9.1 GA | \>=2.1.0.0,\<2.2.0.0 | -| 9.2 GA | \>=3.0.0.0,\<3.1.0.0 | -| 9.3 GA | \>=3.2.0.0,\<3.3.0.0 | -| 2020.1 | \>=3.2.0.0,\<3.3.0.0 | -| 2020.2 | \>=3.4.0.0,\<3.5.0.0 | -| 2021.1 | \>=3.4.0.0,\<3.5.0.0 | -| 2021.2 | \>=3.4.0.0,\<3.5.0.0 | -| 2022.1 | \>=4.0.0.0,\<4.1.0.0 | -| 2022.2 | \>=4.2.0.0,\<4.3.0.0 | -| 2023.1 | \>=4.2.0.0,\<4.3.0.0 | -| 2023.2 | \>=4.3.0.0,\<4.4.0.0 | -| 2023.3 | \>=4.4.0.0,\<4.5.0.0 | - -To set a range for a package, add a line to the script's `requirements.txt` that states the minimum and maximum versions. For example: - -```css -cloudshell-orch-core>=3.2.0.0,<3.3.0.0 -``` - -To set a specific version of the package, use "==". For example: - -```css -cloudshell-orch-core==3.2.0.169 -``` - -For details about the `requirements.txt` file, see [Script Deep Dive](./script-deep-dive.md). - -## Setting the default Python version for new orchestration scripts - -Starting with CloudShell 9.2, the `DefaultPythonVersion` admin key allows you to control the Python version in which all new orchestration scripts are created. For details, see [Advanced CloudShell Customizations](../../admin/setting-up-cloudshell/cloudshell-configuration-options/advanced-cloudshell-customizations.md). - -Note that this key also applies to new shells. diff --git a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/how-orch-script-get-info-from-cs.md b/versioned_docs/version-2023.3/devguide/develop-orch-scripts/how-orch-script-get-info-from-cs.md deleted file mode 100644 index 3205c00ec5..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/how-orch-script-get-info-from-cs.md +++ /dev/null @@ -1,232 +0,0 @@ ---- -sidebar_position: 2 ---- - -# How Orchestration Scripts Get Information from CloudShell - -Information about the sandbox on which your script is running and its components is available in your script as an environment variable. The standard way to get the information is using the **Sandbox** object. - -**To use the *Sandbox* object:** - -- Import the *cloudshell\-orch-core* Python package and add it to your script, as illustrated in the example below. Note that the package is automatically imported when your sandbox starts. In this example, the following code gets an object that contains all of the sandbox’s information: - - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox - - -sandbox = Sandbox() - -reservation_context_details = sandbox.reservationContextDetails -``` - -Note that to execute this code, you will need to include a `requirements.txt` file in your script, see [Script Deep Dive](./script-deep-dive.md) for more details. - -To facilitate writing and debugging activities, it is recommended to use advanced IDEs such as PyCharm, which provide autocomplete functionality, as illustrated below. - -![Sandbox information](/Images/Devguide-orchestration-scripts/Scripts-Getting-Information_624x204.png) - -Note that if you plan on using methods in your script, and want the IDE to autocomplete the *sandbox* object’s class properties from within the method, you will need to include a docstring referencing the object. For details, see [Docstrings in orchestration scripts](../reference/intellisense-in-shells-and-scripts.md#docstrings-in-orchestration-scripts). - -## Accessing the sandbox components - -Use the **Sandbox** class to access and use the components of a sandbox in your orchestration scripts to implement custom logic. - -For example, let’s assume we want to get the names of the resources and Apps in a sandbox. To do so, we will use **sandbox.component**. The following code will iterate over the resources and Apps in the sandbox and print out their names: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox - -sandbox = Sandbox() - -for resource_name, resource in sandbox.components.resources.iteritems(): - print 'Found resource: {0}, with address: {0}'.format(resource_name, resource.FullAddress) - -for app_name, app in sandbox.components.apps.iteritems(): - print app_name -``` - -The components in the sandbox are stored in a dictionary object, from which a specific resource can be retrieved using a simple syntax. For example: - -```python -sandbox = Sandbox() - -resource_details = sandbox.components.resources['my_resource'] -``` - -It’s also possible to get the sandbox components using helpers methods located under **sandbox.component** such as **get\_resources\_by\_model, get\_apps\_by\_name\_contains** and others. For example: - -```python -sandbox = Sandbox() - -services = sandbox.components.get_services_by_alias('my-service-alias') -for service in services: - print service.Alias -``` - -To refresh the components information at any time during the sandbox’s lifecycle, use the **sandbox.components.refresh\_components** method. - -## Accessing the sandbox’s user inputs - -User inputs provided by the user when they reserved the blueprint can be accessed by your script, as contextual information. This data is stored in several environment variables based on the input type: - -- **Global inputs** - These inputs are a part of the reservation form and can represent general data you wish to collect from the user for your automation. They can also be used to group together multiple other inputs as one data entry. You can access these using the GLOBALINPUTS environment variable. - -- **Resource requirements** - These are inputs related to abstract resources. An abstract resource in CloudShell allows you to declare a generic spec or criteria for a resource rather than explicitly using a specific one. When customizing such an abstract resource, you can choose to make some of its properties available for the user to select, so as to make it more flexible. For example, for a physical device, instead of specifying the model in the blueprint, you can set the model as a parameter with a dropdown list for the user to select from when reserving it. Resource requirements are accessed using the RESOURCEREQUIREMENTS environment variable. - -- **Resource additional info** - When customizing an abstract resource, you can also choose to add some parameters to the resource that are not requirements but rather instructions on what to do with it. An example would be specifying an OS version to install on it. In this case, this parameter is not used to select the resource but rather to operate on the selected resource in the active sandbox. Additional info parameters are accessed using the RESOURCEADDITIONALINFO environment variable. - - -As with sandboxes, we can use some helper modules to get the resource information in Python using the same object we used to get the reservation’s details: - -```python -sandbox = Sandbox() - -global_value = sandbox.global_inputs['input name'] -requirement_value = sandbox.requirement_inputs['resource1']['input_name'] -additiona_info_value = sandbox.additional_info_inputs['resource1']['input_name'] -``` - -## Getting script input parameters - -You can add input parameters to a script when adding or editing a script in CloudShell Portal's **Manage>Scripts** page. The input parameter values are also provided automatically to your script. CloudShell sets up an environment variable with the same name as the parameter. - -This means that if your script looks like this, with a parameter called ‘Param1’ defined: - -![Sandbox information](/Images/Devguide-orchestration-scripts/Scripts-Getting-Information_1_601x703.png) - -You’ll be able to access it using an environment variable by that name: - -```python -import os - -os.environ['PARAM1'] -``` - -You can also use the Sandbox class: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox - -sandbox = Sandbox() - -sandbox.get_user_param('Param1') -``` - -Note that when using the *get\_user\_param* helper function, the input name is case insensitive since the function will uppercase it. - -## Using the API to get sandbox information - -A common use case for a script is to get a list of the different Apps and resources in the sandbox, to be able to call additional commands or API functions on them. To get that information, we can use the CloudShellAPI. - -**To start a CloudShell API session:** - -1. Obtain the Quali Server’s connectivity details. These details are also available as an environment variable in your script called ‘qualiConnectivityContext’. As with the sandbox information, you can use the Sandbox class to quickly get the connectivity information in a more convenient object form and initialize a CloudShellAPISession object by calling **sandbox.connectivityContextDetails**. - -2. Create a CloudShell API session object. Since initializing a CloudShell API session object is a very common operation, you can use the **Sandbox** class to directly create an object. The **Sandbox** class will handle the passing of all of the required connectivity information for you. The **Sandbox** class provides a shortcut which makes accessing the CloudShell API from your script much easier. Simply use the following code: - - ```python - from cloudshell.workflow.orchestration.sandbox import Sandbox - - session = sandbox.automation_api - ``` - - **sandbox.automation\_api** is a CloudShell API session object. You can use the IDE's autocomplete capabilities to explore the available functions: - - ![Sandbox information](/Images/Devguide-orchestration-scripts/Scripts-Getting-Information_2_624x129.png) - - -## Getting general sandbox information (ReservationDescription object) - -The **reservation\_description** object is one of the most important objects for getting information about the sandbox. It includes the sandbox's general details (name, description, owner, start/end times, etc.), conflicts, components (resources, services and Apps), connectors, blueprint information, reservation live status, etc. - -![](/Images/Devguide-orchestration-scripts/Scripts-Getting-Information_4.png) - -Note that **sandbox.reservation\_description** provides information from the sandbox's creation. As such, it does not include updates performed after the sandbox was created. Such updates can be retrieved using the **GetReservationDetails** API: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox - - -sandbox = Sandbox() - -reservation_id = sandbox.id - -reservation_description = sandbox.automation_api.GetReservationDetails(reservation_id).reservation_description -``` - -## Getting the sandbox's current status - -It is possible to get the sandbox's current phase via API. This is especially useful if you want to create workflows that perform actions at certain points during the sandbox's lifecycle. - -This is done by calling the `GetReservationStatus` API and requires obtaining two details from the sandbox - **Status** and **ProvisioningStatus**: - -- **Status** provides the reservation status. Possible responses are (for details, see [Sandbox state](../../portal/sandboxes/sandbox-workspace/index.md#sandbox-state)): - - | Status | Description | - | --- | --- | - | Pending | Scheduled to start in the future | - | Started | Sandbox is currently running | - | In Use | Sandbox is running and has "in use" resources | - | Completed | Sandbox has ended | - | Overtime | Sandbox is in Overtime mode (i.e. sandbox has reached its scheduled end time but has "in use" resource) | - -- **ProvisioningStatus** provides the sandbox's current phase. Possible responses are: - - | ProvisioningStatus | Description | - | --- | --- | - | Not Run | Sandbox is scheduled to run in the future | - | Setup | Sandbox is running Setup | - | Ready | Sandbox is "Active" (without errors) | - | Teardown | Sandbox is in Teardown state | - | Error | Sandbox is "Active with Error" | - | BeforeSetup | Sandbox is running, but Setup hasn't started | - - -**Examples:** - -Querying for `Status=Error` and `ProvisioningStatus=Completed` returns "Completed (With Error)" sandboxes, while querying for `Status=Started` and `ProvisioningStatus=Completed` returns "Active (With Error)" sandboxes. - -Running a custom "health check" operation on the environment once the sandbox is active: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox -import post_setup_configurations as configs - - -sandbox = Sandbox() - -reservation_id = sandbox.reservationContextDetails.id -api = sandbox.automation_api -result = api.GetReservationStatus(reservation_id) - -if result.ReservationSlimStatus.Status == 'Started' and result.ReservationSlimStatus.ProvisioningStatus == 'Ready': - configs.run_health_check -``` - -## Getting custom sandbox metadata - -It is possible to store and retrieve custom key-value data from the sandbox. For details, see [Custom Sandbox Metadata](../reference/custom-sandbox-metadata.md). - -## Getting saved sandbox information - -Starting with CloudShell 9.0, the *cloudshell\-orch-core* Python package includes a new class called *reservationLifecycleDetails*, which allows you to get the following details about your sandbox: saved sandbox name and description, and the current sandbox user name. - -![Sandbox information](/Images/Devguide-orchestration-scripts/Scripts-Getting-Information_3_624x111.png) - -Note that depending on the sandbox, the information may be partial. For example, if the sandbox is not a saved sandbox, the saved sandbox name and description will be missing. For details about our OOB saved sandbox orchestration scripts, see [CloudShell's OOB Orchestration](./cs-oob-orch/index.md). - -## Getting the user context - -CloudShell also allows you to get the CloudShell user who ran the blueprint/orchestration command in the **Sandbox** class. - -For example: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox - - -sandbox = Sandbox() - -user = sandbox.reservationContextDetails.running_user -``` diff --git a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/index.md b/versioned_docs/version-2023.3/devguide/develop-orch-scripts/index.md deleted file mode 100644 index c1b1e80a67..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/index.md +++ /dev/null @@ -1,12 +0,0 @@ -# Developing Orchestration Scripts - -Orchestration scripts are a feature in CloudShell that enables the implementation of sandbox workflows. CloudShell has built-in flows for setup and teardown, which deploy and tear down Apps, resources and connections between components in the sandbox without having to add additional code. Users can extend or fork these scripts, as well as implement additional workflows for save/restore operations, scaling, or more use case-specific workflows for anything from performance testing to failover simulation or traffic generation. - -## In this chapter - -- [Getting Started with Orchestration Scripts](./getting-started-with-orch-scripts.md) -- [How Orchestration Scripts Get Information from CloudShell](./how-orch-script-get-info-from-cs.md) -- [Script Commands Visibility and Usability](./script-commands-visibility-and-usability.md) -- [Script Deep Dive](./script-deep-dive.md) -- [Common Orchestration Script Recipes](./common-orch-script-recipes.md) -- [CloudShell's OOB Orchestration](./cs-oob-orch/index.md) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/script-commands-visibility-and-usability.md b/versioned_docs/version-2023.3/devguide/develop-orch-scripts/script-commands-visibility-and-usability.md deleted file mode 100644 index 20407d2dd2..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/script-commands-visibility-and-usability.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Script Commands Visibility and Usability - -You can control many aspects of how the orchestration commands appear and behave in CloudShell by editing the script from the Scripts management page. - -To demonstrate these capabilities, we’ll create a simple script, which we’ll later customize. The script essentially prints out the parameters it receives and then sets the status of the sandbox to ‘Downloading’. - -1. Create a new Python file and name it `customization_test.py`. Add the following code: - - ```python - from cloudshell.workflow.orchestration.sandbox import Sandbox - import cloudshell.helpers.scripts.cloudshell_dev_helpers as dev_helpers - - - def print_parameters_values(sandbox): - """ - :param Sandbox sandbox: - :return: - """ - print sandbox.get_user_param('first_param') - print sandbox.get_user_param('second_param') - - def change_reservation_status_to_online(sandbox): - """ - :param Sandbox sandbox: - :return: - """ - sandbox.automation_api.SetReservationLiveStatus(sandbox.id, "Downloading") - - def main(): - dev_helpers.attach_to_cloudshell() - sandbox = Sandbox() - print_parameters_values(sandbox) - change_reservation_status_to_online(sandbox) - - if __name__ == "__main__": - main() - ``` - :::note - You can get the Sandbox id by using **sandbox.id**. The Sandbox name is also available via the **sandbox.name** property. - ::: - Since this script has imports, you’ll need a `requirements.txt` file and a *main.py* function. For details, see [Script Deep Dive](./script-deep-dive.md). - -2. In CloudShell Portal, open the **Manage** dashboard. - -3. Navigate to the *Scripts* sub section and select **Blueprint**. - - ![Scripts Management Page](/Images/Devguide-orchestration-scripts/Scripts-Getting-Started_624x376.png) - -4. Add the script into CloudShell by dragging the script into the **Scripts – Blueprint** page or add the `customization_test.py` script. - -5. To customize the script, click the **Edit** button. - - ![Scripts Management Page](/Images/Devguide-orchestration-scripts/Script-commands-Visibility_601x613.png) - - -## Setting display name, descriptions and category - -- You can set the script’s display name or alias by editing the **Alias** field in the edit form. Note that if you try to execute this script as a command from the API, you’ll still need to reference it by its name. - -- **Script Type** allows you to set the script as an orchestration script that CloudShell will run accordingly. - -- Use the **Type** field to select the python version of the script. When the script is executed, CloudShell will create a virtual environment using the selected Python version. - -- **Visibility** controls who can access this command in CloudShell. Options are **Everyone** or **Admin Only** - -- The **Description** is also easy to set via the edit form. Enter any text here, it will be displayed as a reference under the script name in the commands pane. This does not apply to orchestration scripts. - -- Categories help improve usability by grouping commands with a similar role or domain under a folder in the sandbox’s command pane. This grouping is for visual purposes only and does not affect API calls. For this example, let’s set the category name to ‘Customization’. - - -## Adding parameters - -Our script expects two parameters, but CloudShell has no way of knowing that. We need to add these parameters in this same form. - -1. Click the **Add Parameter** link at the bottom of the form. - -2. Set the **Name** as ‘first\_param’ and the **Default Value** as ‘None’. Note that if the command parameters don’t have default values, they will become mandatory and the user won’t be able to execute the command without filling in values for them. - -3. Then, enter a meaningful **Description**. - -4. Repeat the process, this time for the second param, which the script expects to be named "second\_param”. - - -## Test the new look and feel - -To test the script, we need to add it to a blueprint. - -1. In CloudShell Portal, click **Blueprints**. - -2. The **Blueprint Catalog** is displayed. - -3. Create a new blueprint or select an existing one. - -4. In the blueprint’s **Properties** page, associate the script with the blueprint. - -5. Reserve the blueprint and open the **Commands** pane in the sandbox. - - ![Scripts Management Page](/Images/Devguide-orchestration-scripts/Script-commands-Visibility_1_624x208.png) \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/script-deep-dive.md b/versioned_docs/version-2023.3/devguide/develop-orch-scripts/script-deep-dive.md deleted file mode 100644 index 1d2729aef1..0000000000 --- a/versioned_docs/version-2023.3/devguide/develop-orch-scripts/script-deep-dive.md +++ /dev/null @@ -1,184 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Script Deep Dive - -In this section we’ll take a more in-depth view at scripts and learn how they can be used most effectively for CloudShell orchestration. - -## How CloudShell handles scripts - -CloudShell executes a Python script by creating a temporary virtual environment for the script’s execution, downloading all required packages from the script’s requirements.txt file and executing the script using the Execution Server python engine. - -To send information to the script, CloudShell sets environment variables in the scope of the script process. These environment variables include information about the sandbox reservation, as well as the script’s parameters. The script standard output is returned as the command result. If an exception is raised, or if a non-zero process result code is returned, the execution will be considered a failure. - -## Using requirements.txt with CloudShell orchestration scripts - -It’s now possible to attach a requirements.txt file to make sure your script will have all dependencies installed on the virtual environment before the script’s execution starts. For details about the *cloudshell-orch-core* package, see this [Getting Started with Orchestration Scripts](./getting-started-with-orch-scripts.md) section. - -**To use the requirements.txt:** - -- Archive this file with the orchestration script in one ZIP file. It will then be possible to upload this ZIP file to CloudShell using the CloudShell Portal. - - -## Using a main function and packaging multiple files - -As scripts become more complex, instead of structuring them as one big function, it is advisable to create a main function and separate the rest of the logic into different functions. Python requires some boilerplate code in addition to the main function to make this work. Here is an example code demonstrating how to use main functions with scripts: - -```python -from cloudshell.workflow.orchestration.sandbox import Sandbox -import os - - -def print_keys(): - for key in os.environ: - print key + " : " + os.environ[key] - -def print_app_names(sandbox): - """ - :param Sandbox sandbox: - :return: - """ - reservation_details = sandbox.automation_api.GetReservationDetails(sandbox.id).ReservationDescription - for app in reservation_details.Apps: - print app.Name - -def main(): - sandbox = Sandbox() - print_keys() - print_app_names(sandbox) - -if __name__ == "__main__": - main() -``` - -Depending on the complexity of the script, it may be wise to also separate the code into multiple files. To do that, we can take advantage of Python’s ability to support executing .zip archives containing multiple scripts. The only requirement is that one of the files is named `__main__.py`, which is how the entry point of the Python process is determined. - -## Setup and teardown scripts - -Setup and teardown are special types of orchestration scripts. There are two things that make them special: - -- They can’t have any inputs as they are launched automatically - -- New blueprints come with CloudShell's default Setup and Teardown scripts and default durations for each. - -**To set a script as a teardown or setup script:** - -1. In the **Scripts - Blueprint** management page, edit the script. - -2. From the script’s *Script Type* dropdown list, select *Setup* or *Teardown*, as appropriate. The script will take on that special behavior. Note that the script can only run as part of the sandbox Setup or Teardown process. In addition, you won’t be able to add any inputs to it. - - -## Getting the script’s Python version - -To get the script’s Python version (2.7.x/3.x), use the following: - -```python -import sys - -print ("You are using Python: " + str(sys.version_info[0])) -``` - -## Logging in orchestration scripts - -**To implement logging in your orchestration script:** - -- Use Sandbox.logger, which is based on the CloudShell standard logging format. The logger lists all the data that is needed for debugging the script, including the Sandbox id, function names, error level, time stamp and more. - - ```python - from cloudshell.workflow.orchestration.sandbox import Sandbox - - - Sandbox = Sandbox() - - resource_name = 'My_Resource' - - try: - Sandbox.automation_api.IncludeResource(resource_name) - - except: - Sandbox.logger.error('Failed to include resource {0}'.format(resource_name)) - ``` - - Orchestration script logs are saved on the execution server’s `%programdata%\QualiSystems\logs\` folder in a dedicated sub-folder with the reservation ID as the name. For example: - - ![Log Structure](/Images/Devguide-orchestration-scripts/Scripts-Deep-Dive_558x109.png) - - -## Debugging scripts - -CloudShell includes some helper functions to make it easier to debug a script by running it on real sandbox reservation data. The helper functions allow the script to be "attached” to a CloudShell sandbox, by filling in all of the script’s environment variables so that the same information is available to it as if it were launched by CloudShell. - -**To attach a script to a CloudShell sandbox:** - -1. Create a sandbox reservation. - -2. In the script’s project folder, create a Python script. We’ll use this script as our debugger. - -3. Paste the following code into the script: - - ```python - from cloudshell.helpers.scripts.cloudshell_dev_helpers import attach_to_cloudshell_as - - attach_to_cloudshell_as('CLOUDSHELL_USER', 'CLOUDSHELL_PWD', 'DOMAIN', 'RESERVATION_ID', 'SERVER_ADDRESS') - ``` - -4. To debug a specific function in your script, you will need to call the function from the debugger script. - - For example, calling the *connect\_layer1\_routes* function from a script called *Setup\_Script*: - - ```python - from cloudshell.helpers.scripts.cloudshell_dev_helpers import attach_to_cloudshell_as - - attach_to_cloudshell_as('admin', 'admin', 'Global', 'c425c01c-2cc6-4a3a-bb45-d357be6c294f', '192.168.42.125') - - from Setup_Script import connect_layer1_routes - - connect_layer1_routes() - ``` - -5. Set the relevant details and debug the new script. - - You can add additional functions to the script, from the same file or other ones in the project folder. - - As you write more complex orchestration scripts, you may want to separate the code to multiple files. To do that, we can take advantage of Python’s ability to support executing .zip archives containing multiple scripts. The only requirement, is that one of the files is named *`__main__.py`*, which is how the entry point of the Python process is determined. - - -## Referencing other packages - -1. Create a Sandbox reservation. - -2. Add the following code and fill in the required data for the function parameters. - - ```python - import cloudshell.helpers.scripts.cloudshell_dev_helpers as dev_helpers - - - dev_helpers.attach_to_cloudshell_as(user="CLOUDSHELL_USER", password="CLOUDSHELL_PWD", domain="DOMAIN", - reservation_id="RESERVATION_ID", server_address="ADDRESS", command_parameters={"NAME":"VALUE"}) - ``` - - -Note that if we include the above code in the example script we provided earlier, we’ll be able to run it locally as well as from the CloudShell Sandbox. The **attach\_to\_cloudshell\_as** function will populate all of the blueprint data as CloudShell would, so from the code’s perspective, it doesn’t make a different where it is being run from. Furthermore, the code will ignore the special **attach\_to\_cloudshell\_as** function if you run it from CloudShell so that there is no adverse effect to leaving the statement there. - -However, using this strategy will expose your CloudShell credentials in the code. To avoid this, we recommend you use a similar function which takes the same information from a file. Make sure to add that file to the .gitignore list so that it doesn’t get on source control. The following code will have the same effect as the lines above, but will look for the information in a JSON file named quali\_config.json, which should be in the project root. - -```python -import cloudshell.helpers.scripts.cloudshell_dev_helpers as dev_helpers - -dev_helpers.attach_to_cloudshell() -``` - -The `quali_config.json` should have the following structure: - -```javascript -{ - "user" : "USER", - "password" : "PASSWORD", - "domain" : "DOMAIN", - "server_address" : "SERVER_ADDRESS", - "cloudshell_api_port" :"CLOUDSHELL_API_PORT", - "reservation_id" : "reservation_id", - "command_parameters" : { "PARAM_NAME" : "PARAM_VALUE" } -} -``` diff --git a/versioned_docs/version-2023.3/devguide/developing-shells/_category_.json b/versioned_docs/version-2023.3/devguide/developing-shells/_category_.json deleted file mode 100644 index 052a2f174e..0000000000 --- a/versioned_docs/version-2023.3/devguide/developing-shells/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Developing Shells", - "position": 2 -} diff --git a/versioned_docs/version-2023.3/devguide/developing-shells/auto-discovery-for-inventory-shells.md b/versioned_docs/version-2023.3/devguide/developing-shells/auto-discovery-for-inventory-shells.md deleted file mode 100644 index f04e4d6a50..0000000000 --- a/versioned_docs/version-2023.3/devguide/developing-shells/auto-discovery-for-inventory-shells.md +++ /dev/null @@ -1,191 +0,0 @@ ---- -sidebar_position: 9 ---- - -# Auto-discovery for Inventory Shells - -Automated discovery makes it easy to import physical inventory devices into CloudShell by using automation to read their internal structure and attributes. - -## Inventory Shells in CloudShell - -Shells for physical devices are defined with a certain internal structure which can be found in their CloudShell Standard. For example, a basic physical resource can have Resource Port sub-resources, whereas a Switch can have blades and port channels according to the [Networking Shell Standard](https://github.com/QualiSystems/cloudshell-standards/blob/master/Documentation/networking_standard.md). - -## The Auto-discovery process - -Auto-discovery is triggered when creating resources for Shells that support it. When the administrator creates a resource in CloudShell Portal, CloudShell prompts the administrator to fill out mandatory attributes and then launches the Auto-discovery process, querying the physical device and describing its internal structure and attributes to CloudShell. - -**To implement the Auto-discovery process in a Shell:** - -1. Optionally update Auto-discovery attributes - -2. Implement the *get_inventory* function - -3. Add validations - -4. To test your code, create a resource with the template - - -### Update Auto-discovery in the shell-definition.yaml file - -The `shell-definition.yaml` file includes a basic Auto-discovery template. - -```css - capabilities: - auto_discovery_capability: - type: cloudshell.capabilities.AutoDiscovery - properties: - enable_auto_discovery: - type: boolean - default: true - auto_discovery_description: - type: string - default: - inventory_description: - type: string - default: -``` - -The Auto-discovery process is described as a TOSCA capability with the following properties. Feel free to optionally modify them. - -- **enable_auto_discovery** - This property defines whether the Auto-discovery process is automatically triggered when creating a new resource. - -- **auto_discovery_description** - This description is presented to the user before the Auto-discovery process begins. - -- **inventory_description** - This is the description of the Shell template. It is presented to the user when creating a new resource. - - -### Add mandatory attributes to the Auto-discovery process - -In many Auto-discovery implementations, we need to ask the administrator for information before communicating with the physical device, for example, to provide the administrator’s credentials. If we add custom attributes to the Auto-discovery definition of the Shell, CloudShell will prompt the administrator to fill out these attributes before running the discovery. This ensures that the information will be available for the discovery process to use. - -In the context of this example, we’ll add 3 properties to the Auto-discovery process: **User**, **Password** and **my_custom_attribute**. - -The **User** and **Password** attributes are defined in the standard, so we only need to add them to the *auto\_discovery\_capability* section. However, **my\_custom\_attribute** is a specific attribute that we want to add to this Shell, so we need to add the attribute to both the properties section and the *auto\_discovery\_capability* section. - -```css -vendor.ImplementingDiscovery: - derived_from: cloudshell.nodes.Switch - properties: - my_custom_attribute: - type: string # optional values: string, integer, float, boolean, cloudshell.datatypes.Password - capabilities: - auto_discovery_capability: - type: cloudshell.capabilities.AutoDiscovery - properties: - enable_auto_discovery: - type: boolean - default: true - auto_discovery_description: - type: string - default: Describe the auto discovery - inventory_description: - type: string - default: Describe the resource shell template - User: - type: string - Password: - type: cloudshell.datatypes.Password - my_custom_attribute: - type: string -``` - -For example: - -![](/Images/Devguide-shells/Auto-discovery-for-Inventory_624x471.png) - -### Implement the get\_inventory function - -The goal of the *get\_inventory* function in the Shell’s driver is to query the device and return a list of sub-resources and attribute values back to CloudShell. After querying the device, the function should return a specific result to CloudShell to allow creating the right resources. This process is called *discovery* in CloudShell Portal, and *autoload* in Resource Manager Client. - -**To implement the get\_inventory function:** - -1. Run the `shellfoundry generate` command to generate the Shell’s data model. For more information about the Shell’s data model, see [Managing the Shell’s Data Model](./managing-the-shell-data-mode.md). -2. Uncomment the following import in the shell's `driver.py` file: - - ```javascript - from data_model import * - ``` - - -This is an example of a *get\_inventory* implementation: - -[This Github Sample](https://github.com/QualiSystems/devguide_examples/blob/master/2nd%20gen%20shells%20-%20implementing_discovery/src/driver.py) is by [QualiSystems](https://github.com/QualiSystems) - -2nd%20gen%20shells%20-%20implementing\_discovery/src/driver.py [view](https://github.com/QualiSystems/devguide_examples/blob/master/2nd%20gen%20shells%20-%20implementing_discovery/src/driver.py) [raw](https://raw.githubusercontent.com/QualiSystems/devguide_examples/master/2nd%20gen%20shells%20-%20implementing_discovery/src/driver.py) - -```python -def get_inventory(self, context): - """ - Discovers the resource structure and attributes. - :param AutoLoadCommandContext context: the context the command runs on - :return Attribute and sub-resource information for the Shell resource you can return an AutoLoadDetails object - :rtype: AutoLoadDetails - """ - - resource = ImplementingDiscovery.create_from_context(context) - resource.vendor = 'specify the shell vendor' - resource.model = 'specify the shell model' - - chassis1 = GenericChassis('Chassis 1') - chassis1.model = 'WS-X4232-GB-RJ' - chassis1.serial_number = 'JAE053002JD' - resource.add_sub_resource('1', chassis1) - - module1 = GenericModule('Module 1') - module1.model = 'WS-X5561-GB-AB' - module1.serial_number = 'TGA053972JD' - chassis1.add_sub_resource('1', module1) - - port1 = GenericPort('Port 1') - port1.mac_address = 'fe80::e10c:f055:f7f1:bb7t16' - port1.ipv4_address = '192.168.10.7' - module1.add_sub_resource('1', port1) - - return resource.create_autoload_details() -``` - -This *get\_inventory* code creates an instance of the root resource by calling the *create\_from\_context* function. In this particular example, we’re autoloading the root’s sub-resources and their attributes, and populating the Vendor and Model attribute values on the root resource. - -Note that *get\_inventory* only creates the sub-resources and configures their attributes as the root resource already exists at this stage. Autoload can also update the attribute values on the root level. - -This sample creates *GenericChassis*, *GenericModule* and *GenericPort* resource models and uses the *add\_sub\_resource* function to build the resource hierarchy. - -**To create the port:** - -1. Create a new *GenericPort* instance. - -2. Provide a unique name for the port. - -3. Add it as a sub resource of a specific module: a. Call the *add\_sub\_resource* function on the module. b. Provide both the *relative\_address* of the port and the instance that represents the port. - - To return the information back to CloudShell, we need to use a specific data structure that represents the result of the discovery. The data structure is created automatically by calling the *create\_autoload\_details()* function. - - -### Add validations - -A common enhancement for discovery functions that greatly improves the usability of the Auto-discovery process is to validate the information provided by the administrator. For example, trying to log in with the address and credentials and reporting back any error, or checking the text for illegal characters. - -Any exceptions raised in the *get\_inventory* flow will display an error message to help the administrator correct their input and try again - -### Create a resource with the template - -To test the code, let’s create a resource based on the Shell template. - -**To create a resource with the template:** - -1. Import the Shell template using ShellFoundry. - -2. Open CloudShell Portal’s **Inventory** dashboard and click the **Add New** button. A dialog box is displayed, prompting you to select the template and enter a resource name. - -3. Select the **ImplementingDiscovery** template, enter a name for the resource, and click **Create**. - - The **Resource** dialog box is displayed. - - ![](/Images/Devguide-shells/Auto-discovery-for-Inventory_1_624x428.png) - -4. Enter the **Username** and **Password** and click **Start discovery**. The *get\_inventory* function creates the entire device structure and a system message pops up to indicate the discovery process completed successfully. - -5. To validate, enter the name of the new resource in the **Inventory** search field. You should see a list of sub-resources with the discovered attributes: - - ![](/Images/Devguide-shells/Auto-discovery-for-Inventory_2_624x195.png) - \ No newline at end of file diff --git a/versioned_docs/version-2023.3/devguide/developing-shells/commands-visibility-and-usability.md b/versioned_docs/version-2023.3/devguide/developing-shells/commands-visibility-and-usability.md deleted file mode 100644 index db098372ad..0000000000 --- a/versioned_docs/version-2023.3/devguide/developing-shells/commands-visibility-and-usability.md +++ /dev/null @@ -1,266 +0,0 @@ ---- -sidebar_position: 7 ---- - -# Commands Visibility and Usability - -The Shell driver commands are accessible to CloudShell users via the portal as well as to orchestration scripts running on the sandbox. In this section we’ll explore the different ways in which these commands can be customized in their appearance and behavior. The following customization options will be reviewed: - -- [Changing the shell’s Python version](#changing-the-shells-python-version) -- [Changing the function’s display name and description](#changing-the-functions-display-name-and-description) -- [Setting "admin only” functions](#setting-admin-only-functions) -- [Optional parameters and default values](#optional-parameters-and-default-values) -- [Restricting input to a specific set of possible values](#restricting-input-to-a-specific-set-of-possible-values) -- [Adding categories](#adding-categories) -- [Orchestration only commands (hidden commands)](#orchestration-only-commands-hidden-commands) - -If you haven’t done some already it is recommended to go through the [Getting Started with Shell Development](./getting-started.md) tutorial before continuing to get a better understanding of the overall process of creating and using a shell. We also assume you’ve gone through the steps described in the [Setting up the Development Environment](../setting-up-dev-env.md) section of this guide. - -## Setting up - -We’ll start by creating a new shell that we’ll use in this example. In the [Getting Started with Shell Development](./getting-started.md) tutorial we used the Shellfoundry CLI tool to generate a working shell to get started quickly. In this section we’ll also be using the Shellfoundry to create an example shell, only this time we’ll use a different project template. The *resource-clean* template is similar to the default template we’ve used previously only it doesn’t contain any example driver functions. This will make it easier for us to really go through the experience of starting from a clean slate. - -From the command line, navigate to a folder under which you’ll want the new shell to be created and type in the following: - -```python -shellfoundry new customization-example -cd customization_example -``` - -A new project with an empty driver is created. - -Let’s start by creating a function we can experiment on. Open the driver file. The file is named `driver.py` and is located in the `src` folder of the shell project. Add the following function to the shell driver class and save it: - -```python -def user_facing_function(self, context, some_parameter, some_other_parameter): - """ - :type context: cloudshell.shell.core.driver_context.ResourceCommandContext - :type some_parameter: str - :type some_other_parameter: str - """ - return "Thank you for calling this function." -``` - -We’ve now created a shell with a single command. Similar to the flow covered in the [Getting Started with Shell Development](./getting-started.md) tutorial, the next steps would be to create a resource instance of this shell in CloudShell and add it to a sandbox so we can experiment with it. You should refer to the [Getting Started with Shell Development](./getting-started.md) tutorial for any question on how to accomplish the three steps below: - -1. Install the shell by running the following from the shell directory: `shellfoundry install` - -2. Create a resource instance from the CloudShell inventory. - -3. Create a new sandbox and drag the resource instance into it. Open the **Commands** pane. - - -At this point the **Commands** pane should look something like this: - -![](/Images/Devguide-shells/Commands-Visibility-and-Usability_624x263.png) - -As you can see, we didn’t need to specify any additional details to get our Python functions to be visible as shell commands in the CloudShell sandbox, however the commands appear if a very ‘code’ like manner so our next step would be making them a bit more presentable. - -The information on how to display the driver functions in CloudShell is stored in the `drivermetadata.xml` file located in the driver's `/src` directory. - -## Changing the shell’s Python version - -To change the shell’s default Python version, open the `drivermetadata.xml` file and in the Driver line, add the `PythonVersion` property with the new version (2, 3). For example: - -```javascript - -``` -:::note -Shells without the `PythonVersion` property are considered Python 2. -::: -## Changing the function’s display name and description - -For the first round of customizations, we’ll work on the user facing function and improve the naming of the command and its parameters as they appear to the user in CloudShell. Open the `drivermetadata.xml` file and add the following text to it: - -```javascript - - - - - - -``` - -Each *Command* element in the xml above customizes a single Python function specified by the **Name** attribute. The **DisplayName** and **Description** attributes determines the name of the command as it appears to the user and the description appearing next to it, respectively. - -Reinstall the Shell in CloudShell by running the following command-line and check the **Resource Commands** panel again. - -```python -shellfoundry install -``` - -The shell commands should now look like this: - -![](/Images/Devguide-shells/Commands-Visibility-and-Usability_1_624x378.png) - -Please note that changing the display name of a function will affect only how its visually rendered in the UI. Code trying to execute this command using the CloudShell API will need to still refer to it by the command *name*. - -## Setting "admin only” functions - -It is also possible to set certain functions to only be accessible to admins. This is done using the **Visibility** attribute, which determines which user types can see the command in the blueprint or sandbox. Options are **AdminOnly** and **Everyone**. By default, all commands are accessible to everyone. - -In the `drivermetadata.xml` file, add the `Visibility="AdminOnly"` attribute to the command: - -```javascript - - - - - - -``` - -## Optional parameters and default values - -For each of the command parameters, we may want to specify whether that parameter is mandatory for the user to supply, and whether there should be a default value in case the user didn’t enter any value. - -In the following example, we will make the first parameter mandatory by setting the **Mandatory** attribute to **True**. Users will be required to enter a value for parameters before being able to run the command. The second parameter is optional but now has a default value which we will set using the **DefaultValue** attribute: - -```javascript - - - - - - - - - - - -``` - -Re-installing the shell will update the commands pane accordingly: - -![](/Images/Devguide-shells/Commands-Visibility-and-Usability_2_624x240.png) - -## Restricting input to a specific set of possible values - -For certain parameters, you might want the user to select between a pre-determined set of values, rather than leave the inputs as a free text entry. To set that up, you need to add that information to the parameter XML: - -```javascript - - - - - - - - - - - -``` - -In the xml above, we’ve specified that the second parameter must be selected out of a specific set of possible values. We did that by adding the **Type** attribute to the parameter element and setting it as *Lookup*. To define the possible values, we’ve added the **AllowedValues** attribute, which sets the possible values for this parameter, represented as a comma separated list. In this case, the possible values are **Yes** and **No**. We’ve also changed the default value to conform to the possible options. - -After re-installing the shell, the **Commands** pane now reflects the parameter new value restriction: - -![](/Images/Devguide-shells/Commands-Visibility-and-Usability_3_624x225.png) - -## Adding categories - -As you add more commands to the resource, it can be useful to visually group them into categories and improve the usability of the commands panel. These categories will appear as folders which the user can navigate. To demonstrate this capability, let’s first add additional commands to the shell. Open the `driver.py` file located in the `/src` directory and add the following two functions: - -```python -def backup(self, context): - """ - :type context: cloudshell.shell.core.driver_context.ResourceCommandContext - """ - return "Backing up..." - -def restore(self, context): - """ - :type context: cloudshell.shell.core.driver_context.ResourceCommandContext - """ - return "Restoring..." -``` - -Grouping together commands under a category is pretty strait forward: Simply add a *Category* element and nest the relevant commands under it. In this case, we’ve added a category called *Operate* for the previous operation we’ve implemented and a category named *Management* for the new save and restore functions: - -```javascript - - - - - - - - - - - - - - - - - - -``` - -After re-installing the shell we get the following command panel layout: - -![](/Images/Devguide-shells/Commands-Visibility-and-Usability_4_624x291.png) - -## Orchestration only commands (hidden commands) - -Sometimes, you may wish to create commands that are intended to be used as a part of an orchestration flow, for example to be called during setup, but want these commands to be inaccessible to users \[hidden\] from the UI. For example, a command that is called during a sandbox’s Setup process. To support this use case, CloudShell supports a special category, the *Hidden Commands* category, which allows you to omit commands from the web portal UI while allowing them to be invoked via the API. - -To demonstrate this capability, let’s first add a new function to our driver class in the `driver.py` file: - -```python -def api_only_function(self, context): - """ - :type context: cloudshell.shell.core.driver_context.ResourceCommandContext - """ - return "You didn't see this on the web interface..." -``` - -Next, let’s add the special category to the `drivermetadata.xml` file and nest that command under it: - -```javascript - - - - - - - - - - - - - - - - - - - - - -``` - -After re-installing the shell you’ll see the new function doesn’t appear in the **Commands** pane:  - -![](/Images/Devguide-shells/Commands-Visibility-and-Usability_5_624x436.png) - -Note that the **Visibility** attribute we discussed earlier in this article does not apply to commands in this category and will be ignored. - -However, if you query the list of commands on the shell via the API, you’ll be able to see it as well as invoke it: - -![](/Images/Devguide-shells/Commands-Visibility-and-Usability_6_624x160.png) - -## Summary - -In this section we reviewed different ways in which its possible to customize the appearance and behavior of commands and command parameters from the user’s perspective. If you have feedback or additional suggestions for features and improvements be sure to post them on our idea box. We’re always looking for new ideas! diff --git a/versioned_docs/version-2023.3/devguide/developing-shells/common-driver-recipes.md b/versioned_docs/version-2023.3/devguide/developing-shells/common-driver-recipes.md deleted file mode 100644 index 84a02d8ed4..0000000000 --- a/versioned_docs/version-2023.3/devguide/developing-shells/common-driver-recipes.md +++ /dev/null @@ -1,251 +0,0 @@ ---- -sidebar_position: 14 ---- - -# Common Driver Recipes - -In this section we’ll provide a few handy examples of common driver operations. - -The intention is to grow this into a good source to copy paste common code from. Most of the examples are available in the [DevGuide Examples](https://github.com/QualiSystems/devguide_examples) repository under the `common_driver_recipes` folder. - -## Decrypting a password attribute - -The password for logging into the device/app will be passed as an encrypted value to the driver as a part of the context object. In order to be able to use it to log in you’ll most likely need to decrypt it. To do that, you can use the CloudShellAPI function DecryptPassword. - -:::note -**DecryptPassword** is for decrypting password-type attributes, and can only be executed by CloudShell admins. -::: - -See the code below for an example: - -[This Github Sample](https://github.com/QualiSystems/devguide_examples/blob/driver_deep_dive/adding_examples/common_driver_recipes/src/driver.py) is by [QualiSystems](https://github.com/QualiSystems) - -`adding_examples/common_driver_recipes/src/driver.py` [view](https://github.com/QualiSystems/devguide_examples/blob/driver_deep_dive/adding_examples/common_driver_recipes/src/driver.py) [raw](https://raw.githubusercontent.com/QualiSystems/devguide_examples/driver_deep_dive/adding_examples/common_driver_recipes/src/driver.py) - -```python -def decrypt_password(self, context): - """ - A simple example function - :param ResourceCommandContext context: the context the command runs on - """ - session = CloudShellAPISession(host=context.connectivity.server_address, - token_id=context.connectivity.admin_auth_token, - domain=context.reservation.domain) - - password = session.DecryptPassword(context.resource.attributes['Password']).Value -``` - -Note that in Python 3 shells, you no longer need to decrypt passwords as this is done out of the box by the [cloudshell-shell-networking-standard](https://pypi.org/project/cloudshell-shell-networking-standard/) Python package. - -## Updating the resource live status - -The resource live status can be used to indicate the current state of the resource on the diagram. CloudShell comes with a pre-built collection of statuses you can use, and this collection of icons can also be extended if needed. - -The following code will update the resource live status from offline to online: - -[This Github Sample](https://github.com/QualiSystems/devguide_examples/blob/driver_deep_dive/adding_examples/common_driver_recipes/src/driver.py) is by [QualiSystems](https://github.com/QualiSystems) - -`adding_examples/common_driver_recipes/src/driver.py` [view](https://github.com/QualiSystems/devguide_examples/blob/driver_deep_dive/adding_examples/common_driver_recipes/src/driver.py) [raw](https://raw.githubusercontent.com/QualiSystems/devguide_examples/driver_deep_dive/adding_examples/common_driver_recipes/src/driver.py) - -```python -def update_resource_status(self, context): - """ - A simple example function - :param ResourceCommandContext context: the context the command runs on - """ - session = CloudShellAPISession(host=context.connectivity.server_address, - token_id=context.connectivity.admin_auth_token, - domain=context.reservation.domain) - - session.SetResourceLiveStatus(context.resource.name, "Offline" ) - for i in range(0,10): - session.SetResourceLiveStatus(context.resource.name, "Progress {status}".format(status=str(i*10))) - - session.SetResourceLiveStatus(context.resource.name, "Online" ) -``` - -The full list of statuses can be found in the ServerUniversalSettings.xml file which you can find on the Quali Server machine under the `%programdata%\QualiSystems\Settings\Global` directory: - -```xml - - C:\ProgramData\QualiSystems\Portal\Content\Images\online.png - C:\ProgramData\QualiSystems\Portal\Content\Images\online.png - C:\ProgramData\QualiSystems\Portal\Content\Images\offline.png - C:\ProgramData\QualiSystems\Portal\Content\Images\error.png - C:\ProgramData\QualiSystems\Portal\Content\Images\progress0.png - C:\ProgramData\QualiSystems\Portal\Content\Images\progress10.png - C:\ProgramData\QualiSystems\Portal\Content\Images\progress20.png - C:\ProgramData\QualiSystems\Portal\Content\Images\progress30.png - C:\ProgramData\QualiSystems\Portal\Content\Images\progress40.png - C:\ProgramData\QualiSystems\Portal\Content\Images\progress50.png - C:\ProgramData\QualiSystems\Portal\Content\Images\progress60.png - C:\ProgramData\QualiSystems\Portal\Content\Images\progress70.png - C:\ProgramData\QualiSystems\Portal\Content\Images\progress80.png - C:\ProgramData\QualiSystems\Portal\Content\Images\progress90.png - C:\ProgramData\QualiSystems\Portal\Content\Images\progress100.png - -``` - -## Sending a message to the sandbox console - -Another way to update the sandbox regarding an operation progress is to use the WriteMessageToReservationOutput function to display a message in the Sandbox console pane. We can easily modify the previous code to do that instead: - -[This Github Sample](https://github.com/QualiSystems/devguide_examples/blob/master/common_driver_recipes/src/driver.py) is by [QualiSystems](https://github.com/QualiSystems) - -`common_driver_recipes/src/driver.py` [view](https://github.com/QualiSystems/devguide_examples/blob/master/common_driver_recipes/src/driver.py) [raw](https://raw.githubusercontent.com/QualiSystems/devguide_examples/master/common_driver_recipes/src/driver.py) - -```python -def update_resource_status_to_console(self, context): - """ - A simple example function - :param ResourceCommandContext context: the context the command runs on - """ - session = CloudShellAPISession(host=context.connectivity.server_address, - token_id=context.connectivity.admin_auth_token, - domain=context.reservation.domain) - - session.WriteMessageToReservationOutput(context.reservation.reservation_id, "Starting operation") - for i in range(0, 10): - session.WriteMessageToReservationOutput(context.reservation.reservation_id, "Progress at {status}%".format(status=str(i * 10))) - - session.WriteMessageToReservationOutput(context.reservation.reservation_id, "Done - service online") -``` - -## Sending commands to a networking device - -When adding a new command that requires communication with a networking device, such as a switch or router, you need to open a session to the device. An easy way to do that is by leveraging Quali’s shell framework (cloudshell-cli package). The framework can provide a session from a session pool via Telnet, SSH or TCP, based on the configuration saved in the **CLI Connection Type** attribute on the root resource. - -See the code below for an example: - -[This Github Sample](https://github.com/QualiSystemsLab/Extended-Cisco-NXOS-Shell/blob/master/Ext_Cisco_NXOS_Shell_Package/Resource%20Drivers%20-%20Python/Generic%20Cisco%20NXOS%20Driver%20Version3%20Extended/cisco_nxos_resource_driver.py) is by [QualiSystemsLab](https://github.com/QualiSystemsLab) - -`cisco_nxos_resource_driver.py` [view](https://github.com/QualiSystemsLab/Extended-Cisco-NXOS-Shell/blob/master/Ext_Cisco_NXOS_Shell_Package/Resource%20Drivers%20-%20Python/Generic%20Cisco%20NXOS%20Driver%20Version3%20Extended/cisco_nxos_resource_driver.py) [raw](https://raw.githubusercontent.com/QualiSystemsLab/Extended-Cisco-NXOS-Shell/master/Ext_Cisco_NXOS_Shell_Package/Resource%20Drivers%20-%20Python/Generic%20Cisco%20NXOS%20Driver%20Version3%20Extended/cisco_nxos_resource_driver.py) - -```python -def some_command(self, context, command) - logger = get_logger_with_thread_id(context) - api = get_api(context) - resource_config = create_networking_resource_from_context(shell_name=self.SHELL_NAME, - supported_os=self.SUPPORTED_OS, - context=context) - cli_handler = CliHandler(self._cli, resource_config, logger, api) - with cli_handler.get_cli_service(cli_handler.enable_mode) as session: - session.send_command("some command") - with session.enter_mode(cli_handler.config_mode) as config_session: - config_session.send_command("some config command") -``` - -## Mapping connections using App sub-resources - -Developers can map connections between sub-resources residing on deployed Apps. This applies to scenarios where you want to map the port connections between virtual devices residing in App VMs. For example, to map the connection between port 1 residing on a virtual switch and port 2 residing on another virtual switch. For details, see [Mapping Connections using App Sub-resources](../reference/map-connections-using-app-sub-resources.md). - -## Defining a connected command (which runs on another resource) - -In some scenarios, a command that runs on a specific resource logically requires the use of a different resource. These types of commands are called connected commands. They are executed on a resource in CloudShell Portal but in reality run on the connected resource (for example, a power switch) that performs the action. - -There are two types of connected commands: - -- **Power commands**: Let’s say you have a target resource that is controlled by a power switch (PDU). When you run a **Power On** command on the target resource, the user may think the command is running on that resource but it actually runs on the PDU that is connected to the resource. - -- **Generic resource commands**: A remote command is similar to a power command but is not limited to power commands only. For example, you could have a command, which modifies a target resource’s settings, but is actually running on the server that performs the modifications. - - -To create a connected command, you need to use a shell based on a standard that supports connected commands, currently, only [PDU](https://github.com/QualiSystems/cloudshell-standards/blob/master/Documentation/pdu_standard.md) for power commands and the [Generic Resource with Connected Commands](https://github.com/QualiSystems/cloudshell-standards/blob/master/Documentation/Generic%20Resource%20with%20Connected%20Commands.md). These commands need to be defined in two places, in the drivermetadata.xml and in the driver.py file. - -In the driver’s drivermetadata.xml, you define which commands are connected, as follows: - -- For power commands, the command must include the Tags="power" flag and the driver must include all three power commands (Power On, Power Off and Power Cycle): - - ```xml - - - - - - - - - - - - - - - - - - ``` - -- For generic connected commands, you must use a shell that is based on a supporting standard and include the Tags="remote\_connectivity" flag on the command: - - ```xml - - - - - - - - - - - - - ``` - - -And finally, in the `driver.py` file, define the connected commands. In this case, PowerOn, PowerOff and PowerCycle: - -```python -def PowerOn(self, context, ports): - """ - :type context: cloudshell.shell.core.driver_context.ResourceRemoteCommandContext - """ - Pass -``` - -To enable intellisense, on the `driver.py`, include the ResourceRemoteCommandContext context in the command’s definition, as shown above. - -:::note Notes -- Connected command definitions must include a ports parameter. You don’t need to actually use it in your command. Just make sure it’s included as it allows the connected command to run on multiple resources at the same time. -- Power commands only apply to unshared resources while generic resource commands can run on both shared and unshared resources. -- In CloudShell, the resource containing the connected command and the target resource must be directly connected to each other. If you have a switch resource in between, the connected command will not show on the target resource. -- You can use the CloudShell Automation API’s ExecuteResourceConnectedCommand and "power management” commands to add connected commands to other shells. -::: - -### Example - power commands on a PDU shell: - -**SetPortState** should be a driver helper function that implements the specific logic of how to change the state of the power port state in a specific PDU. - -```python -import cloudshell.api.cloudshell_api as api - - -def PowerOn(self, context, ports): - """ - :type context: drivercontext.ResourceRemoteCommandContext - """ - api = self.__initApiSession__(context) - output = '' - for i in range(len(ports)): - self.SetPortState(context, ports[i].split('/')[-1], "Online") # Split the port number from its full address - api.SetResourceLiveStatus(context.remote_endpoints[i].fullname, "Online", "The Resource is powered on") - output += "Powered On {0}\n".format(context.remote_endpoints[i].fullname) - return output - -def PowerOff(self, context, ports): - api = self.__initApiSession__(context) - output = '' - for i in range(len(ports)): - self.SetPortState(context, ports[i].split('/')[-1], "Offline") # Split the port number from its full address - api.SetResourceLiveStatus(context.remote_endpoints[i].fullname, "Offline", "The Resource is powered off") - output += "Powered Off {0}\n".format(context.remote_endpoints[i].fullname) - return output - -def PowerCycle(self, context, ports, delay): - self.PowerOff(context, ports) - sleep(int(delay)) - self.PowerOn(context, ports) -``` - -For reference, see the [PDU shell template](https://github.com/QualiSystems/shellfoundry-tosca-pdu-template) or [Generic resource with connected commands shell template](https://github.com/QualiSystems/shellfoundry-tosca-resource_with_connected_commands-template). diff --git a/versioned_docs/version-2023.3/devguide/developing-shells/customize-shells.md b/versioned_docs/version-2023.3/devguide/developing-shells/customize-shells.md deleted file mode 100644 index 6a96e1ad46..0000000000 --- a/versioned_docs/version-2023.3/devguide/developing-shells/customize-shells.md +++ /dev/null @@ -1,447 +0,0 @@ ---- -sidebar_position: 12 ---- - -# Customizing Shells - -In this section, we’ll learn how to create and modify a shell’s commands and attributes. - -This article addresses two flows: - -- Modifying an existing shell - -- Creating a new shell with modifications to the standard - - -*At the end of this article, you can find an end-to-end example of how to extend an existing shell with attributes and commands.* - -Modifying an existing shell is done using the `shellfoundry extend` command. This command downloads the source code of the shell you wish to modify to your local machine and updates the shell’s Author. Note that extending official shells (shells that were released by Quali) will remove their official tag. Keep in mind that modifying a shell that is being used in CloudShell may affect any inventory resources that are based on a previous version of the shell. In the second flow, since we’re creating a new shell from the appropriate shell standard, we will use the `shellfoundry new` command and modify the shell’s settings. - -The common use cases for customizing a shell are: - -- Adding new commands - -- Modifying existing commands - -- Adding new attributes - -- Modifying existing attributes - -- Publishing attributes in a service shell - -- Associating categories to a service shell - - -*Please watch this video if you’re not sure whether to create a new shell or customize an existing one:* - - - -## Customizing a shell’s commands - -When customizing an official shell you can add new commands, and also modify or hide existing ones. - -**To add a new command:** - -- Add the command in the shell’s `driver.py` file, and expose the command in the shell’s `drivermetadata.xml` file. - - -The command’s logic should be placed either in the driver itself or in a separate Python package. - -Modifications to a command can include adding some logic either before or after the command or changing the command logic itself. In order to do that, **copy the command code** from the original Quali Python package to the shell driver or to the custom Python package you created (*the command logic resides either in the vendor package or vendor-os package - for example in "cloudshell-cisco” or "cloudshell-cisco-ios”*). - -When modifying an existing command, you can add optional input parameters. Just make sure that the implementation is backwards compatible. Note that adding mandatory inputs or removing one of the original inputs is not supported. In these cases, it is recommended to create an additional command with a different name, instead of modifying an existing one. - -For example, in this customized [Cisco NXOS shell](https://github.com/QualiSystemsLab/Extended-Cisco-NXOS-Shell), we modified the commands that configure VLANs on multiple ports and port channels. - -It is also possible to hide or remove a command. Hiding a command is done by placing it in a hidden or "admin” category in the `drivermetadata.xml` - see [Commands Visibility and Usability](./commands-visibility-and-usability.md). Note that removing a command might affect how the shell is used since CloudShell and/or some orchestration scripts might depend on the existing driver’s commands. - -When adding or modifying a command, you can leverage Quali’s shell framework to ease the development process. For details, see [Quali’s Shell Framework (Python 2)](../reference/quali-shell-framework-py2.md) and [Quali’s Shell Framework (Python 3)](../reference/quali-shell-framework-py3.md). - -See some common command extension examples in [Common Driver Recipes](./common-driver-recipes.md). - -Please check out the following instructional videos on how to develop basic driver commands: - - - - - - - -## Customizing a shell’s attributes - -You can add and modify attributes associated with the shell’s root model or with a specific sub-model within the shell. - -Modification applies to attributes that are defined in the shell’s standard. To find the attributes defined in the shell’s standard, see the [documentation page](https://github.com/QualiSystems/cloudshell-standards/tree/master/Documentation) of your shell’s standard. For such attributes, you can modify the description, default values, possible values and rules. -:::note -You cannot modify an attribute's **type** and **name**, nor any attributes that are associated with the shell’s family as this will affect other shells that use this family. -::: -### Deployment-specific vs. shell-specific attributes - -CloudShell provides two ways to customize attributes, which differ depending on the attribute’s usage: - -- **Customizing an existing shell**: Use this option when the attributes are related to a specific device but are not relevant to other shells. This is done by manually editing the shell’s *shell-definition.yaml* file. - -- **Associating custom attributes with a shell that is installed in CloudShell**: Use this option when the additional attributes are deployment-related and relevant to multiple resources of different shells. For example, the Execution Server Selector attribute. *Starting with CloudShell version 8.3, this option applies both to the root model of the shell and to the shell’s sub-resource models, such as blades and ports.* - - -The second option of associating custom attributes with an already installed shell is done either via CloudShell Portal or by calling the *SetCustomShellAttribute* API method. For additional information on this method, see [Deploying to Production](./deploy-to-prod.md). - -
    -Deleting a 2nd Gen shell’s default attributes (those that come with the standard) is not supported. It is also not possible to customize a 2nd Gen shell’s data model (families and models) and its structure, which is as defined in the shell standard the original shell is based on. -
    - -### Adding or modifying attributes in a shell’s root or sub-model - -This section explains how to add attributes to the shell’s root model and to specific models within the shell. To learn how to expose attributes that are required for the discovery of the resource (in the **Inventory** dashboard’s **Resource** discovery dialog box), see [Auto-discovery for Inventory Shells](./auto-discovery-for-inventory-shells.md). - -**To add/modify a shell’s attributes:** - -1. Open command-line. - -2. To customize a shell that resides on your local machine, make sure command-line is pointing to a different path from the original shell’s root folder. - -3. Run the appropriate command in command-line: - - **To modify a shell:** - - ```python - shellfoundry extend - ``` - - The path can be a URL to the source code of the shell’s desired release in [Quali Repositories](https://github.com/orgs/QualiSystems/discussions/categories/integrations) or the filesystem path (prefixed by local:) to the extracted source code folder (like "local:C:\\temp\\Cisco-NXOS-Switch-Shell-2G-2.0.1”). - - **To create a new shell based on a specific shell standard:** - - ```python - shellfoundry new --template