vantage6 5.0.0a37__py3-none-any.whl → 5.0.0a40__py3-none-any.whl

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.

Potentially problematic release.


This version of vantage6 might be problematic. Click here for more details.

Files changed (50) hide show
  1. vantage6/cli/algorithm/generate_algorithm_json.py +2 -1
  2. vantage6/cli/algostore/attach.py +28 -3
  3. vantage6/cli/algostore/list.py +2 -2
  4. vantage6/cli/algostore/start.py +11 -3
  5. vantage6/cli/algostore/version.py +62 -0
  6. vantage6/cli/auth/attach.py +1 -1
  7. vantage6/cli/auth/list.py +2 -2
  8. vantage6/cli/auth/remove.py +58 -0
  9. vantage6/cli/auth/start.py +12 -8
  10. vantage6/cli/cli.py +2 -0
  11. vantage6/cli/common/attach.py +114 -0
  12. vantage6/cli/common/decorator.py +9 -6
  13. vantage6/cli/common/list.py +68 -0
  14. vantage6/cli/common/new.py +3 -2
  15. vantage6/cli/common/remove.py +18 -0
  16. vantage6/cli/common/stop.py +6 -11
  17. vantage6/cli/common/utils.py +44 -76
  18. vantage6/cli/common/version.py +82 -0
  19. vantage6/cli/configuration_create.py +3 -2
  20. vantage6/cli/context/__init__.py +3 -0
  21. vantage6/cli/context/algorithm_store.py +2 -2
  22. vantage6/cli/node/attach.py +27 -3
  23. vantage6/cli/node/common/__init__.py +31 -6
  24. vantage6/cli/node/create_private_key.py +11 -10
  25. vantage6/cli/node/list.py +3 -44
  26. vantage6/cli/node/set_api_key.py +12 -6
  27. vantage6/cli/node/start.py +11 -3
  28. vantage6/cli/node/stop.py +13 -15
  29. vantage6/cli/node/version.py +96 -33
  30. vantage6/cli/sandbox/config/base.py +10 -2
  31. vantage6/cli/sandbox/config/core.py +3 -3
  32. vantage6/cli/sandbox/config/node.py +2 -5
  33. vantage6/cli/sandbox/remove.py +17 -35
  34. vantage6/cli/sandbox/start.py +8 -0
  35. vantage6/cli/sandbox/stop.py +1 -1
  36. vantage6/cli/server/attach.py +28 -3
  37. vantage6/cli/server/import_.py +85 -17
  38. vantage6/cli/server/list.py +2 -2
  39. vantage6/cli/server/start.py +11 -3
  40. vantage6/cli/server/version.py +31 -18
  41. vantage6/cli/template/algo_store_config.j2 +3 -0
  42. vantage6/cli/template/node_config.j2 +3 -1
  43. vantage6/cli/use/context.py +8 -1
  44. vantage6/cli/use/namespace.py +10 -7
  45. vantage6/cli/utils_kubernetes.py +270 -0
  46. {vantage6-5.0.0a37.dist-info → vantage6-5.0.0a40.dist-info}/METADATA +3 -3
  47. {vantage6-5.0.0a37.dist-info → vantage6-5.0.0a40.dist-info}/RECORD +50 -45
  48. /vantage6/cli/node/{task_cleanup/__init__.py → common/task_cleanup.py} +0 -0
  49. {vantage6-5.0.0a37.dist-info → vantage6-5.0.0a40.dist-info}/WHEEL +0 -0
  50. {vantage6-5.0.0a37.dist-info → vantage6-5.0.0a40.dist-info}/entry_points.txt +0 -0
@@ -102,6 +102,9 @@ store:
102
102
  port: 7602
103
103
  {% endif %}
104
104
 
105
+ # The port to expose the store on in the cluster
106
+ port: {{ store.port | default(7602) }}
107
+
105
108
  logging:
106
109
  # Controls the logging output level. Could be one of the following
107
110
  # levels: CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET
@@ -79,6 +79,8 @@ node:
79
79
  name: engineio.server
80
80
  - level: warning
81
81
  name: sqlalchemy.engine
82
+ - level: warning
83
+ name: kubernetes.client.rest
82
84
  {% endif %}
83
85
 
84
86
  {% if node.encryption is defined %}
@@ -88,7 +90,7 @@ node:
88
90
  enabled: {{ node.encryption.enabled | default(false) }}
89
91
 
90
92
  # Location to the private key file. Required if encryption is enabled.
91
- {% if node.encryption.enabled | default(false) %}
93
+ {% if node.encryption.private_key is defined and node.encryption.private_key != '' %}
92
94
  private_key: {{ node.encryption.private_key | default('/path/to/private_key.pem') }}
93
95
  {% else %}
94
96
  # private_key: /path/to/private_key.pem
@@ -1,11 +1,12 @@
1
1
  import click
2
2
  import questionary
3
- from kubernetes import config
3
+ from kubernetes import client, config
4
4
 
5
5
  from vantage6.common import error
6
6
 
7
7
  from vantage6.cli.config import CliConfig
8
8
  from vantage6.cli.utils import switch_context_and_namespace
9
+ from vantage6.cli.utils_kubernetes import configure_kubernetes_client_for_microk8s
9
10
 
10
11
 
11
12
  @click.command()
@@ -14,6 +15,12 @@ def cli_use_context(context: str):
14
15
  """
15
16
  Set which Kubernetes context to use.
16
17
  """
18
+ # Configure for MicroK8s if needed
19
+ config.load_kube_config()
20
+ cfg = client.Configuration.get_default_copy()
21
+ configure_kubernetes_client_for_microk8s(cfg)
22
+ client.Configuration.set_default(cfg)
23
+
17
24
  # Get available contexts
18
25
  contexts, active_context = config.list_kube_config_contexts()
19
26
  context_names = [ctx["name"] for ctx in contexts]
@@ -1,11 +1,14 @@
1
1
  import click
2
2
  import questionary
3
- from kubernetes import client, config
3
+ from kubernetes import client
4
4
 
5
5
  from vantage6.common import error
6
6
 
7
7
  from vantage6.cli.config import CliConfig
8
8
  from vantage6.cli.utils import switch_context_and_namespace
9
+ from vantage6.cli.utils_kubernetes import (
10
+ get_core_api_with_ssl_handling,
11
+ )
9
12
 
10
13
 
11
14
  @click.command()
@@ -16,15 +19,15 @@ def cli_use_namespace(namespace: str):
16
19
 
17
20
  The namespace will be created if it does not exist.
18
21
  """
19
- # Load the active context configuration
20
- config.load_kube_config()
22
+ # Configure for MicroK8s if needed
23
+ core_api, _ = get_core_api_with_ssl_handling()
21
24
 
22
25
  try:
23
- v1 = client.CoreV1Api()
24
- namespace_list = v1.list_namespace()
26
+ namespace_list = core_api.list_namespace()
25
27
  except Exception:
26
28
  error(
27
- "Failed to connect to Kubernetes cluster. Check if the cluster is running and reachable."
29
+ "Failed to connect to Kubernetes cluster. Check if the cluster is running "
30
+ "and reachable."
28
31
  )
29
32
  return
30
33
 
@@ -46,7 +49,7 @@ def cli_use_namespace(namespace: str):
46
49
  namespace_body = client.V1Namespace(
47
50
  metadata=client.V1ObjectMeta(name=namespace)
48
51
  )
49
- v1.create_namespace(namespace_body)
52
+ core_api.create_namespace(namespace_body)
50
53
 
51
54
  # Switch to the selected namespace for current context
52
55
  switch_context_and_namespace(namespace=namespace)
@@ -0,0 +1,270 @@
1
+ """
2
+ Kubernetes utility functions for Vantage6 CLI.
3
+
4
+ This module provides utilities for handling Kubernetes client configuration,
5
+ especially for MicroK8s environments that may have SSL certificate issues.
6
+
7
+ The issue is that the python kubernetes client does not automatically use the
8
+ certificate from microk8s, so it is manually configured in this module. Note that this
9
+ is only an issue for the CLI and not for running nodes/servers/stores/etc., because
10
+ those are started using the `kubectl` command, which includes the microk8scertificate
11
+ automatically.
12
+ """
13
+
14
+ import base64
15
+ import ssl
16
+ from pathlib import Path
17
+
18
+ from kubernetes import client, config
19
+ from kubernetes.config.config_exception import ConfigException
20
+
21
+ from vantage6.common import warning
22
+
23
+
24
+ def configure_kubernetes_client_for_microk8s(cfg: client.Configuration) -> None:
25
+ """
26
+ Configure the Kubernetes client to handle MicroK8s SSL certificate issues.
27
+
28
+ This function detects if we're using MicroK8s and configures the client
29
+ to handle SSL certificates appropriately for both development and production.
30
+
31
+ Parameters
32
+ ----------
33
+ cfg : client.Configuration
34
+ The Kubernetes client configuration to configure
35
+ """
36
+ # Check if we're using MicroK8s by looking at the current context
37
+ if is_microk8s_context():
38
+ _configure_microk8s_ssl(cfg)
39
+
40
+
41
+ def _configure_microk8s_ssl(cfg: client.Configuration) -> None:
42
+ """
43
+ Configure SSL settings for MicroK8s.
44
+
45
+ This function handles MicroK8s SSL certificates in a secure way by:
46
+ 1. First trying to use the MicroK8s certificate directly
47
+ 2. If that fails, falling back to a more lenient but still secure approach
48
+ """
49
+ try:
50
+ # Try to get the MicroK8s certificate and use it properly
51
+ if cert_path := _get_microk8s_certificate_path():
52
+ _configure_with_certificate(cert_path, cfg)
53
+ else:
54
+ warning(
55
+ "MicroK8s certificate not found. You may run into errors when using "
56
+ "the CLI."
57
+ )
58
+
59
+ except Exception as e:
60
+ warning(f"Could not configure MicroK8s SSL settings: {e}")
61
+ warning("You may run into errors when using the CLI.")
62
+
63
+
64
+ def _get_microk8s_certificate_path() -> Path | None:
65
+ """
66
+ Get the path to the MicroK8s certificate.
67
+
68
+ Returns
69
+ -------
70
+ Path | None
71
+ Path to the MicroK8s certificate if found, None otherwise
72
+ """
73
+ # Common MicroK8s certificate locations
74
+ possible_paths = [
75
+ Path.home() / ".kube" / "microk8s.crt",
76
+ Path("/var/snap/microk8s/current/certs/ca.crt"),
77
+ Path("/var/snap/microk8s/current/certs/server.crt"),
78
+ ]
79
+
80
+ for cert_path in possible_paths:
81
+ if cert_path.exists():
82
+ return cert_path
83
+
84
+ return None
85
+
86
+
87
+ def _configure_with_certificate(cert_path: Path, cfg: client.Configuration) -> None:
88
+ """
89
+ Configure the Kubernetes client to use a specific certificate.
90
+
91
+ Parameters
92
+ ----------
93
+ cert_path : Path
94
+ Path to the certificate file
95
+ """
96
+ try:
97
+ # Validate the certificate before using it
98
+ if not _validate_certificate(cert_path):
99
+ warning(
100
+ f"Certificate {cert_path} appears to be invalid. You may run into "
101
+ "errors when using the CLI."
102
+ )
103
+ return
104
+
105
+ cfg.verify_ssl = True
106
+ cfg.ssl_ca_cert = str(cert_path)
107
+
108
+ # Apply the configuration to the default client
109
+ client.Configuration.set_default(cfg)
110
+
111
+ except Exception as e:
112
+ warning(f"Failed to configure with certificate {cert_path}: {e}")
113
+ warning("You may run into errors when using the CLI.")
114
+
115
+
116
+ def _validate_certificate(cert_path: Path) -> bool:
117
+ """
118
+ Validate that a certificate file is readable and appears to be a valid certificate.
119
+
120
+ Parameters
121
+ ----------
122
+ cert_path : Path
123
+ Path to the certificate file
124
+
125
+ Returns
126
+ -------
127
+ bool
128
+ True if the certificate appears valid, False otherwise
129
+ """
130
+ try:
131
+ # Check if the file exists and is readable
132
+ if not cert_path.exists() or not cert_path.is_file():
133
+ return False
134
+
135
+ # Try to read the certificate content
136
+ with open(cert_path, "rb") as f:
137
+ cert_data = f.read()
138
+
139
+ # Basic validation: check if it looks like a PEM certificate
140
+ if b"-----BEGIN CERTIFICATE-----" not in cert_data:
141
+ return False
142
+
143
+ # Try to parse the certificate with Python's ssl module
144
+ if _validate_certificate_with_ssl(cert_data):
145
+ return True
146
+
147
+ # If we can't parse it with ssl module, at least check it has the right
148
+ # structure
149
+ return (
150
+ b"-----BEGIN CERTIFICATE-----" in cert_data
151
+ and b"-----END CERTIFICATE-----" in cert_data
152
+ )
153
+
154
+ except Exception as e:
155
+ warning(f"Certificate validation failed: {e}")
156
+ return False
157
+
158
+
159
+ def _validate_certificate_with_ssl(cert_data: bytes) -> bool:
160
+ """
161
+ Validate a certificate with the ssl module.
162
+
163
+ Parameters
164
+ ----------
165
+ cert_data : bytes
166
+ The certificate data
167
+
168
+ Returns
169
+ -------
170
+ bool
171
+ True if the certificate appears valid, False otherwise
172
+ """
173
+ try:
174
+ # Extract the base64 part between BEGIN and END
175
+ start_text = b"-----BEGIN CERTIFICATE-----"
176
+ len_start_text = len(start_text)
177
+ start = cert_data.find(start_text)
178
+ end = cert_data.find(b"-----END CERTIFICATE-----")
179
+ if start != -1 and end != -1:
180
+ cert_b64 = (
181
+ cert_data[start + len_start_text : end]
182
+ .replace(b"\n", b"")
183
+ .replace(b"\r", b"")
184
+ )
185
+ cert_der = base64.b64decode(cert_b64)
186
+ ssl.DER_cert_to_PEM_cert(cert_der)
187
+ return True
188
+ except Exception:
189
+ pass
190
+ return False
191
+
192
+
193
+ def load_kubernetes_config_with_fallback() -> bool:
194
+ """
195
+ Load Kubernetes configuration with fallback for development environments.
196
+
197
+ This function tries to load the Kubernetes configuration and handles
198
+ common issues like SSL certificate problems in development environments.
199
+
200
+ Returns
201
+ -------
202
+ bool
203
+ True if configuration was loaded successfully, False otherwise
204
+ """
205
+ # Try to load in-cluster config first (for when running inside Kubernetes)
206
+ try:
207
+ config.load_incluster_config()
208
+ return True
209
+ except ConfigException:
210
+ pass
211
+
212
+ # Fallback to kubeconfig
213
+ try:
214
+ # Load kubeconfig into default config, then adjust CA if MicroK8s
215
+ config.load_kube_config()
216
+ cfg = client.Configuration.get_default_copy()
217
+ configure_kubernetes_client_for_microk8s(cfg)
218
+ client.Configuration.set_default(cfg)
219
+
220
+ return True
221
+ except ConfigException as exc:
222
+ warning(f"Failed to load Kubernetes configuration: {exc}")
223
+ return False
224
+
225
+
226
+ def create_kubernetes_apis_with_ssl_handling() -> tuple[
227
+ client.CoreV1Api, client.BatchV1Api
228
+ ]:
229
+ """
230
+ Create Kubernetes API clients with SSL handling for development environments.
231
+
232
+ Returns
233
+ -------
234
+ tuple[client.CoreV1Api, client.BatchV1Api]
235
+ Tuple of CoreV1Api and BatchV1Api clients
236
+ """
237
+ # Load configuration with fallback handling
238
+ if not load_kubernetes_config_with_fallback():
239
+ raise RuntimeError("Failed to load Kubernetes configuration")
240
+
241
+ # Create API clients
242
+ core_api = client.CoreV1Api()
243
+ batch_api = client.BatchV1Api()
244
+
245
+ return core_api, batch_api
246
+
247
+
248
+ def get_core_api_with_ssl_handling() -> client.CoreV1Api:
249
+ """
250
+ Get the CoreV1Api client with SSL handling for development environments.
251
+ """
252
+ core_api, _ = create_kubernetes_apis_with_ssl_handling()
253
+ return core_api
254
+
255
+
256
+ def is_microk8s_context() -> bool:
257
+ """
258
+ Check if the current Kubernetes context is MicroK8s.
259
+
260
+ Returns
261
+ -------
262
+ bool
263
+ True if using MicroK8s context, False otherwise
264
+ """
265
+ try:
266
+ _, active_context = config.list_kube_config_contexts()
267
+ current_context = active_context.get("name", "") if active_context else ""
268
+ return "microk8s" in current_context.lower()
269
+ except Exception:
270
+ return False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vantage6
3
- Version: 5.0.0a37
3
+ Version: 5.0.0a40
4
4
  Summary: vantage6 command line interface
5
5
  Author: Vantage6 Team
6
6
  Maintainer-email: Frank Martin <f.martin@iknl.nl>, Bart van Beusekom <b.vanbeusekom@iknl.nl>
@@ -18,8 +18,8 @@ Requires-Dist: questionary==2.1.1
18
18
  Requires-Dist: rich==13.5.2
19
19
  Requires-Dist: schema==0.7.5
20
20
  Requires-Dist: sqlalchemy==2.0.37
21
- Requires-Dist: vantage6-client==5.0.0a37
22
- Requires-Dist: vantage6-common==5.0.0a37
21
+ Requires-Dist: vantage6-client==5.0.0a40
22
+ Requires-Dist: vantage6-common==5.0.0a40
23
23
  Provides-Extra: dev
24
24
  Requires-Dist: black; extra == 'dev'
25
25
  Requires-Dist: coverage==7.10.2; extra == 'dev'
@@ -1,35 +1,40 @@
1
1
  vantage6/cli/__init__.py,sha256=8KIgMPbZTNdkYlUrB8irpsUA7KdkFdLbNbMKixOP2dE,277
2
- vantage6/cli/cli.py,sha256=fIuhusnv0U7aiQ5y3B1L46NpBrjxIr9f1l_kH7k8NGw,8458
2
+ vantage6/cli/cli.py,sha256=uEazjKFMpVWP3rQ0FtHNcOg70qYTymoqPqc8dF5saKg,8591
3
3
  vantage6/cli/config.py,sha256=vaHNrgJTaAeYLpxfsXOHkYmsI1gLSipkKzyEOPXF1w4,8258
4
- vantage6/cli/configuration_create.py,sha256=IehzaaLQtovlT9MnEjAQpEdXQNeFXwa1FvmPFmX0lLE,7317
4
+ vantage6/cli/configuration_create.py,sha256=Q8qnfDZ7gVEPgIqZJNJl4nEqc13ZVJh9K3U-O4XRk_Y,7354
5
5
  vantage6/cli/configuration_manager.py,sha256=zsk6dkdUA9zggUeFSkzXrNZ_XkxmQf26_oZsmLYYsu8,8096
6
6
  vantage6/cli/globals.py,sha256=VBa49tjuy9KjeF1eKtZre5QSohnWvlI1hsHeDZNMblA,2738
7
7
  vantage6/cli/utils.py,sha256=kq1Nv8SJPG5STII9DAcTSR4yCsZcoOvM8rygA5cWa28,5199
8
+ vantage6/cli/utils_kubernetes.py,sha256=zMdarsuWeeZdrDBTczIjC920HadM_5BcOnhOFXBHk0Q,8200
8
9
  vantage6/cli/algorithm/create.py,sha256=kRT1BlBcb0fDaB2Q988WxtA6EyAZmOW5QoU2uhbwBIo,2075
9
- vantage6/cli/algorithm/generate_algorithm_json.py,sha256=WbSetOXr8XWh-tfvuQtIPeU0jZGQyAJEoAHH7NR9eQ4,19488
10
+ vantage6/cli/algorithm/generate_algorithm_json.py,sha256=p22wKt3y3J6G8ZQZ7qy5aNe7KppXdY7au9MKsnRWwwU,19525
10
11
  vantage6/cli/algorithm/update.py,sha256=oReCQaOQHfZe-o-zTLD2RyjzhwAaXRQkFHyZZ-JUb4s,1338
11
- vantage6/cli/algostore/attach.py,sha256=kUbG-ke7gN_gQusojG2i7YbXMy9_urwShwTBbZp5NXo,312
12
+ vantage6/cli/algostore/attach.py,sha256=GoB1pGLDndKGmzNt5jJCck3yH_cnXkNuPKxDNJ_MZz8,1299
12
13
  vantage6/cli/algostore/files.py,sha256=oqjdGeoyUdCGfoSLbQA6r7GZtJtzSbXMyvojQ80xVCE,581
13
- vantage6/cli/algostore/list.py,sha256=VxOjZiOXUW_6wNl58zeiYByH83NdCBlivVWsDuBhQMg,327
14
+ vantage6/cli/algostore/list.py,sha256=3DJ0HjdmZ8cPFVPmUgtXdzElHsa73o1ulwfy0FxmvNU,312
14
15
  vantage6/cli/algostore/new.py,sha256=BZRJcaY6M84MOG7LPJsZWxbcJ3NCFnkTP3fwOkuyC_s,3497
15
16
  vantage6/cli/algostore/remove.py,sha256=JsZ1L3qH2k_G3Zei-fhb_dApah91gdJKKv2vfsWK6Os,1006
16
- vantage6/cli/algostore/start.py,sha256=JZZWO2aYvRtLq3nY70HMXDZG8Kz6NVnMXjs61GK-CQY,2510
17
+ vantage6/cli/algostore/start.py,sha256=EzReZVH5l4KT0Y0cpe_AFs9TzPaoS5t3VUM971cCImw,2818
17
18
  vantage6/cli/algostore/stop.py,sha256=azqUa1gp7VqB1JxaeQKX4mhXACASubVN92VNR8vt3eU,1927
18
- vantage6/cli/auth/attach.py,sha256=e4cpwckLNwjU6MZ5co2HEZtEEjoJc_C4VT9cB3X_QSw,1746
19
+ vantage6/cli/algostore/version.py,sha256=fxSSyS8LZ_Aiihcbi-zUek6Zg_3SAmmkSGLbapHr_GE,1958
20
+ vantage6/cli/auth/attach.py,sha256=d1NjuzcislTeOIKCNK2IbpKT0H8_6X-tI4ZtSvtaz1M,1780
19
21
  vantage6/cli/auth/files.py,sha256=zxlZRZ17zpj8JoRIcxBwR7s8FEBO7ehOgw_Hz-qQkwo,448
20
- vantage6/cli/auth/list.py,sha256=O7r8wfsfVxvcvfLmNfECZx5ERJyWisy-37aPTnECe18,308
22
+ vantage6/cli/auth/list.py,sha256=2MQhLXSuK6qanyFnr3y1duny4lDD6mx1B8YD752qfyI,293
21
23
  vantage6/cli/auth/new.py,sha256=JFd3DUf-GK3zWHlCO_xl_syZfZ4GAkoGqxtkKyTpm8Y,2167
22
- vantage6/cli/auth/remove.py,sha256=ejeAOpINYBZNuDSIZ7LRb_ZN9FOztOl3uvAD198twhY,884
23
- vantage6/cli/auth/start.py,sha256=XJ08DnwpuSWaiZG1AunMj6Y7JkDqGjs9iyOsTXTAA0w,2549
24
+ vantage6/cli/auth/remove.py,sha256=664X1gl77RrHpzJo1xYiAmZMw4K6muqhtytYk50iiWs,3105
25
+ vantage6/cli/auth/start.py,sha256=cH5bYvectyliobd6ybpGYf9wI7FyML5-5HS3jsjIyu8,2805
24
26
  vantage6/cli/auth/stop.py,sha256=oWy7jDZ45zEyqSzwJr5-T14vp01D1TTcTYWxjXNtJ_U,1882
25
- vantage6/cli/common/decorator.py,sha256=XjOsLMdLd8mJhOr3qcuNCPdhl6gn40OIkMC7jv2iupI,4613
26
- vantage6/cli/common/new.py,sha256=10I_8NRIMjJJw9SaEBIC0Xz7w0NWSeQ4yqLntFjYpR0,3241
27
- vantage6/cli/common/remove.py,sha256=sJaPF5y1Gd14I4Xg5QRBq3d1x4j2KF4Ys6wVDuqE6HQ,1697
27
+ vantage6/cli/common/attach.py,sha256=bw9-Q1JjKa_f8Q7-xI5lpI2WoUmlGKZSvULlGoSmnH8,3423
28
+ vantage6/cli/common/decorator.py,sha256=N08qVbEokkV-XYLwEgEYRzjvgauiUdhIygBQqxR-XoM,4693
29
+ vantage6/cli/common/list.py,sha256=j2q6B4k7wX5UMJ0gkuMrkYPl5I3NmkVuV6eV70hM36I,2075
30
+ vantage6/cli/common/new.py,sha256=_srwNExvphy2SImbeFhGxuSsarkztPxxYXMwGMBy7g8,3278
31
+ vantage6/cli/common/remove.py,sha256=q8YOihk5aClvPuw2cADulHrxeXv_0JhqpaNUVH1zhlQ,2206
28
32
  vantage6/cli/common/start.py,sha256=kMDjL_sObSkx4TqhnukyD9Jb7vOGXJ9Bo0pJBcxpbsg,10095
29
- vantage6/cli/common/stop.py,sha256=6QrxyjD3v7720VkfP7PPUUwY4QiAtT54jNNksmmxg1s,5821
30
- vantage6/cli/common/utils.py,sha256=PeZSWRoxaDY0t2Pt0PDVF0mw7aygWQeyEAxDYcMFGSg,12476
31
- vantage6/cli/context/__init__.py,sha256=5op_mZUzXxaS3ZEolscR8xu-V93-6dukgSrjZcLjzOA,2999
32
- vantage6/cli/context/algorithm_store.py,sha256=U4nNRQDoVe2j60FNwNNh-FD5IcmeA2VM8eACiPhkzhg,4294
33
+ vantage6/cli/common/stop.py,sha256=qIJ1COJWvQlbIpyMqh6ao2WKuXDqPBbU7-wF7IuOgQc,5614
34
+ vantage6/cli/common/utils.py,sha256=-XP-JslNpnveR37v4vwiCgdj4kXOMlluoPJRmNECtFk,11473
35
+ vantage6/cli/common/version.py,sha256=2XPeZm5NMYSqTGjHLUFcRFZZRhtDVLwytQjoDad3utU,2489
36
+ vantage6/cli/context/__init__.py,sha256=umHNotzJjd2TQCela7V8MTUwN4iAKDy8AR4s7ask5Ic,3135
37
+ vantage6/cli/context/algorithm_store.py,sha256=4_lglDDUyIss_H8iKzNAB0qWzCIppua4q-IvPp_i7A0,4332
33
38
  vantage6/cli/context/auth.py,sha256=CozmEzFtpL8K3Pq4rEiHl8MMPnCI7vKwmzsPAIF2Szc,3911
34
39
  vantage6/cli/context/base_server.py,sha256=vln405k6b4z4L_VIfPCycy7gIfpJs0nqvJa8enl2HsA,2390
35
40
  vantage6/cli/context/node.py,sha256=1jjDw3u1Vf0maycEA0lyiBkXrh_qcw2wGLd_b2tnX4k,7972
@@ -39,28 +44,28 @@ vantage6/cli/dev/common.py,sha256=fiERHE0o2-m0ZAgIbyaZnFhYdeVMddrHiUoiLjmAR8o,92
39
44
  vantage6/cli/dev/rebuild.py,sha256=3iMIqAxiwdZkx4Q0xQyqcWHvXUzOQT-9cyRuOiulwR8,1290
40
45
  vantage6/cli/dev/start.py,sha256=DzFtD_jQaVIIawfPdMwBLjY1E_YOokiWm27oanci8k4,1000
41
46
  vantage6/cli/dev/stop.py,sha256=-yrLCadDfeLES9pFJz9yxm33XtzEXpdqvHvwakLQNEE,663
42
- vantage6/cli/node/attach.py,sha256=5wB6vjp-m44cQx-C20QBo5WhbHqjxrfWWFzTa5YCyww,277
43
- vantage6/cli/node/create_private_key.py,sha256=gmgI9Gtcx3z0esxyLw-96HcrfmAJFOjjXbVvA9ZGN3g,5129
47
+ vantage6/cli/node/attach.py,sha256=xOTB_79pShvn6B4Ky1bZ3TI_F3gOkGS9huzbEE0DRYc,1217
48
+ vantage6/cli/node/create_private_key.py,sha256=UTsoJ04OCVjubC8b7AZhxrLzdwG-wQ_63ROw5uruxqs,5229
44
49
  vantage6/cli/node/files.py,sha256=y7WOGHCTE3DnmxgbweLcu51t0YLS9Jvl24zgCHKkQTQ,1003
45
- vantage6/cli/node/list.py,sha256=ksDnGOqKpV6QgMHFHv82byoOJp8Bu_jfm0KbXhNf8D8,1659
50
+ vantage6/cli/node/list.py,sha256=cydU5tByy0bHWCApcaZ8Pl_2SEbiqkK-mjVhWeChiCc,361
46
51
  vantage6/cli/node/new.py,sha256=XEVsnkI1UBngWwE96-KIOcs4zdPCuq3coTGHPNQxepQ,12717
47
52
  vantage6/cli/node/remove.py,sha256=alInSH_3E-yJthQ8JrGaopvAZ7GgxuRBppnpC8BRTBU,1061
48
53
  vantage6/cli/node/restart.py,sha256=hJWzyJjetfNe8YYkOt5ZEUE_t-LpvQOwUGcQH0pXfNQ,3122
49
- vantage6/cli/node/set_api_key.py,sha256=Ou7VnyHpqNqmy0O53ogG7VX_-jWsN3hWR2_GIiYJVo0,1998
50
- vantage6/cli/node/start.py,sha256=0UCOU_k7-7G50AQHgYT98stC-wz99VXa2_W7eAeDdFE,4378
51
- vantage6/cli/node/stop.py,sha256=CrlPs5wvb-d32MbG4OnafsxLBJXW7BD5QX-7f5qetqc,6870
52
- vantage6/cli/node/version.py,sha256=GdHQgcXHFTicL3yHeuW127bwnU85ooDOuqLvBGsH0GI,1957
53
- vantage6/cli/node/common/__init__.py,sha256=M7xJb_AL8vXgpTI_ZojgsVO1i8BovmZMJrF3NOq1PZ8,3165
54
- vantage6/cli/node/task_cleanup/__init__.py,sha256=bNa72P_gmGeQ3Z-Vl6Q7tKG8-deSAqk_02gvG--eHIY,4515
54
+ vantage6/cli/node/set_api_key.py,sha256=eLB-NVpvXROlGKPAMua6vBAs5l08-AkENWiTfOB82FM,2103
55
+ vantage6/cli/node/start.py,sha256=dn9wlDzq-XCV4ruMSTt0Nt01TOuJKZbXt3WJ3PPqZQY,4691
56
+ vantage6/cli/node/stop.py,sha256=9936hGZu8EuYFF2NZ2of8U33jc8hKRLc4bXFu1ImuLw,6814
57
+ vantage6/cli/node/version.py,sha256=vuQlq2SFWxHsA2_hqXtYK8c06mS2KqPCPU48F7-XXFU,4001
58
+ vantage6/cli/node/common/__init__.py,sha256=B05W_dhjzhbk056xgxoGDDWlOM0YYGM6ZMslalR-nyw,3977
59
+ vantage6/cli/node/common/task_cleanup.py,sha256=bNa72P_gmGeQ3Z-Vl6Q7tKG8-deSAqk_02gvG--eHIY,4515
55
60
  vantage6/cli/prometheus/monitoring_manager.py,sha256=I4iR_2i6EgLMR2dM2e4bOVbTyGN4jPPRDPKHd8_CbRk,4908
56
61
  vantage6/cli/prometheus/prometheus.yml,sha256=Q4i9lVknITBodHUMgarRnEsXfXTNuSdI6a-9pW4YCoI,98
57
62
  vantage6/cli/sandbox/new.py,sha256=bsHHd7nVVOcoIpl0yhM15LxG_6adOvnIkh8e4h4HwPA,6077
58
- vantage6/cli/sandbox/remove.py,sha256=QvoXXYtEEvg1ENeAXoi1vkUzIFH28gtU9DOT78VLMjA,5634
59
- vantage6/cli/sandbox/start.py,sha256=-Zo6jQcd-Z6EqoTmC8pNPg35wQiDl4LLsj9FG3BU4ls,10050
60
- vantage6/cli/sandbox/stop.py,sha256=tp0zxwizliSbAtw0MsGX6xZtR-6lRcFS6ij61eaa6Lc,2788
61
- vantage6/cli/sandbox/config/base.py,sha256=ZMrLJ_rCHraPub083prG25qJNQ0inoAAQA5T_oj5K34,3683
62
- vantage6/cli/sandbox/config/core.py,sha256=6V9K5bRFOTHhXQ8ANuTkdFjUJI3S_OuwLQ0zx16WZ8Y,10004
63
- vantage6/cli/sandbox/config/node.py,sha256=W5FE02rJ-lT90oi1Gvt_EQVFE7D03-InKnm0rUFPeSk,10327
63
+ vantage6/cli/sandbox/remove.py,sha256=xCLE1ayjaDimby9Out0XgyLZRY0wbwmVpuEBDCrcPkM,5228
64
+ vantage6/cli/sandbox/start.py,sha256=5qJawSH4HBO23RZgaPQd3UUYIJ0tVMcGdzNaKIUE6PU,10256
65
+ vantage6/cli/sandbox/stop.py,sha256=gjNfcoXfB4pVy7x3CvdiJ1yC2x36UO17rBlAaKS_-QE,2782
66
+ vantage6/cli/sandbox/config/base.py,sha256=24Ebo9mVa6KjqZllGkFvzjiD29o1gAVz0KQn6tZCHZU,3948
67
+ vantage6/cli/sandbox/config/core.py,sha256=mScKMiaxpxR9rkuHr8mxjTtk2Dgoh4B4ZlxMrx60f1A,10004
68
+ vantage6/cli/sandbox/config/node.py,sha256=qyxAotGwJStTpO91J0plvgUZsyB_GyRBFNHuCHO0uQ4,10239
64
69
  vantage6/cli/sandbox/data/km_dataset.csv,sha256=OrYF2ympb2QndiUOX_nTFGGB1HbAp2eOvZzrQ_PqJs4,31283
65
70
  vantage6/cli/sandbox/data/olympic_athletes_2016.csv,sha256=WGycwcwMKEyOyJc3aEo4EhrnBJiTSE0kZAr50j2qzGk,77699
66
71
  vantage6/cli/sandbox/populate/__init__.py,sha256=xzrDMnmX60kuuDA7u-E-aABdMO1rZKNwmxOo4cL68L4,4706
@@ -68,19 +73,19 @@ vantage6/cli/sandbox/populate/helpers/connect_store.py,sha256=Wb4shAbrNU7AARK7KZ
68
73
  vantage6/cli/sandbox/populate/helpers/delete_fixtures.py,sha256=fIAgzxvJqTfB1BCC-Nsdt1ltBL-o4Afl08zx6ZITb6I,2101
69
74
  vantage6/cli/sandbox/populate/helpers/load_fixtures.py,sha256=PQpEo0Q5PyWwYDaenAMqPrgRG6DF_SiFGK1V0BFNY3g,16225
70
75
  vantage6/cli/sandbox/populate/helpers/utils.py,sha256=5LSGZ-h7QtMB51IDzawXPIQFF7i2CIm6oYzEsdVKG4Y,1213
71
- vantage6/cli/server/attach.py,sha256=XeU5M00R27yqq8oNLOyaNGOdrsQouLzxl-TlASJSifw,323
76
+ vantage6/cli/server/attach.py,sha256=FrSdpRLJeRKWt0VBifj8oPKZsLNDaKJaI2Hy0D2m3kY,1282
72
77
  vantage6/cli/server/files.py,sha256=MsnLaY91F2m49mm_FpVboFrSsZiEsu175KioN1alZfk,568
73
- vantage6/cli/server/import_.py,sha256=nCnODyuMoDXxpKakCJnasGRdPcxL6gJJorGoZTWEEas,5984
74
- vantage6/cli/server/list.py,sha256=ioHQeBq5_SE6zNcyg9C7lqvcPwyHOyGPZ4SisFgq5-E,314
78
+ vantage6/cli/server/import_.py,sha256=m7yjhXhGvL3dJ-8pEN0NMrE3CjMTcf0A0hEhJ5kTBIk,8276
79
+ vantage6/cli/server/list.py,sha256=m-g1k8pmScK_CdhKiVFrLIUZsPnPsHr5CrfHmmI6KJk,299
75
80
  vantage6/cli/server/new.py,sha256=6KF07KMmdSQTSbXCxfAztVFb2M10uQdQjLmzCXnnfUo,3802
76
81
  vantage6/cli/server/remove.py,sha256=dwylIP5uEUPTRP9bd6_7rWhyUoCJuYoe1Kon9WUV4tY,891
77
- vantage6/cli/server/start.py,sha256=FDq-MyFwG0QcnsKChYLdOPAsLzgLhlDlmDvrV-LELV8,2929
82
+ vantage6/cli/server/start.py,sha256=eaQHDoa8ttSK_ZiZPzlYM_EMCqaOG3qFtUPrOnNCJf8,3206
78
83
  vantage6/cli/server/stop.py,sha256=4pp9NGh-DWPkJ-pXtyxbu9J-liB8l6uiODCkFKoLbC4,2077
79
- vantage6/cli/server/version.py,sha256=lqrPNKMbFO22W-NarJ2TjLd7fZT43hV-sFRbzMlBniw,1307
84
+ vantage6/cli/server/version.py,sha256=iVYem8Gye4dCChC70s_FTqiWi1AF4VQfvhebnh0jurU,1744
80
85
  vantage6/cli/server/common/__init__.py,sha256=Frh_4V8ssoGy8rO3o7mRnlKkpOlNSjA5J6eReN1Yluo,1386
81
- vantage6/cli/template/algo_store_config.j2,sha256=eA79CEXGPTO3kWX5SDhuO4VY2t_shjOHIvGIC6ANrro,7377
86
+ vantage6/cli/template/algo_store_config.j2,sha256=dlKiUzZ-zYGdFCBArMMRpXvoQFG7rYz4vmv6rCwp6fM,7470
82
87
  vantage6/cli/template/auth_config.j2,sha256=mFNL7H3plnqN7kpptk2WPXPsnuGddCP_ktbzBZHi5ic,10866
83
- vantage6/cli/template/node_config.j2,sha256=Q6-3fGdx0WVN_clTR77KR0Vv77rwOd1jzNCP_oOn81c,13871
88
+ vantage6/cli/template/node_config.j2,sha256=ZHx-PvjldyKLcE3e8V1K0k5LkDUaS1uZunvbQWfgA2E,13963
84
89
  vantage6/cli/template/node_config_nonk8s.j2,sha256=mrS-YQwg_9i7zBKuEFG5pe3ZbHCLtl5hGgzk2etXTvo,783
85
90
  vantage6/cli/template/server_config.j2,sha256=0uksEkCf4lRcBD39brOGdwoF_vCtieA-FjTiSUxNvo0,10195
86
91
  vantage6/cli/test/client_script.py,sha256=AHQ4fhzbtD-VcJAm0rxUDteepXNa4Bef9SKWnzobTd0,4825
@@ -89,9 +94,9 @@ vantage6/cli/test/integration_test.py,sha256=MctR_t-WEyxzFpMdc6ByTcX1BQglZiT5-CI
89
94
  vantage6/cli/test/algo_test_scripts/algo_test_arguments.py,sha256=HIKAhJ5zKkWMGXpCb_KLukbcwbyeMK5j3wcqubalbyM,791
90
95
  vantage6/cli/test/algo_test_scripts/algo_test_script.py,sha256=jfzXPmpL0HlE_eq1jXLV3HuZgh_aV-ZOaawHcYIuwQE,2741
91
96
  vantage6/cli/test/common/diagnostic_runner.py,sha256=jFFHqlj3v0WRpVEBa7Ovek3DL6RX6W5cQd9w5hWHtZA,6597
92
- vantage6/cli/use/context.py,sha256=mEtOfbuLtYQlRh-ypif24WtOwgpcvXObX310mmXIkWY,1362
93
- vantage6/cli/use/namespace.py,sha256=-z9uIYqVsqPPLHFy8bI5x2566W5essOkDdKTXUX9dEY,1644
94
- vantage6-5.0.0a37.dist-info/METADATA,sha256=Jnyu6qEvicvNPfRE87w0ach-PgqjaUi6RN9zz3CC_7w,1778
95
- vantage6-5.0.0a37.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
96
- vantage6-5.0.0a37.dist-info/entry_points.txt,sha256=RKVCMsD70s_Gp6If89uDlCphsZ9uLIOMt1gciv8EMDQ,53
97
- vantage6-5.0.0a37.dist-info/RECORD,,
97
+ vantage6/cli/use/context.py,sha256=cTp9kwC4hhq4FkPz1wYAeYWUGK4054S19FxpZYLF7lM,1665
98
+ vantage6/cli/use/namespace.py,sha256=ev22EuixwW7ZWqhGo8SiSKgtGq4yy8gEXmMhR31khkE,1729
99
+ vantage6-5.0.0a40.dist-info/METADATA,sha256=fqvEBppeIDSNK1PfILwVHFAI_pboxwjq28EYSeyOAf8,1778
100
+ vantage6-5.0.0a40.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
101
+ vantage6-5.0.0a40.dist-info/entry_points.txt,sha256=RKVCMsD70s_Gp6If89uDlCphsZ9uLIOMt1gciv8EMDQ,53
102
+ vantage6-5.0.0a40.dist-info/RECORD,,