diff --git a/site-modules/profile/files/prometheus/update-prometheus-config b/site-modules/profile/files/prometheus/update-prometheus-config --- a/site-modules/profile/files/prometheus/update-prometheus-config +++ b/site-modules/profile/files/prometheus/update-prometheus-config @@ -13,7 +13,7 @@ import os import stat import sys -from typing import Any, Dict, Iterable, List, Optional +from typing import Any, Dict, Iterable, List, Optional, Tuple import yaml @@ -27,6 +27,7 @@ scrape_timeout: Optional[int] metrics_path: Optional[str] scheme: Optional[str] + params: Optional[Tuple] @classmethod def from_dict(cls, dict): @@ -52,13 +53,21 @@ yield from yaml.safe_load(f) +def dict_factory(data): + d = dict(data) + + if d.get("params") is not None: + d["params"] = {k:list(v) for k,v in d["params"]} + + return d + def generate_scrape_configs(configs: Dict[JobGroup, List[Dict[str, Any]]]): """Generate a scrape_configs entry from a dict""" for params, targets in configs.items(): yield { **{ param: value - for param, value in asdict(params).items() + for param, value in asdict(params, dict_factory=dict_factory).items() if value is not None }, "static_configs": targets, @@ -96,6 +105,12 @@ for conf in load_yaml_from_dir(exported_dir): if 'job' in conf: conf['job_name'] = conf.pop('job') + if 'params' in conf: + params = conf.pop('params') + if params is not None: + # Hack to allow the dict serialization (used in the config_groups dict key later) + conf['params'] = tuple((k,tuple(v)) for k,v in params.items()) + group = JobGroup.from_dict(conf) for key in asdict(group): conf.pop(key, None) diff --git a/site-modules/profile/manifests/prometheus/export_scrape_config.pp b/site-modules/profile/manifests/prometheus/export_scrape_config.pp --- a/site-modules/profile/manifests/prometheus/export_scrape_config.pp +++ b/site-modules/profile/manifests/prometheus/export_scrape_config.pp @@ -6,6 +6,7 @@ Hash[String, String] $labels = {}, Optional[Enum['http', 'https']] $scheme = undef, Optional[String] $metrics_path = undef, + Optional[Hash[String, Array[String]]] $params = undef, ) { $static_labels = lookup('prometheus::static_labels', Hash) @@ -17,5 +18,6 @@ labels => $static_labels + $labels, scheme => $scheme, metrics_path => $metrics_path, + params => $params, } } diff --git a/site-modules/profile/manifests/prometheus/scrape_config.pp b/site-modules/profile/manifests/prometheus/scrape_config.pp --- a/site-modules/profile/manifests/prometheus/scrape_config.pp +++ b/site-modules/profile/manifests/prometheus/scrape_config.pp @@ -6,6 +6,7 @@ Hash[String, String] $labels = {}, Optional[Enum['http', 'https']] $scheme = undef, Optional[String] $metrics_path = undef, + Optional[Hash[String, Array[String]]] $params = undef, ){ $directory = $profile::prometheus::server::scrape_configs_dir file {"${directory}/${name}.yaml": @@ -20,7 +21,8 @@ targets => [$target], labels => $labels, scheme => $scheme, - metrics_path => $metrics_path + metrics_path => $metrics_path, + params => $params, }, ] ),