{"id":32128162,"url":"https://github.com/osc/puppet-module-openondemand","last_synced_at":"2025-10-21T00:55:24.925Z","repository":{"id":39620604,"uuid":"203659844","full_name":"OSC/puppet-module-openondemand","owner":"OSC","description":null,"archived":false,"fork":false,"pushed_at":"2025-07-13T13:20:58.000Z","size":884,"stargazers_count":1,"open_issues_count":4,"forks_count":18,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-10-21T00:55:21.560Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Puppet","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OSC.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-08-21T20:31:24.000Z","updated_at":"2025-07-13T13:21:01.000Z","dependencies_parsed_at":"2024-04-17T13:49:37.458Z","dependency_job_id":"0600df2c-3c7a-4d29-8da7-e066251acd75","html_url":"https://github.com/OSC/puppet-module-openondemand","commit_stats":{"total_commits":289,"total_committers":9,"mean_commits":"32.111111111111114","dds":0.05190311418685123,"last_synced_commit":"ac21bf69caa4b5544dc2c3c3cc2f15d2283966e7"},"previous_names":[],"tags_count":65,"template":false,"template_full_name":null,"purl":"pkg:github/OSC/puppet-module-openondemand","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSC%2Fpuppet-module-openondemand","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSC%2Fpuppet-module-openondemand/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSC%2Fpuppet-module-openondemand/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSC%2Fpuppet-module-openondemand/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OSC","download_url":"https://codeload.github.com/OSC/puppet-module-openondemand/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OSC%2Fpuppet-module-openondemand/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280184449,"owners_count":26286833,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-20T02:00:06.978Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-21T00:55:23.686Z","updated_at":"2025-10-21T00:55:24.919Z","avatar_url":"https://github.com/OSC.png","language":"Puppet","funding_links":[],"categories":[],"sub_categories":[],"readme":"# puppet-module-openondemand\n\n[![Puppet Forge](http://img.shields.io/puppetforge/v/osc/openondemand.svg)](https://forge.puppetlabs.com/osc/openondemand)\n[![CI Status](https://github.com/osc/puppet-module-openondemand/workflows/CI/badge.svg?branch=master)](https://github.com/osc/puppet-module-openondemand/actions?query=workflow%3ACI)\n\n#### Table of Contents\n\n1. [Overview](#overview)\n    * [Supported Versions of Open OnDemand](#supported-versions-of-open-ondemand)\n2. [Usage - Configuration options](#usage)\n3. [Reference - Parameter and detailed reference to all options](#reference)\n4. [Limitations - OS compatibility, etc.](#limitations)\n\n## Overview\n\nManage [Open OnDemand](http://openondemand.org/) installation and configuration.\n\n### Supported Versions of Open OnDemand\n\nThe following are the versions of this module and the supported versions of Open OnDemand:\n\n* Module 7.x supports OnDemand 4.0 and 3.1\n* Module 5.x and 6.x supports Open OnDemand 3.1 and 3.0\n* Module 3.x and 4.x supports Open OnDemand 3.0\n* Module 2.x supports Open OnDemand 2.x\n* Module 1.x supports Open OnDemand 1.18.x\n* Module \u003c= 0.12.0 supports Open OnDemand \u003c= 1.7\n\n\n## Usage\n\nAll configuration can be done through the `openondemand` class. Example configurations will be done in Hiera format.\n\n```puppet\ninclude openondemand\n```\n\nInstall specific versions of OnDemand from 3.1 repo with OpenID Connect support.\n\n```yaml\nopenondemand::repo_release: '3.1'\nopenondemand::ondemand_package_ensure: \"3.1.0-1.el9\"\nopenondemand::mod_auth_openidc_ensure: \"3.4.5-1.el9\"\n```\n\nConfigure OnDemand SSL certs\n\n```yaml\nopenondemand::servername: ondemand.osc.edu\nopenondemand::ssl:\n  - \"SSLCertificateFile /etc/pki/tls/certs/%{lookup('openondemand::servername')}.crt\"\n  - \"SSLCertificateKeyFile /etc/pki/tls/private/%{lookup('openondemand::servername')}.key\"\n  - \"SSLCertificateChainFile /etc/pki/tls/certs/%{lookup('openondemand::servername')}-interm.crt\"\n```\n\nIf you already declare the apache class you may wish to only include apache in this module:\n\n```yaml\nopenondemand::declare_apache: false\napache::default_vhost: false\n```\n\nAdd support for interactive apps\n\n```yaml\nopenondemand::host_regex: '[\\w.-]+\\.osc\\.edu'\nopenondemand::node_uri: '/node'\nopenondemand::rnode_uri: '/rnode'\n```\n\nSetup OnDemand to use default Dex authentication against LDAP.\n\n```yaml\nopenondemand::servername: ondemand.example.org\nopenondemand::auth_type: dex\nopenondemand::dex_config:\n  connectors:\n    - type: ldap\n      id: ldap\n      name: LDAP\n      config:\n        host: ldap.example.org:636\n        insecureSkipVerify: true\n        bindDN: cn=admin,dc=example,dc=org\n        bindPW: admin\n        userSearch:\n          baseDN: ou=People,dc=example,dc=org\n          filter: \"(objectClass=posixAccount)\"\n          username: uid\n          idAttr: uid\n          emailAttr: mail\n          nameAttr: gecos\n          preferredUsernameAttr: uid\n        groupSearch:\n          baseDN: ou=Groups,dc=example,dc=org\n          filter: \"(objectClass=posixGroup)\"\n          userMatchers:\n            - userAttr: DN\n              groupAttr: member\n          nameAttr: cn\n```\n\nSetup OnDemand to authenticate with OpenID Connect system, in these examples the IdP is Keycloak.\n\n```yaml\nopenondemand::servername: ondemand.osc.edu\nopenondemand::auth_type: 'openid-connect'\nopenondemand::auth_configs:\n  - 'Require valid-user'\nopenondemand::user_map_match: '.*'\nopenondemand::logout_redirect: \"/oidc?logout=https%3A%2F%2F%{lookup('openondemand::servername')}\"\nopenondemand::oidc_uri: '/oidc'\nopenondemand::oidc_provider_metadata_url: 'https://idp.osc.edu/auth/realms/osc/.well-known/openid-configuration'\nopenondemand::oidc_scope: 'openid profile email groups'\nopenondemand::oidc_client_id: ondemand.osc.edu\nopenondemand::oidc_client_secret: 'SUPERSECRET'\nopenondemand::oidc_settings:\n  OIDCPassIDTokenAs: 'serialized'\n  OIDCPassRefreshToken: 'On'\n  OIDCPassClaimsAs: environment\n  OIDCStripCookies: 'mod_auth_openidc_session mod_auth_openidc_session_chunks mod_auth_openidc_session_0 mod_auth_openidc_session_1'\n```\n\nConfigure OnDemand via git repo that contains app configs, locales, public, and annoucement files\n\n```yaml\nopenondemand::servername: ondemand.osc.edu\nopenondemand::apps_config_repo: https://github.com/OSC/osc-ood-config.git\nopenondemand::apps_config_revision: v30\nopenondemand::apps_config_repo_path: \"%{lookup('openondemand::servername')}/apps\"\nopenondemand::locales_config_repo_path: \"%{lookup('openondemand::servername')}/locales\"\nopenondemand::public_files_repo_paths:\n  - \"%{lookup('openondemand::servername')}/public/logo.png\"\n  - \"%{lookup('openondemand::servername')}/public/favicon.ico\"\nopenondemand::announcements_config_repo_path: \"%{lookup('openondemand::servername')}/announcements\"\n```\n\nDefine a SLURM cluster:\n\n```yaml\nopenondemand::clusters:\n  pitzer-exp:\n    cluster_title: 'Pitzer Expansion'\n    url: https://www.osc.edu/supercomputing/computing/pitzer\n    acls:\n      - adapter: group\n        groups:\n          - oscall\n        type: whitelist\n    login_host: pitzer-exp.osc.edu\n    job_adapter: slurm\n    job_host: pitzer-slurm01.ten.osc.edu\n    job_cluster: pitzer\n    job_bin: /usr/bin\n    job_lib: /usr/lib64\n    job_conf: /etc/slurm/slurm.conf\n```\n\nDefine a Torque cluster. The following example is based on a cluster at OSC using Torque\n\n```yaml\nopenondemand::clusters:\n  owens:\n    cluster_title: 'Owens'\n    url: 'https://www.osc.edu/supercomputing/computing/owens'\n    login_host: 'owens.osc.edu'\n    job_adapter: torque\n    job_host: 'owens-batch.ten.osc.edu'\n    job_bin: /opt/torque/bin\n    job_lib: /opt/torque/lib64\n    job_version: '6.0.1'\n    batch_connect:\n      basic:\n        script_wrapper: |\n          module restore\n          %s\n      vnc:\n        script_wrapper: |\n          module restore\n          module load ondemand-vnc\n          %s\n```\n\nDefine a Linux Host Adapter cluster:\n\n```yaml\nopenondemand::clusters:\n  pitzer-login:\n    cluster_title: 'Pitzer Login'\n    url: https://www.osc.edu/supercomputing/computing/pitzer\n    hidden: true\n    job_adapter: linux_host\n    job_submit_host: pitzer.osc.edu\n    job_ssh_hosts:\n      - pitzer-login01.hpc.osc.edu\n      - pitzer-login02.hpc.osc.edu\n      - pitzer-login03.hpc.osc.edu\n    job_site_timeout: 7200\n    job_debug: true\n    job_singularity_bin: /usr/bin/singularity\n    job_singularity_bindpath: /etc,/media,/mnt,/run,/srv,/usr,/var,/users,/opt\n    job_singularity_image: /path/to/custom/image.sif\n    job_strict_host_checking: false\n    job_tmux_bin: /usr/bin/tmux\n    batch_connect:\n      vnc:\n        script_wrapper: |\n          module restore\n          module load ondemand-vnc\n          %s\n```\n\nDefine a Kubernetes cluster:\n\n```yaml\nopenondemand::clusters:\n  kubernetes:\n    cluster_title: Kubernetes\n    hidden: true\n    job_adapter: kubernetes\n    job_bin: /usr/local/bin/kubectl\n    job_cluster: ood-prod\n    job_username_prefix: prod\n    job_namespace_prefix: 'user-'\n    job_server:\n      endpoint: \"https://k8controler.example.com:6443\"\n      cert_authority_file: /etc/pki/tls/kubernetes-ca.crt\n    job_mounts:\n      - name: home\n        destination_path: /users\n        path: /users\n        host_type: Directory\n        type: host\n    job_auth:\n      type: oidc\n```\n\nAdd XDMoD support\n\nEnsure the cluster definition has `xdmod_resource_id` set to `resource_id` of the cluster in XDMoD.  Also must do something like the following to set the appropriate environment variable:\n\n```yaml\nopenondemand::nginx_stage_pun_custom_env:\n  OOD_XDMOD_HOST: http://xdmod.osc.edu\n```\n\nAdd Support Ticket configuration:\n\n```yaml\nopenondemand::confs:\n  support_ticket:\n    data:\n      support_ticket:\n        email:\n          from: noreply@example.com\n          to: support@example.com\n```\n\nThe above example will create `/etc/ood/config/ondemand.d/support_ticket.yml` with the YAML defined in `data` parameter.\n\nInstall additional apps of specific versions as well as hide some apps\n\n```yaml\nopenondemand::install_apps:\n  bc_osc_rstudio_server:\n    ensure: \"0.8.2-1.el7\"\n  bc_desktop:\n    mode: '0700'\n```\n\nInstall additional apps from Git repos:\n\n```yaml\nopenondemand::install_apps:\n  bc_osc_rstudio_server:\n    ensure: latest\n    git_repo: https://github.com/OSC/bc_osc_rstudio_server.git\n  bc_osc_jupyter:\n    ensure: present\n    git_repo: https://github.com/OSC/bc_osc_jupyter\n    git_revision: v0.20.0\n```\n\nInstall additional apps from Puppet sources:\n\n```yaml\nopenondemand::install_apps:\n  bc_osc_rstudio_server:\n    source: puppet:///modules/profile/bc_osc_rstudio_server\n```\n\nAdd usr apps with a default group\n\n```yaml\nopenondemand::usr_app_defaults:\n  group: staff\nopenondemand::usr_apps:\n  user1:\n    gateway_src: /home/user1/ondemand/share\n  user2:\n    group: faculty\n    gateway_src: /home/user2/ondemand/share\n```\n\nAdd dev app users\n\n```yaml\nopenondemand::dev_app_users:\n  - user1\n  - user2\n```\n\nDefine some pinned apps and dashboard layout:\n\n```yaml\nopenondemand::pinned_apps:\n  - 'usr/*'\n  - 'sys/jupyter'\n  - type: dev\n    category: system\nopenondemand::pinned_apps_menu_length: 10\nopenondemand::pinned_apps_group_by: category\nopenondemand::dashboard_layout:\n  rows:\n    - columns:\n      - width: 8\n        widgets:\n          - pinned_apps\n          - motd\n      - width: 4\n        widgets:\n          - xdmod_widget_job_efficiency\n          - xdmod_widget_jobs\n```\n\nDefine some configurations for `/etc/ood/config/ondemand.d`.\nThis will generate `/etc/ood/config/ondemand.d/pinned_apps.yml.erb` based on the source file as well as\n`/etc/ood/config/ondemand.d/dashboard_layout.yml` from a template file.  The example for `foobar` will generate the YAML file using data defined in Hiera.\n\n```yaml\nopenondemand::confs:\n  pinned_apps:\n    source: 'puppet:///modules/profile/openondemand/pinned_apps.yml.erb'\n    template: true\n  dashboard_layout:\n    content_template: 'profile/openondemand/dashboard_layout.yml.erb'\n  foobar:\n    data:\n      ...hash of configuration data here...\n```\n\n## Reference\n\n[http://osc.github.io/puppet-module-openondemand/](http://osc.github.io/puppet-module-openondemand/)\n\n## Limitations\n\nThis module has been tested on:\n\n* RedHat/CentOS 7 x86_64\n* RedHat/Rocky Linux/Alma Linux 8\n* RedHat/Rocky Linux/Alma Linux 9\n* Amazon Linux 2023\n* Ubuntu 20.04\n* Ubuntu 22.04\n* Debian 12\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosc%2Fpuppet-module-openondemand","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fosc%2Fpuppet-module-openondemand","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosc%2Fpuppet-module-openondemand/lists"}