Applications¶
Applications specify the input parameters and invocation of a software package.
Rationale¶
All Application
s in UCloud consist of two components: the
Tool
and the Application
The Tool
defines the computational environment. This includes
software packages and other assets (e.g. configuration). A typical example would be a base-image for a container or a
virtual machine. The Application
describes how to invoke the Tool
. This includes specifying the
input parameters and command-line invocation for the Tool
.
In concrete terms, the “invocation” of an Application
covers:
Mandatory and optional input parameters. For example: text and numeric values, command-line flags and input files.
The command-line invocation, using values from the input parameters.
Resources attached to the compute environment. For example: files, IP addresses and software licenses.
An application type, defining how the user interacts with it. For example: Batch, web and remote desktop (VNC).
⚠️ WARNING: The API listed on this page will likely change to conform with our API conventions. Be careful when building integrations. The following changes are expected:
RPC names will change to conform with the conventions
RPC request and response types will change to conform with the conventions
RPCs which return a page will be collapsed into a single
browse
endpointSome property names will change to be consistent with
Resource
s
Application
s can be further divided into groups. An ApplicationGroup
does not influence the
invocation of the application, but is used solely to visually group applications on UCloud’s application store.
Table of Contents¶
1. Examples
Description |
---|
Simple batch application |
Simple virtual machine |
Simple web application |
Simple remote desktop application (VNC) |
Registering a file handler |
An Application with default values |
2. Remote Procedure Calls
Name | Description |
---|---|
browseCategories |
No description |
browseGroups |
No description |
browseSpotlight |
No description |
create |
Creates a new Application and inserts it into the catalog |
findByName |
Finds Applications given an exact name |
findByNameAndVersion |
Retrieves an Application by name and version, or newest Application if version is not specified |
listAllApplications |
No description |
retrieveAcl |
Retrieves the permission information associated with an Application |
retrieveAppLogo |
No description |
retrieveCarrouselImage |
No description |
retrieveCategory |
No description |
retrieveGroup |
No description |
retrieveGroupLogo |
No description |
retrieveLandingPage |
No description |
retrieveSpotlight |
No description |
retrieveStars |
Retrieves the list of favorite Applications for the current user |
search |
Searches in the Application catalog using a free-text query |
activateSpotlight |
No description |
addGroupToCategory |
No description |
addLogoToGroup |
Uploads a logo and associates it with a group |
assignApplicationToGroup |
No description |
assignPriorityToCategory |
No description |
browseOpenWithRecommendations |
Finds a page of Application which can open a specific UFile |
createCategory |
No description |
createGroup |
No description |
createSpotlight |
No description |
deleteCategory |
No description |
deleteGroup |
No description |
deleteSpotlight |
No description |
devImport |
No description |
export |
No description |
importFromFile |
No description |
removeGroupFromCategory |
No description |
removeLogoFromGroup |
No description |
toggleStar |
Toggles the favorite status of an Application for the current user |
updateAcl |
Updates the permissions associated with an Application |
updateApplicationFlavor |
Updates the flavor name for a set of applications |
updateCarrousel |
No description |
updateCarrouselImage |
No description |
updateGroup |
No description |
updatePublicFlag |
Changes the 'publicly accessible' status of an Application |
updateSpotlight |
No description |
updateTopPicks |
No description |
3. Data Models
Name | Description |
---|---|
Application |
Applications specify the input parameters and invocation of a software package. |
ApplicationMetadata |
Metadata associated with an Application |
ApplicationInvocationDescription |
The specification for how to invoke an Application |
ApplicationType |
The ApplicationType determines how user's interact with an Application |
VncDescription |
Information to the Provider about how to reach the VNC services |
WebDescription |
Information to the Provider about how to reach the web services |
ContainerDescription |
Information to the Provider about how to launch the container |
ApplicationParameter |
An ApplicationParameter describe a single input parameter to an Application. |
ApplicationParameter.TextArea |
An ApplicationParameter describe a single input parameter to an Application. |
ApplicationParameter.Bool |
An input parameter which accepts any boolean value |
ApplicationParameter.Enumeration |
An input parameter which accepts an enum |
ApplicationParameter.FloatingPoint |
An input parameter which accepts any floating point value |
ApplicationParameter.Ingress |
An input parameter which accepts a ingress (public link) |
ApplicationParameter.InputDirectory |
An input parameter which accepts UFiles of type `DIRECTORY` |
ApplicationParameter.InputFile |
An input parameter which accepts UFiles of type `FILE` |
ApplicationParameter.Integer |
An input parameter which accepts any integer value |
ApplicationParameter.LicenseServer |
An input parameter which accepts a license |
ApplicationParameter.NetworkIP |
An input parameter which accepts an IP address |
ApplicationParameter.Peer |
An input parameter which accepts a peering Job |
ApplicationParameter.Text |
An input parameter which accepts text |
AppParameterValue |
An `AppParameterValue` is value which is supplied to a parameter of an `Application`. |
AppParameterValue.BlockStorage |
A reference to block storage (Not yet implemented) |
AppParameterValue.Bool |
A boolean value (true or false) |
AppParameterValue.File |
A reference to a UCloud file |
AppParameterValue.FloatingPoint |
A floating point value |
AppParameterValue.Ingress |
A reference to an HTTP ingress, registered locally at the provider |
AppParameterValue.Integer |
An integral value |
AppParameterValue.License |
A reference to a software license, registered locally at the provider |
AppParameterValue.Network |
A reference to block storage (Not yet implemented) |
AppParameterValue.Peer |
A reference to a separate UCloud `Job` |
AppParameterValue.Text |
A textual value |
InvocationParameter |
InvocationParameters supply values to either the command-line or environment variables. |
BooleanFlagParameter |
Produces a toggleable command-line flag |
EnvironmentVariableParameter |
Produces an environment variable (TODO Documentation) |
VariableInvocationParameter |
An InvocationParameter which produces value(s) from parameters. |
WordInvocationParameter |
A static value for an InvocationParameter |
AccessEntity |
No description |
AppParameterValue.TextArea |
A textual value |
ApplicationAccessRight |
No description |
ApplicationCategory |
No description |
ApplicationCategory.Metadata |
No description |
ApplicationCategory.Specification |
No description |
ApplicationCategory.Status |
No description |
ApplicationGroup |
No description |
ApplicationGroup.ColorReplacements |
No description |
ApplicationGroup.Metadata |
No description |
ApplicationGroup.Specification |
No description |
ApplicationGroup.Status |
No description |
ApplicationParameter.EnumOption |
No description |
ApplicationSummaryWithFavorite |
Applications specify the input parameters and invocation of a software package. |
ApplicationWithExtension |
Applications specify the input parameters and invocation of a software package. |
ApplicationWithFavoriteAndTags |
Applications specify the input parameters and invocation of a software package. |
CarrouselItem |
No description |
DetailedAccessEntity |
No description |
DetailedEntityWithPermission |
No description |
ModulesSection |
Section describing the module capabilities of an application |
Project |
No description |
Spotlight |
No description |
SshDescription |
Information to the provider about the SSH capabilities of this application |
SshDescription.Mode |
No description |
ToolReference |
A reference to a Tool |
TopPick |
No description |
ACLEntryRequest |
No description |
AppStore.AddGroupToCategory.Request |
No description |
AppStore.AddLogoToGroup.Request |
No description |
AppStore.AssignApplicationToGroup.Request |
No description |
AppStore.AssignPriorityToCategory.Request |
No description |
AppStore.BrowseCategories.Request |
The base type for requesting paginated content. |
AppStore.BrowseGroups.Request |
The base type for requesting paginated content. |
AppStore.BrowseOpenWithRecommendations.Request |
The base type for requesting paginated content. |
AppStore.BrowseSpotlight.Request |
The base type for requesting paginated content. |
AppStore.DevImport.Request |
No description |
AppStore.RemoveGroupFromCategory.Request |
No description |
AppStore.RetrieveAcl.Request |
No description |
AppStore.RetrieveAppLogo.Request |
No description |
AppStore.RetrieveCarrouselImage.Request |
No description |
AppStore.RetrieveGroupLogo.Request |
No description |
AppStore.Search.Request |
The base type for requesting paginated content. |
AppStore.ToggleStar.Request |
No description |
AppStore.UpdateAcl.Request |
No description |
AppStore.UpdateApplicationFlavor.Request |
No description |
AppStore.UpdateCarrousel.Request |
No description |
AppStore.UpdateCarrouselImage.Request |
No description |
AppStore.UpdateGroup.Request |
No description |
AppStore.UpdatePublicFlag.Request |
No description |
AppStore.UpdateTopPicks.Request |
No description |
FindByNameAndVersionRequest |
No description |
AppStore.ListAllApplications.Response |
No description |
AppStore.RetrieveAcl.Response |
No description |
AppStore.RetrieveLandingPage.Response |
No description |
AppStore.RetrieveStars.Response |
No description |
Example: Simple batch application¶
Frequency of use | Common |
---|---|
Actors |
|
Communication Flow: Kotlin
/* Applications contain quite a lot of information. The most important pieces of information are
summarized below:
- This Job will run a `BATCH` application
- See `invocation.applicationType`
- The application should launch the `acme/batch:1.0.0` container
- `invocation.tool.tool.description.backend`
- `invocation.tool.tool.description.image`
- The command-line invocation will look like this: `acme-batch --debug "Hello, World!"`.
- The invocation is created from `invocation.invocation`
- With parameters defined in `invocation.parameters` */
AppStore.findByNameAndVersion.call(
FindByNameAndVersionRequest(
appName = "acme-batch",
appVersion = "1.0.0",
),
user
).orThrow()
/*
ApplicationWithFavoriteAndTags(
favorite = false,
invocation = ApplicationInvocationDescription(
allowAdditionalMounts = null,
allowAdditionalPeers = null,
allowMultiNode = false,
allowPublicIp = false,
allowPublicLink = null,
applicationType = ApplicationType.BATCH,
container = null,
environment = null,
fileExtensions = emptyList(),
invocation = listOf(WordInvocationParameter(
word = "acme-batch",
), VariableInvocationParameter(
isPrefixVariablePartOfArg = false,
isSuffixVariablePartOfArg = false,
prefixGlobal = "--debug ",
prefixVariable = "",
suffixGlobal = "",
suffixVariable = "",
variableNames = listOf("debug"),
), VariableInvocationParameter(
isPrefixVariablePartOfArg = false,
isSuffixVariablePartOfArg = false,
prefixGlobal = "",
prefixVariable = "",
suffixGlobal = "",
suffixVariable = "",
variableNames = listOf("value"),
)),
licenseServers = emptyList(),
modules = null,
outputFileGlobs = listOf("*"),
parameters = listOf(ApplicationParameter.Bool(
defaultValue = null,
description = "Should debug be enabled?",
falseValue = "false",
name = "debug",
optional = false,
title = "",
trueValue = "true",
), ApplicationParameter.Text(
defaultValue = null,
description = "The value for the batch application",
name = "value",
optional = false,
title = "",
)),
shouldAllowAdditionalMounts = false,
shouldAllowAdditionalPeers = true,
ssh = null,
tool = ToolReference(
name = "acme-batch",
tool = Tool(
createdAt = 1633329776235,
description = NormalizedToolDescription(
authors = listOf("UCloud"),
backend = ToolBackend.DOCKER,
container = null,
defaultNumberOfNodes = 1,
defaultTimeAllocation = SimpleDuration(
hours = 1,
minutes = 0,
seconds = 0,
),
description = "An example tool",
image = "acme/batch:1.0.0",
info = NameAndVersion(
name = "acme-batch",
version = "1.0.0",
),
license = "None",
requiredModules = emptyList(),
supportedProviders = null,
title = "Acme batch",
),
modifiedAt = 1633329776235,
owner = "_ucloud",
),
version = "1.0.0",
),
vnc = null,
web = null,
),
metadata = ApplicationMetadata(
authors = listOf("UCloud"),
createdAt = 1717663228341,
description = "An example application",
flavorName = null,
group = ApplicationGroup(
metadata = ApplicationGroup.Metadata(
id = 0,
),
specification = ApplicationGroup.Specification(
categories = emptySet(),
colorReplacement = ApplicationGroup.ColorReplacements(
dark = null,
light = null,
),
defaultFlavor = null,
description = "",
logoHasText = false,
title = "Test Group",
),
status = ApplicationGroup.Status(
applications = null,
),
),
isPublic = true,
name = "acme-batch",
public = true,
title = "Acme batch",
version = "1.0.0",
website = null,
),
tags = emptyList(),
)
*/
Communication Flow: Curl
# ------------------------------------------------------------------------------------------------------
# $host is the UCloud instance to contact. Example: 'http://localhost:8080' or 'https://cloud.sdu.dk'
# $accessToken is a valid access-token issued by UCloud
# ------------------------------------------------------------------------------------------------------
# Applications contain quite a lot of information. The most important pieces of information are
# summarized below:
#
# - This Job will run a `BATCH` application
# - See `invocation.applicationType`
#
# - The application should launch the `acme/batch:1.0.0` container
# - `invocation.tool.tool.description.backend`
# - `invocation.tool.tool.description.image`
#
# - The command-line invocation will look like this: `acme-batch --debug "Hello, World!"`.
# - The invocation is created from `invocation.invocation`
# - With parameters defined in `invocation.parameters`
# Authenticated as user
curl -XGET -H "Authorization: Bearer $accessToken" "$host/api/hpc/apps/byNameAndVersion?appName=acme-batch&appVersion=1.0.0"
# {
# "metadata": {
# "name": "acme-batch",
# "version": "1.0.0",
# "authors": [
# "UCloud"
# ],
# "title": "Acme batch",
# "description": "An example application",
# "website": null,
# "public": true,
# "flavorName": null,
# "group": {
# "metadata": {
# "id": 0
# },
# "specification": {
# "title": "Test Group",
# "description": "",
# "defaultFlavor": null,
# "categories": [
# ],
# "colorReplacement": {
# "light": null,
# "dark": null
# },
# "logoHasText": false
# },
# "status": {
# "applications": null
# }
# },
# "createdAt": 1717663228341
# },
# "invocation": {
# "tool": {
# "name": "acme-batch",
# "version": "1.0.0",
# "tool": {
# "owner": "_ucloud",
# "createdAt": 1633329776235,
# "modifiedAt": 1633329776235,
# "description": {
# "info": {
# "name": "acme-batch",
# "version": "1.0.0"
# },
# "container": null,
# "defaultNumberOfNodes": 1,
# "defaultTimeAllocation": {
# "hours": 1,
# "minutes": 0,
# "seconds": 0
# },
# "requiredModules": [
# ],
# "authors": [
# "UCloud"
# ],
# "title": "Acme batch",
# "description": "An example tool",
# "backend": "DOCKER",
# "license": "None",
# "image": "acme/batch:1.0.0",
# "supportedProviders": null
# }
# }
# },
# "invocation": [
# {
# "type": "word",
# "word": "acme-batch"
# },
# {
# "type": "var",
# "variableNames": [
# "debug"
# ],
# "prefixGlobal": "--debug ",
# "suffixGlobal": "",
# "prefixVariable": "",
# "suffixVariable": "",
# "isPrefixVariablePartOfArg": false,
# "isSuffixVariablePartOfArg": false
# },
# {
# "type": "var",
# "variableNames": [
# "value"
# ],
# "prefixGlobal": "",
# "suffixGlobal": "",
# "prefixVariable": "",
# "suffixVariable": "",
# "isPrefixVariablePartOfArg": false,
# "isSuffixVariablePartOfArg": false
# }
# ],
# "parameters": [
# {
# "type": "boolean",
# "name": "debug",
# "optional": false,
# "defaultValue": null,
# "title": "",
# "description": "Should debug be enabled?",
# "trueValue": "true",
# "falseValue": "false"
# },
# {
# "type": "text",
# "name": "value",
# "optional": false,
# "defaultValue": null,
# "title": "",
# "description": "The value for the batch application"
# }
# ],
# "outputFileGlobs": [
# "*"
# ],
# "applicationType": "BATCH",
# "vnc": null,
# "web": null,
# "ssh": null,
# "container": null,
# "environment": null,
# "allowAdditionalMounts": null,
# "allowAdditionalPeers": null,
# "allowMultiNode": false,
# "allowPublicIp": false,
# "allowPublicLink": null,
# "fileExtensions": [
# ],
# "licenseServers": [
# ],
# "modules": null
# },
# "favorite": false,
# "tags": [
# ]
# }
Communication Flow: Visual
Example: Simple virtual machine¶
Frequency of use | Common |
---|---|
Actors |
|
Communication Flow: Kotlin
/* This example shows an Application encoding a virtual machine. It will use the
"acme-operating-system" as its base image, as defined in the Tool. */
AppStore.findByNameAndVersion.call(
FindByNameAndVersionRequest(
appName = "acme-os",
appVersion = "1.0.0",
),
user
).orThrow()
/*
ApplicationWithFavoriteAndTags(
favorite = false,
invocation = ApplicationInvocationDescription(
allowAdditionalMounts = null,
allowAdditionalPeers = null,
allowMultiNode = false,
allowPublicIp = false,
allowPublicLink = null,
applicationType = ApplicationType.BATCH,
container = null,
environment = null,
fileExtensions = emptyList(),
invocation = emptyList(),
licenseServers = emptyList(),
modules = null,
outputFileGlobs = listOf("*"),
parameters = emptyList(),
shouldAllowAdditionalMounts = false,
shouldAllowAdditionalPeers = true,
ssh = null,
tool = ToolReference(
name = "acme-os",
tool = Tool(
createdAt = 1633329776235,
description = NormalizedToolDescription(
authors = listOf("UCloud"),
backend = ToolBackend.VIRTUAL_MACHINE,
container = null,
defaultNumberOfNodes = 1,
defaultTimeAllocation = SimpleDuration(
hours = 1,
minutes = 0,
seconds = 0,
),
description = "An example tool",
image = "acme-operating-system",
info = NameAndVersion(
name = "acme-os",
version = "1.0.0",
),
license = "None",
requiredModules = emptyList(),
supportedProviders = null,
title = "Acme os",
),
modifiedAt = 1633329776235,
owner = "_ucloud",
),
version = "1.0.0",
),
vnc = null,
web = null,
),
metadata = ApplicationMetadata(
authors = listOf("UCloud"),
createdAt = 1717663228349,
description = "An example application",
flavorName = null,
group = ApplicationGroup(
metadata = ApplicationGroup.Metadata(
id = 0,
),
specification = ApplicationGroup.Specification(
categories = emptySet(),
colorReplacement = ApplicationGroup.ColorReplacements(
dark = null,
light = null,
),
defaultFlavor = null,
description = "",
logoHasText = false,
title = "Test Group",
),
status = ApplicationGroup.Status(
applications = null,
),
),
isPublic = true,
name = "acme-os",
public = true,
title = "Acme os",
version = "1.0.0",
website = null,
),
tags = emptyList(),
)
*/
Communication Flow: Curl
# ------------------------------------------------------------------------------------------------------
# $host is the UCloud instance to contact. Example: 'http://localhost:8080' or 'https://cloud.sdu.dk'
# $accessToken is a valid access-token issued by UCloud
# ------------------------------------------------------------------------------------------------------
# This example shows an Application encoding a virtual machine. It will use the
# "acme-operating-system" as its base image, as defined in the Tool.
# Authenticated as user
curl -XGET -H "Authorization: Bearer $accessToken" "$host/api/hpc/apps/byNameAndVersion?appName=acme-os&appVersion=1.0.0"
# {
# "metadata": {
# "name": "acme-os",
# "version": "1.0.0",
# "authors": [
# "UCloud"
# ],
# "title": "Acme os",
# "description": "An example application",
# "website": null,
# "public": true,
# "flavorName": null,
# "group": {
# "metadata": {
# "id": 0
# },
# "specification": {
# "title": "Test Group",
# "description": "",
# "defaultFlavor": null,
# "categories": [
# ],
# "colorReplacement": {
# "light": null,
# "dark": null
# },
# "logoHasText": false
# },
# "status": {
# "applications": null
# }
# },
# "createdAt": 1717663228349
# },
# "invocation": {
# "tool": {
# "name": "acme-os",
# "version": "1.0.0",
# "tool": {
# "owner": "_ucloud",
# "createdAt": 1633329776235,
# "modifiedAt": 1633329776235,
# "description": {
# "info": {
# "name": "acme-os",
# "version": "1.0.0"
# },
# "container": null,
# "defaultNumberOfNodes": 1,
# "defaultTimeAllocation": {
# "hours": 1,
# "minutes": 0,
# "seconds": 0
# },
# "requiredModules": [
# ],
# "authors": [
# "UCloud"
# ],
# "title": "Acme os",
# "description": "An example tool",
# "backend": "VIRTUAL_MACHINE",
# "license": "None",
# "image": "acme-operating-system",
# "supportedProviders": null
# }
# }
# },
# "invocation": [
# ],
# "parameters": [
# ],
# "outputFileGlobs": [
# "*"
# ],
# "applicationType": "BATCH",
# "vnc": null,
# "web": null,
# "ssh": null,
# "container": null,
# "environment": null,
# "allowAdditionalMounts": null,
# "allowAdditionalPeers": null,
# "allowMultiNode": false,
# "allowPublicIp": false,
# "allowPublicLink": null,
# "fileExtensions": [
# ],
# "licenseServers": [
# ],
# "modules": null
# },
# "favorite": false,
# "tags": [
# ]
# }
Communication Flow: Visual
Example: Simple web application¶
Frequency of use | Common |
---|---|
Actors |
|
Communication Flow: Kotlin
/* This example shows an Application with a graphical web interface. The web server, hosting the
interface, runs on port 8080 as defined in the `invocation.web` section. */
AppStore.findByNameAndVersion.call(
FindByNameAndVersionRequest(
appName = "acme-web",
appVersion = "1.0.0",
),
user
).orThrow()
/*
ApplicationWithFavoriteAndTags(
favorite = false,
invocation = ApplicationInvocationDescription(
allowAdditionalMounts = null,
allowAdditionalPeers = null,
allowMultiNode = false,
allowPublicIp = false,
allowPublicLink = null,
applicationType = ApplicationType.WEB,
container = null,
environment = null,
fileExtensions = emptyList(),
invocation = listOf(WordInvocationParameter(
word = "web-server",
)),
licenseServers = emptyList(),
modules = null,
outputFileGlobs = listOf("*"),
parameters = emptyList(),
shouldAllowAdditionalMounts = true,
shouldAllowAdditionalPeers = true,
ssh = null,
tool = ToolReference(
name = "acme-web",
tool = Tool(
createdAt = 1633329776235,
description = NormalizedToolDescription(
authors = listOf("UCloud"),
backend = ToolBackend.DOCKER,
container = null,
defaultNumberOfNodes = 1,
defaultTimeAllocation = SimpleDuration(
hours = 1,
minutes = 0,
seconds = 0,
),
description = "An example tool",
image = "acme/web:1.0.0",
info = NameAndVersion(
name = "acme-web",
version = "1.0.0",
),
license = "None",
requiredModules = emptyList(),
supportedProviders = null,
title = "Acme web",
),
modifiedAt = 1633329776235,
owner = "_ucloud",
),
version = "1.0.0",
),
vnc = null,
web = WebDescription(
port = 8080,
),
),
metadata = ApplicationMetadata(
authors = listOf("UCloud"),
createdAt = 1717663228350,
description = "An example application",
flavorName = null,
group = ApplicationGroup(
metadata = ApplicationGroup.Metadata(
id = 0,
),
specification = ApplicationGroup.Specification(
categories = emptySet(),
colorReplacement = ApplicationGroup.ColorReplacements(
dark = null,
light = null,
),
defaultFlavor = null,
description = "",
logoHasText = false,
title = "Test Group",
),
status = ApplicationGroup.Status(
applications = null,
),
),
isPublic = true,
name = "acme-web",
public = true,
title = "Acme web",
version = "1.0.0",
website = null,
),
tags = emptyList(),
)
*/
Communication Flow: Curl
# ------------------------------------------------------------------------------------------------------
# $host is the UCloud instance to contact. Example: 'http://localhost:8080' or 'https://cloud.sdu.dk'
# $accessToken is a valid access-token issued by UCloud
# ------------------------------------------------------------------------------------------------------
# This example shows an Application with a graphical web interface. The web server, hosting the
# interface, runs on port 8080 as defined in the `invocation.web` section.
# Authenticated as user
curl -XGET -H "Authorization: Bearer $accessToken" "$host/api/hpc/apps/byNameAndVersion?appName=acme-web&appVersion=1.0.0"
# {
# "metadata": {
# "name": "acme-web",
# "version": "1.0.0",
# "authors": [
# "UCloud"
# ],
# "title": "Acme web",
# "description": "An example application",
# "website": null,
# "public": true,
# "flavorName": null,
# "group": {
# "metadata": {
# "id": 0
# },
# "specification": {
# "title": "Test Group",
# "description": "",
# "defaultFlavor": null,
# "categories": [
# ],
# "colorReplacement": {
# "light": null,
# "dark": null
# },
# "logoHasText": false
# },
# "status": {
# "applications": null
# }
# },
# "createdAt": 1717663228350
# },
# "invocation": {
# "tool": {
# "name": "acme-web",
# "version": "1.0.0",
# "tool": {
# "owner": "_ucloud",
# "createdAt": 1633329776235,
# "modifiedAt": 1633329776235,
# "description": {
# "info": {
# "name": "acme-web",
# "version": "1.0.0"
# },
# "container": null,
# "defaultNumberOfNodes": 1,
# "defaultTimeAllocation": {
# "hours": 1,
# "minutes": 0,
# "seconds": 0
# },
# "requiredModules": [
# ],
# "authors": [
# "UCloud"
# ],
# "title": "Acme web",
# "description": "An example tool",
# "backend": "DOCKER",
# "license": "None",
# "image": "acme/web:1.0.0",
# "supportedProviders": null
# }
# }
# },
# "invocation": [
# {
# "type": "word",
# "word": "web-server"
# }
# ],
# "parameters": [
# ],
# "outputFileGlobs": [
# "*"
# ],
# "applicationType": "WEB",
# "vnc": null,
# "web": {
# "port": 8080
# },
# "ssh": null,
# "container": null,
# "environment": null,
# "allowAdditionalMounts": null,
# "allowAdditionalPeers": null,
# "allowMultiNode": false,
# "allowPublicIp": false,
# "allowPublicLink": null,
# "fileExtensions": [
# ],
# "licenseServers": [
# ],
# "modules": null
# },
# "favorite": false,
# "tags": [
# ]
# }
Communication Flow: Visual
Example: Simple remote desktop application (VNC)¶
Frequency of use | Common |
---|---|
Actors |
|
Communication Flow: Kotlin
/* This example shows an Application with a graphical web interface. The VNC server, hosting the
interface, runs on port 5900 as defined in the `invocation.vnc` section. */
AppStore.findByNameAndVersion.call(
FindByNameAndVersionRequest(
appName = "acme-remote-desktop",
appVersion = "1.0.0",
),
user
).orThrow()
/*
ApplicationWithFavoriteAndTags(
favorite = false,
invocation = ApplicationInvocationDescription(
allowAdditionalMounts = null,
allowAdditionalPeers = null,
allowMultiNode = false,
allowPublicIp = false,
allowPublicLink = null,
applicationType = ApplicationType.VNC,
container = null,
environment = null,
fileExtensions = emptyList(),
invocation = listOf(WordInvocationParameter(
word = "vnc-server",
)),
licenseServers = emptyList(),
modules = null,
outputFileGlobs = listOf("*"),
parameters = emptyList(),
shouldAllowAdditionalMounts = true,
shouldAllowAdditionalPeers = true,
ssh = null,
tool = ToolReference(
name = "acme-remote-desktop",
tool = Tool(
createdAt = 1633329776235,
description = NormalizedToolDescription(
authors = listOf("UCloud"),
backend = ToolBackend.DOCKER,
container = null,
defaultNumberOfNodes = 1,
defaultTimeAllocation = SimpleDuration(
hours = 1,
minutes = 0,
seconds = 0,
),
description = "An example tool",
image = "acme/remote-desktop:1.0.0",
info = NameAndVersion(
name = "acme-remote-desktop",
version = "1.0.0",
),
license = "None",
requiredModules = emptyList(),
supportedProviders = null,
title = "Acme remote desktop",
),
modifiedAt = 1633329776235,
owner = "_ucloud",
),
version = "1.0.0",
),
vnc = VncDescription(
password = null,
port = 5900,
),
web = null,
),
metadata = ApplicationMetadata(
authors = listOf("UCloud"),
createdAt = 1717663228351,
description = "An example application",
flavorName = null,
group = ApplicationGroup(
metadata = ApplicationGroup.Metadata(
id = 0,
),
specification = ApplicationGroup.Specification(
categories = emptySet(),
colorReplacement = ApplicationGroup.ColorReplacements(
dark = null,
light = null,
),
defaultFlavor = null,
description = "",
logoHasText = false,
title = "Test Group",
),
status = ApplicationGroup.Status(
applications = null,
),
),
isPublic = true,
name = "acme-remote-desktop",
public = true,
title = "Acme remote desktop",
version = "1.0.0",
website = null,
),
tags = emptyList(),
)
*/
Communication Flow: Curl
# ------------------------------------------------------------------------------------------------------
# $host is the UCloud instance to contact. Example: 'http://localhost:8080' or 'https://cloud.sdu.dk'
# $accessToken is a valid access-token issued by UCloud
# ------------------------------------------------------------------------------------------------------
# This example shows an Application with a graphical web interface. The VNC server, hosting the
# interface, runs on port 5900 as defined in the `invocation.vnc` section.
# Authenticated as user
curl -XGET -H "Authorization: Bearer $accessToken" "$host/api/hpc/apps/byNameAndVersion?appName=acme-remote-desktop&appVersion=1.0.0"
# {
# "metadata": {
# "name": "acme-remote-desktop",
# "version": "1.0.0",
# "authors": [
# "UCloud"
# ],
# "title": "Acme remote desktop",
# "description": "An example application",
# "website": null,
# "public": true,
# "flavorName": null,
# "group": {
# "metadata": {
# "id": 0
# },
# "specification": {
# "title": "Test Group",
# "description": "",
# "defaultFlavor": null,
# "categories": [
# ],
# "colorReplacement": {
# "light": null,
# "dark": null
# },
# "logoHasText": false
# },
# "status": {
# "applications": null
# }
# },
# "createdAt": 1717663228351
# },
# "invocation": {
# "tool": {
# "name": "acme-remote-desktop",
# "version": "1.0.0",
# "tool": {
# "owner": "_ucloud",
# "createdAt": 1633329776235,
# "modifiedAt": 1633329776235,
# "description": {
# "info": {
# "name": "acme-remote-desktop",
# "version": "1.0.0"
# },
# "container": null,
# "defaultNumberOfNodes": 1,
# "defaultTimeAllocation": {
# "hours": 1,
# "minutes": 0,
# "seconds": 0
# },
# "requiredModules": [
# ],
# "authors": [
# "UCloud"
# ],
# "title": "Acme remote desktop",
# "description": "An example tool",
# "backend": "DOCKER",
# "license": "None",
# "image": "acme/remote-desktop:1.0.0",
# "supportedProviders": null
# }
# }
# },
# "invocation": [
# {
# "type": "word",
# "word": "vnc-server"
# }
# ],
# "parameters": [
# ],
# "outputFileGlobs": [
# "*"
# ],
# "applicationType": "VNC",
# "vnc": {
# "password": null,
# "port": 5900
# },
# "web": null,
# "ssh": null,
# "container": null,
# "environment": null,
# "allowAdditionalMounts": null,
# "allowAdditionalPeers": null,
# "allowMultiNode": false,
# "allowPublicIp": false,
# "allowPublicLink": null,
# "fileExtensions": [
# ],
# "licenseServers": [
# ],
# "modules": null
# },
# "favorite": false,
# "tags": [
# ]
# }
Communication Flow: Visual
Example: Registering a file handler¶
Frequency of use | Common |
---|---|
Actors |
|
Communication Flow: Kotlin
/* This example shows an Application with a graphical web interface. The web server, hosting the
interface, runs on port 8080 as defined in the `invocation.web` section. */
/* The Application also registers a file handler of all files with the `*.c` extension. This is used as
a hint for the frontend that files with this extension can be opened with this Application. When
opened like this, the file's parent folder will be mounted as a resource. */
AppStore.findByNameAndVersion.call(
FindByNameAndVersionRequest(
appName = "acme-web",
appVersion = "1.0.0",
),
user
).orThrow()
/*
ApplicationWithFavoriteAndTags(
favorite = false,
invocation = ApplicationInvocationDescription(
allowAdditionalMounts = null,
allowAdditionalPeers = null,
allowMultiNode = false,
allowPublicIp = false,
allowPublicLink = null,
applicationType = ApplicationType.WEB,
container = null,
environment = null,
fileExtensions = listOf(".c"),
invocation = listOf(WordInvocationParameter(
word = "web-server",
)),
licenseServers = emptyList(),
modules = null,
outputFileGlobs = listOf("*"),
parameters = emptyList(),
shouldAllowAdditionalMounts = true,
shouldAllowAdditionalPeers = true,
ssh = null,
tool = ToolReference(
name = "acme-web",
tool = Tool(
createdAt = 1633329776235,
description = NormalizedToolDescription(
authors = listOf("UCloud"),
backend = ToolBackend.DOCKER,
container = null,
defaultNumberOfNodes = 1,
defaultTimeAllocation = SimpleDuration(
hours = 1,
minutes = 0,
seconds = 0,
),
description = "An example tool",
image = "acme/web:1.0.0",
info = NameAndVersion(
name = "acme-web",
version = "1.0.0",
),
license = "None",
requiredModules = emptyList(),
supportedProviders = null,
title = "Acme web",
),
modifiedAt = 1633329776235,
owner = "_ucloud",
),
version = "1.0.0",
),
vnc = null,
web = WebDescription(
port = 8080,
),
),
metadata = ApplicationMetadata(
authors = listOf("UCloud"),
createdAt = 1717663228352,
description = "An example application",
flavorName = null,
group = ApplicationGroup(
metadata = ApplicationGroup.Metadata(
id = 0,
),
specification = ApplicationGroup.Specification(
categories = emptySet(),
colorReplacement = ApplicationGroup.ColorReplacements(
dark = null,
light = null,
),
defaultFlavor = null,
description = "",
logoHasText = false,
title = "Test Group",
),
status = ApplicationGroup.Status(
applications = null,
),
),
isPublic = true,
name = "acme-web",
public = true,
title = "Acme web",
version = "1.0.0",
website = null,
),
tags = emptyList(),
)
*/
Communication Flow: Curl
# ------------------------------------------------------------------------------------------------------
# $host is the UCloud instance to contact. Example: 'http://localhost:8080' or 'https://cloud.sdu.dk'
# $accessToken is a valid access-token issued by UCloud
# ------------------------------------------------------------------------------------------------------
# This example shows an Application with a graphical web interface. The web server, hosting the
# interface, runs on port 8080 as defined in the `invocation.web` section.
# The Application also registers a file handler of all files with the `*.c` extension. This is used as
# a hint for the frontend that files with this extension can be opened with this Application. When
# opened like this, the file's parent folder will be mounted as a resource.
# Authenticated as user
curl -XGET -H "Authorization: Bearer $accessToken" "$host/api/hpc/apps/byNameAndVersion?appName=acme-web&appVersion=1.0.0"
# {
# "metadata": {
# "name": "acme-web",
# "version": "1.0.0",
# "authors": [
# "UCloud"
# ],
# "title": "Acme web",
# "description": "An example application",
# "website": null,
# "public": true,
# "flavorName": null,
# "group": {
# "metadata": {
# "id": 0
# },
# "specification": {
# "title": "Test Group",
# "description": "",
# "defaultFlavor": null,
# "categories": [
# ],
# "colorReplacement": {
# "light": null,
# "dark": null
# },
# "logoHasText": false
# },
# "status": {
# "applications": null
# }
# },
# "createdAt": 1717663228352
# },
# "invocation": {
# "tool": {
# "name": "acme-web",
# "version": "1.0.0",
# "tool": {
# "owner": "_ucloud",
# "createdAt": 1633329776235,
# "modifiedAt": 1633329776235,
# "description": {
# "info": {
# "name": "acme-web",
# "version": "1.0.0"
# },
# "container": null,
# "defaultNumberOfNodes": 1,
# "defaultTimeAllocation": {
# "hours": 1,
# "minutes": 0,
# "seconds": 0
# },
# "requiredModules": [
# ],
# "authors": [
# "UCloud"
# ],
# "title": "Acme web",
# "description": "An example tool",
# "backend": "DOCKER",
# "license": "None",
# "image": "acme/web:1.0.0",
# "supportedProviders": null
# }
# }
# },
# "invocation": [
# {
# "type": "word",
# "word": "web-server"
# }
# ],
# "parameters": [
# ],
# "outputFileGlobs": [
# "*"
# ],
# "applicationType": "WEB",
# "vnc": null,
# "web": {
# "port": 8080
# },
# "ssh": null,
# "container": null,
# "environment": null,
# "allowAdditionalMounts": null,
# "allowAdditionalPeers": null,
# "allowMultiNode": false,
# "allowPublicIp": false,
# "allowPublicLink": null,
# "fileExtensions": [
# ".c"
# ],
# "licenseServers": [
# ],
# "modules": null
# },
# "favorite": false,
# "tags": [
# ]
# }
Communication Flow: Visual
Example: An Application with default values¶
Frequency of use | Common |
---|---|
Actors |
|
Communication Flow: Kotlin
/* This example shows an Application which has a single input parameter. The parameter contains a
textual value. If the user does not provide a specific value, it will default to 'hello'. UCloud
passes this value as the first argument on the command-line. */
AppStore.findByNameAndVersion.call(
FindByNameAndVersionRequest(
appName = "acme-web",
appVersion = "1.0.0",
),
user
).orThrow()
/*
ApplicationWithFavoriteAndTags(
favorite = false,
invocation = ApplicationInvocationDescription(
allowAdditionalMounts = null,
allowAdditionalPeers = null,
allowMultiNode = false,
allowPublicIp = false,
allowPublicLink = null,
applicationType = ApplicationType.WEB,
container = null,
environment = null,
fileExtensions = emptyList(),
invocation = listOf(WordInvocationParameter(
word = "web-server",
), VariableInvocationParameter(
isPrefixVariablePartOfArg = false,
isSuffixVariablePartOfArg = false,
prefixGlobal = "",
prefixVariable = "",
suffixGlobal = "",
suffixVariable = "",
variableNames = listOf("variable"),
)),
licenseServers = emptyList(),
modules = null,
outputFileGlobs = listOf("*"),
parameters = listOf(ApplicationParameter.Text(
defaultValue = JsonObject(mapOf("type" to JsonLiteral(
coerceToInlineType = null,
content = "text",
isString = true,
)),"value" to JsonLiteral(
coerceToInlineType = null,
content = "hello",
isString = true,
)),)),
description = "A variable passed to the Application (default = 'hello')",
name = "variable",
optional = true,
title = "My Variable",
)),
shouldAllowAdditionalMounts = true,
shouldAllowAdditionalPeers = true,
ssh = null,
tool = ToolReference(
name = "acme-web",
tool = Tool(
createdAt = 1633329776235,
description = NormalizedToolDescription(
authors = listOf("UCloud"),
backend = ToolBackend.DOCKER,
container = null,
defaultNumberOfNodes = 1,
defaultTimeAllocation = SimpleDuration(
hours = 1,
minutes = 0,
seconds = 0,
),
description = "An example tool",
image = "acme/web:1.0.0",
info = NameAndVersion(
name = "acme-web",
version = "1.0.0",
),
license = "None",
requiredModules = emptyList(),
supportedProviders = null,
title = "Acme web",
),
modifiedAt = 1633329776235,
owner = "_ucloud",
),
version = "1.0.0",
),
vnc = null,
web = WebDescription(
port = 8080,
),
),
metadata = ApplicationMetadata(
authors = listOf("UCloud"),
createdAt = 1717663228355,
description = "An example application",
flavorName = null,
group = ApplicationGroup(
metadata = ApplicationGroup.Metadata(
id = 0,
),
specification = ApplicationGroup.Specification(
categories = emptySet(),
colorReplacement = ApplicationGroup.ColorReplacements(
dark = null,
light = null,
),
defaultFlavor = null,
description = "",
logoHasText = false,
title = "Test Group",
),
status = ApplicationGroup.Status(
applications = null,
),
),
isPublic = true,
name = "acme-web",
public = true,
title = "Acme web",
version = "1.0.0",
website = null,
),
tags = emptyList(),
)
*/
Communication Flow: Curl
# ------------------------------------------------------------------------------------------------------
# $host is the UCloud instance to contact. Example: 'http://localhost:8080' or 'https://cloud.sdu.dk'
# $accessToken is a valid access-token issued by UCloud
# ------------------------------------------------------------------------------------------------------
# This example shows an Application which has a single input parameter. The parameter contains a
# textual value. If the user does not provide a specific value, it will default to 'hello'. UCloud
# passes this value as the first argument on the command-line.
# Authenticated as user
curl -XGET -H "Authorization: Bearer $accessToken" "$host/api/hpc/apps/byNameAndVersion?appName=acme-web&appVersion=1.0.0"
# {
# "metadata": {
# "name": "acme-web",
# "version": "1.0.0",
# "authors": [
# "UCloud"
# ],
# "title": "Acme web",
# "description": "An example application",
# "website": null,
# "public": true,
# "flavorName": null,
# "group": {
# "metadata": {
# "id": 0
# },
# "specification": {
# "title": "Test Group",
# "description": "",
# "defaultFlavor": null,
# "categories": [
# ],
# "colorReplacement": {
# "light": null,
# "dark": null
# },
# "logoHasText": false
# },
# "status": {
# "applications": null
# }
# },
# "createdAt": 1717663228355
# },
# "invocation": {
# "tool": {
# "name": "acme-web",
# "version": "1.0.0",
# "tool": {
# "owner": "_ucloud",
# "createdAt": 1633329776235,
# "modifiedAt": 1633329776235,
# "description": {
# "info": {
# "name": "acme-web",
# "version": "1.0.0"
# },
# "container": null,
# "defaultNumberOfNodes": 1,
# "defaultTimeAllocation": {
# "hours": 1,
# "minutes": 0,
# "seconds": 0
# },
# "requiredModules": [
# ],
# "authors": [
# "UCloud"
# ],
# "title": "Acme web",
# "description": "An example tool",
# "backend": "DOCKER",
# "license": "None",
# "image": "acme/web:1.0.0",
# "supportedProviders": null
# }
# }
# },
# "invocation": [
# {
# "type": "word",
# "word": "web-server"
# },
# {
# "type": "var",
# "variableNames": [
# "variable"
# ],
# "prefixGlobal": "",
# "suffixGlobal": "",
# "prefixVariable": "",
# "suffixVariable": "",
# "isPrefixVariablePartOfArg": false,
# "isSuffixVariablePartOfArg": false
# }
# ],
# "parameters": [
# {
# "type": "text",
# "name": "variable",
# "optional": true,
# "defaultValue": {
# "type": "text",
# "value": "hello"
# },
# "title": "My Variable",
# "description": "A variable passed to the Application (default = 'hello')"
# }
# ],
# "outputFileGlobs": [
# "*"
# ],
# "applicationType": "WEB",
# "vnc": null,
# "web": {
# "port": 8080
# },
# "ssh": null,
# "container": null,
# "environment": null,
# "allowAdditionalMounts": null,
# "allowAdditionalPeers": null,
# "allowMultiNode": false,
# "allowPublicIp": false,
# "allowPublicLink": null,
# "fileExtensions": [
# ],
# "licenseServers": [
# ],
# "modules": null
# },
# "favorite": false,
# "tags": [
# ]
# }
Communication Flow: Visual
Remote Procedure Calls¶
browseCategories
¶
Request | Response | Error |
---|---|---|
AppStore.BrowseCategories.Request |
PageV2<ApplicationCategory> |
CommonErrorMessage |
browseGroups
¶
Request | Response | Error |
---|---|---|
AppStore.BrowseGroups.Request |
PageV2<ApplicationGroup> |
CommonErrorMessage |
browseSpotlight
¶
Request | Response | Error |
---|---|---|
AppStore.BrowseSpotlight.Request |
PageV2<Spotlight> |
CommonErrorMessage |
create
¶
Creates a new Application and inserts it into the catalog
Request | Response | Error |
---|---|---|
Unit |
Unit |
CommonErrorMessage |
findByName
¶
Finds Applications given an exact name
Request | Response | Error |
---|---|---|
FindByNameRequest |
Page<ApplicationSummaryWithFavorite> |
CommonErrorMessage |
findByNameAndVersion
¶
Retrieves an Application by name and version, or newest Application if version is not specified
Request | Response | Error |
---|---|---|
FindByNameAndVersionRequest |
ApplicationWithFavoriteAndTags |
CommonErrorMessage |
listAllApplications
¶
Request | Response | Error |
---|---|---|
Unit |
AppStore.ListAllApplications.Response |
CommonErrorMessage |
retrieveAcl
¶
Retrieves the permission information associated with an Application
Request | Response | Error |
---|---|---|
AppStore.RetrieveAcl.Request |
AppStore.RetrieveAcl.Response |
CommonErrorMessage |
retrieveAppLogo
¶
Request | Response | Error |
---|---|---|
AppStore.RetrieveAppLogo.Request |
Unit |
CommonErrorMessage |
retrieveCarrouselImage
¶
Request | Response | Error |
---|---|---|
AppStore.RetrieveCarrouselImage.Request |
Unit |
CommonErrorMessage |
retrieveCategory
¶
Request | Response | Error |
---|---|---|
FindByIntId |
ApplicationCategory |
CommonErrorMessage |
retrieveGroup
¶
Request | Response | Error |
---|---|---|
FindByIntId |
ApplicationGroup |
CommonErrorMessage |
retrieveGroupLogo
¶
Request | Response | Error |
---|---|---|
AppStore.RetrieveGroupLogo.Request |
Unit |
CommonErrorMessage |
retrieveLandingPage
¶
Request | Response | Error |
---|---|---|
Unit |
AppStore.RetrieveLandingPage.Response |
CommonErrorMessage |
retrieveSpotlight
¶
Request | Response | Error |
---|---|---|
FindByIntId |
Spotlight |
CommonErrorMessage |
retrieveStars
¶
Retrieves the list of favorite Applications for the current user
Request | Response | Error |
---|---|---|
Unit |
AppStore.RetrieveStars.Response |
CommonErrorMessage |
search
¶
Searches in the Application catalog using a free-text query
Request | Response | Error |
---|---|---|
AppStore.Search.Request |
PageV2<ApplicationSummaryWithFavorite> |
CommonErrorMessage |
activateSpotlight
¶
Request | Response | Error |
---|---|---|
FindByIntId |
Unit |
CommonErrorMessage |
addGroupToCategory
¶
Request | Response | Error |
---|---|---|
AppStore.AddGroupToCategory.Request |
Unit |
CommonErrorMessage |
addLogoToGroup
¶
Uploads a logo and associates it with a group
Request | Response | Error |
---|---|---|
AppStore.AddLogoToGroup.Request |
Unit |
CommonErrorMessage |
assignApplicationToGroup
¶
Request | Response | Error |
---|---|---|
AppStore.AssignApplicationToGroup.Request |
Unit |
CommonErrorMessage |
assignPriorityToCategory
¶
Request | Response | Error |
---|---|---|
AppStore.AssignPriorityToCategory.Request |
Unit |
CommonErrorMessage |
browseOpenWithRecommendations
¶
Finds a page of Application which can open a specific UFile
Request | Response | Error |
---|---|---|
AppStore.BrowseOpenWithRecommendations.Request |
PageV2<ApplicationWithExtension> |
CommonErrorMessage |
createCategory
¶
Request | Response | Error |
---|---|---|
ApplicationCategory.Specification |
FindByIntId |
CommonErrorMessage |
createGroup
¶
Request | Response | Error |
---|---|---|
ApplicationGroup.Specification |
FindByIntId |
CommonErrorMessage |
createSpotlight
¶
Request | Response | Error |
---|---|---|
Spotlight |
FindByIntId |
CommonErrorMessage |
deleteCategory
¶
Request | Response | Error |
---|---|---|
FindByIntId |
Unit |
CommonErrorMessage |
deleteGroup
¶
Request | Response | Error |
---|---|---|
FindByIntId |
Unit |
CommonErrorMessage |
deleteSpotlight
¶
Request | Response | Error |
---|---|---|
FindByIntId |
Unit |
CommonErrorMessage |
devImport
¶
Request | Response | Error |
---|---|---|
AppStore.DevImport.Request |
Unit |
CommonErrorMessage |
export
¶
Request | Response | Error |
---|---|---|
Unit |
Unit |
CommonErrorMessage |
importFromFile
¶
Request | Response | Error |
---|---|---|
Unit |
Unit |
CommonErrorMessage |
removeGroupFromCategory
¶
Request | Response | Error |
---|---|---|
AppStore.RemoveGroupFromCategory.Request |
Unit |
CommonErrorMessage |
removeLogoFromGroup
¶
Request | Response | Error |
---|---|---|
FindByIntId |
Unit |
CommonErrorMessage |
toggleStar
¶
Toggles the favorite status of an Application for the current user
Request | Response | Error |
---|---|---|
AppStore.ToggleStar.Request |
Unit |
CommonErrorMessage |
updateAcl
¶
Updates the permissions associated with an Application
Request | Response | Error |
---|---|---|
AppStore.UpdateAcl.Request |
Unit |
CommonErrorMessage |
updateApplicationFlavor
¶
Updates the flavor name for a set of applications
Request | Response | Error |
---|---|---|
AppStore.UpdateApplicationFlavor.Request |
Unit |
CommonErrorMessage |
updateCarrousel
¶
Request | Response | Error |
---|---|---|
AppStore.UpdateCarrousel.Request |
Unit |
CommonErrorMessage |
updateCarrouselImage
¶
Request | Response | Error |
---|---|---|
AppStore.UpdateCarrouselImage.Request |
Unit |
CommonErrorMessage |
updateGroup
¶
Request | Response | Error |
---|---|---|
AppStore.UpdateGroup.Request |
Unit |
CommonErrorMessage |
updatePublicFlag
¶
Changes the ‘publicly accessible’ status of an Application
Request | Response | Error |
---|---|---|
AppStore.UpdatePublicFlag.Request |
Unit |
CommonErrorMessage |
updateSpotlight
¶
Request | Response | Error |
---|---|---|
Spotlight |
Unit |
CommonErrorMessage |
updateTopPicks
¶
Request | Response | Error |
---|---|---|
AppStore.UpdateTopPicks.Request |
Unit |
CommonErrorMessage |
Data Models¶
Application
¶
Applications specify the input parameters and invocation of a software package.
data class Application(
val metadata: ApplicationMetadata,
val invocation: ApplicationInvocationDescription,
)
For more information see the full documentation.
ApplicationMetadata
¶
Metadata associated with an Application
data class ApplicationMetadata(
val name: String,
val version: String,
val authors: List<String>,
val title: String,
val description: String,
val website: String?,
val public: Boolean,
val flavorName: String?,
val group: ApplicationGroup?,
val createdAt: Long?,
val isPublic: Boolean,
)
The metadata describes information mostly useful for presentation purposes. The only exception are name
and
version
which are (also) used as identifiers.
Properties
name
: String
A stable identifier for this Application's name
String
version
: String
A stable identifier for this Application's version
String
title
: String
A (non-stable) title for this Application, used for presentation
String
description
: String
A markdown document describing this Application
String
website
: String?
An absolute URL which points to further information about the Application
String?
public
: Boolean
A flag which describes if this Application is publicly accessible
Boolean
flavorName
: String?
Name of the Application within the ApplicationGroup. If not defined, the title will be used.
String?
group
: ApplicationGroup?
The ApplicationGroup of the Application
ApplicationGroup?
createdAt
: Long?
Long?
isPublic
: Boolean
Boolean
ApplicationInvocationDescription
¶
The specification for how to invoke an Application
data class ApplicationInvocationDescription(
val tool: ToolReference,
val invocation: List<InvocationParameter>,
val parameters: List<ApplicationParameter>,
val outputFileGlobs: List<String>,
val applicationType: ApplicationType?,
val vnc: VncDescription?,
val web: WebDescription?,
val ssh: SshDescription?,
val container: ContainerDescription?,
val environment: JsonObject?,
val allowAdditionalMounts: Boolean?,
val allowAdditionalPeers: Boolean?,
val allowMultiNode: Boolean?,
val allowPublicIp: Boolean?,
val allowPublicLink: Boolean?,
val fileExtensions: List<String>?,
val licenseServers: List<String>?,
val modules: ModulesSection?,
val shouldAllowAdditionalMounts: Boolean,
val shouldAllowAdditionalPeers: Boolean,
)
All Application
s require a tool
. The Tool
specify the concrete computing environment.
With the tool
we get the required software packages and configuration.
In this environment, we must start some software. Any Job
launched with
this Application
will only run for as long as the software runs. You can specify the command-line
invocation through the invocation
property. Each element in this list produce zero or more arguments for the
actual invocation. These InvocationParameter
s can reference the input parameters
of the
Application
. In addition, you can set the environment
variables through the same mechanism.
All Application
s have an ApplicationType
associated with them. This type
determines how the
user interacts with your Application
. We support the following types:
BATCH
: A non-interactiveApplication
which runs without user inputVNC
: An interactiveApplication
exposing a remote desktop interfaceWEB
: An interactiveApplication
exposing a graphical web interface
The Application
must expose information about how to access interactive services. It can do so by
setting vnc
and web
. Providers must use this information when
opening an interactive session.
Users can launch a Job
with additional resources
, such as
IP addresses and files. The Application
author specifies the supported resources through the
allowXXX
properties.
Properties
tool
: ToolReference
A reference to the Tool used by this Application
ToolReference
invocation
: List<InvocationParameter>
Instructions on how to build the command-line invocation
List<InvocationParameter>
parameters
: List<ApplicationParameter>
The input parameters used by this Application
List<ApplicationParameter>
applicationType
: ApplicationType?
The type of this Application, it determines how users will interact with the Application
ApplicationType?
vnc
: VncDescription?
Information about how to reach the VNC service
VncDescription?
web
: WebDescription?
Information about how to reach the web service
WebDescription?
ssh
: SshDescription?
Information about how the SSH capabilities of this application
SshDescription?
container
: ContainerDescription?
Hints to the container system about how the Application should be launched
ContainerDescription?
environment
: JsonObject?
Additional environment variables to be added in the environment
JsonObject?
allowAdditionalMounts
: Boolean?
Flag to enable/disable support for additional file mounts (default: true for interactive apps)
Boolean?
allowAdditionalPeers
: Boolean?
Flag to enable/disable support for connecting Jobs together (default: true)
Boolean?
allowMultiNode
: Boolean?
Flag to enable/disable multiple replicas of this Application (default: false)
Boolean?
allowPublicIp
: Boolean?
Flag to enable/disable support for public IP (default false)
Boolean?
allowPublicLink
: Boolean?
Flag to enable/disable support for public link (default: true for web apps)
Boolean?
fileExtensions
: List<String>?
The file extensions which this Application can handle
List<String>?
This list used as a suffix filter. As a result, this list should typically include the dot.
modules
: ModulesSection?
A section describing integration with a module system. Currently only valid for `CONTAINER` based applications.
ModulesSection?
shouldAllowAdditionalMounts
: Boolean
Boolean
shouldAllowAdditionalPeers
: Boolean
Boolean
ApplicationType
¶
The ApplicationType determines how user’s interact with an Application
enum class ApplicationType {
BATCH,
VNC,
WEB,
}
BATCH
: A non-interactiveApplication
which runs without user inputVNC
: An interactiveApplication
exposing a remote desktop interfaceWEB
: An interactiveApplication
exposing a graphical web interface
Properties
BATCH
A non-interactive [`Application`](/docs/reference/dk.sdu.cloud.app.store.api.Application.md) which runs without user input
VNC
An interactive [`Application`](/docs/reference/dk.sdu.cloud.app.store.api.Application.md) exposing a remote desktop interface
WEB
An interactive [`Application`](/docs/reference/dk.sdu.cloud.app.store.api.Application.md) exposing a graphical web interface
VncDescription
¶
Information to the Provider about how to reach the VNC services
data class VncDescription(
val password: String?,
val port: Int?,
)
Providers must use this information when opening an interactive session.
WebDescription
¶
Information to the Provider about how to reach the web services
data class WebDescription(
val port: Int?,
)
Providers must use this information when opening an interactive session.
Properties
port
: Int?
Int?
ContainerDescription
¶
Information to the Provider about how to launch the container
data class ContainerDescription(
val changeWorkingDirectory: Boolean?,
val runAsRoot: Boolean?,
val runAsRealUser: Boolean?,
)
ApplicationParameter
¶
An ApplicationParameter describe a single input parameter to an Application.
sealed class ApplicationParameter {
abstract val defaultValue: Any?
abstract val description: String
abstract val name: String
abstract val optional: Boolean
abstract val title: String?
class Bool : ApplicationParameter()
class Enumeration : ApplicationParameter()
class FloatingPoint : ApplicationParameter()
class Ingress : ApplicationParameter()
class InputDirectory : ApplicationParameter()
class InputFile : ApplicationParameter()
class Integer : ApplicationParameter()
class LicenseServer : ApplicationParameter()
class NetworkIP : ApplicationParameter()
class Peer : ApplicationParameter()
class Text : ApplicationParameter()
class TextArea : ApplicationParameter()
}
All ApplicationParameter
s contain metadata used for the presentation in the frontend. This metadata
includes a title and help-text. This allows UCloud to create a rich user-interface with widgets which are easy to
use.
When the user requests the creation of a Job
, they supply a lot of
information. This includes a reference to the Application
and a set of AppParameterValue
s.
The user must supply a value for every mandatory ApplicationParameter
. Every parameter has a type
associated with it. This type controls the set of valid AppParameterValue
s it can take.
ApplicationParameter.TextArea
¶
An ApplicationParameter describe a single input parameter to an Application.
data class TextArea(
val name: String?,
val optional: Boolean?,
val defaultValue: Any?,
val title: String?,
val description: String?,
val type: String /* "textarea" */,
)
All ApplicationParameter
s contain metadata used for the presentation in the frontend. This metadata
includes a title and help-text. This allows UCloud to create a rich user-interface with widgets which are easy to
use.
When the user requests the creation of a Job
, they supply a lot of
information. This includes a reference to the Application
and a set of AppParameterValue
s.
The user must supply a value for every mandatory ApplicationParameter
. Every parameter has a type
associated with it. This type controls the set of valid AppParameterValue
s it can take.
ApplicationParameter.Bool
¶
An input parameter which accepts any boolean value
data class Bool(
val name: String?,
val optional: Boolean?,
val defaultValue: Any?,
val title: String?,
val description: String?,
val trueValue: String?,
val falseValue: String?,
val type: String /* "boolean" */,
)
Compatible with: AppParameterValue.Bool
ApplicationParameter.Enumeration
¶
An input parameter which accepts an enum
data class Enumeration(
val name: String?,
val optional: Boolean?,
val defaultValue: Any?,
val title: String?,
val description: String?,
val options: List<ApplicationParameter.EnumOption>?,
val type: String /* "enumeration" */,
)
Compatible with: AppParameterValue.Text
(Note: the text should match the value
of the selected
option)
ApplicationParameter.FloatingPoint
¶
An input parameter which accepts any floating point value
data class FloatingPoint(
val name: String?,
val optional: Boolean?,
val defaultValue: Any?,
val title: String?,
val description: String?,
val min: Double?,
val max: Double?,
val step: Double?,
val unitName: String?,
val type: String /* "floating_point" */,
)
Compatible with: AppParameterValue.FloatingPoint
This parameter can be tweaked using the various options. For example, it is possible to provide a minimum and maximum value.
ApplicationParameter.Ingress
¶
An input parameter which accepts a ingress (public link)
data class Ingress(
val name: String?,
val title: String?,
val description: String?,
val optional: Boolean?,
val defaultValue: Any?,
val type: String /* "ingress" */,
)
Compatible with: AppParameterValue.Ingress
ApplicationParameter.InputDirectory
¶
An input parameter which accepts UFiles of type DIRECTORY
data class InputDirectory(
val name: String?,
val optional: Boolean?,
val defaultValue: Any?,
val title: String?,
val description: String?,
val type: String /* "input_directory" */,
)
Compatible with: AppParameterValue.File
ApplicationParameter.InputFile
¶
An input parameter which accepts UFiles of type FILE
data class InputFile(
val name: String?,
val optional: Boolean?,
val defaultValue: Any?,
val title: String?,
val description: String?,
val type: String /* "input_file" */,
)
Compatible with: AppParameterValue.File
ApplicationParameter.Integer
¶
An input parameter which accepts any integer value
data class Integer(
val name: String?,
val optional: Boolean?,
val defaultValue: Any?,
val title: String?,
val description: String?,
val min: Long?,
val max: Long?,
val step: Long?,
val unitName: String?,
val type: String /* "integer" */,
)
Compatible with: AppParameterValue.Integer
This parameter can be tweaked using the various options. For example, it is possible to provide a minimum and maximum value.
ApplicationParameter.LicenseServer
¶
An input parameter which accepts a license
data class LicenseServer(
val name: String?,
val title: String?,
val optional: Boolean?,
val description: String?,
val tagged: List<String>,
val defaultValue: Any?,
val type: String /* "license_server" */,
)
Compatible with: AppParameterValue.License
ApplicationParameter.NetworkIP
¶
An input parameter which accepts an IP address
data class NetworkIP(
val name: String?,
val title: String?,
val description: String?,
val defaultValue: Any?,
val optional: Boolean,
val type: String /* "network_ip" */,
)
Compatible with: AppParameterValue.Network
ApplicationParameter.Peer
¶
An input parameter which accepts a peering Job
data class Peer(
val name: String?,
val title: String?,
val description: String,
val suggestedApplication: String?,
val defaultValue: Any?,
val optional: Boolean,
val type: String /* "peer" */,
)
Compatible with: AppParameterValue.Peer
ApplicationParameter.Text
¶
An input parameter which accepts text
data class Text(
val name: String?,
val optional: Boolean?,
val defaultValue: Any?,
val title: String?,
val description: String?,
val type: String /* "text" */,
)
Compatible with: AppParameterValue.Text
AppParameterValue
¶
An AppParameterValue
is value which is supplied to a parameter of an Application
.
sealed class AppParameterValue {
class BlockStorage : AppParameterValue()
class Bool : AppParameterValue()
class File : AppParameterValue()
class FloatingPoint : AppParameterValue()
class Ingress : AppParameterValue()
class Integer : AppParameterValue()
class License : AppParameterValue()
class Network : AppParameterValue()
class Peer : AppParameterValue()
class Text : AppParameterValue()
class TextArea : AppParameterValue()
}
Each value type can is type-compatible with one or more ApplicationParameter
s. The effect of a specific value depends
on its use-site, and the type of its associated parameter.
ApplicationParameter
s have the following usage sites:
Invocation: This affects the command line arguments passed to the software.
Environment variables: This affects the environment variables passed to the software.
Resources: This only affects the resources which are imported into the software environment. Not all values can be used as a resource.
AppParameterValue.BlockStorage
¶
A reference to block storage (Not yet implemented)
data class BlockStorage(
val id: String,
val type: String /* "block_storage" */,
)
AppParameterValue.Bool
¶
A boolean value (true or false)
data class Bool(
val value: Boolean,
val type: String /* "boolean" */,
)
Compatible with:
ApplicationParameter.Bool
Mountable as a resource: ❌ No
Expands to:
trueValue
ofApplicationParameter.Bool
if value istrue
otherwisefalseValue
Side effects: None
AppParameterValue.File
¶
A reference to a UCloud file
data class File(
val path: String,
val readOnly: Boolean?,
val type: String /* "file" */,
)
Compatible with:
ApplicationParameter.InputFile
andApplicationParameter.InputDirectory
Mountable as a resource: ✅ Yes
Expands to: The absolute path to the file or directory in the software’s environment
Side effects: Includes the file or directory in the
Job
’s temporary work directory
The path of the file must be absolute and refers to either a UCloud directory or file.
AppParameterValue.FloatingPoint
¶
A floating point value
data class FloatingPoint(
val value: Double,
val type: String /* "floating_point" */,
)
Compatible with:
ApplicationParameter.FloatingPoint
Mountable as a resource: ❌ No
Expands to: The number
Side effects: None
Internally this uses a big decimal type and there are no defined limits.
AppParameterValue.Ingress
¶
A reference to an HTTP ingress, registered locally at the provider
data class Ingress(
val id: String,
val type: String /* "ingress" */,
)
Compatible with:
ApplicationParameter.Ingress
Mountable as a resource: ✅ Yes
Expands to:
${id}
Side effects: Configures an HTTP ingress for the application’s interactive web interface. This interface should not perform any validation, that is, the application should be publicly accessible.
AppParameterValue.Integer
¶
An integral value
data class Integer(
val value: Long,
val type: String /* "integer" */,
)
Compatible with:
ApplicationParameter.Integer
Mountable as a resource: ❌ No
Expands to: The number
Side effects: None
Internally this uses a big integer type and there are no defined limits.
AppParameterValue.License
¶
A reference to a software license, registered locally at the provider
data class License(
val id: String,
val type: String /* "license_server" */,
)
Compatible with:
ApplicationParameter.LicenseServer
Mountable as a resource: ❌ No
Expands to:
${license.address}:${license.port}/${license.key}
or${license.address}:${license.port}
if no key is providedSide effects: None
AppParameterValue.Network
¶
A reference to block storage (Not yet implemented)
data class Network(
val id: String,
val type: String /* "network" */,
)
AppParameterValue.Peer
¶
A reference to a separate UCloud Job
data class Peer(
val hostname: String,
val jobId: String,
val type: String /* "peer" */,
)
Compatible with:
ApplicationParameter.Peer
Mountable as a resource: ✅ Yes
Expands to: The
hostname
Side effects: Configures the firewall to allow bidirectional communication between this
Job
and the peeringJob
AppParameterValue.Text
¶
A textual value
data class Text(
val value: String,
val type: String /* "text" */,
)
Compatible with:
ApplicationParameter.Text
andApplicationParameter.Enumeration
Mountable as a resource: ❌ No
Expands to: The text, when used in an invocation this will be passed as a single argument.
Side effects: None
When this is used with an Enumeration
it must match the value of one of the associated options
.
InvocationParameter
¶
InvocationParameters supply values to either the command-line or environment variables.
sealed class InvocationParameter {
class BooleanFlagParameter : InvocationParameter()
class EnvironmentVariableParameter : InvocationParameter()
class VariableInvocationParameter : InvocationParameter()
class WordInvocationParameter : InvocationParameter()
}
Every parameter can run in one of two contexts. They produce a value when combined with a ApplicationParameter
and a AppParameterValue
:
Command line argument: Produces zero or more arguments for the command-line
Environment variable: Produces exactly one value.
For each of the InvocationParameter
types, we will describe the value(s) they produce. We will also highlight
notable differences between CLI args and environment variables.
BooleanFlagParameter
¶
Produces a toggleable command-line flag
data class BooleanFlagParameter(
val variableName: String,
val flag: String,
val type: String /* "bool_flag" */,
)
The parameter referenced by variableName
must be of type ApplicationParameter.Bool
, and the value
must be AppParamValue.Bool
. This invocation parameter will produce the flag
if the variable’s value is
true
. Otherwise, it will produce no values.
Example: Example (with true value)
VariableInvocationParameter
:
{
"type": "bool_flag",
"variableName": ["myVariable"],
"flag": "--example"
}
Values (AppParameterValue
):
{
"myVariable": { "type": "bool", "value": true }
}
Expands to:
"--example"
Example: Example (with false value)
VariableInvocationParameter
:
{
"type": "bool_flag",
"variableName": ["myVariable"],
"flag": "--example"
}
Values (AppParameterValue
):
{
"myVariable": { "type": "bool", "value": false }
}
Expands to (nothing):
Example: With spaces
VariableInvocationParameter
:
{
"type": "bool_flag",
"variableName": ["myVariable"],
"flag": "--hello world"
}
Values (AppParameterValue
):
{
"myVariable": { "type": "bool", "value": true }
}
Expands to:
"--hello world"
EnvironmentVariableParameter
¶
Produces an environment variable (TODO Documentation)
data class EnvironmentVariableParameter(
val variable: String,
val type: String /* "env" */,
)
VariableInvocationParameter
¶
An InvocationParameter which produces value(s) from parameters.
data class VariableInvocationParameter(
val variableNames: List<String>,
val prefixGlobal: String?,
val suffixGlobal: String?,
val prefixVariable: String?,
val suffixVariable: String?,
val isPrefixVariablePartOfArg: Boolean?,
val isSuffixVariablePartOfArg: Boolean?,
val type: String /* "var" */,
)
The parameter receives a list of variableNames
. Each must reference an ApplicationParameter
. It is
valid to reference both optional and mandatory parameters. This invocation will produce zero values if all the
parameters have no value. This is regardless of the prefixes and suffixes.
The invocation accepts prefixes and suffixes. These will alter the values produced. The global affixes always
produce one value each, if supplied. The variable specific affixes produce their own value if
isXVariablePartOfArg
.
Example: Simple variable
VariableInvocationParameter
:
{
"variableNames": ["myVariable"]
}
Values (AppParameterValue
):
{
"myVariable": { "type": "text", "value": "Hello, World!" }
}
Expands to:
"Hello, World!"
Example: Global prefix (command line flags)
VariableInvocationParameter
:
{
"variableNames": ["myVariable"],
"prefixGlobal": "--count"
}
Values (AppParameterValue
):
{
"myVariable": { "type": "integer", "value": 42 }
}
Expands to:
"--count" "42"
Example: Multiple variables
VariableInvocationParameter
:
{
"variableNames": ["myVariable", "mySecondVariable"],
"prefixGlobal": "--count"
}
Values (AppParameterValue
):
{
"myVariable": { "type": "integer", "value": 42 },
"mySecondVariable": { "type": "integer", "value": 120 },
}
Expands to:
"--count" "42" "120"
Example: Variable prefixes and suffixes
VariableInvocationParameter
:
{
"variableNames": ["myVariable"],
"prefixGlobal": "--entries",
"prefixVariable": "--entry",
"suffixVariable": "--next",
"isPrefixVariablePartOfArg": true,
"isSuffixVariablePartOfArg": false
}
Values (AppParameterValue
):
{
"myVariable": { "type": "integer", "value": 42 },
}
Expands to:
"--entries" "--entry42" "--next"
Example: Complete example
VariableInvocationParameter
:
{
"variableNames": ["myVariable", "mySecondVariable"],
"prefixGlobal": "--entries",
"prefixVariable": "--entry",
"suffixVariable": "--next",
"suffixGlobal": "--endOfEntries",
"isPrefixVariablePartOfArg": false,
"isSuffixVariablePartOfArg": true
}
Values (AppParameterValue
):
{
"myVariable": { "type": "integer", "value": 42 },
"mySecondVariable": { "type": "text", "value": "hello" },
}
Expands to:
"--entries" "--entry" "42--next" "--entry" "hello--next" "--endOfEntries"
WordInvocationParameter
¶
A static value for an InvocationParameter
data class WordInvocationParameter(
val word: String,
val type: String /* "word" */,
)
This value is static and will always produce only a single value. As a result, you do not need to escape any values for this parameter.
AccessEntity
¶
data class AccessEntity(
val user: String?,
val project: String?,
val group: String?,
)
AppParameterValue.TextArea
¶
A textual value
data class TextArea(
val value: String,
val type: String /* "textarea" */,
)
Compatible with:
ApplicationParameter.Text
andApplicationParameter.Enumeration
Mountable as a resource: ❌ No
Expands to: The text, when used in an invocation this will be passed as a single argument.
Side effects: None
When this is used with an Enumeration
it must match the value of one of the associated options
.
ApplicationAccessRight
¶
enum class ApplicationAccessRight {
LAUNCH,
}
Properties
LAUNCH
ApplicationCategory
¶
data class ApplicationCategory(
val metadata: ApplicationCategory.Metadata,
val specification: ApplicationCategory.Specification,
val status: ApplicationCategory.Status?,
)
Properties
metadata
: ApplicationCategory.Metadata
ApplicationCategory.Metadata
specification
: ApplicationCategory.Specification
ApplicationCategory.Specification
status
: ApplicationCategory.Status?
ApplicationCategory.Status?
ApplicationCategory.Metadata
¶
data class Metadata(
val id: Int,
)
Properties
id
: Int
Int
ApplicationCategory.Specification
¶
data class Specification(
val title: String,
val description: String?,
)
ApplicationCategory.Status
¶
data class Status(
val groups: List<ApplicationGroup>?,
)
Properties
groups
: List<ApplicationGroup>?
List<ApplicationGroup>?
ApplicationGroup
¶
data class ApplicationGroup(
val metadata: ApplicationGroup.Metadata,
val specification: ApplicationGroup.Specification,
val status: ApplicationGroup.Status?,
)
Properties
metadata
: ApplicationGroup.Metadata
ApplicationGroup.Metadata
specification
: ApplicationGroup.Specification
ApplicationGroup.Specification
status
: ApplicationGroup.Status?
ApplicationGroup.Status?
ApplicationGroup.ColorReplacements
¶
data class ColorReplacements(
val light: JsonObject?,
val dark: JsonObject?,
)
ApplicationGroup.Metadata
¶
data class Metadata(
val id: Int,
)
Properties
id
: Int
Int
ApplicationGroup.Specification
¶
data class Specification(
val title: String,
val description: String,
val defaultFlavor: String?,
val categories: List<Int>?,
val colorReplacement: ApplicationGroup.ColorReplacements?,
val logoHasText: Boolean?,
)
ApplicationGroup.Status
¶
data class Status(
val applications: List<ApplicationSummaryWithFavorite>?,
)
Properties
applications
: List<ApplicationSummaryWithFavorite>?
List<ApplicationSummaryWithFavorite>?
ApplicationParameter.EnumOption
¶
data class EnumOption(
val name: String,
val value: String,
)
ApplicationSummaryWithFavorite
¶
Applications specify the input parameters and invocation of a software package.
data class ApplicationSummaryWithFavorite(
val metadata: ApplicationMetadata,
val favorite: Boolean,
val tags: List<String>,
)
For more information see the full documentation.
ApplicationWithExtension
¶
Applications specify the input parameters and invocation of a software package.
data class ApplicationWithExtension(
val metadata: ApplicationMetadata,
val extensions: List<String>,
)
For more information see the full documentation.
CarrouselItem
¶
data class CarrouselItem(
val title: String,
val body: String,
val imageCredit: String,
val linkedApplication: String?,
val linkedWebPage: String?,
val linkedGroup: Int?,
val resolvedLinkedApp: String?,
)
DetailedAccessEntity
¶
data class DetailedAccessEntity(
val user: String?,
val project: Project?,
val group: Project?,
)
DetailedEntityWithPermission
¶
data class DetailedEntityWithPermission(
val entity: DetailedAccessEntity,
val permission: ApplicationAccessRight,
)
ModulesSection
¶
Section describing the module capabilities of an application
data class ModulesSection(
val mountPath: String,
val optional: List<String>,
)
Project
¶
data class Project(
val id: String,
val title: String,
)
Spotlight
¶
data class Spotlight(
val title: String,
val body: String,
val applications: List<TopPick>,
val active: Boolean,
val id: Int?,
)
SshDescription
¶
Information to the provider about the SSH capabilities of this application
data class SshDescription(
val mode: SshDescription.Mode?,
)
Providers must use this information, if SSH is supported, to correctly configure applications with the appropriate keys. See /docs/reference/jobs.control.browseSshKeys.md for more information.
Properties
mode
: SshDescription.Mode?
SshDescription.Mode?
SshDescription.Mode
¶
enum class Mode {
DISABLED,
OPTIONAL,
MANDATORY,
}
Properties
DISABLED
OPTIONAL
MANDATORY
ToolReference
¶
A reference to a Tool
data class ToolReference(
val name: String,
val version: String,
val tool: Tool?,
)
TopPick
¶
data class TopPick(
val title: String,
val applicationName: String?,
val groupId: Int?,
val description: String,
val defaultApplicationToRun: String?,
val logoHasText: Boolean?,
)
ACLEntryRequest
¶
data class ACLEntryRequest(
val entity: AccessEntity,
val rights: ApplicationAccessRight,
val revoke: Boolean?,
)
AppStore.AddGroupToCategory.Request
¶
data class Request(
val groupId: Int,
val categoryId: Int,
)
AppStore.AddLogoToGroup.Request
¶
data class Request(
val groupId: Int,
)
Properties
groupId
: Int
Int
AppStore.AssignApplicationToGroup.Request
¶
data class Request(
val name: String,
val group: Int?,
)
AppStore.AssignPriorityToCategory.Request
¶
data class Request(
val id: Int,
val priority: Int,
)
AppStore.BrowseCategories.Request
¶
The base type for requesting paginated content.
data class Request(
val itemsPerPage: Int?,
val next: String?,
val consistency: PaginationRequestV2Consistency?,
val itemsToSkip: Long?,
)
Paginated content can be requested with one of the following consistency
guarantees, this greatly changes the
semantics of the call:
Consistency | Description |
---|---|
PREFER |
Consistency is preferred but not required. An inconsistent snapshot might be returned. |
REQUIRE |
Consistency is required. A request will fail if consistency is no longer guaranteed. |
The consistency
refers to if collecting all the results via the pagination API are consistent. We consider the
results to be consistent if it contains a complete view at some point in time. In practice this means that the results
must contain all the items, in the correct order and without duplicates.
If you use the PREFER
consistency then you may receive in-complete results that might appear out-of-order and can
contain duplicate items. UCloud will still attempt to serve a snapshot which appears mostly consistent. This is helpful
for user-interfaces which do not strictly depend on consistency but would still prefer something which is mostly
consistent.
The results might become inconsistent if the client either takes too long, or a service instance goes down while
fetching the results. UCloud attempts to keep each next
token alive for at least one minute before invalidating it.
This does not mean that a client must collect all results within a minute but rather that they must fetch the next page
within a minute of the last page. If this is not feasible and consistency is not required then PREFER
should be used.
📝 NOTE: Services are allowed to ignore extra criteria of the request if the next
token is supplied. This is
needed in order to provide a consistent view of the results. Clients should provide the same criterion as they
paginate through the results.
Properties
itemsPerPage
: Int?
Requested number of items per page. Supported values: 10, 25, 50, 100, 250.
Int?
next
: String?
A token requesting the next page of items
String?
consistency
: PaginationRequestV2Consistency?
Controls the consistency guarantees provided by the backend
PaginationRequestV2Consistency?
itemsToSkip
: Long?
Items to skip ahead
Long?
AppStore.BrowseGroups.Request
¶
The base type for requesting paginated content.
data class Request(
val itemsPerPage: Int?,
val next: String?,
val consistency: PaginationRequestV2Consistency?,
val itemsToSkip: Long?,
)
Paginated content can be requested with one of the following consistency
guarantees, this greatly changes the
semantics of the call:
Consistency | Description |
---|---|
PREFER |
Consistency is preferred but not required. An inconsistent snapshot might be returned. |
REQUIRE |
Consistency is required. A request will fail if consistency is no longer guaranteed. |
The consistency
refers to if collecting all the results via the pagination API are consistent. We consider the
results to be consistent if it contains a complete view at some point in time. In practice this means that the results
must contain all the items, in the correct order and without duplicates.
If you use the PREFER
consistency then you may receive in-complete results that might appear out-of-order and can
contain duplicate items. UCloud will still attempt to serve a snapshot which appears mostly consistent. This is helpful
for user-interfaces which do not strictly depend on consistency but would still prefer something which is mostly
consistent.
The results might become inconsistent if the client either takes too long, or a service instance goes down while
fetching the results. UCloud attempts to keep each next
token alive for at least one minute before invalidating it.
This does not mean that a client must collect all results within a minute but rather that they must fetch the next page
within a minute of the last page. If this is not feasible and consistency is not required then PREFER
should be used.
📝 NOTE: Services are allowed to ignore extra criteria of the request if the next
token is supplied. This is
needed in order to provide a consistent view of the results. Clients should provide the same criterion as they
paginate through the results.
Properties
itemsPerPage
: Int?
Requested number of items per page. Supported values: 10, 25, 50, 100, 250.
Int?
next
: String?
A token requesting the next page of items
String?
consistency
: PaginationRequestV2Consistency?
Controls the consistency guarantees provided by the backend
PaginationRequestV2Consistency?
itemsToSkip
: Long?
Items to skip ahead
Long?
AppStore.BrowseOpenWithRecommendations.Request
¶
The base type for requesting paginated content.
data class Request(
val files: List<String>,
val itemsPerPage: Int?,
val next: String?,
val consistency: PaginationRequestV2Consistency?,
val itemsToSkip: Long?,
)
Paginated content can be requested with one of the following consistency
guarantees, this greatly changes the
semantics of the call:
Consistency | Description |
---|---|
PREFER |
Consistency is preferred but not required. An inconsistent snapshot might be returned. |
REQUIRE |
Consistency is required. A request will fail if consistency is no longer guaranteed. |
The consistency
refers to if collecting all the results via the pagination API are consistent. We consider the
results to be consistent if it contains a complete view at some point in time. In practice this means that the results
must contain all the items, in the correct order and without duplicates.
If you use the PREFER
consistency then you may receive in-complete results that might appear out-of-order and can
contain duplicate items. UCloud will still attempt to serve a snapshot which appears mostly consistent. This is helpful
for user-interfaces which do not strictly depend on consistency but would still prefer something which is mostly
consistent.
The results might become inconsistent if the client either takes too long, or a service instance goes down while
fetching the results. UCloud attempts to keep each next
token alive for at least one minute before invalidating it.
This does not mean that a client must collect all results within a minute but rather that they must fetch the next page
within a minute of the last page. If this is not feasible and consistency is not required then PREFER
should be used.
📝 NOTE: Services are allowed to ignore extra criteria of the request if the next
token is supplied. This is
needed in order to provide a consistent view of the results. Clients should provide the same criterion as they
paginate through the results.
Properties
itemsPerPage
: Int?
Requested number of items per page. Supported values: 10, 25, 50, 100, 250.
Int?
next
: String?
A token requesting the next page of items
String?
consistency
: PaginationRequestV2Consistency?
Controls the consistency guarantees provided by the backend
PaginationRequestV2Consistency?
itemsToSkip
: Long?
Items to skip ahead
Long?
AppStore.BrowseSpotlight.Request
¶
The base type for requesting paginated content.
data class Request(
val itemsPerPage: Int?,
val next: String?,
val consistency: PaginationRequestV2Consistency?,
val itemsToSkip: Long?,
)
Paginated content can be requested with one of the following consistency
guarantees, this greatly changes the
semantics of the call:
Consistency | Description |
---|---|
PREFER |
Consistency is preferred but not required. An inconsistent snapshot might be returned. |
REQUIRE |
Consistency is required. A request will fail if consistency is no longer guaranteed. |
The consistency
refers to if collecting all the results via the pagination API are consistent. We consider the
results to be consistent if it contains a complete view at some point in time. In practice this means that the results
must contain all the items, in the correct order and without duplicates.
If you use the PREFER
consistency then you may receive in-complete results that might appear out-of-order and can
contain duplicate items. UCloud will still attempt to serve a snapshot which appears mostly consistent. This is helpful
for user-interfaces which do not strictly depend on consistency but would still prefer something which is mostly
consistent.
The results might become inconsistent if the client either takes too long, or a service instance goes down while
fetching the results. UCloud attempts to keep each next
token alive for at least one minute before invalidating it.
This does not mean that a client must collect all results within a minute but rather that they must fetch the next page
within a minute of the last page. If this is not feasible and consistency is not required then PREFER
should be used.
📝 NOTE: Services are allowed to ignore extra criteria of the request if the next
token is supplied. This is
needed in order to provide a consistent view of the results. Clients should provide the same criterion as they
paginate through the results.
Properties
itemsPerPage
: Int?
Requested number of items per page. Supported values: 10, 25, 50, 100, 250.
Int?
next
: String?
A token requesting the next page of items
String?
consistency
: PaginationRequestV2Consistency?
Controls the consistency guarantees provided by the backend
PaginationRequestV2Consistency?
itemsToSkip
: Long?
Items to skip ahead
Long?
AppStore.DevImport.Request
¶
data class Request(
val endpoint: String,
val checksum: String,
)
AppStore.RemoveGroupFromCategory.Request
¶
data class Request(
val groupId: Int,
val categoryId: Int,
)
AppStore.RetrieveAcl.Request
¶
data class Request(
val name: String,
)
Properties
name
: String
String
AppStore.RetrieveAppLogo.Request
¶
data class Request(
val name: String,
val darkMode: Boolean?,
val includeText: Boolean?,
val placeTextUnderLogo: Boolean?,
)
AppStore.RetrieveCarrouselImage.Request
¶
data class Request(
val index: Int,
val slideTitle: String,
)
AppStore.RetrieveGroupLogo.Request
¶
data class Request(
val id: Int,
val darkMode: Boolean?,
val includeText: Boolean?,
val placeTextUnderLogo: Boolean?,
)
AppStore.Search.Request
¶
The base type for requesting paginated content.
data class Request(
val query: String,
val itemsPerPage: Int?,
val next: String?,
val consistency: PaginationRequestV2Consistency?,
val itemsToSkip: Long?,
)
Paginated content can be requested with one of the following consistency
guarantees, this greatly changes the
semantics of the call:
Consistency | Description |
---|---|
PREFER |
Consistency is preferred but not required. An inconsistent snapshot might be returned. |
REQUIRE |
Consistency is required. A request will fail if consistency is no longer guaranteed. |
The consistency
refers to if collecting all the results via the pagination API are consistent. We consider the
results to be consistent if it contains a complete view at some point in time. In practice this means that the results
must contain all the items, in the correct order and without duplicates.
If you use the PREFER
consistency then you may receive in-complete results that might appear out-of-order and can
contain duplicate items. UCloud will still attempt to serve a snapshot which appears mostly consistent. This is helpful
for user-interfaces which do not strictly depend on consistency but would still prefer something which is mostly
consistent.
The results might become inconsistent if the client either takes too long, or a service instance goes down while
fetching the results. UCloud attempts to keep each next
token alive for at least one minute before invalidating it.
This does not mean that a client must collect all results within a minute but rather that they must fetch the next page
within a minute of the last page. If this is not feasible and consistency is not required then PREFER
should be used.
📝 NOTE: Services are allowed to ignore extra criteria of the request if the next
token is supplied. This is
needed in order to provide a consistent view of the results. Clients should provide the same criterion as they
paginate through the results.
Properties
query
: String
String
itemsPerPage
: Int?
Requested number of items per page. Supported values: 10, 25, 50, 100, 250.
Int?
next
: String?
A token requesting the next page of items
String?
consistency
: PaginationRequestV2Consistency?
Controls the consistency guarantees provided by the backend
PaginationRequestV2Consistency?
itemsToSkip
: Long?
Items to skip ahead
Long?
AppStore.ToggleStar.Request
¶
data class Request(
val name: String,
)
Properties
name
: String
String
AppStore.UpdateAcl.Request
¶
data class Request(
val name: String,
val changes: List<ACLEntryRequest>,
)
AppStore.UpdateApplicationFlavor.Request
¶
data class Request(
val applicationName: String,
val flavorName: String,
)
AppStore.UpdateCarrousel.Request
¶
data class Request(
val newSlides: List<CarrouselItem>,
)
Properties
newSlides
: List<CarrouselItem>
List<CarrouselItem>
AppStore.UpdateCarrouselImage.Request
¶
data class Request(
val slideIndex: Int,
)
Properties
slideIndex
: Int
Int
AppStore.UpdateGroup.Request
¶
data class Request(
val id: Int,
val newTitle: String?,
val newDefaultFlavor: String?,
val newDescription: String?,
val newLogoHasText: Boolean?,
)
AppStore.UpdatePublicFlag.Request
¶
data class Request(
val name: String,
val version: String,
val public: Boolean,
)
AppStore.UpdateTopPicks.Request
¶
data class Request(
val newTopPicks: List<TopPick>,
)
FindByNameAndVersionRequest
¶
data class FindByNameAndVersionRequest(
val appName: String,
val appVersion: String?,
)
AppStore.ListAllApplications.Response
¶
data class Response(
val items: List<NameAndVersion>,
)
Properties
items
: List<NameAndVersion>
List<NameAndVersion>
AppStore.RetrieveAcl.Response
¶
data class Response(
val entries: List<DetailedEntityWithPermission>,
)
Properties
entries
: List<DetailedEntityWithPermission>
List<DetailedEntityWithPermission>
AppStore.RetrieveLandingPage.Response
¶
data class Response(
val carrousel: List<CarrouselItem>,
val topPicks: List<TopPick>,
val categories: List<ApplicationCategory>,
val spotlight: Spotlight?,
val newApplications: List<ApplicationSummaryWithFavorite>,
val recentlyUpdated: List<ApplicationSummaryWithFavorite>,
)
Properties
carrousel
: List<CarrouselItem>
List<CarrouselItem>
categories
: List<ApplicationCategory>
List<ApplicationCategory>
spotlight
: Spotlight?
Spotlight?
newApplications
: List<ApplicationSummaryWithFavorite>
List<ApplicationSummaryWithFavorite>
recentlyUpdated
: List<ApplicationSummaryWithFavorite>
List<ApplicationSummaryWithFavorite>
AppStore.RetrieveStars.Response
¶
data class Response(
val items: List<ApplicationSummaryWithFavorite>,
)
Properties
items
: List<ApplicationSummaryWithFavorite>
List<ApplicationSummaryWithFavorite>