diff --git a/cli_config/configuration.yaml b/cli_config/configuration.yaml index b0a8db7..b07c53d 100644 --- a/cli_config/configuration.yaml +++ b/cli_config/configuration.yaml @@ -7,6 +7,4 @@ silo_regions: cluster_def_root: clusters/us materialized_manifests: materialized_manifests/us sentry_region: us - service_monitors: { - getsentry: [ 123456789 ] - } + service_monitors: { getsentry: [123456789] } diff --git a/libsentrykube/config.py b/libsentrykube/config.py index bd5f6c0..e417144 100644 --- a/libsentrykube/config.py +++ b/libsentrykube/config.py @@ -36,14 +36,44 @@ class K8sConfig: materialized_manifests: str @classmethod - def from_conf(cls, conf: Mapping[str, Any]) -> K8sConfig: + def from_conf(cls, region_name: str, conf: Mapping[str, Any] | None) -> K8sConfig: + DEFAULT_CONFIG_ROOT = "k8s" + DEFAULT_CONFIG_CLUSTER_DEF_ROOT = f"clusters/{region_name}" + DEFAULT_CONFIG_CLUSTER_NAME = None + DEFAULT_CONFIG_MATERIALIZED_MANIFESTS = f"materialized_manifests/{region_name}" + + if conf is None: + root = DEFAULT_CONFIG_ROOT + cluster_def_root = DEFAULT_CONFIG_CLUSTER_DEF_ROOT + cluster_name = DEFAULT_CONFIG_CLUSTER_NAME + materialized_manifests = DEFAULT_CONFIG_MATERIALIZED_MANIFESTS + + else: + root = conf["root"] if "root" in conf else DEFAULT_CONFIG_ROOT + + cluster_def_root = ( + conf["cluster_def_root"] + if "cluster_def_root" in conf + else DEFAULT_CONFIG_CLUSTER_DEF_ROOT + ) + + cluster_name = ( + conf.get("cluster_name") + if "cluster_name" in conf + else DEFAULT_CONFIG_CLUSTER_NAME + ) + + materialized_manifests = ( + conf["materialized_manifests"] + if "materialized_manifests" in conf + else DEFAULT_CONFIG_MATERIALIZED_MANIFESTS + ) + return K8sConfig( - root=str(conf["root"]), - cluster_def_root=str(conf["cluster_def_root"]), - cluster_name=str(conf.get("cluster_name")) - if "cluster_name" in conf - else None, - materialized_manifests=str(conf["materialized_manifests"]), + root=root, + cluster_def_root=cluster_def_root, + cluster_name=cluster_name, + materialized_manifests=materialized_manifests, ) @@ -54,12 +84,23 @@ class SiloRegion: service_monitors: MappingProxyType[str, list[int]] @classmethod - def from_conf(cls, silo_regions_conf: Mapping[str, Any]) -> SiloRegion: - k8s_config = silo_regions_conf["k8s"] + def from_conf( + cls, + region_name: str, + silo_regions_conf: Mapping[str, Any] | None, + ) -> SiloRegion: + if silo_regions_conf is not None: + name_from_conf = silo_regions_conf.get("sentry_region", region_name) + k8s_config = silo_regions_conf.get("k8s", None) + service_monitors = silo_regions_conf.get("service_monitors", {}) + else: + name_from_conf = region_name + k8s_config = None + service_monitors = {} return SiloRegion( - k8s_config=K8sConfig.from_conf(k8s_config), - sentry_region=silo_regions_conf.get("sentry_region", "unknown"), - service_monitors=silo_regions_conf.get("service_monitors", {}), + k8s_config=K8sConfig.from_conf(name_from_conf, k8s_config), + sentry_region=name_from_conf, + service_monitors=service_monitors, ) @@ -76,8 +117,8 @@ def __init__(self) -> None: "silo_regions" in configuration ), "silo_regions entry not present in the config" silo_regions = { - name: SiloRegion.from_conf(conf) - for name, conf in configuration["silo_regions"].items() + region_name: SiloRegion.from_conf(region_name, region_conf) + for region_name, region_conf in configuration["silo_regions"].items() } self.silo_regions: Mapping[str, SiloRegion] = silo_regions diff --git a/libsentrykube/tests/config.yaml b/libsentrykube/tests/config.yaml index 54f4e98..8d537fe 100644 --- a/libsentrykube/tests/config.yaml +++ b/libsentrykube/tests/config.yaml @@ -18,3 +18,8 @@ silo_regions: cluster_def_root: clusters/my_other_customer materialized_manifests: rendered_services sentry_region: st-my_other_customer + region2: + k8s: + root: k8s + sentry_region: region2 + region3: diff --git a/libsentrykube/tests/test_config.py b/libsentrykube/tests/test_config.py index 0a1adf3..5aa7d5c 100644 --- a/libsentrykube/tests/test_config.py +++ b/libsentrykube/tests/test_config.py @@ -38,4 +38,24 @@ def test_config_load() -> None: sentry_region="st-my_other_customer", service_monitors=MappingProxyType({}), ), + "region2": SiloRegion( + k8s_config=K8sConfig( + root="k8s", + cluster_def_root="clusters/region2", + cluster_name=None, + materialized_manifests="materialized_manifests/region2", + ), + sentry_region="region2", + service_monitors=MappingProxyType({}), + ), + "region3": SiloRegion( + k8s_config=K8sConfig( + root="k8s", + cluster_def_root="clusters/region3", + cluster_name=None, + materialized_manifests="materialized_manifests/region3", + ), + sentry_region="region3", + service_monitors=MappingProxyType({}), + ), }