From c4f68480c3164a402ec0d86e3b1b4e7c5faba6cb Mon Sep 17 00:00:00 2001 From: nimrik Date: Mon, 4 May 2026 09:30:33 +0200 Subject: [PATCH 1/2] added sizes configuration --- robusta_cli/main.py | 89 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 78 insertions(+), 11 deletions(-) diff --git a/robusta_cli/main.py b/robusta_cli/main.py index 1c42024..780bc14 100755 --- a/robusta_cli/main.py +++ b/robusta_cli/main.py @@ -5,7 +5,7 @@ import time import traceback import uuid -from typing import Dict, List, Optional, Union +from typing import Dict, List, Literal, Optional, Union import certifi import typer @@ -61,6 +61,58 @@ def add_custom_certificate(custom_ca: str): app.add_typer(self_host_commands, name="self-host", help="Self-host commands menu") +ClusterSize = Literal["small", "medium", "large"] + +# Resource configurations per cluster size (by CPU count): +# small: < 16 CPUs +# medium: 16-128 CPUs +# large: > 128 CPUs +CLUSTER_SIZE_RESOURCES = { + "small": { + "kubewatch": { + "requests": {"memory": "128Mi", "cpu": "50m"}, + "limits": {"memory": "128Mi"}, + }, + "runner": { + "requests": {"memory": "1Gi", "cpu": "100m"}, + "limits": {"memory": "1536Mi"}, + }, + "holmes": { + "requests": {"memory": "1Gi", "cpu": "100m"}, + "limits": {"memory": "1Gi"}, + }, + }, + "medium": { + "kubewatch": { + "requests": {"memory": "256Mi", "cpu": "100m"}, + "limits": {"memory": "256Mi"}, + }, + "runner": { + "requests": {"memory": "2Gi", "cpu": "500m"}, + "limits": {"memory": "4Gi"}, + }, + "holmes": { + "requests": {"memory": "2Gi", "cpu": "250m"}, + "limits": {"memory": "4Gi"}, + }, + }, + "large": { + "kubewatch": { + "requests": {"memory": "1Gi", "cpu": "200m"}, + "limits": {"memory": "1Gi"}, + }, + "runner": { + "requests": {"memory": "4Gi", "cpu": "1000m"}, + "limits": {"memory": "6Gi"}, + }, + "holmes": { + "requests": {"memory": "2Gi", "cpu": "500m"}, + "limits": {"memory": "4Gi"}, + }, + }, +} + + class GlobalConfig(BaseModel): signing_key: str = "" account_id: str = "" @@ -68,6 +120,7 @@ class GlobalConfig(BaseModel): class HolmesConfig(BaseModel): additional_env_vars: List[Dict[str, str]] + resources: Optional[Dict] = None class HelmValues(BaseModel, extra=Extra.allow): @@ -82,7 +135,7 @@ class HelmValues(BaseModel, extra=Extra.allow): kubewatch: Dict = None grafanaRenderer: Dict = None runner: Dict = None - enableHolmesGPT: Optional[bool] = None + enableHolmesGPT: Optional[bool] = None holmes: Optional[HolmesConfig] = None @@ -114,7 +167,11 @@ def gen_config( ), is_small_cluster: bool = typer.Option( None, - help="Local/Small cluster", + help="[Deprecated: use --cluster-size] Local/Small cluster", + ), + cluster_size: Optional[ClusterSize] = typer.Option( + None, + help="Cluster size: small (< 16 CPUs), medium (16-128 CPUs), large (> 128 CPUs)", ), slack_api_key: str = typer.Option( "", @@ -248,7 +305,6 @@ def gen_config( values = HelmValues( clusterName=cluster_name, - isSmallCluster=is_small_cluster, globalConfig=GlobalConfig(signing_key=signing_key, account_id=account_id), sinksConfig=sinks_config, enablePrometheusStack=enable_prometheus_stack, @@ -276,13 +332,6 @@ def gen_config( }, ] - if is_small_cluster: - setattr(values, "kube-prometheus-stack", {}) - kube_stack = getattr(values, "kube-prometheus-stack") - kube_stack["prometheus"] = { - "prometheusSpec": {"resources": {"requests": {"memory": "300Mi"}, "limits": {"memory": "300Mi"}}}, - } - if robusta_api_key: values.enableHolmesGPT = True values.holmes = HolmesConfig(additional_env_vars=[ @@ -292,6 +341,24 @@ def gen_config( } ]) + # cluster_size (new) and is_small_cluster (legacy) are mutually exclusive + if cluster_size: + size_resources = CLUSTER_SIZE_RESOURCES.get(cluster_size) + if size_resources: + if "kubewatch" in size_resources: + values.kubewatch = {"resources": size_resources["kubewatch"]} + if "runner" in size_resources: + values.runner["resources"] = size_resources["runner"] + if "holmes" in size_resources and values.holmes: + values.holmes.resources = size_resources["holmes"] + elif is_small_cluster: + values.isSmallCluster = is_small_cluster + setattr(values, "kube-prometheus-stack", {}) + kube_stack = getattr(values, "kube-prometheus-stack") + kube_stack["prometheus"] = { + "prometheusSpec": {"resources": {"requests": {"memory": "300Mi"}, "limits": {"memory": "300Mi"}}}, + } + write_values_file(output_path, values) if robusta_api_key: From ee73b3c8714a77f4ad3dced704f4dfed8e899426 Mon Sep 17 00:00:00 2001 From: nimrik Date: Mon, 4 May 2026 09:34:02 +0200 Subject: [PATCH 2/2] fixed linter error --- robusta_cli/main.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/robusta_cli/main.py b/robusta_cli/main.py index 780bc14..1903267 100755 --- a/robusta_cli/main.py +++ b/robusta_cli/main.py @@ -5,7 +5,8 @@ import time import traceback import uuid -from typing import Dict, List, Literal, Optional, Union +from enum import Enum +from typing import Dict, List, Optional, Union import certifi import typer @@ -61,7 +62,10 @@ def add_custom_certificate(custom_ca: str): app.add_typer(self_host_commands, name="self-host", help="Self-host commands menu") -ClusterSize = Literal["small", "medium", "large"] +class ClusterSize(str, Enum): + small = "small" + medium = "medium" + large = "large" # Resource configurations per cluster size (by CPU count): # small: < 16 CPUs @@ -343,7 +347,7 @@ def gen_config( # cluster_size (new) and is_small_cluster (legacy) are mutually exclusive if cluster_size: - size_resources = CLUSTER_SIZE_RESOURCES.get(cluster_size) + size_resources = CLUSTER_SIZE_RESOURCES.get(cluster_size.value) if size_resources: if "kubewatch" in size_resources: values.kubewatch = {"resources": size_resources["kubewatch"]}