X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=installers%2Fcharm%2Fgrafana%2Fsrc%2Fpod_spec.py;h=609c466f1940668ee23bd6ced323d6946a10237f;hb=722b50279283ef22a9f9fab256e416f795427f26;hp=9915a9e4469d782cdc7178c061b3c987bab3ac50;hpb=b17e76b6df29ad727711175c2b6830a9db984a1d;p=osm%2Fdevops.git diff --git a/installers/charm/grafana/src/pod_spec.py b/installers/charm/grafana/src/pod_spec.py index 9915a9e4..609c466f 100644 --- a/installers/charm/grafana/src/pod_spec.py +++ b/installers/charm/grafana/src/pod_spec.py @@ -24,6 +24,8 @@ import logging from ipaddress import ip_network from typing import Any, Dict, List from urllib.parse import urlparse +from pathlib import Path +from string import Template logger = logging.getLogger(__name__) @@ -95,10 +97,12 @@ def _validate_data(config_data: Dict[str, Any], relation_data: Dict[str, Any]) - else True, } relation_validators = { - "prometheus_host": lambda value, _: isinstance(value, str) and len(value) > 0, - "prometheus_port": lambda value, _: isinstance(value, str) - and len(value) > 0 - and int(value) > 0, + "prometheus_hostname": lambda value, _: ( + isinstance(value, str) and len(value) > 0 + ), + "prometheus_port": lambda value, _: ( + isinstance(value, str) and len(value) > 0 and int(value) > 0 + ), } problems = [] @@ -115,6 +119,7 @@ def _validate_data(config_data: Dict[str, Any], relation_data: Dict[str, Any]) - problems.append(key) if len(problems) > 0: + logger.debug(relation_data) raise ValueError("Errors found in: {}".format(", ".join(problems))) return True @@ -224,55 +229,71 @@ def _make_pod_ingress_resources( return [ingress] -def _make_pod_files(relation: Dict[str, Any]) -> List[Dict[str, Any]]: +def _make_pod_files( + config: Dict[str, Any], relation: Dict[str, Any] +) -> List[Dict[str, Any]]: """Generating ConfigMap information Args: + config (Dict[str, Any]): configuration information. relation (Dict[str, Any]): relation information. Returns: List[Dict[str, Any]]: ConfigMap information. """ + template_data = {**config, **relation} + dashboards = [] + + if config.get("osm_dashboards", False): + dashboards.extend( + [ + { + "path": "kafka_exporter_dashboard.json", + "content": Path("files/kafka_exporter_dashboard.json").read_text(), + }, + { + "path": "mongodb_exporter_dashboard.json", + "content": Path( + "files/mongodb_exporter_dashboard.json" + ).read_text(), + }, + { + "path": "mysql_exporter_dashboard.json", + "content": Path("files/mysql_exporter_dashboard.json").read_text(), + }, + { + "path": "nodes_exporter_dashboard.json", + "content": Path("files/nodes_exporter_dashboard.json").read_text(), + }, + { + "path": "summary_dashboard.json", + "content": Path("files/summary_dashboard.json").read_text(), + }, + ] + ) + + dashboards.append( + { + "path": "dashboard_osm.yaml", + "content": Path("files/default_dashboards.yaml").read_text(), + } + ) + files = [ { "name": "dashboards", "mountPath": "/etc/grafana/provisioning/dashboards/", - "files": [ - { - "path": "dashboard-osm.yml", - "content": ( - "apiVersion: 1\n" - "providers:\n" - " - name: 'osm'\n" - " orgId: 1\n" - " folder: ''\n" - " type: file\n" - " options:\n" - " path: /etc/grafana/provisioning/dashboards/\n" - ), - } - ], + "files": dashboards, }, { "name": "datasources", "mountPath": "/etc/grafana/provisioning/datasources/", "files": [ { - "path": "datasource-prometheus.yml", - "content": ( - "datasources:\n" - " - access: proxy\n" - " editable: true\n" - " is_default: true\n" - " name: osm_prometheus\n" - " orgId: 1\n" - " type: prometheus\n" - " version: 1\n" - " url: http://{}:{}\n".format( - relation.get("prometheus_host"), - relation.get("prometheus_port"), - ) - ), + "path": "datasource_prometheus.yaml", + "content": Template( + Path("files/default_dashboards.yaml").read_text() + ).substitute(template_data), } ], }, @@ -350,7 +371,7 @@ def make_pod_spec( ports = _make_pod_ports(port) env_config = _make_pod_envconfig(config, relation_state) - files = _make_pod_files(relation_state) + files = _make_pod_files(config, relation_state) readiness_probe = _make_readiness_probe(port) liveness_probe = _make_liveness_probe(port) ingress_resources = _make_pod_ingress_resources(config, app_name, port)