From 15a2aca6a3702a92fb56446b5cae22e49db4b09b Mon Sep 17 00:00:00 2001 From: pablodelarco Date: Wed, 14 Oct 2026 13:15:48 +0200 Subject: [PATCH 1/4] M #-: Split the Open OnDemand guide into pages --- .../slurm/integrations/open_ondemand.md | 301 ------------------ .../integrations/open_ondemand/_index.md | 13 + .../integrations/open_ondemand/operations.md | 97 ++++++ .../integrations/open_ondemand/overview.md | 53 +++ .../integrations/open_ondemand/quick_start.md | 119 +++++++ .../open_ondemand/requirements.md | 60 ++++ .../open_ondemand/troubleshooting.md | 39 +++ 7 files changed, 381 insertions(+), 301 deletions(-) delete mode 100644 content/platform_services/slurm/integrations/open_ondemand.md create mode 100644 content/platform_services/slurm/integrations/open_ondemand/_index.md create mode 100644 content/platform_services/slurm/integrations/open_ondemand/operations.md create mode 100644 content/platform_services/slurm/integrations/open_ondemand/overview.md create mode 100644 content/platform_services/slurm/integrations/open_ondemand/quick_start.md create mode 100644 content/platform_services/slurm/integrations/open_ondemand/requirements.md create mode 100644 content/platform_services/slurm/integrations/open_ondemand/troubleshooting.md diff --git a/content/platform_services/slurm/integrations/open_ondemand.md b/content/platform_services/slurm/integrations/open_ondemand.md deleted file mode 100644 index 203370409..000000000 --- a/content/platform_services/slurm/integrations/open_ondemand.md +++ /dev/null @@ -1,301 +0,0 @@ ---- -title: "Open OnDemand" -linkTitle: "Open OnDemand" -date: "2026-10-06" -description: "" -categories: -tags: -type: docs -weight: "1" -aliases: - - /solutions/integration_blueprints/open_ondemand/ - - /solutions/integration_blueprints/open_ondemand/overview/ - - /solutions/integration_blueprints/open_ondemand/architecture/ - - /solutions/integration_blueprints/open_ondemand/quick_start/ - - /solutions/integration_blueprints/open_ondemand/configuration/ - - /solutions/integration_blueprints/open_ondemand/operations/ - - /solutions/integration_blueprints/open_ondemand/monitoring_and_troubleshooting/ ---- - - -[Open OnDemand](https://openondemand.org/) is a web portal for HPC users. The Open OnDemand appliance runs this portal in one VM, connected to your OneSlurm Clusters. Users sign in with their LDAP account and, from a web browser, they can: - -* Manage the files in their home -* Submit jobs and follow them -* Open a terminal on a Cluster - -The appliance is available in the [OpenNebula Public Marketplace](https://marketplace.opennebula.io/appliance/d3c8ea14-f6f0-455c-8a41-6129affa9a0e). It uses Ubuntu 26.04 LTS and Open OnDemand 4.2. - -## How It Works - -The portal does not run Slurm. It sends the Slurm commands of each user to the controller of the Cluster over SSH. - -The portal and the Clusters share two services: - -* The same LDAP directory, so users have the same account everywhere -* The same NFS export for `/home`, so users see the same files everywhere - -One portal can serve several OneSlurm Clusters. - -### What Happens at Boot - -1. The appliance checks the values of the wizard. -2. It mounts the NFS export on `/home`. -3. It reads the users from LDAP. -4. It creates a self-signed certificate for the IP address of the VM. -5. It adds each Slurm Cluster to the portal and saves the SSH host key of each controller. -6. It starts the portal and publishes its URL in OneGate. - -### What Happens at the First Login of a User - -* The portal creates an SSH key for the user in `~/.ssh/id_ed25519_portal`. -* It adds the key to `~/.ssh/authorized_keys`, accepted only from the IP addresses of the portal. -* The controllers read the same home directory over NFS, so the portal can run `sbatch`, `squeue` and `scancel` as that user. The terminal uses the same key. - -Each user works with their own Unix account, with the same UID as on the Clusters. Users cannot read the files or cancel the jobs of other users. - -## Requirements - -Before you deploy the portal, check that you have the elements in the following table. - -| **Requirement** | **What the portal needs** | -|-------------|-----------------------| -| OneSlurm Clusters | One or more Clusters in `RUNNING` state, and the IP address of each controller. | -| LDAP server | The LDAP server of the Clusters, with a `ldap://` URL. | -| NFS export | The export with the home directories of the users, for example `10.0.0.10:/export/home`. | -| User homes | One home directory for each user on that export, owned by the user, with mode `700`. | -| Virtual Network | A Virtual Network that reaches the controllers, the LDAP server and the NFS server. | -| [OneGate]({{% relref "product/operation_references/opennebula_services_configuration/onegate" %}}) | Reachable from that network. The portal publishes its URL and its errors there. | - -### LDAP Details - -* Use the same domain as `ONEAPP_LDAP_DOMAIN` in OneSlurm. The default is `slurm.local`. -* You can also use a base DN, such as `dc=example,dc=org`. -* Users must be `posixAccount` entries under `ou=People`. -* The portal has no bind user, so the LDAP server must allow anonymous search under `ou=People`. - -The LDAP server of OneSlurm meets all of these points. - -### NFS Details - -* Use the same export as `ONEAPP_SLURM_NFS_HOME` in OneSlurm. -* The NFS server must allow the IP address of the portal. -* The portal uses NFS version 4. The export can use `root_squash`. - -### Size of the VM - -The default VM has 2 vCPU, 4 GB of memory and a 10 GB disk. Each active user needs about 200 MB of memory (measured with six users). Add memory if more users work at the same time. - -## Deploy the Portal - -### Step 1. Import the Appliance - -In Sunstone: - -1. Go to **Storage -> Apps**. -2. Search for **Open OnDemand** and select it. -3. Click **Import** and choose the image datastore. - -Or, with the CLI on the Front-end: - -```shell -onemarketapp export "Open OnDemand" "Open OnDemand" --datastore default -``` - -This imports an image and a VM template, both called **Open OnDemand**. - -### Step 2. Start the Wizard - -1. Go to **Templates -> VM Templates**. -2. Select the **Open OnDemand** template and click **Instantiate**. -3. Enter a name for the VM and click **Next**. - -### Step 3. Fill in the User Inputs - -The wizard has three tabs, **LDAP**, **Home** and **Slurm**. - -#### LDAP Tab - -* In **LDAP URL**, enter the LDAP server of the Clusters, for example `ldap://10.0.0.20`. -* In **LDAP domain or base DN**, keep `slurm.local`, the default of OneSlurm, or enter the domain of your LDAP server. The base DN is the root of the directory. A domain such as `slurm.local` becomes the base DN `dc=slurm,dc=local`, and the portal looks for users under `ou=People` of that base DN. - -{{< image path="/images/slurm/open_ondemand/light/ood_wizard_ldap.png" - pathDark="/images/slurm/open_ondemand/dark/ood_wizard_ldap.png" -alt="LDAP tab of the Open OnDemand wizard" align="center" width="90%" mb="30px" >}} - -#### Home Tab - -* In **NFS export for /home**, enter the export with the home directory of the users, for example `10.0.0.10:/export/home`. - -{{< image path="/images/slurm/open_ondemand/light/ood_wizard_home.png" - pathDark="/images/slurm/open_ondemand/dark/ood_wizard_home.png" -alt="Home tab of the Open OnDemand wizard" align="center" width="90%" mb="30px" >}} - -#### Slurm Tab - -* In **Slurm Clusters**, enter one line for each Cluster as `name:IP`, for example `cpu:10.0.0.20`. The name is what users see in the portal and must be unique. The IP is the IPv4 address of the controller. Every Cluster must use the same LDAP server and the same `/home` as the portal. - -{{< image path="/images/slurm/open_ondemand/light/ood_wizard_slurm.png" - pathDark="/images/slurm/open_ondemand/dark/ood_wizard_slurm.png" -alt="Slurm tab of the Open OnDemand wizard" align="center" width="90%" mb="30px" >}} - -### Step 4. Attach the Network of the Clusters - -1. Click **Next**. -2. In **Advanced options**, open the **Network** tab. -3. Click **Attach NIC** and select the Virtual Network of the Clusters. -4. Click **Finish**. - -{{< image path="/images/slurm/open_ondemand/light/ood_wizard_network.png" - pathDark="/images/slurm/open_ondemand/dark/ood_wizard_network.png" -alt="Network tab of the Open OnDemand wizard with the NIC of the Clusters" align="center" width="90%" mb="30px" >}} - -The portal uses the IPv4 address of the first NIC. Users must be able to reach that address with their web browser. - -### Deploy with the CLI - -Pass the same values given in the above Sunstone examples with `--user-inputs`. Separate the Clusters with spaces: - -```shell -onetemplate instantiate "Open OnDemand" --name open-ondemand --nic \ - --user-inputs "ONEAPP_LDAP_SERVER_URL=ldap://10.0.0.20,ONEAPP_LDAP_SERVER_DOMAIN=slurm.local,ONEAPP_HOME_NFS_EXPORT=10.0.0.10:/export/home,ONEAPP_SLURM_CLUSTERS_LIST=cpu:10.0.0.20 gpu:10.0.0.30" -``` - -### Step 5. Check That the Portal Is Ready - -Open the VM in Sunstone and go to **Info -> Attributes**. With the CLI, run `onevm show `: - -| **Attribute** | **Meaning** | -|-----------|---------| -| `READY` = `YES` | The portal is ready. | -| `OOD_URL` | The address of the portal, for example `https://10.0.0.50/`. | -| `OOD_ERROR` | The configuration failed. The value says why, and the portal stays closed. | - -Examples of `OOD_ERROR`: - -* `Cannot mount 10.0.0.10:/export/nope on /home` -* `The controller 10.0.0.30 does not answer on the SSH port` - -| **Cause of the error** | **How to fix it** | -|--------------------|---------------| -| A service was down | Fix the service and reboot the VM. | -| A value was wrong | Change it as shown in [Change the Clusters](#change-the-clusters), then reboot the VM so that OneGate shows the new result. | - -## Use the Portal - -1. Open the address of `OOD_URL` in a web browser. -2. Accept the certificate warning. The certificate is self-signed. -3. Sign in with the LDAP user name and password. - -{{< image path="/images/slurm/open_ondemand/ood_login.png" -alt="Login page of Open OnDemand" align="center" width="80%" mb="20px" >}} - -### Tools for Users - -| **Menu** | **Tool** | **What users do** | -|------|------|---------------| -| Files | Home Directory | Browse, upload, download and delete files. | -| Jobs | Active Jobs | See their jobs on every Cluster and cancel them. | -| Jobs | Job Composer | Create a job from a script or a template and submit it to a Cluster. | -| Jobs | Project Manager | Group job scripts in project folders. | -| Clusters | `` Shell Access | Open a terminal on the controller of a Cluster. | -| Clusters | System Status | See the nodes, CPUs and jobs of each Cluster. | - -The portal has no remote desktop, because the OneSlurm workers have no VNC server. - -{{< image path="/images/slurm/open_ondemand/ood_files.png" -alt="Files app of Open OnDemand with the home of the user" align="center" width="90%" mb="20px" >}} - -* A file uploaded in **Files** is on every Cluster at once, because they share `/home`. -* **Open in Terminal** opens a terminal on the first Cluster of the list. - -{{< image path="/images/slurm/open_ondemand/ood_shell.png" -alt="Terminal on the controller of a Cluster, with a job submitted with sbatch" align="center" width="90%" mb="20px" >}} - -Jobs submitted from the terminal or from the Job Composer appear in **Active Jobs**. - -{{< image path="/images/slurm/open_ondemand/ood_active_jobs.png" -alt="Active Jobs with a running job on the cpu Cluster" align="center" width="90%" mb="20px" >}} - -{{< image path="/images/slurm/open_ondemand/ood_job_composer.png" -alt="Job Composer with jobs on two Clusters" align="center" width="90%" mb="20px" >}} - -## Add Users - -1. Create the user in the LDAP server of the Clusters. -2. Create the home directory on the NFS export, owned by the user, with mode `700`. - -The portal needs no change. If the user signs in before the home directory exists, the portal shows **Home directory not found**. Create the home directory, then the user clicks **Restart Web Server** on that page. - -## Change the Clusters - -You can add or remove Clusters on a running portal. - -Before you add a Cluster: - -* Check that its controller is running. The portal saves its SSH host key at this step. -* If the Cluster is on another network, attach that network to the VM first. - -Then: - -1. In Sunstone, open the VM. -2. Go to **Configuration -> Update configuration -> Context -> Context Custom Variables**. -3. Edit `ONEAPP_SLURM_CLUSTERS_LIST`. Use one Cluster per line, or separate them with spaces. -4. Save the change. - -The appliance configures the portal again in about three minutes. Removed Clusters disappear from the portal, and new Clusters appear in its menus. - -{{< alert title="Note" type="info" >}} -After **Update configuration**, OneGate does not answer the VM until it reboots, so `OOD_URL` and `OOD_ERROR` keep their old values. Read the result in `/var/log/one-appliance/configure.log` in the VM. This is a known issue of the `one-context` package 7.4.0. -{{< /alert >}} - -## Security - -### Network Ports - -Limit the traffic of the portal, for example with a [security group]({{% relref "product/virtual_machines_operation/virtual_machines_networking/security_groups" %}}). - -| **Direction** | **Port** | **Use** | -|-----------|------|-----| -| Inbound | TCP 443 | Users open the portal. | -| Inbound | TCP 80 | Redirects to 443. | -| Inbound | TCP 22 | Administrators only. | -| Outbound | TCP 22 | SSH to the controllers. | -| Outbound | TCP 389 | LDAP server. | -| Outbound | TCP 2049 | NFS server. | -| Outbound | OneGate port | OneGate. | - -Do not open port 5558. The login service of the portal (Dex) shows metrics there without authentication, and Open OnDemand does not allow changing it. - -### LDAP Without TLS - -The portal connects to LDAP with `ldap://`, like OneSlurm. Passwords travel without encryption between the portal and the LDAP server. Keep the portal, the Clusters and the LDAP server on a private network. - -### SSH to the Portal VM - -Only `root` can open an SSH session on the portal VM, with the key of the OpenNebula user that created it. LDAP users cannot use SSH or copy files to the portal VM. They use the portal or a Cluster controller. - -## Troubleshooting - -| **Problem** | **What to do** | -|---------|------------| -| The VM shows `OOD_ERROR` | Fix the value or the service named in the message, then reboot the VM. Full log in `/var/log/one-appliance/configure.log`. | -| The browser does not open the portal | Check that the VM shows `READY=YES` and that your network reaches the IP of `OOD_URL` on port 443. Logs: `journalctl -u apache2 -u ondemand-dex`. | -| Login fails with the right password | The user is not under `ou=People`, or LDAP does not answer. Test in the VM with `ldapsearch -x -H -b ou=People, uid=`. For `slurm.local`, the base DN is `dc=slurm,dc=local`. | -| Home directory not found | Create the home directory of the user, then click **Restart Web Server** on that page. | -| Active Jobs is empty, or `Permission denied` in Submit or the terminal | Click **Help -> Restart Web Server**. This adds the key of the user to `~/.ssh/authorized_keys` again. Logs: `journalctl -t ood-prehook`. | -| System Status shows an error page | A controller does not answer. That Cluster shows no jobs, and the Job Composer and the terminal show an SSH error. Everything works again when the controller is back. | -| Pages load forever with no message | The NFS server does not answer. The portal works again by itself when NFS is back. Meanwhile, use the VM console in Sunstone, because SSH to the VM can also hang. | - -## Known Limitations - -| **Area** | **Limitation** | **What to do** | -|------|------------|------------| -| Files | Uploads are limited to 256 MiB. | Copy bigger files with `scp` or `rsync` to a Cluster controller, which has the same home. | -| Terminal | The terminal closes when the page reloads. | Run long work under `tmux` or `screen` on the controller. | -| Job Composer | If the first visit is a direct link to `/pun/sys/myjobs/`, it creates an empty database and shows error 500 from then on. | Open it the first time from the **Jobs** menu. To fix it, delete `~/ondemand/data/sys/myjobs/production.sqlite3` of that user (only if the file has no tables) and open the Job Composer from the menu. | -| Job Composer | **New Job -> From Template** creates a job without a script. | Open **Job Options**, select the script and click **Save**. | -| Job states | OneSlurm has no Slurm accounting, so a cancelled job shows `Completed` in Active Jobs and `Failed` in the Job Composer. | Check the real state with `scontrol show job ` or in the output file of the job. | -| Project Manager | Deleting a project only removes it from the list. The files stay. | Delete the files in **Files**. | -| Two portals | With two portals on the same homes, the Job Composer fails with error 500 when a user opens it on both at the same time. | Use one portal for each NFS home export. | -| New Clusters | A new Cluster needs a running controller. If it does not answer, the configuration stops with `OOD_ERROR`. | Start the controller first. Clusters the portal already knows can be stopped for maintenance. | diff --git a/content/platform_services/slurm/integrations/open_ondemand/_index.md b/content/platform_services/slurm/integrations/open_ondemand/_index.md new file mode 100644 index 000000000..a49cc941f --- /dev/null +++ b/content/platform_services/slurm/integrations/open_ondemand/_index.md @@ -0,0 +1,13 @@ +--- +title: "Open OnDemand" +linkTitle: "Open OnDemand" +date: "2026-10-14" +description: "Give your OneSlurm users a web portal to manage files, submit jobs and open a terminal." +categories: +pageintoc: "13" +tags: +type: docs +weight: "1" +aliases: + - /solutions/integration_blueprints/open_ondemand/ +--- diff --git a/content/platform_services/slurm/integrations/open_ondemand/operations.md b/content/platform_services/slurm/integrations/open_ondemand/operations.md new file mode 100644 index 000000000..ce36ff2df --- /dev/null +++ b/content/platform_services/slurm/integrations/open_ondemand/operations.md @@ -0,0 +1,97 @@ +--- +title: "Operations" +linkTitle: "Operations" +date: "2026-10-14" +description: "Use the portal, add users, change the Clusters and keep the portal secure." +categories: +tags: +type: docs +weight: "4" +aliases: + - /solutions/integration_blueprints/open_ondemand/configuration/ + - /solutions/integration_blueprints/open_ondemand/operations/ +--- + +## Use the Portal + +1. Open the address of `OOD_URL` in a web browser. +2. Accept the certificate warning. The certificate is self-signed. +3. Sign in with the LDAP user name and password. + +{{< image path="/images/slurm/open_ondemand/ood_login.png" +alt="Login page of Open OnDemand" align="center" width="80%" mb="20px" >}} + +### Tools for Users + +| **Menu** | **Tool** | **What users do** | +|------|------|---------------| +| Files | Home Directory | Browse, upload, download and delete files. | +| Jobs | Active Jobs | See their jobs on every Cluster and cancel them. | +| Jobs | Job Composer | Create a job from a script or a template and submit it to a Cluster. | +| Jobs | Project Manager | Group job scripts in project folders. | +| Clusters | `` Shell Access | Open a terminal on the controller of a Cluster. | +| Clusters | System Status | See the nodes, CPUs and jobs of each Cluster. | + +The portal has no remote desktop, because the OneSlurm workers have no VNC server. + +{{< image path="/images/slurm/open_ondemand/ood_files.png" +alt="Files app of Open OnDemand with the home of the user" align="center" width="90%" mb="20px" >}} + +* A file uploaded in **Files** is on every Cluster at once, because they share `/home`. +* **Open in Terminal** opens a terminal on the first Cluster of the list. + +{{< image path="/images/slurm/open_ondemand/ood_shell.png" +alt="Terminal on the controller of a Cluster, with a job submitted with sbatch" align="center" width="90%" mb="20px" >}} + +Jobs submitted from the terminal or from the Job Composer appear in **Active Jobs**. + +{{< image path="/images/slurm/open_ondemand/ood_active_jobs.png" +alt="Active Jobs with a running job on the cpu Cluster" align="center" width="90%" mb="20px" >}} + +{{< image path="/images/slurm/open_ondemand/ood_job_composer.png" +alt="Job Composer with jobs on two Clusters" align="center" width="90%" mb="20px" >}} + +## Add Users + +1. Create the user in the LDAP server of the Clusters. +2. Create the home directory on the NFS export, owned by the user, with mode `700`. + +**The portal needs no change.** If the user signs in before the home directory exists, the portal shows **Home directory not found**. Create the home directory, then the user clicks **Restart Web Server** on that page. + +## Change the Clusters + +You can add or remove Clusters on a running portal. + +Before you add a Cluster: + +* Check that its controller is running. The portal saves its SSH host key at this step. +* If the Cluster is on another network, attach that network to the VM first. + +Then: + +1. In Sunstone, open the VM. +2. Go to **Configuration -> Update configuration -> Context -> Context Custom Variables**. +3. Edit `ONEAPP_SLURM_CLUSTERS_LIST`. Use one Cluster per line, or separate them with spaces. +4. Save the change. + +The appliance configures the portal again in about three minutes. Removed Clusters disappear from the portal, and new Clusters appear in its menus. + +{{< alert title="Note" type="info" >}} +After **Update configuration**, OneGate does not answer the VM until it reboots, so `OOD_URL` and `OOD_ERROR` keep their old values. Read the result in `/var/log/one-appliance/configure.log` in the VM. This is a known issue of the `one-context` package 7.4.0. +{{< /alert >}} + +## Security + +The ports that the portal uses are in [Requirements]({{% relref "platform_services/slurm/integrations/open_ondemand/requirements#network-ports" %}}). + +### LDAP Without TLS + +The portal connects to LDAP with `ldap://`, like OneSlurm. **Passwords travel without encryption between the portal and the LDAP server.** Keep the portal, the Clusters and the LDAP server on a private network. + +### SSH to the Portal VM + +Only `root` can open an SSH session on the portal VM, with the key of the OpenNebula user that created it. LDAP users cannot use SSH or copy files to the portal VM. They use the portal or a Cluster controller. + +## Next Steps + +If something does not work, refer to [Troubleshooting and Limitations]({{% relref "platform_services/slurm/integrations/open_ondemand/troubleshooting" %}}). diff --git a/content/platform_services/slurm/integrations/open_ondemand/overview.md b/content/platform_services/slurm/integrations/open_ondemand/overview.md new file mode 100644 index 000000000..556458ecc --- /dev/null +++ b/content/platform_services/slurm/integrations/open_ondemand/overview.md @@ -0,0 +1,53 @@ +--- +title: "Overview" +linkTitle: "Overview" +date: "2026-10-14" +description: "Learn what the Open OnDemand appliance does and how it works with OneSlurm." +categories: +tags: +type: docs +weight: "1" +aliases: + - /solutions/integration_blueprints/open_ondemand/overview/ + - /solutions/integration_blueprints/open_ondemand/architecture/ +--- + +[Open OnDemand](https://openondemand.org/) is a web portal for HPC users. The Open OnDemand appliance runs this portal in one VM, connected to your OneSlurm Clusters. Users sign in with their LDAP account and, from a web browser, they can: + +* Manage the files in their home +* Submit jobs and follow them +* Open a terminal on a Cluster + +The appliance is available in the [OpenNebula Public Marketplace](https://marketplace.opennebula.io/appliance/d3c8ea14-f6f0-455c-8a41-6129affa9a0e). It uses Ubuntu 26.04 LTS and Open OnDemand 4.2. + +## How It Works + +**The portal does not run Slurm.** It sends the Slurm commands of each user to the controller of the Cluster over SSH. + +The portal and the Clusters share two services: + +* The same LDAP directory, so users have the same account everywhere +* The same NFS export for `/home`, so users see the same files everywhere + +One portal can serve several OneSlurm Clusters. + +## What Happens at Boot + +1. The appliance checks the values of the wizard. +2. It mounts the NFS export on `/home`. +3. It reads the users from LDAP. +4. It creates a self-signed certificate for the IP address of the VM. +5. It adds each Slurm Cluster to the portal and saves the SSH host key of each controller. +6. It starts the portal and publishes its URL in OneGate. + +## What Happens at the First Login of a User + +* The portal creates an SSH key for the user in `~/.ssh/id_ed25519_portal`. +* It adds the key to `~/.ssh/authorized_keys`, accepted only from the IP addresses of the portal. +* The controllers read the same home directory over NFS, so the portal can run `sbatch`, `squeue` and `scancel` as that user. The terminal uses the same key. + +Each user works with their own Unix account, with the same UID as on the Clusters. **Users cannot read the files or cancel the jobs of other users.** + +## Next Steps + +Before you deploy the portal, refer to [Requirements]({{% relref "platform_services/slurm/integrations/open_ondemand/requirements" %}}). diff --git a/content/platform_services/slurm/integrations/open_ondemand/quick_start.md b/content/platform_services/slurm/integrations/open_ondemand/quick_start.md new file mode 100644 index 000000000..92548535b --- /dev/null +++ b/content/platform_services/slurm/integrations/open_ondemand/quick_start.md @@ -0,0 +1,119 @@ +--- +title: "Quick Start" +linkTitle: "Quick Start" +date: "2026-10-14" +description: "Import the appliance, fill in the wizard and open the portal." +categories: +tags: +type: docs +weight: "3" +aliases: + - /solutions/integration_blueprints/open_ondemand/quick_start/ +--- + +This guide deploys the portal from Sunstone in the following steps: + +1. Import the appliance. +2. Start the wizard. +3. Fill in the user inputs. +4. Attach the network of the Clusters. +5. Check that the portal is ready. + +## Step 1: Import the Appliance + +In Sunstone: + +1. Go to **Storage -> Apps**. +2. Search for **Open OnDemand** and select it. +3. Click **Import** and choose the image datastore. + +Or, with the CLI on the Front-end: + +```shell +onemarketapp export "Open OnDemand" "Open OnDemand" --datastore default +``` + +This imports an image and a VM template, both called **Open OnDemand**. + +## Step 2: Start the Wizard + +1. Go to **Templates -> VM Templates**. +2. Select the **Open OnDemand** template and click **Instantiate**. +3. Enter a name for the VM and click **Next**. + +## Step 3: Fill in the User Inputs + +The wizard has three tabs, **LDAP**, **Home** and **Slurm**. + +### LDAP Tab + +* In **LDAP URL**, enter the LDAP server of the Clusters, for example `ldap://10.0.0.20`. +* In **LDAP domain or base DN**, keep `slurm.local`, the default of OneSlurm, or enter the domain of your LDAP server. The base DN is the root of the directory. A domain such as `slurm.local` becomes the base DN `dc=slurm,dc=local`, and the portal looks for users under `ou=People` of that base DN. + +{{< image path="/images/slurm/open_ondemand/light/ood_wizard_ldap.png" + pathDark="/images/slurm/open_ondemand/dark/ood_wizard_ldap.png" +alt="LDAP tab of the Open OnDemand wizard" align="center" width="90%" mb="30px" >}} + +### Home Tab + +* In **NFS export for /home**, enter the export with the home directory of the users, for example `10.0.0.10:/export/home`. + +{{< image path="/images/slurm/open_ondemand/light/ood_wizard_home.png" + pathDark="/images/slurm/open_ondemand/dark/ood_wizard_home.png" +alt="Home tab of the Open OnDemand wizard" align="center" width="90%" mb="30px" >}} + +### Slurm Tab + +* In **Slurm Clusters**, enter one line for each Cluster as `name:IP`, for example `cpu:10.0.0.20`. The name is what users see in the portal and must be unique. The IP is the IPv4 address of the controller. **Every Cluster must use the same LDAP server and the same `/home` as the portal.** + +{{< image path="/images/slurm/open_ondemand/light/ood_wizard_slurm.png" + pathDark="/images/slurm/open_ondemand/dark/ood_wizard_slurm.png" +alt="Slurm tab of the Open OnDemand wizard" align="center" width="90%" mb="30px" >}} + +## Step 4: Attach the Network of the Clusters + +1. Click **Next**. +2. In **Advanced options**, open the **Network** tab. +3. Click **Attach NIC** and select the Virtual Network of the Clusters. +4. Click **Finish**. + +{{< image path="/images/slurm/open_ondemand/light/ood_wizard_network.png" + pathDark="/images/slurm/open_ondemand/dark/ood_wizard_network.png" +alt="Network tab of the Open OnDemand wizard with the NIC of the Clusters" align="center" width="90%" mb="30px" >}} + +The portal uses the IPv4 address of the first NIC. Users must be able to reach that address with their web browser. + +## Step 5: Check That the Portal Is Ready + +Open the VM in Sunstone and go to **Info -> Attributes**. With the CLI, run `onevm show `: + +| **Attribute** | **Meaning** | +|-----------|---------| +| `READY` = `YES` | The portal is ready. | +| `OOD_URL` | The address of the portal, for example `https://10.0.0.50/`. | +| `OOD_ERROR` | The configuration failed. The value says why, and the portal stays closed. | + +Examples of `OOD_ERROR`: + +* `Cannot mount 10.0.0.10:/export/nope on /home` +* `The controller 10.0.0.30 does not answer on the SSH port` + +| **Cause of the error** | **How to fix it** | +|--------------------|---------------| +| A service was down | Fix the service and reboot the VM. | +| A value was wrong | Change it as shown in [Change the Clusters]({{% relref "platform_services/slurm/integrations/open_ondemand/operations#change-the-clusters" %}}), then reboot the VM so that OneGate shows the new result. | + +## Deploy with the CLI + +Instead of Steps 2 to 4, you can pass the same values with `--user-inputs`. Separate the Clusters with spaces: + +```shell +onetemplate instantiate "Open OnDemand" --name open-ondemand --nic \ + --user-inputs "ONEAPP_LDAP_SERVER_URL=ldap://10.0.0.20,ONEAPP_LDAP_SERVER_DOMAIN=slurm.local,ONEAPP_HOME_NFS_EXPORT=10.0.0.10:/export/home,ONEAPP_SLURM_CLUSTERS_LIST=cpu:10.0.0.20 gpu:10.0.0.30" +``` + +Then check the portal as in Step 5. + +## Next Steps + +To sign in to the portal and add users, refer to [Operations]({{% relref "platform_services/slurm/integrations/open_ondemand/operations" %}}). diff --git a/content/platform_services/slurm/integrations/open_ondemand/requirements.md b/content/platform_services/slurm/integrations/open_ondemand/requirements.md new file mode 100644 index 000000000..5825a48b3 --- /dev/null +++ b/content/platform_services/slurm/integrations/open_ondemand/requirements.md @@ -0,0 +1,60 @@ +--- +title: "Requirements" +linkTitle: "Requirements" +date: "2026-10-14" +description: "Check the Clusters, services, network and ports that the portal needs." +categories: +tags: +type: docs +weight: "2" +--- + +Before you deploy the portal, check that you have the elements in the following table. + +| **Requirement** | **What the portal needs** | +|-------------|-----------------------| +| OneSlurm Clusters | One or more Clusters in `RUNNING` state, and the IP address of each controller. | +| LDAP server | The LDAP server of the Clusters, with a `ldap://` URL. | +| NFS export | The export with the home directories of the users, for example `10.0.0.10:/export/home`. | +| User homes | One home directory for each user on that export, owned by the user, with mode `700`. | +| Virtual Network | A Virtual Network that reaches the controllers, the LDAP server and the NFS server. | +| [OneGate]({{% relref "product/operation_references/opennebula_services_configuration/onegate" %}}) | Reachable from that network. The portal publishes its URL and its errors there. | + +## LDAP Details + +* Use the same domain as `ONEAPP_LDAP_DOMAIN` in OneSlurm. The default is `slurm.local`. +* You can also use a base DN, such as `dc=example,dc=org`. +* Users must be `posixAccount` entries under `ou=People`. +* The portal has no bind user, so **the LDAP server must allow anonymous search under `ou=People`**. + +The LDAP server of OneSlurm meets all of these points. + +## NFS Details + +* Use the same export as `ONEAPP_SLURM_NFS_HOME` in OneSlurm. +* **The NFS server must allow the IP address of the portal.** +* The portal uses NFS version 4. The export can use `root_squash`. + +## Size of the VM + +The default VM has 2 vCPU, 4 GB of memory and a 10 GB disk. Each active user needs about 200 MB of memory (measured with six users). Add memory if more users work at the same time. + +## Network Ports + +Limit the traffic of the portal, for example with a [security group]({{% relref "product/virtual_machines_operation/virtual_machines_networking/security_groups" %}}). + +| **Direction** | **Port** | **Use** | +|-----------|------|-----| +| Inbound | TCP 443 | Users open the portal. | +| Inbound | TCP 80 | Redirects to 443. | +| Inbound | TCP 22 | Administrators only. | +| Outbound | TCP 22 | SSH to the controllers. | +| Outbound | TCP 389 | LDAP server. | +| Outbound | TCP 2049 | NFS server. | +| Outbound | OneGate port | OneGate. | + +**Do not open port 5558.** The login service of the portal (Dex) shows metrics there without authentication, and Open OnDemand does not allow changing it. + +## Next Steps + +To deploy the portal, refer to [Quick Start]({{% relref "platform_services/slurm/integrations/open_ondemand/quick_start" %}}). diff --git a/content/platform_services/slurm/integrations/open_ondemand/troubleshooting.md b/content/platform_services/slurm/integrations/open_ondemand/troubleshooting.md new file mode 100644 index 000000000..b79e48834 --- /dev/null +++ b/content/platform_services/slurm/integrations/open_ondemand/troubleshooting.md @@ -0,0 +1,39 @@ +--- +title: "Troubleshooting and Limitations" +linkTitle: "Troubleshooting" +date: "2026-10-14" +description: "Solve common problems of the portal and learn its known limitations." +categories: +tags: +type: docs +weight: "5" +aliases: + - /solutions/integration_blueprints/open_ondemand/monitoring_and_troubleshooting/ +--- + +## Troubleshooting + +The following table lists common problems and how to solve them: + +| **Problem** | **What to do** | +|---------|------------| +| The VM shows `OOD_ERROR` | Fix the value or the service named in the message, then reboot the VM. Full log in `/var/log/one-appliance/configure.log`. | +| The browser does not open the portal | Check that the VM shows `READY=YES` and that your network reaches the IP of `OOD_URL` on port 443. Logs: `journalctl -u apache2 -u ondemand-dex`. | +| Login fails with the right password | The user is not under `ou=People`, or LDAP does not answer. Test in the VM with `ldapsearch -x -H -b ou=People, uid=`. For `slurm.local`, the base DN is `dc=slurm,dc=local`. | +| Home directory not found | Create the home directory of the user, then click **Restart Web Server** on that page. | +| Active Jobs is empty, or `Permission denied` in Submit or the terminal | Click **Help -> Restart Web Server**. This adds the key of the user to `~/.ssh/authorized_keys` again. Logs: `journalctl -t ood-prehook`. | +| System Status shows an error page | A controller does not answer. That Cluster shows no jobs, and the Job Composer and the terminal show an SSH error. Everything works again when the controller is back. | +| Pages load forever with no message | The NFS server does not answer. The portal works again by itself when NFS is back. Meanwhile, use the VM console in Sunstone, because SSH to the VM can also hang. | + +## Known Limitations + +| **Area** | **Limitation** | **What to do** | +|------|------------|------------| +| Files | Uploads are limited to 256 MiB. | Copy bigger files with `scp` or `rsync` to a Cluster controller, which has the same home. | +| Terminal | The terminal closes when the page reloads. | Run long work under `tmux` or `screen` on the controller. | +| Job Composer | If the first visit is a direct link to `/pun/sys/myjobs/`, it creates an empty database and shows error 500 from then on. | Open it the first time from the **Jobs** menu. To fix it, delete `~/ondemand/data/sys/myjobs/production.sqlite3` of that user (only if the file has no tables) and open the Job Composer from the menu. | +| Job Composer | **New Job -> From Template** creates a job without a script. | Open **Job Options**, select the script and click **Save**. | +| Job states | OneSlurm has no Slurm accounting, so a cancelled job shows `Completed` in Active Jobs and `Failed` in the Job Composer. | Check the real state with `scontrol show job ` or in the output file of the job. | +| Project Manager | Deleting a project only removes it from the list. The files stay. | Delete the files in **Files**. | +| Two portals | With two portals on the same homes, the Job Composer fails with error 500 when a user opens it on both at the same time. | Use one portal for each NFS home export. | +| New Clusters | A new Cluster needs a running controller. If it does not answer, the configuration stops with `OOD_ERROR`. | Start the controller first. Clusters the portal already knows can be stopped for maintenance. | From d7a49b04f88cd49e7d56ed98263fd82914a2097e Mon Sep 17 00:00:00 2001 From: mattrowe-opennebula Date: Thu, 15 Oct 2026 13:22:09 +0200 Subject: [PATCH 2/4] M #~: removed descriptions --- .../slurm/integrations/open_ondemand/operations.md | 1 - .../slurm/integrations/open_ondemand/overview.md | 1 - .../slurm/integrations/open_ondemand/quick_start.md | 3 +-- .../slurm/integrations/open_ondemand/requirements.md | 1 - .../slurm/integrations/open_ondemand/troubleshooting.md | 1 - 5 files changed, 1 insertion(+), 6 deletions(-) diff --git a/content/platform_services/slurm/integrations/open_ondemand/operations.md b/content/platform_services/slurm/integrations/open_ondemand/operations.md index ce36ff2df..edf0a5db9 100644 --- a/content/platform_services/slurm/integrations/open_ondemand/operations.md +++ b/content/platform_services/slurm/integrations/open_ondemand/operations.md @@ -2,7 +2,6 @@ title: "Operations" linkTitle: "Operations" date: "2026-10-14" -description: "Use the portal, add users, change the Clusters and keep the portal secure." categories: tags: type: docs diff --git a/content/platform_services/slurm/integrations/open_ondemand/overview.md b/content/platform_services/slurm/integrations/open_ondemand/overview.md index 556458ecc..32d7ce5cb 100644 --- a/content/platform_services/slurm/integrations/open_ondemand/overview.md +++ b/content/platform_services/slurm/integrations/open_ondemand/overview.md @@ -2,7 +2,6 @@ title: "Overview" linkTitle: "Overview" date: "2026-10-14" -description: "Learn what the Open OnDemand appliance does and how it works with OneSlurm." categories: tags: type: docs diff --git a/content/platform_services/slurm/integrations/open_ondemand/quick_start.md b/content/platform_services/slurm/integrations/open_ondemand/quick_start.md index 92548535b..aaf788c25 100644 --- a/content/platform_services/slurm/integrations/open_ondemand/quick_start.md +++ b/content/platform_services/slurm/integrations/open_ondemand/quick_start.md @@ -2,7 +2,6 @@ title: "Quick Start" linkTitle: "Quick Start" date: "2026-10-14" -description: "Import the appliance, fill in the wizard and open the portal." categories: tags: type: docs @@ -43,7 +42,7 @@ This imports an image and a VM template, both called **Open OnDemand**. ## Step 3: Fill in the User Inputs -The wizard has three tabs, **LDAP**, **Home** and **Slurm**. +The wizard has three tabs: **LDAP**, **Home** and **Slurm**. ### LDAP Tab diff --git a/content/platform_services/slurm/integrations/open_ondemand/requirements.md b/content/platform_services/slurm/integrations/open_ondemand/requirements.md index 5825a48b3..0ee850ae0 100644 --- a/content/platform_services/slurm/integrations/open_ondemand/requirements.md +++ b/content/platform_services/slurm/integrations/open_ondemand/requirements.md @@ -2,7 +2,6 @@ title: "Requirements" linkTitle: "Requirements" date: "2026-10-14" -description: "Check the Clusters, services, network and ports that the portal needs." categories: tags: type: docs diff --git a/content/platform_services/slurm/integrations/open_ondemand/troubleshooting.md b/content/platform_services/slurm/integrations/open_ondemand/troubleshooting.md index b79e48834..9608fba46 100644 --- a/content/platform_services/slurm/integrations/open_ondemand/troubleshooting.md +++ b/content/platform_services/slurm/integrations/open_ondemand/troubleshooting.md @@ -2,7 +2,6 @@ title: "Troubleshooting and Limitations" linkTitle: "Troubleshooting" date: "2026-10-14" -description: "Solve common problems of the portal and learn its known limitations." categories: tags: type: docs From a2ce2229cb003a17108bdc10ad1256ff8f1ec8b3 Mon Sep 17 00:00:00 2001 From: mattrowe-opennebula Date: Thu, 15 Oct 2026 13:30:31 +0200 Subject: [PATCH 3/4] M #~: Incremented section card ancestor limit --- .../slurm/integrations/open_ondemand/_index.md | 1 - layouts/_partials/section-index.html | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/content/platform_services/slurm/integrations/open_ondemand/_index.md b/content/platform_services/slurm/integrations/open_ondemand/_index.md index a49cc941f..88a6811c1 100644 --- a/content/platform_services/slurm/integrations/open_ondemand/_index.md +++ b/content/platform_services/slurm/integrations/open_ondemand/_index.md @@ -6,7 +6,6 @@ description: "Give your OneSlurm users a web portal to manage files, submit jobs categories: pageintoc: "13" tags: -type: docs weight: "1" aliases: - /solutions/integration_blueprints/open_ondemand/ diff --git a/layouts/_partials/section-index.html b/layouts/_partials/section-index.html index 0ffccc126..24b270fcd 100644 --- a/layouts/_partials/section-index.html +++ b/layouts/_partials/section-index.html @@ -134,7 +134,7 @@

Date: Thu, 15 Oct 2026 13:38:17 +0200 Subject: [PATCH 4/4] M #~: Fixed card styles --- assets/scss/card/_styles_project_card.scss | 5 +++-- .../slurm/integrations/open_ondemand/_index.md | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/assets/scss/card/_styles_project_card.scss b/assets/scss/card/_styles_project_card.scss index 9e3bf9fb2..871ffe97d 100644 --- a/assets/scss/card/_styles_project_card.scss +++ b/assets/scss/card/_styles_project_card.scss @@ -128,7 +128,8 @@ } } -// Delete border of card row +// Keep the card row transparent and borderless. .td-card { + background-color: transparent; border: 0 !important; -} \ No newline at end of file +} diff --git a/content/platform_services/slurm/integrations/open_ondemand/_index.md b/content/platform_services/slurm/integrations/open_ondemand/_index.md index 88a6811c1..a49cc941f 100644 --- a/content/platform_services/slurm/integrations/open_ondemand/_index.md +++ b/content/platform_services/slurm/integrations/open_ondemand/_index.md @@ -6,6 +6,7 @@ description: "Give your OneSlurm users a web portal to manage files, submit jobs categories: pageintoc: "13" tags: +type: docs weight: "1" aliases: - /solutions/integration_blueprints/open_ondemand/