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.
Files changed (188) hide show
  1. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/PKG-INFO +12 -23
  2. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/README.md +11 -22
  3. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/pyproject.toml +1 -1
  4. vantage_cli-0.1.9/scripts/README.md +0 -0
  5. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/uv.lock +4 -4
  6. vantage_cli-0.1.9/vantage_cli/apps/__init__.py +16 -0
  7. vantage_cli-0.1.9/vantage_cli/apps/common.py +319 -0
  8. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/apps/slurm_juju_localhost/app.py +88 -27
  9. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/apps/slurm_juju_localhost/bundle_yaml.py +4 -0
  10. vantage_cli-0.1.9/vantage_cli/apps/slurm_microk8s_localhost/README.md +65 -0
  11. vantage_cli-0.1.9/vantage_cli/apps/slurm_microk8s_localhost/app.py +469 -0
  12. vantage_cli-0.1.9/vantage_cli/apps/slurm_microk8s_localhost/constants.py +1 -0
  13. vantage_cli-0.1.9/vantage_cli/apps/slurm_microk8s_localhost/utils.py +286 -0
  14. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/apps/slurm_multipass_localhost/app.py +95 -10
  15. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/__init__.py +2 -0
  16. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/apps.py +3 -1
  17. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/clouds.py +2 -0
  18. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/clusters.py +2 -0
  19. vantage_cli-0.1.9/vantage_cli/commands/alias/deployments.py +25 -0
  20. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/federations.py +2 -0
  21. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/networks.py +2 -0
  22. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/notebooks.py +18 -2
  23. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/profiles.py +2 -0
  24. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/alias/teams.py +2 -0
  25. vantage_cli-0.1.9/vantage_cli/commands/app/__init__.py +27 -0
  26. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/app/list.py +3 -1
  27. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cloud/__init__.py +6 -6
  28. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cloud/add.py +3 -0
  29. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cloud/delete.py +3 -0
  30. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cloud/get.py +2 -0
  31. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cloud/list.py +3 -0
  32. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cloud/update.py +3 -0
  33. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/create.py +55 -8
  34. vantage_cli-0.1.9/vantage_cli/commands/cluster/delete.py +241 -0
  35. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/federation/create.py +2 -0
  36. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/federation/delete.py +2 -0
  37. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/federation/get.py +2 -0
  38. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/federation/list.py +2 -0
  39. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/federation/update.py +2 -0
  40. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/get.py +2 -1
  41. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/list.py +2 -1
  42. {vantage_cli-0.1.8/vantage_cli/commands/app → vantage_cli-0.1.9/vantage_cli/commands/deployment}/__init__.py +13 -14
  43. vantage_cli-0.1.9/vantage_cli/commands/deployment/create.py +143 -0
  44. vantage_cli-0.1.9/vantage_cli/commands/deployment/delete.py +114 -0
  45. vantage_cli-0.1.9/vantage_cli/commands/deployment/list.py +105 -0
  46. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/example.py +2 -0
  47. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/federation/create.py +2 -0
  48. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/federation/delete.py +2 -0
  49. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/federation/get.py +2 -0
  50. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/federation/list.py +2 -0
  51. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/federation/update.py +2 -0
  52. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/script/create.py +2 -0
  53. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/script/delete.py +2 -0
  54. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/script/get.py +2 -0
  55. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/script/list.py +2 -0
  56. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/script/update.py +2 -0
  57. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/submission/create.py +2 -0
  58. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/submission/delete.py +2 -0
  59. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/submission/get.py +2 -0
  60. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/submission/list.py +2 -0
  61. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/submission/update.py +2 -0
  62. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/template/create.py +2 -0
  63. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/template/delete.py +2 -0
  64. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/template/get.py +2 -0
  65. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/template/list.py +2 -0
  66. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/template/update.py +2 -0
  67. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/configuration/create.py +2 -0
  68. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/configuration/delete.py +2 -0
  69. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/configuration/get.py +2 -0
  70. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/configuration/list.py +2 -0
  71. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/configuration/update.py +2 -0
  72. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/deployment/create.py +2 -0
  73. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/deployment/delete.py +2 -0
  74. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/deployment/get.py +2 -0
  75. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/deployment/list.py +2 -0
  76. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/deployment/update.py +2 -0
  77. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/product/create.py +2 -0
  78. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/product/delete.py +2 -0
  79. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/product/get.py +2 -0
  80. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/product/list.py +2 -0
  81. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/product/update.py +2 -0
  82. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/server/create.py +2 -0
  83. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/server/delete.py +2 -0
  84. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/server/get.py +2 -0
  85. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/server/list.py +2 -0
  86. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/server/update.py +2 -0
  87. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/attach.py +2 -0
  88. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/create.py +2 -0
  89. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/delete.py +2 -0
  90. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/detach.py +2 -0
  91. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/get.py +2 -0
  92. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/list.py +2 -0
  93. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/update.py +2 -0
  94. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/notebook/create.py +2 -1
  95. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/notebook/delete.py +23 -25
  96. vantage_cli-0.1.9/vantage_cli/commands/notebook/get.py +117 -0
  97. vantage_cli-0.1.9/vantage_cli/commands/notebook/list.py +113 -0
  98. vantage_cli-0.1.9/vantage_cli/commands/notebook/render.py +154 -0
  99. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/notebook/update.py +2 -0
  100. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/profile/crud.py +6 -1
  101. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/attach.py +2 -0
  102. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/create.py +2 -0
  103. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/delete.py +2 -0
  104. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/detach.py +2 -0
  105. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/get.py +2 -0
  106. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/list.py +2 -0
  107. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/update.py +2 -0
  108. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/support_ticket/create.py +2 -0
  109. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/support_ticket/delete.py +2 -0
  110. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/support_ticket/get.py +2 -0
  111. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/support_ticket/list.py +2 -0
  112. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/support_ticket/update.py +2 -0
  113. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/add_member.py +2 -0
  114. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/create.py +2 -0
  115. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/delete.py +2 -0
  116. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/get.py +2 -0
  117. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/list.py +2 -0
  118. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/list_members.py +2 -0
  119. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/remove_member.py +2 -0
  120. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/set_role.py +2 -0
  121. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/update.py +2 -0
  122. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/config.py +3 -3
  123. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/exceptions.py +43 -37
  124. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/main.py +20 -4
  125. vantage_cli-0.1.8/scripts/README.md +0 -166
  126. vantage_cli-0.1.8/vantage_cli/apps/__init__.py +0 -28
  127. vantage_cli-0.1.8/vantage_cli/apps/common.py +0 -87
  128. vantage_cli-0.1.8/vantage_cli/apps/slurm_microk8s_localhost/README.md +0 -47
  129. vantage_cli-0.1.8/vantage_cli/apps/slurm_microk8s_localhost/app.py +0 -310
  130. vantage_cli-0.1.8/vantage_cli/commands/app/deploy.py +0 -81
  131. vantage_cli-0.1.8/vantage_cli/commands/cluster/delete.py +0 -111
  132. vantage_cli-0.1.8/vantage_cli/commands/notebook/get.py +0 -123
  133. vantage_cli-0.1.8/vantage_cli/commands/notebook/list.py +0 -177
  134. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/.commitlintrc.yml +0 -0
  135. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/.github/workflows/ci.yml +0 -0
  136. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/.github/workflows/pages.yml +0 -0
  137. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/.github/workflows/publish.yml +0 -0
  138. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/.gitignore +0 -0
  139. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/LICENSE +0 -0
  140. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/comprehensive_header_check.py +0 -0
  141. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/scripts/generate_complete_docs.py +0 -0
  142. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/scripts/update_docs_version.py +0 -0
  143. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/scripts/update_docs_version.sh +0 -0
  144. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/__init__.py +0 -0
  145. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/apps/slurm_juju_localhost/__init__.py +0 -0
  146. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/apps/slurm_microk8s_localhost/__init__.py +0 -0
  147. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/apps/slurm_multipass_localhost/__init__.py +0 -0
  148. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/apps/templates.py +0 -0
  149. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/auth.py +0 -0
  150. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/cache.py +0 -0
  151. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/client.py +0 -0
  152. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/command_base.py +0 -0
  153. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/command_decorators.py +0 -0
  154. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/command_utils.py +0 -0
  155. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/__init__.py +0 -0
  156. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cloud/render.py +0 -0
  157. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/__init__.py +0 -0
  158. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/federation/__init__.py +0 -0
  159. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/render.py +0 -0
  160. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/schema.py +0 -0
  161. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/cluster/utils.py +0 -0
  162. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/config/__init__.py +0 -0
  163. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/config/clear.py +0 -0
  164. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/federation/__init__.py +0 -0
  165. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/__init__.py +0 -0
  166. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/script/__init__.py +0 -0
  167. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/submission/__init__.py +0 -0
  168. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/job/template/__init__.py +0 -0
  169. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/__init__.py +0 -0
  170. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/configuration/__init__.py +0 -0
  171. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/deployment/__init__.py +0 -0
  172. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/product/__init__.py +0 -0
  173. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/license/server/__init__.py +0 -0
  174. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/network/__init__.py +0 -0
  175. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/notebook/__init__.py +0 -0
  176. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/profile/__init__.py +0 -0
  177. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/profile/render.py +0 -0
  178. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/storage/__init__.py +0 -0
  179. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/support_ticket/__init__.py +0 -0
  180. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/commands/team/__init__.py +0 -0
  181. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/constants.py +0 -0
  182. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/decorators.py +0 -0
  183. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/format.py +0 -0
  184. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/gql_client.py +0 -0
  185. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/render.py +0 -0
  186. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/schemas.py +0 -0
  187. {vantage_cli-0.1.8 → vantage_cli-0.1.9}/vantage_cli/simple_commands.py +0 -0
  188. {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.8
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](https://img.shields.io/badge/license-Apache%202.0-green.svg)](LICENSE)
44
+ [![License](https://img.shields.io/badge/license-GPLv3-green.svg)](LICENSE)
45
45
  [![Python](https://img.shields.io/badge/python-3.12+-blue.svg)](https://python.org)
46
46
  [![PyPI](https://img.shields.io/pypi/v/vantage-cli.svg)](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
- --deploy slurm-multipass-localhost
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
- --deploy slurm-juju-localhost
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
- --deploy slurm-microk8s-locahost
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 &copy; 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](https://img.shields.io/badge/license-Apache%202.0-green.svg)](LICENSE)
11
+ [![License](https://img.shields.io/badge/license-GPLv3-green.svg)](LICENSE)
12
12
  [![Python](https://img.shields.io/badge/python-3.12+-blue.svg)](https://python.org)
13
13
  [![PyPI](https://img.shields.io/pypi/v/vantage-cli.svg)](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
- --deploy slurm-multipass-localhost
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
- --deploy slurm-juju-localhost
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
- --deploy slurm-microk8s-locahost
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 &copy; 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)**
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "vantage-cli"
3
- version = "0.1.8"
3
+ version = "0.1.9"
4
4
  description = "The Vantage Compute CLI."
5
5
  authors = [
6
6
  {name = "jamesbeedy", email = "james@vantagecompute.ai"}
File without changes
@@ -1173,7 +1173,7 @@ wheels = [
1173
1173
 
1174
1174
  [[package]]
1175
1175
  name = "pydantic"
1176
- version = "2.11.8"
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/ac/c0/1ff9b59cf6f54494cf3ae2b95f4e9cf3a4b10ca352dade98a94d30e8a62e/pydantic-2.11.8.tar.gz", hash = "sha256:3d080f4a3ac6bde98e959ba552124d46be9f565b7be67769e49fcb286bae1bfb", size = 788452, upload-time = "2025-09-13T01:39:32.577Z" }
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/19/49/bdc01f684aff7070253fe32fb9c60788e70de6b8ec527eaebf96bdf1a76b/pydantic-2.11.8-py3-none-any.whl", hash = "sha256:830ec4cccc3cf21be1ef5aec1d3348a179c92a61a7dab0e59837f9cc9fa93351", size = 444830, upload-time = "2025-09-13T01:39:30.095Z" },
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.8"
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