diff --git a/config/clusters/nmfs-openscapes/cluster.yaml b/config/clusters/nmfs-openscapes/cluster.yaml index ee43a00504..b1284ab862 100644 --- a/config/clusters/nmfs-openscapes/cluster.yaml +++ b/config/clusters/nmfs-openscapes/cluster.yaml @@ -26,6 +26,8 @@ hubs: - enc-common.secret.values.yaml - staging.values.yaml - enc-staging.secret.values.yaml + profiles_source_files: + - common.jsonnet - name: prod display_name: NOAA Fisheries Openscapes domain: nmfs-openscapes.2i2c.cloud @@ -35,6 +37,8 @@ hubs: - enc-common.secret.values.yaml - prod.values.yaml - enc-prod.secret.values.yaml + profiles_source_files: + - common.jsonnet - name: workshop display_name: NOAA Fisheries Openscapes Workshop domain: workshop.nmfs-openscapes.2i2c.cloud @@ -43,6 +47,8 @@ hubs: - common.values.yaml - workshop.values.yaml - enc-workshop.secret.values.yaml + profiles_source_files: + - common.jsonnet - name: noaa-only display_name: NOAA Fisheries Openscapes NOAA-only access domain: noaa.nmfs-openscapes.2i2c.cloud @@ -51,3 +57,5 @@ hubs: - common.values.yaml - noaa-only.values.yaml - enc-noaa-only.secret.values.yaml + profiles_source_files: + - noaa-only.jsonnet diff --git a/config/clusters/nmfs-openscapes/common.jsonnet b/config/clusters/nmfs-openscapes/common.jsonnet new file mode 100644 index 0000000000..f6075d8d2d --- /dev/null +++ b/config/clusters/nmfs-openscapes/common.jsonnet @@ -0,0 +1,18 @@ +local commonConfig = import './common.libsonnet'; + + +local gpuAllowedGroups = [ + 'nmfs-openscapes:gpu-access-2i2c', + '2i2c-org:hub-access-for-2i2c-staff', +]; + +local defaultProfile = commonConfig.getDefaultProfile; +local gpu = commonConfig.getGPUProfile; + +local restricted_gpu = gpu { + allowed_groups: gpuAllowedGroups, +}; + +local profiles = [defaultProfile, restricted_gpu]; + +profiles diff --git a/config/clusters/nmfs-openscapes/common.libsonnet b/config/clusters/nmfs-openscapes/common.libsonnet new file mode 100644 index 0000000000..6974ae5e8d --- /dev/null +++ b/config/clusters/nmfs-openscapes/common.libsonnet @@ -0,0 +1,157 @@ +{ + local profileList = import '../../../helm-charts/basehub/profile_lists_defaults/libsonnet/profileListsFunc.jsonnet', + local r5xlarge_5 = import '../../../helm-charts/basehub/profile_lists_defaults/choices/r5.xlarge-5.json', + local r54xlarge_2 = import '../../../helm-charts/basehub/profile_lists_defaults/choices/r5.4xlarge-2.json', + + local requestsChoices = profileList.makeChoiceDefault(r5xlarge_5 + r54xlarge_2, 'mem_2_gb'), + + local defaultProfileImageChoices = { + python: { + display_name: 'Py - NASA Openscapes Python, Dask Gateway 65d6916', + slug: 'python', + kubespawner_override: { + image: 'openscapes/python:65d6916', + }, + }, + pyrbase: { + display_name: 'Py-R - py-rocket-base image 4.4-3.10', + slug: 'pyrbase', + kubespawner_override: { + image: 'ghcr.io/nmfs-opensci/py-rocket-base:latest', + }, + }, + cryo: { + display_name: 'Py - Cryointhecloud base image latest', + slug: 'cryo', + kubespawner_override: { + image: 'quay.io/cryointhecloud/cryo-hub-image:latest', + }, + }, + asar: { + display_name: 'R - ASAR Stock Assessment', + slug: 'asar', + kubespawner_override: { + image: 'ghcr.io/nmfs-opensci/container-images/asar:latest', + }, + }, + cefi: { + display_name: 'Py-R - CEFI image latest', + slug: 'cefi', + kubespawner_override: { + image: 'ghcr.io/nmfs-opensci/cefi-image:latest', + }, + }, + pyrgeo2: { + display_name: 'Py-R - Geospatial + QGIS, Panoply, CWUtils - py-rocket-geospatial-2 latest', + slug: 'pyrgeo2', + default: true, + kubespawner_override: { + image: 'ghcr.io/nmfs-opensci/container-images/py-rocket-geospatial-2:latest', + }, + }, + coastwatch: { + display_name: 'Py-R - CoastWatch - coastwatch latest', + slug: 'coastwatch', + kubespawner_override: { + image: 'ghcr.io/nmfs-opensci/container-images/coastwatch:latest', + }, + }, + aomlomics: { + display_name: 'Py - Tourmaline Snakemake workflow for QIIME 2 v.2023.5', + slug: 'aomlomics', + kubespawner_override: { + image: 'ghcr.io/nmfs-opensci/container-images/aomlomics-jh:latest', + }, + }, + iorocker: { + display_name: 'R - Geospatial w sdmTMB - r-geospatial-sdm latest', + slug: 'rgeospatialsdm', + kubespawner_override: { + image: 'ghcr.io/nmfs-opensci/container-images/r-geospatial-sdm:latest', + }, + }, + echopype: { + display_name: 'Py - Echopype with pangeo - image-acoustics latest', + slug: 'echopype', + kubespawner_override: { + image: 'ghcr.io/nmfs-opensci/image-acoustics:latest', + }, + }, + arcgis: { + display_name: 'Py - ArcGIS Python 3.9', + slug: 'arcgis', + kubespawner_override: { + image: 'ghcr.io/nmfs-opensci/container-images/arcgis:latest', + }, + }, + vast: { + display_name: 'R - VAST with TMB - vast latest', + kubespawner_override: { + image: 'ghcr.io/nmfs-opensci/container-images/vast:latest', + }, + }, + pace: { + display_name: 'Py - PACE image with OCSSW tools', + slug: 'pace', + kubespawner_override: { + image: 'quay.io/pacehackweek/pace-2024:latest', + }, + }, + }, + + local gpuProfileImageChoices = { + pytorch: { + display_name: 'Pangeo PyTorch ML Notebook', + default: false, + slug: 'pytorch', + kubespawner_override: { + image: 'quay.io/pangeo/pytorch-notebook:2024.11.11', + }, + }, + tensorflow2: { + display_name: 'Pangeo Tensorflow2 ML Notebook', + default: true, + slug: 'tensorflow2', + kubespawner_override: { + image: 'quay.io/pangeo/ml-notebook:2024.11.11', + }, + }, + }, + + local gpuKubespawnerOverride = { + environment: { + NVIDIA_DRIVER_CAPABILITIES: 'compute,utility', + }, + mem_limit: null, + mem_guarantee: '14G', + node_selector: { + 'node.kubernetes.io/instance-type': 'g4dn.xlarge', + }, + extra_resource_limits: { + 'nvidia.com/gpu': '1', + }, + }, + + getDefaultProfile:: profileList.makeProfile( + profile_display='Default', + dynamic_image_building_enabled=true, + is_default_profile=true, + image_choices=defaultProfileImageChoices, + requests_choices=requestsChoices, + unlisted_choice_enabled=true + ), + + getGPUProfile:: profileList.makeProfile( + profile_display='NVIDIA Tesla T4, ~16 GB, ~4 CPUs', + profile_description='Start a container on a dedicated node with a GPU', + dynamic_image_building_enabled=true, + is_default_profile=false, + image_choices=gpuProfileImageChoices, + requests_choices={}, + unlisted_choice_enabled=true, + profile_kubespawner_override=gpuKubespawnerOverride, + profile_allowed_groups=[], + slug='gpu' + ), + +} diff --git a/config/clusters/nmfs-openscapes/common.values.yaml b/config/clusters/nmfs-openscapes/common.values.yaml index 697c87fd13..d8332206d6 100644 --- a/config/clusters/nmfs-openscapes/common.values.yaml +++ b/config/clusters/nmfs-openscapes/common.values.yaml @@ -51,235 +51,6 @@ jupyterhub: extraEnv: GH_SCOPED_CREDS_CLIENT_ID: Iv23lio8dJq5euL8Y2kF GH_SCOPED_CREDS_APP_URL: https://github.com/apps/nmfs-openscapes-github-push-access - profileList: - - display_name: Default - description: Choose image and resource allocation - default: true - profile_options: - image: - display_name: Image - dynamic_image_building: - enabled: true - choices: - pyrgeo2: - display_name: Py-R - Geospatial + QGIS, Panoply - py-rocket-geospatial-2 2025.12.23 - slug: pyrgeo2 - default: true - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/py-rocket-geospatial-2:2025.12.23 - echosm: - display_name: Py-R - echoSMs hackathon - latest - slug: echosm - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/acoustics:latest - asar: - display_name: R - ASAR Stock Assessment - latest - slug: asar - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/asar:latest - positron: - display_name: R - Positron - latest - slug: positron - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/psaw-workshop:latest - python: - display_name: Py - NASA Openscapes, Dask Gateway + GCS 65d6916 - slug: python - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/openscapes:89655e1 - pyrbase: - display_name: Py-R - py-rocket-base image 4.5.1-3.12 2025.12.22 - slug: pyrbase - kubespawner_override: - image: ghcr.io/nmfs-opensci/py-rocket-base:2025.12.22 - cryo: - display_name: Py - Cryointhecloud base image latest - slug: cryo - kubespawner_override: - image: quay.io/cryointhecloud/cryo-hub-image:latest - coastwatch: - display_name: Py-R - CoastWatch - coastwatch latest - slug: coastwatch - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/coastwatch:latest - aomlomics: - display_name: Py - Tourmaline Snakemake workflow for QIIME 2 v.2023.5 - slug: aomlomics - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/aomlomics-jh:latest - iorocker: - display_name: R - Geospatial w sdmTMB - r-geospatial-sdm latest - slug: rgeospatialsdm - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/r-geospatial-sdm:latest - echopype: - display_name: Py - Echopype with pangeo - image-acoustics latest - slug: echopype - kubespawner_override: - image: ghcr.io/nmfs-opensci/image-acoustics:latest - arcgis: - display_name: Py - ArcGIS Python 3.9 latest - slug: arcgis - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/arcgis:latest - vast: - display_name: R - VAST with TMB - vast latest - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/vast:latest - pace: - display_name: Py - PACE image with OCSSW tools - slug: pace - kubespawner_override: - image: ghcr.io/nasa/oceandata-notebooks:latest - pangeoml: - display_name: Pangeo TensorFlow2 ML Notebook 2025.12.30 - slug: pangeoml - kubespawner_override: - image: quay.io/pangeo/ml-notebook:2025.12.30 - pangeopytorch: - display_name: Pangeo PyTorch ML Notebook 2025.12.30 - slug: pangeopytorch - kubespawner_override: - image: quay.io/pangeo/pytorch-notebook:2025.12.30 - ohw: - display_name: OceanHackWeek latest - slug: ohw - kubespawner_override: - image: ghcr.io/oceanhackweek/python:latest - ohw-spanish: - display_name: OceanHackWeek Spanish latest - slug: ohw-spanish - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/py-rocket-oceanhw-esp:latest - unlisted_choice: - enabled: true - display_name: Custom image - validation_regex: ^.+:.+$ - validation_message: Must be a publicly available docker image, of form : - kubespawner_override: - image: '{value}' - requests: - display_name: Resource Allocation - choices: - # r5.xlarge - # [[[cog - # from deployer.dev_commands.generate.resource_allocation.generate_choices import choices - # choices(["r5.xlarge:5", "r5.4xlarge:2"], "proportional-memory-strategy", default=True) - # ]]] - mem_2_gb: - display_name: ~2 GB RAM, ~0.2 CPUs - description: Up to ~4 CPUs when available - kubespawner_override: - mem_guarantee: 1951419879 - mem_limit: 1951419879 - cpu_guarantee: 0.22815625 - cpu_limit: 3.6505 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - default: true - mem_4_gb: - display_name: ~4 GB RAM, ~0.5 CPUs - description: Up to ~4 CPUs when available - kubespawner_override: - mem_guarantee: 3902839759 - mem_limit: 3902839759 - cpu_guarantee: 0.4563125 - cpu_limit: 3.6505 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_7_gb: - display_name: ~7 GB RAM, ~0.9 CPUs - description: Up to ~4 CPUs when available - kubespawner_override: - mem_guarantee: 7805679519 - mem_limit: 7805679519 - cpu_guarantee: 0.912625 - cpu_limit: 3.6505 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_15_gb: - display_name: ~15 GB RAM, ~1.8 CPUs - description: Up to ~4 CPUs when available - kubespawner_override: - mem_guarantee: 15611359038 - mem_limit: 15611359038 - cpu_guarantee: 1.82525 - cpu_limit: 3.6505 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_29_gb: - display_name: ~29 GB RAM, ~4 CPUs - description: ~4 CPUs always available - kubespawner_override: - mem_guarantee: 31222718077 - mem_limit: 31222718077 - cpu_guarantee: 3.6505 - cpu_limit: 3.6505 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_60_gb: - display_name: ~60 GB RAM, ~8 CPUs - description: Up to ~15 CPUs when available - kubespawner_override: - mem_guarantee: 64020707016 - mem_limit: 64020707016 - cpu_guarantee: 7.69055 - cpu_limit: 15.3811 - node_selector: - node.kubernetes.io/instance-type: r5.4xlarge - mem_119_gb: - display_name: ~119 GB RAM, ~15 CPUs - description: ~15 CPUs always available - kubespawner_override: - mem_guarantee: 128041414033 - mem_limit: 128041414033 - cpu_guarantee: 15.3811 - cpu_limit: 15.3811 - node_selector: - node.kubernetes.io/instance-type: r5.4xlarge - # [[[end]]] - - - display_name: NVIDIA Tesla T4, ~16 GB, ~4 CPUs - description: Start a container on a dedicated node with a GPU - slug: gpu - allowed_groups: - - nmfs-openscapes:gpu-access-2i2c - - 2i2c-org:hub-access-for-2i2c-staff - profile_options: - image: - display_name: Environment - dynamic_image_building: - enabled: true - unlisted_choice: - enabled: true - display_name: Custom image - validation_regex: ^.+:.+$ - validation_message: Must be a publicly available docker image of form : - kubespawner_override: - image: '{value}' - choices: - pytorch: - display_name: Pangeo PyTorch ML Notebook - default: false - slug: pytorch - kubespawner_override: - image: quay.io/pangeo/pytorch-notebook:2025.12.30 - tensorflow2: - display_name: Pangeo Tensorflow2 ML Notebook - default: true - slug: tensorflow2 - kubespawner_override: - image: quay.io/pangeo/ml-notebook:2025.12.30 - kubespawner_override: - environment: - NVIDIA_DRIVER_CAPABILITIES: compute,utility - mem_limit: - mem_guarantee: 14G - node_selector: - node.kubernetes.io/instance-type: g4dn.xlarge - extra_resource_limits: - nvidia.com/gpu: '1' - hub: allowNamedServers: true loadRoles: diff --git a/config/clusters/nmfs-openscapes/noaa-only.jsonnet b/config/clusters/nmfs-openscapes/noaa-only.jsonnet new file mode 100644 index 0000000000..c0f562977b --- /dev/null +++ b/config/clusters/nmfs-openscapes/noaa-only.jsonnet @@ -0,0 +1,8 @@ +local commonConfig = import './common.libsonnet'; + +local defaultProfile = commonConfig.getDefaultProfile; +local gpu = commonConfig.getGPUProfile; + +local profiles = [defaultProfile, gpu]; + +profiles diff --git a/config/clusters/nmfs-openscapes/noaa-only.values.yaml b/config/clusters/nmfs-openscapes/noaa-only.values.yaml index d245e9eba3..ad0847b355 100644 --- a/config/clusters/nmfs-openscapes/noaa-only.values.yaml +++ b/config/clusters/nmfs-openscapes/noaa-only.values.yaml @@ -37,206 +37,6 @@ jupyterhub: SCRATCH_BUCKET: s3://nmfs-openscapes-scratch-noaa-only/$(JUPYTERHUB_USER) GH_SCOPED_CREDS_CLIENT_ID: Iv23lie5oLneHExwicr2 GH_SCOPED_CREDS_APP_URL: https://github.com/apps/nmfs-openscapes-noaa-push-access - profileList: - - display_name: Default - description: Choose image and resource allocation - default: true - profile_options: - image: - display_name: Image - dynamic_image_building: - enabled: true - choices: - python: - display_name: Py - NASA Openscapes Python, Dask Gateway 65d6916 - slug: python - kubespawner_override: - image: openscapes/python:65d6916 - pyrbase: - display_name: Py-R - py-rocket-base image 4.4-3.10 - slug: pyrbase - kubespawner_override: - image: ghcr.io/nmfs-opensci/py-rocket-base:latest - cryo: - display_name: Py - Cryointhecloud base image latest - slug: cryo - kubespawner_override: - image: quay.io/cryointhecloud/cryo-hub-image:latest - asar: - display_name: R - ASAR Stock Assessment - slug: asar - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/asar:latest - cefi: - display_name: Py-R - CEFI image latest - slug: cefi - kubespawner_override: - image: ghcr.io/nmfs-opensci/cefi-image:latest - pyrgeo2: - display_name: Py-R - Geospatial + QGIS, Panoply, CWUtils - py-rocket-geospatial-2 latest - slug: pyrgeo2 - default: true - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/py-rocket-geospatial-2:latest - coastwatch: - display_name: Py-R - CoastWatch - coastwatch latest - slug: coastwatch - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/coastwatch:latest - aomlomics: - display_name: Py - Tourmaline Snakemake workflow for QIIME 2 v.2023.5 - slug: aomlomics - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/aomlomics-jh:latest - iorocker: - display_name: R - Geospatial w sdmTMB - r-geospatial-sdm latest - slug: rgeospatialsdm - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/r-geospatial-sdm:latest - echopype: - display_name: Py - Echopype with pangeo - image-acoustics latest - slug: echopype - kubespawner_override: - image: ghcr.io/nmfs-opensci/image-acoustics:latest - arcgis: - display_name: Py - ArcGIS Python 3.9 - slug: arcgis - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/arcgis:latest - vast: - display_name: R - VAST with TMB - vast latest - kubespawner_override: - image: ghcr.io/nmfs-opensci/container-images/vast:latest - pace: - display_name: Py - PACE image with OCSSW tools - slug: pace - kubespawner_override: - image: quay.io/pacehackweek/pace-2024:latest - unlisted_choice: - enabled: true - display_name: Custom image - validation_regex: ^.+:.+$ - validation_message: Must be a publicly available docker image, of form : - kubespawner_override: - image: '{value}' - requests: - display_name: Resource Allocation - choices: - # r5.xlarge - # [[[cog - # from deployer.dev_commands.generate.resource_allocation.generate_choices import choices - # choices(["r5.xlarge:5", "r5.4xlarge:2"], "proportional-memory-strategy", default=True) - # ]]] - mem_2_gb: - display_name: ~2 GB RAM, ~0.2 CPUs - description: Up to ~4 CPUs when available - kubespawner_override: - mem_guarantee: 1951419879 - mem_limit: 1951419879 - cpu_guarantee: 0.22815625 - cpu_limit: 3.6505 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - default: true - mem_4_gb: - display_name: ~4 GB RAM, ~0.5 CPUs - description: Up to ~4 CPUs when available - kubespawner_override: - mem_guarantee: 3902839759 - mem_limit: 3902839759 - cpu_guarantee: 0.4563125 - cpu_limit: 3.6505 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_7_gb: - display_name: ~7 GB RAM, ~0.9 CPUs - description: Up to ~4 CPUs when available - kubespawner_override: - mem_guarantee: 7805679519 - mem_limit: 7805679519 - cpu_guarantee: 0.912625 - cpu_limit: 3.6505 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_15_gb: - display_name: ~15 GB RAM, ~1.8 CPUs - description: Up to ~4 CPUs when available - kubespawner_override: - mem_guarantee: 15611359038 - mem_limit: 15611359038 - cpu_guarantee: 1.82525 - cpu_limit: 3.6505 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_29_gb: - display_name: ~29 GB RAM, ~4 CPUs - description: ~4 CPUs always available - kubespawner_override: - mem_guarantee: 31222718077 - mem_limit: 31222718077 - cpu_guarantee: 3.6505 - cpu_limit: 3.6505 - node_selector: - node.kubernetes.io/instance-type: r5.xlarge - mem_60_gb: - display_name: ~60 GB RAM, ~8 CPUs - description: Up to ~15 CPUs when available - kubespawner_override: - mem_guarantee: 64020707016 - mem_limit: 64020707016 - cpu_guarantee: 7.69055 - cpu_limit: 15.3811 - node_selector: - node.kubernetes.io/instance-type: r5.4xlarge - mem_119_gb: - display_name: ~119 GB RAM, ~15 CPUs - description: ~15 CPUs always available - kubespawner_override: - mem_guarantee: 128041414033 - mem_limit: 128041414033 - cpu_guarantee: 15.3811 - cpu_limit: 15.3811 - node_selector: - node.kubernetes.io/instance-type: r5.4xlarge - # [[[end]]] - - - display_name: NVIDIA Tesla T4, ~16 GB, ~4 CPUs - description: Start a container on a dedicated node with a GPU - slug: gpu - profile_options: - image: - display_name: Environment - dynamic_image_building: - enabled: true - unlisted_choice: - enabled: true - display_name: Custom image - validation_regex: ^.+:.+$ - validation_message: Must be a publicly available docker image of form : - kubespawner_override: - image: '{value}' - choices: - pytorch: - display_name: Pangeo PyTorch ML Notebook - default: false - slug: pytorch - kubespawner_override: - image: quay.io/pangeo/pytorch-notebook:2024.11.11 - tensorflow2: - display_name: Pangeo Tensorflow2 ML Notebook - default: true - slug: tensorflow2 - kubespawner_override: - image: quay.io/pangeo/ml-notebook:2024.11.11 - kubespawner_override: - environment: - NVIDIA_DRIVER_CAPABILITIES: compute,utility - mem_limit: - mem_guarantee: 14G - node_selector: - node.kubernetes.io/instance-type: g4dn.xlarge - extra_resource_limits: - nvidia.com/gpu: '1' hub: config: diff --git a/helm-charts/basehub/profile_lists_defaults/choices/r5.4xlarge-2.json b/helm-charts/basehub/profile_lists_defaults/choices/r5.4xlarge-2.json new file mode 100644 index 0000000000..f4d3433ec4 --- /dev/null +++ b/helm-charts/basehub/profile_lists_defaults/choices/r5.4xlarge-2.json @@ -0,0 +1,28 @@ +{ + "mem_60_gb": { + "display_name": "~60 GB RAM, ~8 CPUs", + "description": "Up to ~15 CPUs when available", + "kubespawner_override": { + "mem_guarantee": "64020707016", + "mem_limit": "64020707016", + "cpu_guarantee": "7.69055", + "cpu_limit": "15.3811", + "node_selector": { + "node.kubernetes.io/instance-type": "r5.4xlarge" + } + } + }, + "mem_119_gb": { + "display_name": "~119 GB RAM, ~15 CPUs", + "description": "~15 CPUs always available", + "kubespawner_override": { + "mem_guarantee": "128041414033", + "mem_limit": "128041414033", + "cpu_guarantee": "15.3811", + "cpu_limit": "15.3811", + "node_selector": { + "node.kubernetes.io/instance-type": "r5.4xlarge" + } + } + } +} \ No newline at end of file diff --git a/helm-charts/basehub/profile_lists_defaults/choices/r5.xlarge-5.json b/helm-charts/basehub/profile_lists_defaults/choices/r5.xlarge-5.json new file mode 100644 index 0000000000..525ad9cb68 --- /dev/null +++ b/helm-charts/basehub/profile_lists_defaults/choices/r5.xlarge-5.json @@ -0,0 +1,67 @@ +{ + "mem_2_gb": { + "display_name": "~2 GB RAM, ~0.2 CPUs", + "description": "Up to ~4 CPUs when available", + "kubespawner_override": { + "mem_guarantee": 1951419879, + "mem_limit": 1951419879, + "cpu_guarantee": 0.22815625, + "cpu_limit": 3.6505, + "node_selector": { + "node.kubernetes.io/instance-type": "r5.xlarge" + } + } + }, + "mem_4_gb": { + "display_name": "~4 GB RAM, ~0.5 CPUs", + "description": "Up to ~4 CPUs when available", + "kubespawner_override": { + "mem_guarantee": 3902839759, + "mem_limit": 3902839759, + "cpu_guarantee": 0.4563125, + "cpu_limit": 3.6505, + "node_selector": { + "node.kubernetes.io/instance-type": "r5.xlarge" + } + } + }, + "mem_7_gb": { + "display_name": "~7 GB RAM, ~0.9 CPUs", + "description": "Up to ~4 CPUs when available", + "kubespawner_override": { + "mem_guarantee": 7805679519, + "mem_limit": 7805679519, + "cpu_guarantee": 0.912625, + "cpu_limit": 3.6505, + "node_selector": { + "node.kubernetes.io/instance-type": "r5.xlarge" + } + } + }, + "mem_15_gb": { + "display_name": "~15 GB RAM, ~1.8 CPUs", + "description": "Up to ~4 CPUs when available", + "kubespawner_override": { + "mem_guarantee": 15611359038, + "mem_limit": 15611359038, + "cpu_guarantee": 1.82525, + "cpu_limit": 3.6505, + "node_selector": { + "node.kubernetes.io/instance-type": "r5.xlarge" + } + } + }, + "mem_29_gb": { + "display_name": "~29 GB RAM, ~4 CPUs", + "description": "~4 CPUs always available", + "kubespawner_override": { + "mem_guarantee": 31222718077, + "mem_limit": 31222718077, + "cpu_guarantee": 3.6505, + "cpu_limit": 3.6505, + "node_selector": { + "node.kubernetes.io/instance-type": "r5.xlarge" + } + } + } +} \ No newline at end of file diff --git a/helm-charts/basehub/profile_lists_defaults/libsonnet/profileListsFunc.jsonnet b/helm-charts/basehub/profile_lists_defaults/libsonnet/profileListsFunc.jsonnet new file mode 100644 index 0000000000..e8370cb8ec --- /dev/null +++ b/helm-charts/basehub/profile_lists_defaults/libsonnet/profileListsFunc.jsonnet @@ -0,0 +1,58 @@ +{ + makeChoiceDefault(choice_dict, choice):: + choice_dict { + [choice]: choice_dict[choice] { + default: true, + }, + }, + + makeProfile( + profile_description='Choose image and resource allocation', + profile_display, + is_default_profile, + slug='', + unlisted_choice_enabled, + profile_kubespawner_override={}, + profile_allowed_groups=[], + image_display='Image', + requests_display_name='Resource Allocation', + dynamic_image_building_enabled, + image_choices, + requests_choices={}, + ):: { + display_name: profile_display, + description: profile_description, + default: is_default_profile, + } + if image_choices == {} && requests_choices == {} then {} else { + profile_options: { + } + if image_choices == {} then {} else { + image: { + display_name: image_display, + dynamic_image_building: { + enabled: dynamic_image_building_enabled, + }, + choices: image_choices, + unlisted_choice: { + enabled: unlisted_choice_enabled, + display_name: 'Custom image', + validation_regex: '^.+:.+$', + validation_message: 'Must be a publicly available docker image, of form :', + kubespawner_override: { + image: '{value}', + }, + }, + } + if requests_choices == {} then {} else { + requests: { + display_name: requests_display_name, + choices: requests_choices, + }, + }, + }, + } + if profile_kubespawner_override == {} then {} else { + kubespawner_override: profile_kubespawner_override, + } + if profile_allowed_groups == [] then {} else { + profile_allowed_groups: profile_allowed_groups, + } + if slug == '' then {} else { + slug: slug, + }, +}