vantage-cli 0.1.8__tar.gz → 0.1.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/PKG-INFO +12 -23
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/README.md +11 -22
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/pyproject.toml +1 -1
- vantage_cli-0.1.9/scripts/README.md +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/uv.lock +4 -4
- vantage_cli-0.1.9/vantage_cli/apps/__init__.py +16 -0
- vantage_cli-0.1.9/vantage_cli/apps/common.py +319 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/apps/slurm_juju_localhost/app.py +88 -27
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/apps/slurm_juju_localhost/bundle_yaml.py +4 -0
- vantage_cli-0.1.9/vantage_cli/apps/slurm_microk8s_localhost/README.md +65 -0
- vantage_cli-0.1.9/vantage_cli/apps/slurm_microk8s_localhost/app.py +469 -0
- vantage_cli-0.1.9/vantage_cli/apps/slurm_microk8s_localhost/constants.py +1 -0
- vantage_cli-0.1.9/vantage_cli/apps/slurm_microk8s_localhost/utils.py +286 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/apps/slurm_multipass_localhost/app.py +95 -10
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/__init__.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/apps.py +3 -1
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/clouds.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/clusters.py +2 -0
- vantage_cli-0.1.9/vantage_cli/commands/alias/deployments.py +25 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/federations.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/networks.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/notebooks.py +18 -2
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/profiles.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/teams.py +2 -0
- vantage_cli-0.1.9/vantage_cli/commands/app/__init__.py +27 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/app/list.py +3 -1
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cloud/__init__.py +6 -6
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cloud/add.py +3 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cloud/delete.py +3 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cloud/get.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cloud/list.py +3 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cloud/update.py +3 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/create.py +55 -8
- vantage_cli-0.1.9/vantage_cli/commands/cluster/delete.py +241 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/federation/create.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/federation/delete.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/federation/get.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/federation/list.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/federation/update.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/get.py +2 -1
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/list.py +2 -1
- {vantage_cli-0.1.8/vantage_cli/commands/app → vantage_cli-0.1.9/vantage_cli/commands/deployment}/__init__.py +13 -14
- vantage_cli-0.1.9/vantage_cli/commands/deployment/create.py +143 -0
- vantage_cli-0.1.9/vantage_cli/commands/deployment/delete.py +114 -0
- vantage_cli-0.1.9/vantage_cli/commands/deployment/list.py +105 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/example.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/federation/create.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/federation/delete.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/federation/get.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/federation/list.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/federation/update.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/script/create.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/script/delete.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/script/get.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/script/list.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/script/update.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/submission/create.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/submission/delete.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/submission/get.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/submission/list.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/submission/update.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/template/create.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/template/delete.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/template/get.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/template/list.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/template/update.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/configuration/create.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/configuration/delete.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/configuration/get.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/configuration/list.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/configuration/update.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/deployment/create.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/deployment/delete.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/deployment/get.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/deployment/list.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/deployment/update.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/product/create.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/product/delete.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/product/get.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/product/list.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/product/update.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/server/create.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/server/delete.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/server/get.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/server/list.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/server/update.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/attach.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/create.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/delete.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/detach.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/get.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/list.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/update.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/notebook/create.py +2 -1
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/notebook/delete.py +23 -25
- vantage_cli-0.1.9/vantage_cli/commands/notebook/get.py +117 -0
- vantage_cli-0.1.9/vantage_cli/commands/notebook/list.py +113 -0
- vantage_cli-0.1.9/vantage_cli/commands/notebook/render.py +154 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/notebook/update.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/profile/crud.py +6 -1
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/attach.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/create.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/delete.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/detach.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/get.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/list.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/update.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/support_ticket/create.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/support_ticket/delete.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/support_ticket/get.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/support_ticket/list.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/support_ticket/update.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/add_member.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/create.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/delete.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/get.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/list.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/list_members.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/remove_member.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/set_role.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/update.py +2 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/config.py +3 -3
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/exceptions.py +43 -37
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/main.py +20 -4
- vantage_cli-0.1.8/scripts/README.md +0 -166
- vantage_cli-0.1.8/vantage_cli/apps/__init__.py +0 -28
- vantage_cli-0.1.8/vantage_cli/apps/common.py +0 -87
- vantage_cli-0.1.8/vantage_cli/apps/slurm_microk8s_localhost/README.md +0 -47
- vantage_cli-0.1.8/vantage_cli/apps/slurm_microk8s_localhost/app.py +0 -310
- vantage_cli-0.1.8/vantage_cli/commands/app/deploy.py +0 -81
- vantage_cli-0.1.8/vantage_cli/commands/cluster/delete.py +0 -111
- vantage_cli-0.1.8/vantage_cli/commands/notebook/get.py +0 -123
- vantage_cli-0.1.8/vantage_cli/commands/notebook/list.py +0 -177
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/.commitlintrc.yml +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/.github/workflows/ci.yml +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/.github/workflows/pages.yml +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/.github/workflows/publish.yml +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/.gitignore +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/LICENSE +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/comprehensive_header_check.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/scripts/generate_complete_docs.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/scripts/update_docs_version.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/scripts/update_docs_version.sh +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/apps/slurm_juju_localhost/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/apps/slurm_microk8s_localhost/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/apps/slurm_multipass_localhost/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/apps/templates.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/auth.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/cache.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/client.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/command_base.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/command_decorators.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/command_utils.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cloud/render.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/federation/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/render.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/schema.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/utils.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/config/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/config/clear.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/federation/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/script/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/submission/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/template/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/configuration/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/deployment/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/product/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/server/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/notebook/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/profile/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/profile/render.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/support_ticket/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/__init__.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/constants.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/decorators.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/format.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/gql_client.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/render.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/schemas.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/simple_commands.py +0 -0
- {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/time_loop.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vantage-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.9
|
|
4
4
|
Summary: The Vantage Compute CLI.
|
|
5
5
|
Author-email: jamesbeedy <james@vantagecompute.ai>
|
|
6
6
|
License: GPL-3.0
|
|
@@ -41,7 +41,7 @@ Description-Content-Type: text/markdown
|
|
|
41
41
|
# Vantage CLI
|
|
42
42
|
A modern Python CLI tool to interface to Vantage Compute.
|
|
43
43
|
|
|
44
|
-
[](LICENSE)
|
|
45
45
|
[](https://python.org)
|
|
46
46
|
[](https://pypi.org/project/vantage-cli/)
|
|
47
47
|
|
|
@@ -90,7 +90,7 @@ uv run vantage login
|
|
|
90
90
|
```bash
|
|
91
91
|
vantage cluster create my-slurm-multipass-cluster \
|
|
92
92
|
--cloud localhost \
|
|
93
|
-
--
|
|
93
|
+
--app slurm-multipass-localhost
|
|
94
94
|
```
|
|
95
95
|
|
|
96
96
|
#### Create a Slurm Cluster on LXD
|
|
@@ -98,7 +98,7 @@ vantage cluster create my-slurm-multipass-cluster \
|
|
|
98
98
|
```bash
|
|
99
99
|
vantage cluster create my-slurm-lxd-cluster \
|
|
100
100
|
--cloud localhost \
|
|
101
|
-
--
|
|
101
|
+
--app slurm-juju-localhost
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
#### Create a Slurm Cluster on MicroK8S
|
|
@@ -106,7 +106,7 @@ vantage cluster create my-slurm-lxd-cluster \
|
|
|
106
106
|
```bash
|
|
107
107
|
vantage cluster create my-slurm-microk8s-cluster \
|
|
108
108
|
--cloud localhost \
|
|
109
|
-
--
|
|
109
|
+
--app slurm-microk8s-locahost
|
|
110
110
|
```
|
|
111
111
|
|
|
112
112
|
## 📚 Documentation
|
|
@@ -120,30 +120,19 @@ Visit our comprehensive documentation site:
|
|
|
120
120
|
- **[Troubleshooting](https://vantagecompute.github.io/vantage-cli/troubleshooting/)**: Common issues and solutions
|
|
121
121
|
|
|
122
122
|
|
|
123
|
-
## 📄 License
|
|
124
|
-
|
|
125
|
-
This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.
|
|
126
|
-
|
|
127
|
-
Copyright 2025 Vantage Compute Corporation
|
|
128
|
-
|
|
129
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
130
|
-
you may not use this file except in compliance with the License.
|
|
131
|
-
You may obtain a copy of the License at
|
|
132
|
-
|
|
133
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
134
|
-
|
|
135
|
-
Unless required by applicable law or agreed to in writing, software
|
|
136
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
137
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
138
|
-
See the License for the specific language governing permissions and
|
|
139
|
-
limitations under the License.
|
|
140
|
-
|
|
141
123
|
## 🆘 Support
|
|
142
124
|
|
|
143
125
|
- **Issues**: [GitHub Issues](https://github.com/vantagecompute/vantage-cli/issues)
|
|
144
126
|
- **Discussions**: [GitHub Discussions](https://github.com/vantagecompute/vantage-cli/discussions)
|
|
145
127
|
- **Email**: [james@vantagecompute.ai](mailto:james@vantagecompute.ai)
|
|
146
128
|
|
|
129
|
+
|
|
130
|
+
## 📄 License
|
|
131
|
+
|
|
132
|
+
Copyright © 2025 Vantage Compute Corporation
|
|
133
|
+
|
|
134
|
+
This project is licensed under the GPLv3 License - see the [LICENSE](LICENSE) file for details.
|
|
135
|
+
|
|
147
136
|
---
|
|
148
137
|
|
|
149
138
|
**Made with ❤️ by [Vantage Compute](https://vantagecompute.ai)**
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
# Vantage CLI
|
|
9
9
|
A modern Python CLI tool to interface to Vantage Compute.
|
|
10
10
|
|
|
11
|
-
[](LICENSE)
|
|
12
12
|
[](https://python.org)
|
|
13
13
|
[](https://pypi.org/project/vantage-cli/)
|
|
14
14
|
|
|
@@ -57,7 +57,7 @@ uv run vantage login
|
|
|
57
57
|
```bash
|
|
58
58
|
vantage cluster create my-slurm-multipass-cluster \
|
|
59
59
|
--cloud localhost \
|
|
60
|
-
--
|
|
60
|
+
--app slurm-multipass-localhost
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
#### Create a Slurm Cluster on LXD
|
|
@@ -65,7 +65,7 @@ vantage cluster create my-slurm-multipass-cluster \
|
|
|
65
65
|
```bash
|
|
66
66
|
vantage cluster create my-slurm-lxd-cluster \
|
|
67
67
|
--cloud localhost \
|
|
68
|
-
--
|
|
68
|
+
--app slurm-juju-localhost
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
#### Create a Slurm Cluster on MicroK8S
|
|
@@ -73,7 +73,7 @@ vantage cluster create my-slurm-lxd-cluster \
|
|
|
73
73
|
```bash
|
|
74
74
|
vantage cluster create my-slurm-microk8s-cluster \
|
|
75
75
|
--cloud localhost \
|
|
76
|
-
--
|
|
76
|
+
--app slurm-microk8s-locahost
|
|
77
77
|
```
|
|
78
78
|
|
|
79
79
|
## 📚 Documentation
|
|
@@ -87,30 +87,19 @@ Visit our comprehensive documentation site:
|
|
|
87
87
|
- **[Troubleshooting](https://vantagecompute.github.io/vantage-cli/troubleshooting/)**: Common issues and solutions
|
|
88
88
|
|
|
89
89
|
|
|
90
|
-
## 📄 License
|
|
91
|
-
|
|
92
|
-
This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.
|
|
93
|
-
|
|
94
|
-
Copyright 2025 Vantage Compute Corporation
|
|
95
|
-
|
|
96
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
97
|
-
you may not use this file except in compliance with the License.
|
|
98
|
-
You may obtain a copy of the License at
|
|
99
|
-
|
|
100
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
101
|
-
|
|
102
|
-
Unless required by applicable law or agreed to in writing, software
|
|
103
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
104
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
105
|
-
See the License for the specific language governing permissions and
|
|
106
|
-
limitations under the License.
|
|
107
|
-
|
|
108
90
|
## 🆘 Support
|
|
109
91
|
|
|
110
92
|
- **Issues**: [GitHub Issues](https://github.com/vantagecompute/vantage-cli/issues)
|
|
111
93
|
- **Discussions**: [GitHub Discussions](https://github.com/vantagecompute/vantage-cli/discussions)
|
|
112
94
|
- **Email**: [james@vantagecompute.ai](mailto:james@vantagecompute.ai)
|
|
113
95
|
|
|
96
|
+
|
|
97
|
+
## 📄 License
|
|
98
|
+
|
|
99
|
+
Copyright © 2025 Vantage Compute Corporation
|
|
100
|
+
|
|
101
|
+
This project is licensed under the GPLv3 License - see the [LICENSE](LICENSE) file for details.
|
|
102
|
+
|
|
114
103
|
---
|
|
115
104
|
|
|
116
105
|
**Made with ❤️ by [Vantage Compute](https://vantagecompute.ai)**
|
|
File without changes
|
|
@@ -1173,7 +1173,7 @@ wheels = [
|
|
|
1173
1173
|
|
|
1174
1174
|
[[package]]
|
|
1175
1175
|
name = "pydantic"
|
|
1176
|
-
version = "2.11.
|
|
1176
|
+
version = "2.11.9"
|
|
1177
1177
|
source = { registry = "https://pypi.org/simple" }
|
|
1178
1178
|
dependencies = [
|
|
1179
1179
|
{ name = "annotated-types" },
|
|
@@ -1181,9 +1181,9 @@ dependencies = [
|
|
|
1181
1181
|
{ name = "typing-extensions" },
|
|
1182
1182
|
{ name = "typing-inspection" },
|
|
1183
1183
|
]
|
|
1184
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1184
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ff/5d/09a551ba512d7ca404d785072700d3f6727a02f6f3c24ecfd081c7cf0aa8/pydantic-2.11.9.tar.gz", hash = "sha256:6b8ffda597a14812a7975c90b82a8a2e777d9257aba3453f973acd3c032a18e2", size = 788495, upload-time = "2025-09-13T11:26:39.325Z" }
|
|
1185
1185
|
wheels = [
|
|
1186
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1186
|
+
{ url = "https://files.pythonhosted.org/packages/3e/d3/108f2006987c58e76691d5ae5d200dd3e0f532cb4e5fa3560751c3a1feba/pydantic-2.11.9-py3-none-any.whl", hash = "sha256:c42dd626f5cfc1c6950ce6205ea58c93efa406da65f479dcb4029d5934857da2", size = 444855, upload-time = "2025-09-13T11:26:36.909Z" },
|
|
1187
1187
|
]
|
|
1188
1188
|
|
|
1189
1189
|
[[package]]
|
|
@@ -1747,7 +1747,7 @@ wheels = [
|
|
|
1747
1747
|
|
|
1748
1748
|
[[package]]
|
|
1749
1749
|
name = "vantage-cli"
|
|
1750
|
-
version = "0.1.
|
|
1750
|
+
version = "0.1.9"
|
|
1751
1751
|
source = { editable = "." }
|
|
1752
1752
|
dependencies = [
|
|
1753
1753
|
{ name = "aiohttp" },
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Copyright (C) 2025 Vantage Compute Corporation
|
|
2
|
+
# This program is free software: you can redistribute it and/or modify it under
|
|
3
|
+
# the terms of the GNU General Public License as published by the Free Software
|
|
4
|
+
# Foundation, version 3.
|
|
5
|
+
#
|
|
6
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
7
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
8
|
+
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
9
|
+
#
|
|
10
|
+
# You should have received a copy of the GNU General Public License along with
|
|
11
|
+
# this program. If not, see <https://www.gnu.org/licenses/>.
|
|
12
|
+
"""Applications management for Vantage CLI.
|
|
13
|
+
|
|
14
|
+
This package contains individual application implementations for deployment
|
|
15
|
+
on various platforms (Juju, Multipass, MicroK8s, etc.).
|
|
16
|
+
"""
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
# Copyright (C) 2025 Vantage Compute Corporation
|
|
2
|
+
# This program is free software: you can redistribute it and/or modify it under
|
|
3
|
+
# the terms of the GNU General Public License as published by the Free Software
|
|
4
|
+
# Foundation, version 3.
|
|
5
|
+
#
|
|
6
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
7
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
8
|
+
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
9
|
+
#
|
|
10
|
+
# You should have received a copy of the GNU General Public License along with
|
|
11
|
+
# this program. If not, see <https://www.gnu.org/licenses/>.
|
|
12
|
+
"""Common validation utilities for deployment apps."""
|
|
13
|
+
|
|
14
|
+
from datetime import datetime
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
from typing import Any, Dict, List, Optional
|
|
17
|
+
|
|
18
|
+
import typer
|
|
19
|
+
import yaml
|
|
20
|
+
from rich.console import Console
|
|
21
|
+
|
|
22
|
+
from vantage_cli.constants import (
|
|
23
|
+
ERROR_NO_CLIENT_ID,
|
|
24
|
+
ERROR_NO_CLIENT_SECRET,
|
|
25
|
+
ERROR_NO_CLUSTER_DATA,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def validate_cluster_data(
|
|
30
|
+
cluster_data: Optional[Dict[str, Any]], console: Console
|
|
31
|
+
) -> Dict[str, Any]:
|
|
32
|
+
"""Validate that cluster data exists and contains required fields.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
cluster_data: Optional cluster configuration dictionary
|
|
36
|
+
console: Rich console for error output
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
Validated cluster data dictionary
|
|
40
|
+
|
|
41
|
+
Raises:
|
|
42
|
+
typer.Exit: If validation fails
|
|
43
|
+
"""
|
|
44
|
+
if not cluster_data:
|
|
45
|
+
console.print(ERROR_NO_CLUSTER_DATA)
|
|
46
|
+
raise typer.Exit(code=1)
|
|
47
|
+
return cluster_data
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def validate_client_credentials(
|
|
51
|
+
cluster_data: Dict[str, Any], console: Console
|
|
52
|
+
) -> tuple[str, Optional[str]]:
|
|
53
|
+
"""Validate and extract client credentials from cluster data.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
cluster_data: Cluster configuration dictionary
|
|
57
|
+
console: Rich console for error output
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
Tuple of (client_id, client_secret) where client_secret may be None
|
|
61
|
+
|
|
62
|
+
Raises:
|
|
63
|
+
typer.Exit: If client_id is missing
|
|
64
|
+
"""
|
|
65
|
+
client_id = cluster_data.get("clientId", None)
|
|
66
|
+
if not client_id:
|
|
67
|
+
console.print(ERROR_NO_CLIENT_ID)
|
|
68
|
+
raise typer.Exit(code=1)
|
|
69
|
+
|
|
70
|
+
client_secret = cluster_data.get("clientSecret", None)
|
|
71
|
+
return client_id, client_secret
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def require_client_secret(client_secret: Optional[str], console: Console) -> str:
|
|
75
|
+
"""Validate that client secret exists.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
client_secret: Optional client secret string
|
|
79
|
+
console: Rich console for error output
|
|
80
|
+
|
|
81
|
+
Returns:
|
|
82
|
+
Validated client secret string
|
|
83
|
+
|
|
84
|
+
Raises:
|
|
85
|
+
typer.Exit: If client secret is missing
|
|
86
|
+
"""
|
|
87
|
+
if not client_secret:
|
|
88
|
+
console.print(ERROR_NO_CLIENT_SECRET)
|
|
89
|
+
raise typer.Exit(code=1)
|
|
90
|
+
return client_secret
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def generate_dev_cluster_data(cluster_name: str) -> Dict[str, Any]:
|
|
94
|
+
"""Generate dummy cluster data for development/testing purposes.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
cluster_name: Name of the cluster for development
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
Dictionary containing dummy cluster data with all required fields
|
|
101
|
+
"""
|
|
102
|
+
return {
|
|
103
|
+
"name": cluster_name,
|
|
104
|
+
"clientId": "dev-client-12345-abcde-fghij-klmno",
|
|
105
|
+
"clientSecret": "dev-secret-67890-pqrst-uvwxy-zabcd",
|
|
106
|
+
"creationParameters": {"jupyterhub_token": "dev-jupyter-token-98765"},
|
|
107
|
+
# Additional dummy metadata
|
|
108
|
+
"id": f"dev-cluster-{cluster_name}",
|
|
109
|
+
"status": "dev",
|
|
110
|
+
"region": "localhost",
|
|
111
|
+
"provider": "dev",
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def generate_default_deployment_name(app_name: str, cluster_name: str) -> str:
|
|
116
|
+
"""Generate a default deployment name with timestamp.
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
app_name: Name of the app being deployed
|
|
120
|
+
cluster_name: Name of the cluster
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
Default deployment name in format: <app-name>-<cluster-name>-<timestamp-string>
|
|
124
|
+
"""
|
|
125
|
+
timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
|
|
126
|
+
return f"{app_name}-{cluster_name}-{timestamp}"
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def get_deployments_file_path() -> Path:
|
|
130
|
+
"""Get the path to the deployments tracking file.
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
Path to ~/.vantage-cli/deployments.yaml
|
|
134
|
+
"""
|
|
135
|
+
vantage_dir = Path.home() / ".vantage-cli"
|
|
136
|
+
vantage_dir.mkdir(exist_ok=True)
|
|
137
|
+
return vantage_dir / "deployments.yaml"
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def load_deployments() -> Dict[str, Any]:
|
|
141
|
+
"""Load deployment tracking data from ~/.vantage-cli/deployments.yaml.
|
|
142
|
+
|
|
143
|
+
Returns:
|
|
144
|
+
Dictionary containing deployments data with 'deployments' key
|
|
145
|
+
"""
|
|
146
|
+
deployments_file = get_deployments_file_path()
|
|
147
|
+
if not deployments_file.exists():
|
|
148
|
+
return {"deployments": {}}
|
|
149
|
+
|
|
150
|
+
try:
|
|
151
|
+
with open(deployments_file, "r") as f:
|
|
152
|
+
data = yaml.safe_load(f) or {}
|
|
153
|
+
# Ensure the structure exists
|
|
154
|
+
if "deployments" not in data:
|
|
155
|
+
data["deployments"] = {}
|
|
156
|
+
return data
|
|
157
|
+
except Exception as e:
|
|
158
|
+
console = Console()
|
|
159
|
+
console.print(f"[yellow]Warning: Could not load deployments file: {e}[/yellow]")
|
|
160
|
+
return {"deployments": {}}
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def save_deployments(deployments_data: Dict[str, Any]) -> None:
|
|
164
|
+
"""Save deployment tracking data to ~/.vantage-cli/deployments.yaml.
|
|
165
|
+
|
|
166
|
+
Args:
|
|
167
|
+
deployments_data: Dictionary containing deployments data
|
|
168
|
+
"""
|
|
169
|
+
deployments_file = get_deployments_file_path()
|
|
170
|
+
try:
|
|
171
|
+
with open(deployments_file, "w") as f:
|
|
172
|
+
yaml.dump(deployments_data, f, default_flow_style=False, indent=2)
|
|
173
|
+
except Exception as e:
|
|
174
|
+
console = Console()
|
|
175
|
+
console.print(f"[red]Error: Could not save deployments file: {e}[/red]")
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def track_deployment(
|
|
179
|
+
deployment_id: str,
|
|
180
|
+
app_name: str,
|
|
181
|
+
cluster_name: str,
|
|
182
|
+
cluster_data: Dict[str, Any],
|
|
183
|
+
deployment_name: Optional[str] = None,
|
|
184
|
+
additional_metadata: Optional[Dict[str, Any]] = None,
|
|
185
|
+
) -> None:
|
|
186
|
+
"""Track a new deployment in the deployments file.
|
|
187
|
+
|
|
188
|
+
Args:
|
|
189
|
+
deployment_id: Unique identifier for the deployment
|
|
190
|
+
app_name: Name of the app being deployed (e.g., 'slurm-microk8s-localhost')
|
|
191
|
+
cluster_name: Name of the cluster
|
|
192
|
+
cluster_data: Cluster configuration data
|
|
193
|
+
deployment_name: Human-readable name for the deployment (optional)
|
|
194
|
+
additional_metadata: Additional app-specific metadata to store
|
|
195
|
+
"""
|
|
196
|
+
deployments_data = load_deployments()
|
|
197
|
+
|
|
198
|
+
deployment_record = {
|
|
199
|
+
"deployment_name": deployment_name or f"{app_name}-{cluster_name}",
|
|
200
|
+
"app_name": app_name,
|
|
201
|
+
"cluster_name": cluster_name,
|
|
202
|
+
"cluster_id": cluster_data.get("id", "unknown"),
|
|
203
|
+
"client_id": cluster_data.get("clientId", "unknown"),
|
|
204
|
+
"created_at": datetime.now().isoformat(),
|
|
205
|
+
"status": "active",
|
|
206
|
+
"cluster_data": cluster_data, # Store full cluster_data for cleanup
|
|
207
|
+
"metadata": additional_metadata or {},
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
deployments_data["deployments"][deployment_id] = deployment_record
|
|
211
|
+
save_deployments(deployments_data)
|
|
212
|
+
|
|
213
|
+
console = Console()
|
|
214
|
+
console.print(
|
|
215
|
+
f"[green]✓ Deployment '{deployment_id}' tracked in ~/.vantage-cli/deployments.yaml[/green]"
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def get_deployment(deployment_id: str) -> Optional[Dict[str, Any]]:
|
|
220
|
+
"""Get deployment information by ID.
|
|
221
|
+
|
|
222
|
+
Args:
|
|
223
|
+
deployment_id: Unique identifier for the deployment
|
|
224
|
+
|
|
225
|
+
Returns:
|
|
226
|
+
Deployment record dictionary or None if not found
|
|
227
|
+
"""
|
|
228
|
+
deployments_data = load_deployments()
|
|
229
|
+
return deployments_data["deployments"].get(deployment_id)
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
def get_deployments() -> List[Dict[str, Any]]:
|
|
233
|
+
"""Get all deployments with their IDs included.
|
|
234
|
+
|
|
235
|
+
Returns:
|
|
236
|
+
List of deployment records with deployment_id field added
|
|
237
|
+
"""
|
|
238
|
+
deployments_data = load_deployments()
|
|
239
|
+
deployments_list = []
|
|
240
|
+
|
|
241
|
+
for deployment_id, deployment_data in deployments_data["deployments"].items():
|
|
242
|
+
# Add the deployment_id to the deployment data
|
|
243
|
+
deployment_record = deployment_data.copy()
|
|
244
|
+
deployment_record["deployment_id"] = deployment_id
|
|
245
|
+
# Add cluster_data for cleanup functions (stored as metadata in old format)
|
|
246
|
+
if "cluster_data" not in deployment_record and "metadata" in deployment_record:
|
|
247
|
+
deployment_record["cluster_data"] = deployment_record["metadata"]
|
|
248
|
+
deployments_list.append(deployment_record)
|
|
249
|
+
|
|
250
|
+
return deployments_list
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
def list_deployments_by_app(app_name: str) -> Dict[str, Dict[str, Any]]:
|
|
254
|
+
"""List all deployments for a specific app.
|
|
255
|
+
|
|
256
|
+
Args:
|
|
257
|
+
app_name: Name of the app to filter by
|
|
258
|
+
|
|
259
|
+
Returns:
|
|
260
|
+
Dictionary of deployment_id -> deployment_record
|
|
261
|
+
"""
|
|
262
|
+
deployments_data = load_deployments()
|
|
263
|
+
return {
|
|
264
|
+
dep_id: dep_data
|
|
265
|
+
for dep_id, dep_data in deployments_data["deployments"].items()
|
|
266
|
+
if dep_data.get("app_name") == app_name and dep_data.get("status") == "active"
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
def list_deployments_by_cluster(cluster_name: str) -> Dict[str, Dict[str, Any]]:
|
|
271
|
+
"""List all active deployments for a specific cluster.
|
|
272
|
+
|
|
273
|
+
Args:
|
|
274
|
+
cluster_name: Name of the cluster to filter by
|
|
275
|
+
|
|
276
|
+
Returns:
|
|
277
|
+
Dictionary of deployment_id -> deployment_record for active deployments
|
|
278
|
+
"""
|
|
279
|
+
deployments_data = load_deployments()
|
|
280
|
+
return {
|
|
281
|
+
dep_id: dep_data
|
|
282
|
+
for dep_id, dep_data in deployments_data["deployments"].items()
|
|
283
|
+
if dep_data.get("cluster_name") == cluster_name and dep_data.get("status") == "active"
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def mark_deployment_deleted(deployment_id: str) -> bool:
|
|
288
|
+
"""Mark a deployment as deleted in the tracking file.
|
|
289
|
+
|
|
290
|
+
Args:
|
|
291
|
+
deployment_id: Unique identifier for the deployment
|
|
292
|
+
|
|
293
|
+
Returns:
|
|
294
|
+
True if deployment was found and marked as deleted, False otherwise
|
|
295
|
+
"""
|
|
296
|
+
deployments_data = load_deployments()
|
|
297
|
+
if deployment_id in deployments_data["deployments"]:
|
|
298
|
+
deployments_data["deployments"][deployment_id]["status"] = "deleted"
|
|
299
|
+
deployments_data["deployments"][deployment_id]["deleted_at"] = datetime.now().isoformat()
|
|
300
|
+
save_deployments(deployments_data)
|
|
301
|
+
return True
|
|
302
|
+
return False
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
def remove_deployment(deployment_id: str) -> bool:
|
|
306
|
+
"""Remove a deployment entry completely from the tracking file.
|
|
307
|
+
|
|
308
|
+
Args:
|
|
309
|
+
deployment_id: Unique identifier for the deployment
|
|
310
|
+
|
|
311
|
+
Returns:
|
|
312
|
+
True if deployment was found and removed, False otherwise
|
|
313
|
+
"""
|
|
314
|
+
deployments_data = load_deployments()
|
|
315
|
+
if deployment_id in deployments_data["deployments"]:
|
|
316
|
+
del deployments_data["deployments"][deployment_id]
|
|
317
|
+
save_deployments(deployments_data)
|
|
318
|
+
return True
|
|
319
|
+
return False
|