From: Paul Cuzner Date: Thu, 1 Apr 2021 04:38:18 +0000 (+1300) Subject: cephadm:persist the grafana.db file X-Git-Tag: v16.2.2~28^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3d5531fa3f9f2c7d8d1bc0ab80402fc3665cefd7;p=ceph.git 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 (cherry picked from commit 581250d943915cb3f8e7e4071440ee5cad5e5908) --- diff --git a/src/cephadm/cephadm b/src/cephadm/cephadm index e0383c60974..fe870f6e814 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 = 'docker.io/ceph/ceph:v16' @@ -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'