{"id":36688502,"url":"https://github.com/converged-computing/flex-container","last_synced_at":"2026-01-12T11:17:10.623Z","repository":{"id":243316358,"uuid":"812094597","full_name":"converged-computing/flex-container","owner":"converged-computing","description":"Testing the possibility of adding a container abstraction to the resource graph","archived":false,"fork":false,"pushed_at":"2024-06-08T00:31:40.000Z","size":13,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-10T05:36:58.095Z","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":"2024-06-08T00:22:49.000Z","updated_at":"2024-06-08T00:31:44.000Z","dependencies_parsed_at":"2024-06-08T01:50:50.762Z","dependency_job_id":null,"html_url":"https://github.com/converged-computing/flex-container","commit_stats":null,"previous_names":["converged-computing/flex-container"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/converged-computing/flex-container","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflex-container","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflex-container/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflex-container/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflex-container/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/converged-computing","download_url":"https://codeload.github.com/converged-computing/flex-container/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflex-container/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338970,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T10:58:46.209Z","status":"ssl_error","status_checked_at":"2026-01-12T10:58:42.742Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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-12T11:17:09.713Z","updated_at":"2026-01-12T11:17:10.617Z","avatar_url":"https://github.com/converged-computing.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Flex Container\n\n\u003e Testing fluxion with a container abstraction\n\nWe want to be able to schedule to containers that share the same resources, so I'm trying that with a fluxion graph.\n\n## Design\n\n### Overview\n\nThe Flux Framework \"flux-sched\" or fluxion project provides modular bindings in different languages for intelligent,\ngraph-based scheduling. When we extend fluxion to a tool or project that warrants logic of this type, we call this a flex!\nThus, the project here demonstrates flex-archspec, or using fluxion to match some system request to what we know in the archspec graph. E.g.,\n\n\u003e Do you have an x86 system with this compiler option?\n\nThis is a simple use case that doesn't perfectly reflect the OCI container use case, but we need to start somewhere! For this very basic setup we are going to:\n\n1. Load the machines into a JSON Graph (called JGF).\n2. Try doing a query against system metadata\n\nThere will eventually be a third component - a container image specification, for which we need to include somewhere here. I am starting simple!\n\n### Concepts\n\nFrom the above, the following definitions might be useful.\n\n - **[Flux Framework](https://flux-framework.org)**: a modular framework for putting together a workload manager. It is traditionally for HPC, but components have been used in other places (e.g., here, Kubernetes, etc). It is analogous to Kubernetes in that it is modular and used for running batch workloads.\n - **[fluxion](fluxion)**: refers to [flux-framework/flux-sched](https://github.com/flux-framework/flux-sched) and is the scheduler component or module of Flux Framework. There are bindings in several languages, and specifically the Go bindings (server at [flux-framework/flux-k8s](https://github.com/flux-framework/flux-k8s)) assemble into the project \"fluence.\"\n - **flex** is an out of tree tool, plugin, or similar that uses fluxion to flexibly schedule or match some kind of graph-based resources. This project is an example of a flex!\n\n## Usage\n\n### Build\n\nThis demonstrates how to build the bindings. You will need to be in the VSCode developer container environment, or produce the same\non your host. \n\n```bash\nmake\n```\nThe output is generated in bin:\n\n```bash\n$ ls bin/\nflex-container\n```\n\n### Run\n\n#### 1. Paths\n\nEnsure you have your LD library path set to find flux sched (fluxion) libraries.\n\n```bash\nexport LD_LIBRARY_PATH=/usr/lib:/opt/flux-sched/resource:/opt/flux-sched/resource/reapi/bindings:/opt/flux-sched/resource/libjobspec\n```\nThis will be set in the VSCode container already.\n\n#### 2. Nodes\n\nI've generated nodes that have two containers at the top level under the cluster (as a quasi replacement for rack) except they are sharing the same nodes.\nHere is how to run.\n\n```bash\n./bin/flex-container\n```\n\nHere is what works (and what doesn't).\nAsking for one container with two nodes works:\n\n```bash\n ./bin/flex-container ./examples/jobspec-1.yaml \n```\n```console\nThis is the flex kubernetes prototype\n[./examples/jobspec-1.yaml]\n Match policy: first\n Load format: JSON Graph Format (JGF)\nCreated flex resource graph \u0026{%!s(*fluxcli.ReapiCtx=\u0026{{{}}})}\n\n✨️ Init context complete!\n\u0026{0xc0000140c0 first 0xc00010e0e0 1 map[] map[0:0xc000108210] map[]}\n  💻️  Request: ./examples/jobspec-1.yaml\n        Match: {\"graph\": {\"nodes\": [{\"id\": \"2\", \"metadata\": {\"type\": \"node\", \"basename\": \"node\", \"name\": \"node0\", \"id\": 0, \"uniq_id\": 2, \"rank\": -1, \"exclusive\": true, \"unit\": \"\", \"size\": 1, \"paths\": {\"containment\": \"/tiny0/container0/node0\"}}}, {\"id\": \"3\", \"metadata\": {\"type\": \"node\", \"basename\": \"node\", \"name\": \"node1\", \"id\": 1, \"uniq_id\": 3, \"rank\": -1, \"exclusive\": true, \"unit\": \"\", \"size\": 1, \"paths\": {\"containment\": \"/tiny0/container0/node1\"}}}, {\"id\": \"1\", \"metadata\": {\"type\": \"container\", \"basename\": \"container\", \"name\": \"container0\", \"id\": 0, \"uniq_id\": 1, \"rank\": -1, \"exclusive\": true, \"unit\": \"\", \"size\": 1, \"paths\": {\"containment\": \"/tiny0/container0\"}}}, {\"id\": \"0\", \"metadata\": {\"type\": \"cluster\", \"basename\": \"tiny\", \"name\": \"tiny0\", \"id\": 0, \"uniq_id\": 0, \"rank\": -1, \"exclusive\": false, \"unit\": \"\", \"size\": 1, \"paths\": {\"containment\": \"/tiny0\"}}}], \"edges\": [{\"source\": \"1\", \"target\": \"2\", \"metadata\": {\"name\": {\"containment\": \"contains\"}}}, {\"source\": \"1\", \"target\": \"3\", \"metadata\": {\"name\": {\"containment\": \"contains\"}}}, {\"source\": \"0\", \"target\": \"1\", \"metadata\": {\"name\": {\"containment\": \"contains\"}}}]}}\n\n        Number: 1\n```\n\nOr just two containers:\n\n```bash\n ./bin/flex-container ./examples/jobspec-2.yaml \n```\n\nBut not any other cases. I think the issue is the containment path can only hold one - need to talk about this with someone that knows fluxion well.\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\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconverged-computing%2Fflex-container","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconverged-computing%2Fflex-container","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconverged-computing%2Fflex-container/lists"}