NatLabRockies / NatLabRockies/openstudio-server-helm

Create Nomad Pack equivalent of this Helm chart (new repository)

Open
#91 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
Go Template
Stars
12
Forks
24
PR merge metrics
No merged PRs in 30d

Description

Summary

Create a new repository — openstudio-server-nomad-pack (or similar) — that is a Nomad Pack equivalent of this Helm chart, so OpenStudio Server can be deployed on HashiCorp Nomad clusters (with Consul for service discovery and, optionally, Vault for secrets) as an alternative to Kubernetes.

This is not a change to openstudio-server-helm itself — the ask is to scaffold and track a new, separate repo. This issue exists to capture scope, the source components that need translating, and the migration approach before that repo is created.

Why

  • Some deployment targets (e.g. bare-metal / on-prem clusters, teams already standardized on the HashiCorp stack) don't run Kubernetes. Nomad + Consul is a lighter-weight alternative.
  • There's no automatic Helm → Nomad Pack converter (different templating language: Go templates over YAML vs. Go templates over HCL), so this needs a deliberate, manual translation, chart-component by chart-component.

Background: Helm → Nomad concept mapping

Kubernetes / Helm Nomad equivalent
Helm chart Nomad Pack
values.yaml variables.hcl
Deployment/Pod Job → Task Group
Container Task (docker driver)
Service service stanza (Consul-backed)
ConfigMap / Secret template stanza (optionally sourced from Vault)
HPA / KEDA ScaledObject Nomad autoscaling (Nomad Autoscaler + Consul/Prometheus APM)
PodDisruptionBudget no direct equivalent — needs update/migrate stanza design
StorageClass / PVC Nomad host_volume / CSI plugin volumes
ServiceAccount / RBAC Nomad ACL policies
Helm hooks (pre-delete, etc.) Nomad lifecycle stanza / periodic jobs

Reference material:

  • Nomad Pack and the Nomad Pack Community Registry
  • HashiCorp's "Turn a Kubernetes Manifest into a Nomad Job Specification" tutorial
  • HashiCorp's Kubernetes → Nomad cheat sheet
  • Suggested flattening workflow: helm template <release> openstudio-server --values values.yaml > k8s-flat.yaml, then hand-translate the flattened manifests into HCL job specs, then wrap the dynamic bits in a Nomad Pack (variables.hcl + templates).

Components to translate (from openstudio-server/templates/)

Each of these Helm sub-templates needs a Nomad Pack equivalent (job/group/task, service stanza, or variable, as applicable):

  • web/ — web-deploy, web-svc, web-hpa, web-runtime-overrides → Nomad job + service stanza + Nomad Autoscaler policy
  • web-background/ — web-background-deploy, web-background-hpa
  • worker/ — worker-deploy, worker-hpa, worker-keda (queue-based autoscaling), worker-pdb (needs a disruption-budget-equivalent strategy)
  • db/ — db-deploy, db-svc, db-pvc → task group + CSI/host volume
  • redis/ — redis-deploy, redis-svc, redis-pvc
  • rserve/ — rserve-deploy, rserve-svc
  • nfs/ — nfs-pvc → Nomad volume stanza / CSI NFS plugin
  • storageclass/ → Nomad volume/CSI plugin registration equivalent
  • loadbalancer/ → Consul-integrated ingress (e.g. Consul-Terraform-Sync, or cloud LB provisioned outside Nomad)
  • secrets/app-secrets.yaml → Vault-backed template stanza, or Nomad variables
  • service-account/ (workload SA, image-pull-secrets-validation, nfs-disconnect RBAC) → Nomad ACL policies / Vault roles
  • priority-class/ (priority_high, priority_low) → Nomad job priority field
  • hooks/ (image-prepull-daemonset, pre-delete-hook, registry-hosts-patch-daemonset) → Nomad system jobs / lifecycle hooks
  • autoscaler/cluster-autoscaler-autodiscover.yaml → Nomad Autoscaler cluster scaling policy (or cloud-native node autoscaling)
  • _scheduling.tpl (node affinity/toleration helpers) → Nomad affinity/constraint stanzas
  • tests/ (test-redis-ping, test-web-healthcheck) → Nomad check stanzas / a smoke-test job

Proposed scope for the new repo

  1. New repository (e.g. NatLabRockies/openstudio-server-nomad-pack), MIT/BSD license consistent with this repo.
  2. Nomad Pack structure: metadata.hcl, variables.hcl, templates/*.nomad.tpl, outputs.tpl, mirroring the values/templates split used here.
  3. One job spec per component above (or grouped where the Kubernetes split doesn't map cleanly), parameterized the same way values.yaml parameterizes this chart (cloud provider, resource sizing, replica/worker counts, autoscaling mode).
  4. Consul service registration for web, web-background, db, redis, rserve in place of Kubernetes Services.
  5. Documented Consul + (optional) Vault prerequisites, matching the "Prerequisites" section style of this repo's README.
  6. CI equivalent of .github/workflows/chart-validation.ymlnomad-pack validate/nomad job plan in CI.
  7. A migration/parity doc noting explicitly unsupported or differently-behaving features (e.g. KEDA queue-based autoscaling, PodDisruptionBudget, image pre-pull DaemonSets) so operators know what changes when moving from K8s to Nomad.

Out of scope

  • Actually decommissioning or replacing this Helm chart — Nomad Pack is an additional deployment option, not a replacement.
  • Automated/generated conversion tooling — translation is manual per the HashiCorp guides linked above.

Acceptance criteria

  • New repository created and linked from this issue.
  • Nomad Pack in that repo deploys a working OpenStudio Server stack (web, worker, db, redis, rserve) against a real Nomad + Consul cluster.
  • README in the new repo documents prerequisites, variable reference (parity with values.schema.json where applicable), and known K8s→Nomad behavioral differences.
  • CI validates the pack (nomad-pack validate or equivalent) on PRs.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading templates/ alongside values.yaml, values.schema.json, and .github/workflows/chart-validation.yml, then render the existing chart with the suggested helm template command. Translate the listed components into a new Nomad Pack repository and validate the pack in CI; done means the web, worker, db, redis, and rserve stack deploys on Nomad with documented prerequisites, variables, and known parity gaps.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, kubernetes, prometheus, terraform
Domain
ci-cd, cloud, devops, infrastructure
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.