robusta-cli 1.1__tar.gz → 1.2__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.
@@ -1,31 +1,30 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: robusta-cli
3
- Version: 1.1
3
+ Version: 1.2
4
4
  Summary:
5
5
  Author: Natan Yellin
6
6
  Author-email: aantn@users.noreply.github.com
7
- Requires-Python: >=3.9,<3.13
7
+ Requires-Python: >=3.10,<3.13
8
8
  Classifier: Programming Language :: Python :: 3
9
- Classifier: Programming Language :: Python :: 3.9
10
9
  Classifier: Programming Language :: Python :: 3.10
11
10
  Classifier: Programming Language :: Python :: 3.11
12
11
  Classifier: Programming Language :: Python :: 3.12
13
12
  Requires-Dist: certifi (==2024.7.4)
14
13
  Requires-Dist: click (==8.1.8)
15
14
  Requires-Dist: click-spinner (>=0.1.10,<0.2.0)
16
- Requires-Dist: cryptography (==43.0.1)
15
+ Requires-Dist: cryptography (==46.0.5) ; python_full_version >= "3.9.2" and python_version < "3.13"
17
16
  Requires-Dist: dpath (>=2.0.5,<3.0.0)
18
17
  Requires-Dist: hikaru-model-28 (>=1.1.0,<2.0.0)
19
18
  Requires-Dist: kubernetes (>=29,<30)
20
19
  Requires-Dist: pydantic (>=1.0,<2.0)
21
- Requires-Dist: pyjwt (>=2.4.0,<3.0.0)
20
+ Requires-Dist: pyjwt (>=2.12.0,<3.0.0)
22
21
  Requires-Dist: pyyaml (>=6.0.1,<7.0.0)
23
- Requires-Dist: requests (>=2.32.2,<3.0.0)
22
+ Requires-Dist: requests (>=2.33.0,<3.0.0)
24
23
  Requires-Dist: slack-sdk (>=3,<4)
25
24
  Requires-Dist: toml (>=0.10.2,<0.11.0)
26
25
  Requires-Dist: typer (>=0.12.3,<0.13.0)
27
26
  Requires-Dist: types-toml (>=0.10.2,<0.11.0)
28
- Requires-Dist: urllib3 (>2.6.0)
27
+ Requires-Dist: urllib3 (>=2.7.0)
29
28
  Description-Content-Type: text/markdown
30
29
 
31
30
  # robusta-cli
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "robusta-cli"
3
- version = "1.1"
3
+ version = "1.2"
4
4
  description = ""
5
5
  authors = ["Natan Yellin <aantn@users.noreply.github.com>"]
6
6
  readme = "README.md"
@@ -9,22 +9,22 @@ readme = "README.md"
9
9
  robusta = "robusta_cli.main:app"
10
10
 
11
11
  [tool.poetry.dependencies]
12
- python = "^3.9, <3.13"
12
+ python = "^3.10, <3.13"
13
13
  typer = "^0.12.3"
14
14
  pyyaml = "^6.0.1"
15
15
  click-spinner = "^0.1.10"
16
- cryptography = "43.0.1"
16
+ cryptography = {version = "46.0.5", python = ">=3.9.2,<3.13"}
17
17
  dpath = "^2.0.5"
18
18
  pydantic = "^1.0"
19
19
  slack-sdk = "^3"
20
- pyjwt = "^2.4.0"
21
- requests = "^2.32.2"
20
+ pyjwt = "^2.12.0"
21
+ requests = "^2.33.0"
22
22
  certifi = "2024.7.4"
23
23
  types-toml = "^0.10.2"
24
24
  toml = "^0.10.2"
25
25
  hikaru-model-28 = "^1.1.0"
26
26
  kubernetes = "^29"
27
- urllib3 = ">2.6.0"
27
+ urllib3 = ">=2.7.0"
28
28
  click = "8.1.8"
29
29
 
30
30
 
@@ -1,2 +1,2 @@
1
1
  # this is updated by .github/workflows/release.yaml
2
- __version__ = "1.1"
2
+ __version__ = "1.2"
@@ -5,6 +5,7 @@ import subprocess
5
5
  import time
6
6
  import traceback
7
7
  import uuid
8
+ from enum import Enum
8
9
  from typing import Dict, List, Optional, Union
9
10
 
10
11
  import certifi
@@ -61,6 +62,61 @@ app.add_typer(auth_commands, name="auth", help="Authentication commands menu")
61
62
  app.add_typer(self_host_commands, name="self-host", help="Self-host commands menu")
62
63
 
63
64
 
65
+ class ClusterSize(str, Enum):
66
+ small = "small"
67
+ medium = "medium"
68
+ large = "large"
69
+
70
+ # Resource configurations per cluster size (by CPU count):
71
+ # small: < 16 CPUs
72
+ # medium: 16-128 CPUs
73
+ # large: > 128 CPUs
74
+ CLUSTER_SIZE_RESOURCES = {
75
+ "small": {
76
+ "kubewatch": {
77
+ "requests": {"memory": "128Mi", "cpu": "50m"},
78
+ "limits": {"memory": "128Mi"},
79
+ },
80
+ "runner": {
81
+ "requests": {"memory": "1Gi", "cpu": "100m"},
82
+ "limits": {"memory": "1536Mi"},
83
+ },
84
+ "holmes": {
85
+ "requests": {"memory": "1Gi", "cpu": "100m"},
86
+ "limits": {"memory": "1Gi"},
87
+ },
88
+ },
89
+ "medium": {
90
+ "kubewatch": {
91
+ "requests": {"memory": "256Mi", "cpu": "100m"},
92
+ "limits": {"memory": "256Mi"},
93
+ },
94
+ "runner": {
95
+ "requests": {"memory": "2Gi", "cpu": "500m"},
96
+ "limits": {"memory": "4Gi"},
97
+ },
98
+ "holmes": {
99
+ "requests": {"memory": "2Gi", "cpu": "250m"},
100
+ "limits": {"memory": "4Gi"},
101
+ },
102
+ },
103
+ "large": {
104
+ "kubewatch": {
105
+ "requests": {"memory": "1Gi", "cpu": "200m"},
106
+ "limits": {"memory": "1Gi"},
107
+ },
108
+ "runner": {
109
+ "requests": {"memory": "4Gi", "cpu": "1000m"},
110
+ "limits": {"memory": "6Gi"},
111
+ },
112
+ "holmes": {
113
+ "requests": {"memory": "2Gi", "cpu": "500m"},
114
+ "limits": {"memory": "4Gi"},
115
+ },
116
+ },
117
+ }
118
+
119
+
64
120
  class GlobalConfig(BaseModel):
65
121
  signing_key: str = ""
66
122
  account_id: str = ""
@@ -68,6 +124,7 @@ class GlobalConfig(BaseModel):
68
124
 
69
125
  class HolmesConfig(BaseModel):
70
126
  additional_env_vars: List[Dict[str, str]]
127
+ resources: Optional[Dict] = None
71
128
 
72
129
 
73
130
  class HelmValues(BaseModel, extra=Extra.allow):
@@ -82,7 +139,7 @@ class HelmValues(BaseModel, extra=Extra.allow):
82
139
  kubewatch: Dict = None
83
140
  grafanaRenderer: Dict = None
84
141
  runner: Dict = None
85
- enableHolmesGPT: Optional[bool] = None
142
+ enableHolmesGPT: Optional[bool] = None
86
143
  holmes: Optional[HolmesConfig] = None
87
144
 
88
145
 
@@ -114,7 +171,11 @@ def gen_config(
114
171
  ),
115
172
  is_small_cluster: bool = typer.Option(
116
173
  None,
117
- help="Local/Small cluster",
174
+ help="[Deprecated: use --cluster-size] Local/Small cluster",
175
+ ),
176
+ cluster_size: Optional[ClusterSize] = typer.Option(
177
+ None,
178
+ help="Cluster size: small (< 16 CPUs), medium (16-128 CPUs), large (> 128 CPUs)",
118
179
  ),
119
180
  slack_api_key: str = typer.Option(
120
181
  "",
@@ -248,7 +309,6 @@ def gen_config(
248
309
 
249
310
  values = HelmValues(
250
311
  clusterName=cluster_name,
251
- isSmallCluster=is_small_cluster,
252
312
  globalConfig=GlobalConfig(signing_key=signing_key, account_id=account_id),
253
313
  sinksConfig=sinks_config,
254
314
  enablePrometheusStack=enable_prometheus_stack,
@@ -274,15 +334,12 @@ def gen_config(
274
334
  "name": "ROBUSTA_TELEMETRY_ENDPOINT",
275
335
  "value": backend_profile.robusta_telemetry_endpoint,
276
336
  },
337
+ {
338
+ "name": "ROBUSTA_API_ENDPOINT",
339
+ "value": backend_profile.robusta_cloud_api_host,
340
+ },
277
341
  ]
278
342
 
279
- if is_small_cluster:
280
- setattr(values, "kube-prometheus-stack", {})
281
- kube_stack = getattr(values, "kube-prometheus-stack")
282
- kube_stack["prometheus"] = {
283
- "prometheusSpec": {"resources": {"requests": {"memory": "300Mi"}, "limits": {"memory": "300Mi"}}},
284
- }
285
-
286
343
  if robusta_api_key:
287
344
  values.enableHolmesGPT = True
288
345
  values.holmes = HolmesConfig(additional_env_vars=[
@@ -292,6 +349,24 @@ def gen_config(
292
349
  }
293
350
  ])
294
351
 
352
+ # cluster_size (new) and is_small_cluster (legacy) are mutually exclusive
353
+ if cluster_size:
354
+ size_resources = CLUSTER_SIZE_RESOURCES.get(cluster_size.value)
355
+ if size_resources:
356
+ if "kubewatch" in size_resources:
357
+ values.kubewatch = {"resources": size_resources["kubewatch"]}
358
+ if "runner" in size_resources:
359
+ values.runner["resources"] = size_resources["runner"]
360
+ if "holmes" in size_resources and values.holmes:
361
+ values.holmes.resources = size_resources["holmes"]
362
+ elif is_small_cluster:
363
+ values.isSmallCluster = is_small_cluster
364
+ setattr(values, "kube-prometheus-stack", {})
365
+ kube_stack = getattr(values, "kube-prometheus-stack")
366
+ kube_stack["prometheus"] = {
367
+ "prometheusSpec": {"resources": {"requests": {"memory": "300Mi"}, "limits": {"memory": "300Mi"}}},
368
+ }
369
+
295
370
  write_values_file(output_path, values)
296
371
 
297
372
  if robusta_api_key:
File without changes
File without changes
File without changes
File without changes