From 581250d943915cb3f8e7e4071440ee5cad5e5908 Mon Sep 17 00:00:00 2001 From: Paul Cuzner Date: Thu, 1 Apr 2021 17:38:18 +1300 Subject: [PATCH] cephadm:persist the grafana.db file This patch persists the grafana.db file, so the user can create there own dashboard referencing ceph and node metrics and not lose them on grafana restart! This also ensures changes to users/passwords within grafana are persisted. Fixes: https://tracker.ceph.com/issues/49954 Signed-off-by: Paul Cuzner --- src/cephadm/cephadm | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/cephadm/cephadm b/src/cephadm/cephadm index ad05bf394b3..bbf9292c686 100755 --- a/src/cephadm/cephadm +++ b/src/cephadm/cephadm @@ -43,6 +43,7 @@ from io import StringIO from threading import Thread, RLock from urllib.error import HTTPError from urllib.request import urlopen +from pathlib import Path # Default container images ----------------------------------------------------- DEFAULT_IMAGE = 'quay.ceph.io/ceph-ci/ceph:master' @@ -903,6 +904,15 @@ class CustomContainer(object): ################################## +def touch(file_path: str, uid: Optional[int] = None, gid: Optional[int] = None) -> None: + Path(file_path).touch() + if uid and gid: + os.chown(file_path, uid, gid) + + +################################## + + def dict_get(d: Dict, key: str, default: Any = None, require: bool = False) -> Any: """ Helper function to get a key from a dictionary. @@ -2140,6 +2150,7 @@ def create_daemon_dirs(ctx, fsid, daemon_type, daemon_id, uid, gid, makedirs(os.path.join(data_dir_root, config_dir, 'certs'), uid, gid, 0o755) makedirs(os.path.join(data_dir_root, config_dir, 'provisioning/datasources'), uid, gid, 0o755) makedirs(os.path.join(data_dir_root, 'data'), uid, gid, 0o755) + touch(os.path.join(data_dir_root, 'data', 'grafana.db'), uid, gid) elif daemon_type == 'alertmanager': data_dir_root = get_data_dir(fsid, ctx.data_dir, daemon_type, daemon_id) @@ -2326,6 +2337,7 @@ def get_container_mounts(ctx, fsid, daemon_type, daemon_id, mounts[os.path.join(data_dir, 'etc/grafana/grafana.ini')] = '/etc/grafana/grafana.ini:Z' mounts[os.path.join(data_dir, 'etc/grafana/provisioning/datasources')] = '/etc/grafana/provisioning/datasources:Z' mounts[os.path.join(data_dir, 'etc/grafana/certs')] = '/etc/grafana/certs:Z' + mounts[os.path.join(data_dir, 'data/grafana.db')] = '/var/lib/grafana/grafana.db:Z' elif daemon_type == 'alertmanager': mounts[os.path.join(data_dir, 'etc/alertmanager')] = '/etc/alertmanager:Z' -- 2.39.5