UCloud logo UCloud logo UCloud
v2025.1.0
  1. UCloud/Core
  2. 1. Introduction
  3. 2. Projects
  4. 3. Accounting
  5. 4. Orchestration
  6. UCloud/IM for Slurm-based HPC
  7. 5. Installation
  8. 6. Architecture and Networking
  9. 7. User and Project Management
  10. 8. Filesystem Integration
    1. 8.1. Inter-provider file transfers
  11. 9. Slurm Integration
    1. 9.1. Application Management
    2. 9.2. Built-in Applications
  12. 10. Reference
    1. 10.1. Configuration
    2. 10.2. CLI
  13. 11. Appendix
    1. 11.1. Built-in Application Index
  14. UCloud/IM for Kubernetes
  15. 12. Installation
  16. 13. Architecture and Networking
  17. 14. Filesystem Integration
  18. 15. Compute Jobs
    1. 15.1. Public Links
    2. 15.2. Public IPs
    3. 15.3. License Servers
    4. 15.4. SSH Servers
  19. 16. Integrated applications
    1. 16.1. Syncthing
    2. 16.2. Integrated terminal
  20. 17. Reference
    1. 17.1. Configuration
  21. H: Procedures
  22. 18. H: Procedures
  23. 19. H: Introduction
  24. 20. H: Auditing
  25. 21. H: Auditing scenario
  26. 22. H: GitHub actions
  27. 23. H: Deployment
  28. 24. H: 3rd party dependencies (risk assesment)
  1. Links
  2. Source Code
  3. Releases

Application management

This chapter will contain a description of how to upload and manage applications for a service provider. UCloud provides a catalog of applications which a service provider can subscribe to, assuming that they live up to certain infrastructure requirements.

The Application Catalog

The UCloud application catalog enables users to browse a comprehensive list of available software. Each application within the catalog is a UCloud abstraction that defines a piece of software, its parameters, and its startup process.

UCloud maintains an up-to-date catalog of applications commonly used in high-performance computing systems. The entire application catalog is automatically available when using the Kubernetes integration. You do not need to configure the service provider for this. Images will automatically be pulled from the UCloud Docker registry.

The UCloud application catalog showing a selection of applications available at a service provider.

The Structure of an Application

UCloud applications describe how to obtain, load and invoke a piece of software. This information is supplied in a YAML document which has several sections. These sections are illustrated in the diagram below.

An application describes how to obtain, load and invoke a piece of software. This also includes a list of input parameters, both optional and mandatory which can be fed into the application.

Metadata

All applications contain a small section of metadata. This metadata includes an application name and version. These together form a unique identifier, which is transmitted to the service provider letting it know which application is being started.

The UCloud user-interface allows users to quickly swap between versions of the same application, as shown in the screenshot below. This also means that the name of an application should be considered stable. The name of an application is generally not shown directly to end-users.

Versions are ordered in UCloud based entirely on when they are uploaded to the platform. Thus the newest version is always considered to be the most recently uploaded version.

The version selector allows users to quickly switch between versions of an application.

Input Parameters

The input parameters of an application describe the input which a user can feed into it. Each input parameter type has an associated widget in UCloud specialized for that type of input. The exact types supported are listed in the reference. Input parameters can be either optional or mandatory. Their values are partially validated by UCloud before being forwarded to the service provider.

The values of the input parameters are fed into the invocation sections.

A selection of input parameters shown in the UCloud user-interface.

Invocation

The invocation sections accept the user input and produce output in the job submission script. This includes changes to the sbatch directives, binding environment variables and finally invoking the actual software. The invocation sections are written using Jinja2 templates. Refer to the reference and examples for details on how to write these.

Interactive Properties

Applications can also declare support for various interactive application backends. This includes web-based applications and remote desktop applications. These are shown in some of the examples below, but are not covered in this chapter.

Examples

This is an example application showing a non-customizable application using most of the features available in the application system.

# yaml-language-server: $schema=https://launcher-assets.cloud.sdu.dk/schemas/app
application: v2

name: "example-application"
version: "2026.1.0"

title: "My example"
documentation: "https://docs.cloud.sdu.dk/"
description: "My example applications"

software:
  type: "Container"
  image: "dreg.cloud.sdu.dk/ucloud-apps/example:2026.1.0" # This does not exist

features:
  multiNode: true
  links: false
  folders: true
  jobLinking: true
  ipAddresses: true

web:
  enabled: true
  port: 7681

ssh:
  mode: "Optional"

extensions: [".txt", ".md"]

parameters:
  shell:
    type: "Enumeration"
    title: "My preferred shell"
    description: "Select your preferred shell."
    defaultValue: "bash"
    options:
      - title: "Bash"
        value: "bash"
      - title: "Zsh"
        value: "zsh"
      - title: "Fish"
        value: "fish"
    optional: true

  feature:
    type: "Boolean"
    title: "Enable feature"
    description: "Do you want the feature? (default: false)."
    defaultValue: false
    optional: true

  modules:
    type: "Directory"
    title: "Modules path"
    description: "Import environment modules folder."
    optional: true

  initScript:
    type: "File"
    title: "Initialization"
    description: "Shell script to run during startup. File format: Bash script (.sh)."
    optional: true

invocation: |
  echo "Did you want the feature?" {{ feature }}
  echo "Your preferred shell is: " {{ shell }}

Reference

Metadata

The metadata section provides basic metadata about the document and the application contained within. This section is mandatory and placed at the top-level.

Property Type Description
application —

Must be equal to v2.

name string

The name of an application. This name must be unique, for a given application and remain stable across different versions of the application. By convention, this name should be written using lower-kebab-case. The name must not contain any type of whitespace.

version string

The version of an application. There can only be one application with a given (name, version) tuple. Attempting to re-create an application with the same version is not allowed.

Parameters

The parameters section contains the input parameters for a given application. Parameters are supplied in the parameters top-level section. The top-level section has a type of map<string, parameter> where the key is the name of the parameter. The parameter type is defined in this section.

Property Type Valid for Description
type string All

The type of parameter. This controls the widget used in the UCloud user-interface along with validation logic. The type supplied controls how some properties of a parameter works. See the β€œValid for” column in this table. The following types are available:

TypeDescription
FileDisplays a file selector widget. Only a single file can be selected with this parameter.
DirectoryDisplay a folder selector widget. Only a single folder can be selected with this parameters.
IntegerAn integer widget. Optional minimum and maximum values can be selected.
FloatingPointA floating point number widget. Optional minimum and maximum values can be selected.
BooleanA boolean (on/off) widget.
TextA text input field which can contain a single line of text.
TextAreaA text input field which can contain multiple lines of text.
EnumerationAn input field which allows the user to select from a number of pre-defined options.
LicenseDisplays a widget for selecting a license to attach to the job.
JobDisplays a job selector widget. This allows a user to select a companion job.
PublicIPDisplays a widget for selecting a public license to attach to the job.
title string All

A human-readable title used for this parameter. This property should be short (less than 120 characters) and be limited to a single line.

description string All

A human-readable description used for this parameter. The description can use limited markdown for markup, but it cannot use any HTML tags or references to external resources. The first-line is always shown without further interaction from the user. Lines beyond the first might require user interaction to show.

optional boolean (optional) All

Default value: true

This property controls if a parameter is mandatory or not. If this property is not supplied or if it is supplied with a value of true, then the parameter is considered optional. Otherwise, it is considered to be mandatory and a job cannot be submitted with this application without supplying a value for the parameter.

defaultValue Varies (optional) All

Default value: null

This property controls the default value of a parameter. The default value is used only if a parameter is optional and no value is supplied for the parameter. The type of the property should match the type of parameter. It is not possible to set default values for files or directories.

min int/float (optional) Integer, FloatingPoint

Default value: null

This property controls the minimum value (inclusive) a numeric type can have.

max int/float (optional) Integer, FloatingPoint

Default value: null

This property controls the maximum value (inclusive) a numeric type can have.

step int/float (optional) Integer, FloatingPoint

Default value: null

This property controls the step size of clicking increment/decrement buttons in the user-interface for numeric inputs.

options { title: string, value: string }[] Enumeration

This property controls the options to show in the user-interface for an enumeration. Only options present in this property can be selected by the user.

If a defaultValue is also defined then this must match the value of a valid option.

Software

The software section contains information about how to retrieve the required software. This is supplied in the software top-level section.

Property Type Description
type string

Must be "Container" for application used in the UCloud/IM for Slurm integration.

image string

Reference to the container image used for the application.

Variables

All input parameters submitted to the job are available at the top-level using the same name as described in the parameters section of the application. If a variable has a default value and none was supplied, then the default value is made available. It is not possible to detect directly if a user supplied no value if a default is available. Normal variables can be accessed with the following snippet:

{{ myParameter }}

Optional parameters for which the user did not supply a value, and the parameter has no default, will not be made available in the template. It is possible to detect if no value is supplied with the following snippet:

{% if optionalParameter == None %}
The optional parameter was not supplied
{% else %}
The optional parameter is {{optionalParameter}} 
{% endif %}

Metadata about the job is made available through the ucloud top-level property. The properties in the ucloud property are also automatically bound to environment variables using the same name but in UPPER_SNAKE_CASE. Thus ucloud.machine.memoryInGigs becomes UCLOUD_MACHINE_MEMORY_IN_GIGS. The contents of the ucloud property is defined in the table below:

Property Type Description
ucloud.jobId string

The UCloud job ID. Note that this is supplied as a string, even though most job IDs are numeric. You should not depend on the IDs being numeric. The IDs are unique and do not change. An ID is never re-used at a given provider.

Example: "51239184"

ucloud.machine.name string

The name of the machine slice used for the reservation.

Example: "u1-standard-64"

ucloud.machine.category string

The name of the machine type (product category) used for the reservation.

Example: "u1-standard"

ucloud.machine.cpu int

The number of (v)CPUs available to the machine slice. This is retrieved from the product configuration and not from the actual compute nodes.

Example: 64

ucloud.machine.cpuModel string (optional)

The model of the CPU available to the machine type used in the reservation. This is retrieved from the product configuration and not from the actual compute nodes.

Example: "AMD EPYC 7742"

ucloud.machine.memoryInGigs int

The amount of memory available to the machine reservation in gigabytes. This is retrieved from the product configuration and not from the actual compute nodes.

Example: 512

ucloud.machine.memoryModel string (optional)

The model of the memory available to the machine type used in the reservation. This is retrieved from the product configuration and not from the actual compute nodes.

Example: "DDR4-2400"

ucloud.machine.gpu int

The amount of GPUs made available to the machine type used in the reservation. This is retrieved from the product configuration and not from the actual compute nodes.

Example: 4

ucloud.machine.gpuModel string (optional)

The model of the GPUs available to the machine type used in the reservation. This is retrieved from the product configuration and not from the actual compute nodes.

Example: "NVIDIA H100"

ucloud.webPort/ucloud.vncPort int (optional)

If the application has requested a dynamic port allocation for a vnc/web-interface, then this property will contain a port which the application is expected to use. The dynamic port will be allocated such that it is highly unlikely to be in use on the node.

Note that UCloud/IM cannot guarantee that this port is not in use. But UCloud/IM will attempt to not generate duplicates directly. This won’t stop users from, at random, running work listening on the same port. Applications should attempt to exit immediately in case such a conflict occurs.

Ports are generated in the range between TODO and TODO.

Example: 52382

ucloud.nodes int

The number of nodes dedicated to the job.

Example: 4

ucloud.application.name string

The name of the application being submitted.

Example: "quantum-espresso"

ucloud.application.version string

The version of the application being submitted.

Example: "7.3"

Filters

The standard built-in filters of Jinja2 are supported along with the following custom filters:

Filter Description
flag

Signature:

boolean_expression | flag(onFlag[, offFlag]) -> string

If the value passed into the filter is True then the onFlag will be produced. Otherwise the offFlag will be produced. If offFlag is not specified then "" is returned instead.

Example:

{{ True | flag("--yes", "--no") }}            -> "--yes"
{{ False | flag("--yes", "--no") }}           -> "--no"
{{ True | flag("--yes") }}                    -> "--yes"
{{ False | flag("--yes") }}                   -> ""
option

Signature:

expression | option(optionFlag[, addSpace]) -> string

If the expression is not None then a non-positional option is added to the output. If addSpace is True then a space is added between the optionalFlag and the value. If it is False then no space is added. If it is omitted then a value is automatically chosen based on the option flag. Specifically, if the optionFlag ends in = then no space is added, otherwise a space is added.

This function will always escape the value part for use in bash. Even when bound to an environment variable. If addSpace evaluates to False then the option itself is also escaped. The option is not escaped if addSpace evaluates to true.

Examples:

{{ None | option("--an-optional-option") }}   -> ""
{{ 42 | option("--count") }}                  -> "--count '42'"
{{ 42 | option("--count=") }}                 -> "'--count=42'"
{{ 42 | option("--count", false) }}           -> "'--count42'"
{{ 42 | option("--count=", true) }}           -> "--count= '42'"
{{ "/path/with spaces" | option("--file") }}  -> "--file '/path/with spaces'"

Methods

The standard built-in methods Jinja2 are supported along with the following custom methods:

Control Structures

The templating engine supports the control structures of Jinja2, with the following exceptions:

  • {% extends ... %} has been disabled
  • {% from ... %} has been disabled
  • {% import ... %} has been disabled
  • {% include ... %} has been disabled

Web Applications

The web-based interactive applications can be configured in the web top-level property. It has the following options available to it:

Property Type Description
enabled boolean

If true, then this application exposes a web-application. If false, then all other properties in this section are ignored.

port int

The port on which the web-application will listen.

Remote Desktop Environments (VNC)

Remote desktop environments (via VNC) can be configured through the vnc top-level section. It has the following properties available to it:

Property Type Description
enabled boolean

If true, then this application exposes a web-application. See interactive applications for more information. If false, then all other properties in this section are ignored.

port int

The port on which the web-application will listen.

password string

The password to the VNC server. This password is not used for security purposes.

Features

Various optional features can be enabled through the features top-level section. These properties are described by the table below. All properties in the features section have a default value.

Property Type Description
multiNode boolean (optional)

Default value: false

This feature allows a user to add multiple nodes to a single job. This must be explicitly enabled for all applications which are capable of doing multi-node processing.

links boolean (optional)

This feature allows a user to add public links to a job.

ipAddresses boolean (optional)

This feature allows a user to add public IPs to a job.

folders boolean (optional)

This feature allows a user to additional folders to a job.

jobLinking boolean (optional)

This feature allows a user to link with other jobs on the same provider, allowing them to communicate with each other.

Previous Filesystem Integration
Next Public Links