summaryrefslogtreecommitdiffstats
path: root/conf.d
diff options
context:
space:
mode:
authorCosta Tsaousis <costa@tsaousis.gr>2018-10-01 23:24:47 +0300
committerGitHub <noreply@github.com>2018-10-01 23:24:47 +0300
commit07060aec6f3d8a73cd38399dee6f441f90f0592e (patch)
treeecf5eaff54606ebae748216ff1c3644ee0645f1e /conf.d
parentbe67d572e0ee4262088e41f035b9de7a3da7b4ac (diff)
added edit-config (#4338)
Diffstat (limited to 'conf.d')
-rw-r--r--conf.d/Makefile.am19
-rwxr-xr-xconf.d/edit-config.in94
2 files changed, 113 insertions, 0 deletions
diff --git a/conf.d/Makefile.am b/conf.d/Makefile.am
index 5b705a5945..5021e7f97f 100644
--- a/conf.d/Makefile.am
+++ b/conf.d/Makefile.am
@@ -3,6 +3,21 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
MAINTAINERCLEANFILES= $(srcdir)/Makefile.in
+CLEANFILES = \
+ edit-config \
+ $(NULL)
+
+include $(top_srcdir)/build/subst.inc
+
+SUFFIXES = .in
+
+dist_config_SCRIPTS = \
+ edit-config \
+ $(NULL)
+
+dist_noinst_DATA = \
+ edit-config.in \
+ $(NULL)
dist_libconfig_DATA = \
apps_groups.conf \
@@ -17,6 +32,10 @@ dist_libconfig_DATA = \
nodeconfigdir=$(libconfigdir)/node.d
dist_nodeconfig_DATA = \
+ $(NULL)
+
+usernodeconfigdir=$(configdir)/node.d
+dist_usernodeconfig_DATA = \
node.d/README.md \
node.d/fronius.conf.md \
node.d/named.conf.md \
diff --git a/conf.d/edit-config.in b/conf.d/edit-config.in
new file mode 100755
index 0000000000..7f11193493
--- /dev/null
+++ b/conf.d/edit-config.in
@@ -0,0 +1,94 @@
+#!/usr/bin/env sh
+
+[ -f /etc/profile ] && source /etc/profile
+
+file="${1}"
+
+EDITOR="${EDITOR-vi}"
+[ -z "${NETDATA_USER_CONFIG_DIR}" ] && NETDATA_USER_CONFIG_DIR="@configdir_POST@"
+[ -z "${NETDATA_STOCK_CONFIG_DIR}" ] && NETDATA_STOCK_CONFIG_DIR="@libconfigdir_POST@"
+
+if [ -z "${file}" ]
+then
+ cat <<USAGE
+
+USAGE:
+ ${0} FILENAME
+
+ Find the stock config file named FILENAME and edit it.
+
+ Stock config files at: '${NETDATA_STOCK_CONFIG_DIR}'
+ User config files at: '${NETDATA_USER_CONFIG_DIR}'
+
+ Available files in '${NETDATA_STOCK_CONFIG_DIR}' to copy and edit:
+
+USAGE
+
+ cd "${NETDATA_STOCK_CONFIG_DIR}" || exit 1
+ ls >&2 -R *.conf */*.conf
+ exit 1
+
+fi
+
+file_is_in_path() {
+ local file path real
+ file="${1}"
+ path="${2}"
+
+ real="$(readlink -f "${file}")"
+
+ # we don't have working readlink
+ [ -z "${real}" ] && return 0
+
+ if [ ! -z "${real}" ] && [ -z "$(echo "${real}" | grep -E "^${path}.*$")" ]
+ then
+ echo >&2 "File '${file}' is physically at '${real}', which is not in '${path}'. Aborting."
+ exit 1
+ fi
+
+ return 0
+}
+
+edit() {
+ echo >&2 "Editing '${1}' ..."
+
+ # check we can edit
+ file_is_in_path "${1}" "${NETDATA_USER_CONFIG_DIR}" || exit 1
+
+ "${EDITOR}" "${1}"
+ exit $?
+}
+
+copy_and_edit() {
+ # check we can copy
+ file_is_in_path "${NETDATA_STOCK_CONFIG_DIR}/${1}" "${NETDATA_STOCK_CONFIG_DIR}" || exit 1
+
+ if [ ! -f "${NETDATA_USER_CONFIG_DIR}/${1}" ]
+ then
+ echo >&2 "Copying '${NETDATA_STOCK_CONFIG_DIR}/${1}' to '${NETDATA_USER_CONFIG_DIR}/${1}' ... "
+ cp -p "${NETDATA_STOCK_CONFIG_DIR}/${1}" "${NETDATA_USER_CONFIG_DIR}/${1}" || exit 1
+ fi
+
+ edit "${NETDATA_USER_CONFIG_DIR}/${1}"
+}
+
+# make sure it is not absolute filename
+c1="$(echo "${file}" | cut -b 1)"
+if [ "${c1}" = "/" ] || [ "${c1}" = "." ]
+then
+ echo >&2 "Please don't use filenames starting with '/' or '.'"
+ exit 1
+fi
+
+# already exists
+if [ -f "${NETDATA_USER_CONFIG_DIR}/${file}" ]
+then
+ echo >&2 "Editing existing file '${NETDATA_USER_CONFIG_DIR}/${file}' ... "
+ edit "${NETDATA_USER_CONFIG_DIR}/${file}"
+fi
+
+[ -f "${NETDATA_USER_CONFIG_DIR}/${file}" ] && edit "${NETDATA_USER_CONFIG_DIR}/${file}"
+[ -f "${NETDATA_STOCK_CONFIG_DIR}/${file}" ] && copy_and_edit "${file}"
+
+echo >&2 "File '${file}' is not found in '${NETDATA_STOCK_CONFIG_DIR}'"
+exit 1