{"id":36497787,"url":"https://github.com/converged-computing/hyperqueue-operator","last_synced_at":"2026-01-12T02:04:51.080Z","repository":{"id":172334105,"uuid":"649148678","full_name":"converged-computing/hyperqueue-operator","owner":"converged-computing","description":"Testing out hyperqueue as a Kubernetes operator (under development)","archived":false,"fork":false,"pushed_at":"2023-07-21T04:46:33.000Z","size":144,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-10T14:50:10.368Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/converged-computing.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2023-06-03T23:57:49.000Z","updated_at":"2023-06-04T00:31:38.000Z","dependencies_parsed_at":null,"dependency_job_id":"406bde3f-6769-41e7-b1c9-0dbd30bb9514","html_url":"https://github.com/converged-computing/hyperqueue-operator","commit_stats":null,"previous_names":["converged-computing/hyperqueue-operator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/converged-computing/hyperqueue-operator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fhyperqueue-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fhyperqueue-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fhyperqueue-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fhyperqueue-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/converged-computing","download_url":"https://codeload.github.com/converged-computing/hyperqueue-operator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fhyperqueue-operator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28331558,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T00:36:25.062Z","status":"online","status_checked_at":"2026-01-12T02:00:08.677Z","response_time":98,"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":"2026-01-12T02:04:00.892Z","updated_at":"2026-01-12T02:04:51.072Z","avatar_url":"https://github.com/converged-computing.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# hyperqueue-operator\n\n\u003e What happens when I run out of things to do on a Saturday... ohno \n\nThis will be an operator that attempts to use [hyperqueue](https://github.com/It4innovations/hyperqueue) to create a cluster to run tasks.\nThis isn't tested or working yet (and I'm new to the tool so please don't expect it to work yet). Thank you!\n\n## Getting Started\n\nYou’ll need a Kubernetes cluster to run against. You can use [KIND](https://sigs.k8s.io/kind) to get a local cluster for testing, or run against a remote cluster.\n**Note:** Your controller will automatically use the current context in your kubeconfig file (i.e. whatever cluster `kubectl cluster-info` shows).\n\n### Running on the cluster\n\nCreate a cluster with kind:\n\n```bash\n$ kind create cluster\n```\n\nYou'll need to install the jobset API, which eventually will be added to Kubernetes proper (but is not yet!)\n\n```bash\nVERSION=v0.2.0\nkubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/$VERSION/manifests.yaml\n```\n\nGenerate the custom resource definition container (if you are developing):\n\n```bash\n# Build and push the image, and generate the examples/dist/hyperqueue-operator-dev.yaml\n$ make test-deploy DEVIMG=\u003csome-registry\u003e/hyperqueue-operator:tag\n\n# As an example\n$ make test-deploy DEVIMG=vanessa/hyperqueue-operator:test\n```\n\nMake our namespace:\n\n```bash\n$ kubectl create namespace hyperqueue-operator\n```\n\nApply the new config!\n\n```bash\n$ kubectl apply -f examples/dist/hyperqueue-operator-dev.yaml\n```\n\nSee logs for the operator to make sure it is running.\n\n```bash\n$ kubectl logs -n hyperqueue-operator-system hyperqueue-operator-controller-manager-6f6945579-9pknp \n```\n\n#### Hello World Example\n\nCreate a \"hello-world\" interactive cluster:\n\n```bash\n$ kubectl apply -f examples/tests/hello-world/hyperqueue.yaml \n```\n\nAfter the access pod runs and generates the node access file (which you can inspect):\n\n\u003cdetails\u003e\n\n\u003csummary\u003eNode access.json generation\u003c/summary\u003e\n\n```console\n$ kubectl logs -n hyperqueue-operator hyperqueue-sample-access \nGet:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]\nGet:2 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]       \nGet:3 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages [938 kB]\nGet:4 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]\nGet:5 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [108 kB]\nGet:6 http://archive.ubuntu.com/ubuntu jammy/multiverse amd64 Packages [266 kB]\nGet:7 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages [631 kB]\nGet:8 http://archive.ubuntu.com/ubuntu jammy/universe amd64 Packages [17.5 MB]\nGet:9 http://security.ubuntu.com/ubuntu jammy-security/multiverse amd64 Packages [36.3 kB]\nGet:10 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 Packages [541 kB]\nGet:11 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages [1792 kB]    \nGet:12 http://archive.ubuntu.com/ubuntu jammy/restricted amd64 Packages [164 kB]\nGet:13 http://archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages [545 kB]\nGet:14 http://archive.ubuntu.com/ubuntu jammy-updates/multiverse amd64 Packages [42.2 kB]\nGet:15 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [919 kB]\nGet:16 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages [1191 kB]\nGet:17 http://archive.ubuntu.com/ubuntu jammy-backports/universe amd64 Packages [27.0 kB]\nGet:18 http://archive.ubuntu.com/ubuntu jammy-backports/main amd64 Packages [49.4 kB]\nFetched 25.2 MB in 5s (4622 kB/s)  \nReading package lists... Done\n2023-06-21T00:59:18Z INFO Storing access file as 'operator-access.json'\nCUT HERE\n{\n  \"version\": \"nightly-2023-06-20-db011ed5a3faecf31168709417cd8a736a297a50\",\n  \"server_uid\": \"VhbvXU\",\n  \"client\": {\n    \"host\": \"hyperqueue-sample-server-0-0.hq-service.hyperqueue-operator.svc.cluster.local\",\n    \"port\": 6789,\n    \"secret_key\": \"4ba72c008fb72b29f8db96ba5c103fc29b73157afe10b6e53bb2832b5e152d46\"\n  },\n  \"worker\": {\n    \"host\": \"hyperqueue-sample-server-0-0.hq-service.hyperqueue-operator.svc.cluster.local\",\n    \"port\": 1234,\n    \"secret_key\": \"63ca4ca518a568da934edc7652c0178ca05436d720362693d257c68a2b7286aa\"\n  }\n}\n```\n\n\u003c/details\u003e\n\nYou should be able to see the server start, submit the job, and then it will `--wait` for it to finish and cat the output\nfile:\n\n```bash\n$ kubectl logs -n hyperqueue-operator hyperqueue-sample-server-0-0-fnnnj -f\n```\n```console\nFound extra command echo hello world\n2023-06-21T00:59:44Z INFO No online server found, starting a new server\n2023-06-21T00:59:44Z INFO Storing access file as '/root/.hq-server/001/access.json'\n+------------------+-------------------------------------------------------------------------------+\n| Server directory | /root/.hq-server                                                              |\n| Server UID       | VhbvXU                                                                        |\n| Client host      | hyperqueue-sample-server-0-0.hq-service.hyperqueue-operator.svc.cluster.local |\n| Client port      | 6789                                                                          |\n| Worker host      | hyperqueue-sample-server-0-0.hq-service.hyperqueue-operator.svc.cluster.local |\n| Worker port      | 1234                                                                          |\n| Version          | nightly-2023-06-20-db011ed5a3faecf31168709417cd8a736a297a50                   |\n| Pid              | 2710                                                                          |\n| Start date       | 2023-06-21 00:59:44 UTC                                                       |\n+------------------+-------------------------------------------------------------------------------+\n2023-06-21T00:59:44Z INFO Worker 1 registered from 10.244.0.22:60396\n2023-06-21T00:59:45Z INFO Worker 2 registered from 10.244.0.23:57144\nhq submit --wait --name hello-world --nodes 2 --log hello-world.out echo hello world\nJob submitted successfully, job ID: 1\nWait finished in 46ms 37us 130ns: 1 job finished\nHQ:log\n      hello world\n```\n\nSince `interactive: true` is set, you can now shell in and interact with your cluster!\nSee the [interactive example](#interactive-example) for how we did this with the LAMMPS example.\nClean up the example when you are done:\n\n```bash\n$ kubectl delete -f examples/tests/hello-world/hyperqueue.yaml \n```\n\n#### LAMMPS Example\n\nThis example (for the time being) uses a custom image with hq already installed.\n\n```bash\n$ kubectl apply -f examples/tests/lammps/hyperqueue.yaml \n```\n\nNote that since we are pulling large custom containers, this will take a little bit longer.\nMake sure the pods are running before trying to look at logs! When they are,\nlook at the logs to see the worker/server starting:\n\n```console\n2023-06-04T06:03:50Z INFO No online server found, starting a new server\n2023-06-04T06:03:50Z INFO Saving access file as '/root/.hq-server/001/access.json'\nFile exists (os error 17)\n+------------------+------------------------------------------------+\n| Server directory | /root/.hq-server                               |\n| Server UID       | L4E27M                                         |\n| Host             | hyperqueue-sample-hyperqueue-sample-server-0-0 |\n| Pid              | 2710                                           |\n| HQ port          | 39795                                          |\n| Workers port     | 38937                                          |\n| Start date       | 2023-06-04 06:03:50 UTC                        |\n| Version          | 0.15.0                                         |\n+------------------+------------------------------------------------+\n```\n\nAnd given that we submit a job with `--wait` and `--log`, our main server will submit the job,\nwrite to a specific output file, and then we can cat it to the terminal. E.g.,:\n\n```bash\n$ kubectl logs -n hyperqueue-operator hyperqueue-sample-server-0-0-r8vbl -f\n```\n```console\nHello, I am a server with hyperqueue-sample-server-0-0\nFound extra command mpirun -np 2 --map-by socket lmp -v x 2 -v y 2 -v z 2 -in in.reaxc.hns -nocite\n2023-06-17T19:10:39Z INFO No online server found, starting a new server\n2023-06-17T19:10:39Z INFO Storing access file as '/root/.hq-server/001/access.json'\n+------------------+-------------------------------------------------------------------------------+\n| Server directory | /root/.hq-server                                                              |\n| Server UID       | A7niLo                                                                        |\n| Client host      | hyperqueue-sample-server-0-0.hq-service.hyperqueue-operator.svc.cluster.local |\n| Client port      | 6789                                                                          |\n| Worker host      | hyperqueue-sample-server-0-0.hq-service.hyperqueue-operator.svc.cluster.local |\n| Worker port      | 1234                                                                          |\n| Version          | 0.15.0-dev                                                                    |\n| Pid              | 18                                                                            |\n| Start date       | 2023-06-17 19:10:39 UTC                                                       |\n+------------------+-------------------------------------------------------------------------------+\nhq submit --wait --name lammps --nodes 2 --log log.out mpirun -np 2 --map-by socket lmp -v x 2 -v y 2 -v z 2 -in in.reaxc.hns -nocite\nJob submitted successfully, job ID: 1\n2023-06-17T19:10:41Z INFO Worker 1 registered from 10.244.0.94:36124\n2023-06-17T19:10:41Z INFO Worker 2 registered from 10.244.0.95:49076\nWait finished in 12s 147ms 683us 588ns: 1 job finished\nHQ:logrLAMMPS (29 Sep 2021 - Update 2)\nOMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)\n(  using 1 OpenMP thread(s) per MPI task\nReading data file ...\n�  triclinic box = (0.0000000 0.0000000 0.0000000) to (22.326000 11.141200 13.778966) with tilt (0.0000000 -5.0260300 0.0000000)\n5  2 by 1 by 1 MPI processor grid\n  reading atoms ...\n%  304 atoms\n  reading velocities ...\n1  304 velocities\n  read_data CPU = 0.003 seconds\nReplicating atoms ...\n�  triclinic box = (0.0000000 0.0000000 0.0000000) to (44.652000 22.282400 27.557932) with tilt (0.0000000 -10.052060 0.0000000)\n  2 by 1 by 1 MPI processor grid\n  bounding box image = (0 -1 -1) to (0 1 1)\n  bounding box extra memory = 0.03 MB\n?  average # of replicas added to proc = 5.00 out of 8 (62.50%)\n-  2432 atoms\n  replicate CPU = 0.001 seconds\n�Neighbor list info ...\n  update every 20 steps, delay 0 steps, check no\n  max neighbors/atom: 2000, page size: 100000\n  master list distance cutoff = 11\n  ghost atom cutoff = 11\n  binsize = 5.5, bins = 10 5 6\n  2 neighbor lists, perpetual/occasional/extra = 2 0 0\n  (1) pair reax/c, perpetual\n      attributes: half, newton off, ghost\n      pair build: half/bin/newtoff/ghost\n      stencil: full/ghost/bin/3d\n      bin: standard\n  (2) fix qeq/reax, perpetual, copy from (1)\n      attributes: half, newton off, ghost\n      pair build: copy\n      stencil: none\n      bin: none\nSetting up Verlet run ...\n  Unit style    : real\n  Current step  : 0\n  Time step     : 0.1\nyPer MPI rank memory allocation (min/avg/max) = 143.9 | 143.9 | 143.9 Mbytes\nStep Temp PotEng Press E_vdwl Ecoul Volume \nX       0          300   -113.27833    437.52118   -111.57687   -1.7014647    27418.867 \nX      10    299.38517   -113.27631    1439.2824   -111.57492   -1.7013813    27418.867 \nX      20    300.27107   -113.27884     3764.342   -111.57762   -1.7012247    27418.867 \nX      30    302.21063   -113.28428    7007.6629   -111.58335   -1.7009363    27418.867 \nX      40    303.52265   -113.28799    9844.8245   -111.58747   -1.7005186    27418.867 \nX      50    301.87059   -113.28324    9663.0973   -111.58318   -1.7000523    27418.867 \nX      60    296.67807   -113.26777    7273.8119   -111.56815   -1.6996137    27418.867 \nX      70    292.19999   -113.25435    5533.5522   -111.55514   -1.6992158    27418.867 \nX      80    293.58677   -113.25831    5993.4438   -111.55946   -1.6988533    27418.867 \nX      90    300.62635   -113.27925    7202.8369   -111.58069   -1.6985592    27418.867 \n�     100    305.38276   -113.29357    10085.805   -111.59518   -1.6983874    27418.867 \nLoop time of 11.6816 on 2 procs for 100 steps with 2432 atoms\n\nPerformance: 0.074 ns/day, 324.490 hours/ns, 8.560 timesteps/s\n99.9% CPU use with 2 MPI tasks x 1 OpenMP threads\n\nMPI task timing breakdown:\nSection |  min time  |  avg time  |  max time  |%varavg| %total\n---------------------------------------------------------------\nPair    | 8.1671     | 8.47       | 8.7728     |  10.4 | 72.51\nNeigh   | 0.2549     | 0.25591    | 0.25693    |   0.2 |  2.19\nComm    | 0.0087991  | 0.31171    | 0.61462    |  54.3 |  2.67\nOutput  | 0.0011636  | 0.0012047  | 0.0012459  |   0.1 |  0.01\nModify  | 2.641      | 2.6421     | 2.6432     |   0.1 | 22.62\nOther   |            | 0.0007353  |            |       |  0.01\n\nNlocal:        1216.00 ave        1216 max        1216 min\nHistogram: 2 0 0 0 0 0 0 0 0 0\nNghost:        7591.50 ave        7597 max        7586 min\nHistogram: 1 0 0 0 0 0 0 0 0 1\nNeighs:        432912.0 ave      432942 max      432882 min\nHistogram: 1 0 0 0 0 0 0 0 0 1\n\nTotal # of neighbors = 865824\nAve neighs/atom = 356.01316\nNeighbor list builds = 5\nDangerous builds not checked\nTotal wall time: 0:00:12\n```\n\nIn the above, we see the two workers registering, and then MPI/LAMMPS running with 2 processes\n(one thread per node I think). Akin to the first example, we have `interactive: true` here so \nyou can proceed to the next section for an interactive example.\n\n#### Interactive Example\n\nSince our job sets interactive: true, this means the cluster stays running after the job is finished,\nand we can interactively shell in and submit a job, e.g.,:\n\n```bash\n$ kubectl exec -it -n hyperqueue-operator hyperqueue-sample-server-0-0-bbbh2 bash\n\n# Running manually on the command line\n$ mpirun -np 2 --map-by socket lmp -v x 2 -v y 2 -v z 2 -in in.reaxc.hns -nocite\n\n# Submitting the job\n$ hq submit mpirun -np 2 --map-by socket lmp -v x 2 -v y 2 -v z 2 -in in.reaxc.hns -nocite\nJob submitted successfully, job ID: 2\n```\n\nIt should be RUNNING fairly quickly:\n\n```bash\n$ hq job list\n+----+------+---------+-------+\n| ID | Name | State   | Tasks |\n+----+------+---------+-------+\n|  1 | lmp  | RUNNING | 1     |\n+----+------+---------+-------+\n```\n\nWhen it's done it will pop off the queue, and you can add `--all`. Here we see our current running job and the previous one:\n\n```bash\n$ hq job list --all\n+----+--------+----------+-------+\n| ID | Name   | State    | Tasks |\n+----+--------+----------+-------+\n|  1 | lammps | FINISHED | 1     |\n|  2 | mpirun | RUNNING  | 1     |\n+----+--------+----------+-------+\n```\n\nIf you don't specify a `--log` file, depending on where you run it, the logs can show up on any worker,\ntypically in the same working directory in a directory called `log-N` (e.g., log-4). And that's it!\n\n#### Cleanup\n\nWhen you are finished:\n\n```bash\n$ kind delete cluster\n```\n\n## Development\n\n### Creation\n\n```bash\nmkdir hyperqueue-operator\ncd hyperqueue-operator/\noperator-sdk init --domain flux-framework.org --repo github.com/converged-computing/hyperqueue-operator\noperator-sdk create api --version v1alpha1 --kind Hyperqueue --resource --controller\n```\n\n### How it works\n\nThis project aims to follow the Kubernetes [Operator pattern](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/).\n\nIt uses [Controllers](https://kubernetes.io/docs/concepts/architecture/controller/),\nwhich provide a reconcile function responsible for synchronizing resources until the desired state is reached on the cluster.\n\n### Additional Submit Args\n\nThere are a lot of arguments and ways we can customize submit (that likely we want to experiment with):\n\n```\n# hq submit --help\nSubmit a job to HyperQueue\n\nUsage: hq submit [OPTIONS] \u003cCOMMANDS\u003e...\n\nArguments:\n  \u003cCOMMANDS\u003e...\n          Command that should be executed by each task\n\nOptions:\n      --nodes \u003cNODES\u003e\n          Number of nodes; 0\n          \n          [default: 0]\n\n      --cpus \u003cCPUS\u003e\n          Number and placement of CPUs for each job\n\n      --resource \u003cRESOURCE\u003e\n          Generic resource request in the form \u003cNAME\u003e=\u003cAMOUNT\u003e\n\n      --time-request \u003cTIME_REQUEST\u003e\n          Minimal lifetime of the worker needed to start the job\n          \n          [default: 0ms]\n\n      --name \u003cNAME\u003e\n          Name of the job\n\n      --pin \u003cPIN\u003e\n          Pin the job to the cores specified in `--cpus`\n          \n          [possible values: taskset, omp]\n\n      --cwd \u003cCWD\u003e\n          Working directory for the submitted job. The path must be accessible from worker nodes [default: %{SUBMIT_DIR}]\n\n      --stdout \u003cSTDOUT\u003e\n          Path where the standard output of the job will be stored. The path must be accessible from worker nodes\n\n      --stderr \u003cSTDERR\u003e\n          Path where the standard error of the job will be stored. The path must be accessible from worker nodes\n\n      --env \u003cENV\u003e\n          Specify additional environment variable for the job. You can pass this flag multiple times to pass multiple variables\n          \n          `--env=KEY=VAL` - set an environment variable named `KEY` with the value `VAL`\n\n      --each-line \u003cEACH_LINE\u003e\n          Create a task array where a task will be created for each line of the given file. The corresponding line will be passed to the task in environment variable `HQ_ENTRY`\n\n      --from-json \u003cFROM_JSON\u003e\n          Create a task array where a task will be created for each item of a JSON array stored in the given file. The corresponding item from the array will be passed as a JSON string to the task in environment variable `HQ_ENTRY`\n\n      --array \u003cARRAY\u003e\n          Create a task array where a task will be created for each number in the specified number range. Each task will be passed an environment variable `HQ_TASK_ID`.\n          \n          `--array=5` - create task array with one job with task ID 5\n          \n          `--array=3-5` - create task array with three jobs with task IDs 3, 4, 5\n\n      --max-fails \u003cMAX_FAILS\u003e\n          Maximum number of permitted task failures. If this limit is reached, the job will fail immediately\n\n      --priority \u003cPRIORITY\u003e\n          Priority of each task\n          \n          [default: 0]\n\n      --time-limit \u003cTIME_LIMIT\u003e\n          Time limit per task. E.g. --time-limit=10min\n\n      --log \u003cLOG\u003e\n          Stream the output of tasks into this log file\n\n      --task-dir\n          Create a temporary directory for task, path is provided in HQ_TASK_DIR The directory is automatically deleted when task is finished\n\n      --crash-limit \u003cCRASH_LIMIT\u003e\n          Limits how many times may task be in a running state while worker is lost. If the limit is reached, the task is marked as failed. If the limit is zero, the limit is disabled\n          \n          [default: 5]\n\n      --wait\n          Wait for the job to finish\n\n      --progress\n          Interactively observe the progress of the submitted job\n\n      --stdin\n          Capture stdin and start the task with the given stdin; the job will be submitted when the stdin is closed\n\n      --directives \u003cDIRECTIVES\u003e\n          Select directives parsing mode.\n          \n          `auto`: Directives will be parsed if the suffix of the first command is \".sh\".\n           `file`: Directives will be parsed regardless of the first command extension.\n           `stdin`: Directives will be parsed from standard input passed to `hq submit` instead from the submitted command.\n           `off`: Directives will not be parsed.\n          \n          \n          If enabled, HQ will parse `#HQ` directives from a file located in the first entered command. Parameters following the `#HQ` prefix will be used as parameters for `hq submit`.\n          \n          Example (script.sh):\n           #!/bin/bash\n           #HQ --name my-job\n           #HQ --cpus=2\n           \n           program --foo=bar\n          \n          \n          [default: auto]\n          [possible values: auto, file, stdin, off]\n\n  -h, --help\n          Print help (see a summary with '-h')\n\nGLOBAL OPTIONS:\n      --server-dir \u003cSERVER_DIR\u003e\n          Path to a directory that stores HyperQueue access files\n          \n          [env: HQ_SERVER_DIR=]\n\n      --colors \u003cCOLORS\u003e\n          Console color policy\n          \n          [default: auto]\n          [possible values: auto, always, never]\n\n      --output-mode \u003cOUTPUT_MODE\u003e\n          How should the output of the command be formatted\n          \n          [env: HQ_OUTPUT_MODE=]\n          [default: cli]\n          [possible values: cli, json, quiet]\n\n      --debug\n          Turn on a more detailed log output\n          \n          [env: HQ_DEBUG=]\n```\n\n### Deploy Development Jobset \n\nor development version (this is what I did):\n\n```bash\n$ kubectl apply --server-side -k github.com/kubernetes-sigs/jobset/config/default?ref=0.2.0\n\n# This is right before upgrade to v1alpha2, or June 2nd when I was testing!\n# This is also a strategy for deploying a test version\ngit clone https://github.com/kubernetes-sigs/jobset /tmp/jobset\ncd /tmp/jobset\ngit checkout 93bd85c76fc8afa79b4b5c6d1df9075c99c9f22d\nIMAGE_TAG=vanessa/jobset:test make image-build\nIMAGE_TAG=vanessa/jobset:test make image-push\nIMAGE_TAG=vanessa/jobset:test make deploy\n```\n\n\n## License\n\nHPCIC DevTools is distributed under the terms of the MIT license.\nAll new contributions must be made under this license.\n\nSee [LICENSE](https://github.com/converged-computing/cloud-select/blob/main/LICENSE),\n[COPYRIGHT](https://github.com/converged-computing/cloud-select/blob/main/COPYRIGHT), and\n[NOTICE](https://github.com/converged-computing/cloud-select/blob/main/NOTICE) for details.\n\nSPDX-License-Identifier: (MIT)\n\nLLNL-CODE- 842614","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconverged-computing%2Fhyperqueue-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconverged-computing%2Fhyperqueue-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconverged-computing%2Fhyperqueue-operator/lists"}