1
0
mirror of https://github.com/limosek/zaf.git synced 2024-11-14 06:29:07 +01:00
limosek-zaf/zaf

454 lines
12 KiB
Plaintext
Raw Normal View History

2016-03-23 14:37:51 +01:00
#!/bin/sh
if [ -z "$secondstage" ]; then
ZAF_CFG_FILE="/etc/zaf.conf"
if [ -f $ZAF_CFG_FILE ]; then
. $ZAF_CFG_FILE
else
echo "Missing config file $ZAF_CFG_FILE! Exiting."
exit 2
fi
2016-03-23 14:37:51 +01:00
# Read options as config for ZAF
for pair in "$@"; do
if echo $pair | grep -qE '^ZAF\_(.*)='; then
option=$(echo $pair|cut -d '=' -f 1)
value=$(echo $pair|cut -d '=' -f 2-)
eval "${option}='$value'"
export secondstage=1
else
params="$params $pair"
fi
done
export $(set |grep ^ZAF_ | cut -d '=' -f 1)
# If some variables in cmd were stripped, rerun only with right arguments and exported variables
[ -n "$secondstage" ] && exec $0 $params
fi
2016-04-07 13:14:53 +02:00
2016-03-30 16:09:02 +02:00
[ -z "$ZAF_TMP_BASE" ] && ZAF_TMP_BASE=/tmp/zaf
2016-04-01 12:20:23 +02:00
ZAF_TMP_DIR="${ZAF_TMP_BASE}-${USER}"
[ -z "$ZAF_CACHE_DIR" ] && ZAF_CACHE_DIR=${ZAF_TMP_BASE}c
2016-04-01 12:20:23 +02:00
[ -z "$ZAF_DEBUG" ] && ZAF_DEBUG=1
2016-04-12 10:36:17 +02:00
export ZAF_DEBUG
# If debug is on, do not remove tmp dir
if [ "$ZAF_DEBUG" -le 3 ]; then
trap "rm -rif ${ZAF_TMP_DIR}" EXIT
fi
! [ -d "${ZAF_TMP_DIR}" ] && mkdir "${ZAF_TMP_DIR}"
if ! [ -d "${ZAF_CACHE_DIR}" ]; then
mkdir "${ZAF_CACHE_DIR}"
fi
2016-03-30 16:09:02 +02:00
2016-04-01 15:51:45 +02:00
if [ -f ./lib/zaf.lib.sh ]; then
. ./lib/zaf.lib.sh
. ./lib/plugin.lib.sh
2016-04-01 15:51:45 +02:00
. ./lib/os.lib.sh
. ./lib/ctrl.lib.sh
. ./lib/cache.lib.sh
. ./lib/zbxapi.lib.sh
2016-04-01 15:51:45 +02:00
[ -f ./lib/zaf.${ZAF_OS}.sh ] && . ./lib/zaf.${ZAF_OS}.sh
else
2016-03-23 14:37:51 +01:00
. ${ZAF_LIB_DIR}/zaf.lib.sh
2016-04-19 17:38:02 +02:00
. ${ZAF_LIB_DIR}/plugin.lib.sh
2016-03-30 16:09:02 +02:00
. ${ZAF_LIB_DIR}/os.lib.sh
. ${ZAF_LIB_DIR}/ctrl.lib.sh
. ${ZAF_LIB_DIR}/cache.lib.sh
. ${ZAF_LIB_DIR}/zbxapi.lib.sh
[ -f ${ZAF_LIB_DIR}/zaf.${ZAF_OS}.sh ] && . ${ZAF_LIB_DIR}/zaf.${ZAF_OS}.sh
2016-04-01 15:51:45 +02:00
fi
2016-03-23 14:37:51 +01:00
if zaf_is_root; then
chgrp zabbix "${ZAF_CACHE_DIR}"
chmod g+w "${ZAF_CACHE_DIR}"
fi
2016-03-23 14:37:51 +01:00
case $1 in
2016-03-23 17:25:18 +01:00
cache-clean)
zaf_cache_clean
;;
cache-list)
zaf_cache_list
;;
2016-04-19 11:31:23 +02:00
version)
echo "$ZAF_VERSION<git $ZAF_GITBRANCH>"
[ $ZAF_DEBUG -gt 1 ] && set |grep -E ^ZAF_
;;
###### Agent related commands
userparms)
for plugin in $(zaf_list_plugins); do
plugindir=$ZAF_PLUGINS_DIR/$plugin
control=$plugindir/control.zaf
zaf_ctrl_generate_cfg "${control}" "${plugin}" "noscripts" \
| zaf_far '{PLUGINDIR}' "${plugindir}"
done
;;
agent-config)
zaf_wrn "Generating config files in $ZAF_AGENT_CONFIGD ..."
for plugin in $(zaf_list_plugins); do
plugindir=$ZAF_PLUGINS_DIR/$plugin
control=$plugindir/control.zaf
zaf_dbg "Generating ${ZAF_AGENT_CONFIGD}/zaf_${plugin}.conf"
zaf_ctrl_generate_cfg "${control}" "${plugin}" \
| zaf_far '{PLUGINDIR}' "${plugindir}" >${ZAF_AGENT_CONFIGD}/zaf_${plugin}.conf
done
;;
2016-04-19 11:31:23 +02:00
###### Plugins related commands
2016-03-23 14:37:51 +01:00
update)
2016-04-12 10:36:17 +02:00
zaf_wrn "Updating repository ${ZAF_REPO_GITURL}..."
2016-03-23 14:37:51 +01:00
zaf_update_repo
;;
2016-04-12 10:36:17 +02:00
upgrade)
ZAF_DEBUG=$ZAF_DEBUG $0 reinstall $(zaf_list_plugins)
2016-04-12 10:36:17 +02:00
;;
2016-03-24 15:46:42 +01:00
show)
2016-04-12 10:36:17 +02:00
shift;
if [ -z "$1" ]; then
2016-04-01 12:20:23 +02:00
zaf_list_plugins | while read plugin; do
zaf_plugin_info $ZAF_PLUGINS_DIR/$plugin/control.zaf
done
2016-04-12 10:36:17 +02:00
else
if zaf_list_plugins | grep -q "^$1"; then
[ -f $ZAF_PLUGINS_DIR/$1/control.zaf ] && zaf_plugin_info $ZAF_PLUGINS_DIR/$1/control.zaf || zaf_err "Plugin $1 not installed."
2016-04-01 12:20:23 +02:00
else
2016-04-12 10:36:17 +02:00
if echo $1 |grep -q ^http; then
zaf_prepare_plugin "$1" "$ZAF_TMP_DIR/plugin"
2016-04-01 15:51:45 +02:00
zaf_plugin_info "$ZAF_TMP_DIR/plugin/control.zaf"
else
2016-04-12 10:36:17 +02:00
zaf_err "Plugin $1 not installed."
2016-04-01 15:51:45 +02:00
fi
2016-04-01 12:20:23 +02:00
fi
2016-03-24 15:46:42 +01:00
fi
;;
2016-04-01 15:51:45 +02:00
plugins)
2016-03-24 15:46:42 +01:00
zaf_list_plugins
2016-03-23 14:37:51 +01:00
;;
2016-04-01 15:51:45 +02:00
items)
2016-04-12 10:36:17 +02:00
shift
if [ -z "$1" ]; then
2016-03-24 15:46:42 +01:00
zaf_list_items
else
2016-04-12 10:36:17 +02:00
zaf_list_plugin_items "$1"
2016-03-24 15:46:42 +01:00
fi
;;
2016-04-01 15:51:45 +02:00
test)
[ "$USER" != "zabbix" ] && zaf_wrn "You are not zabbix user. Test will be run with your privileges and sudo access!"
2016-04-12 10:36:17 +02:00
shift
if echo $1|grep -q '\.'; then
zaf_test_item "$1"
2016-04-04 14:49:38 +02:00
exit
fi
2016-04-12 10:36:17 +02:00
if [ -n "$1" ]; then
2016-04-01 15:51:45 +02:00
plugins="$@"
else
plugins="$(zaf_list_plugins)"
fi
for p in $plugins; do
2016-04-12 10:36:17 +02:00
! zaf_is_plugin $p && zaf_err "Unknown plugin $p"
for i in $(zaf_list_plugin_items $p test); do
2016-04-01 15:51:45 +02:00
echo $i: $(zaf_test_item $i)
echo
2016-04-01 15:51:45 +02:00
done
done
2016-03-23 17:25:18 +01:00
;;
2016-04-12 10:36:17 +02:00
get)
shift
if echo $1|grep -q '\.'; then
zaf_get_item "$1"
exit
fi
if [ -n "$1" ]; then
plugins="$@"
else
plugins="$(zaf_list_plugins)"
fi
for p in $plugins; do
for i in $(zaf_list_plugin_items $p test); do
2016-04-12 10:36:17 +02:00
echo $i: $(zaf_get_item $i)
echo
2016-04-12 10:36:17 +02:00
done
done
;;
precache)
shift
for i in $*; do
if zaf_is_plugin $i; then
for j in $(zaf_list_plugin_items $i precache); do
item=$(echo $j | cut -d '[' -f 1)
params=$(echo $j | cut -d '[' -f 2 | cut -d ']' -f 1 | tr ',' ' ')
zaf_precache_item $params >/dev/null
done
else
item=$(echo $i | cut -d '[' -f 1)
params=$(echo $i | cut -d '[' -f 2 | cut -d ']' -f 1 | tr ',' ' ')
zaf_precache_item $params >/dev/null
fi
done
;;
2016-03-23 14:37:51 +01:00
install)
2016-04-12 10:36:17 +02:00
shift
2016-04-04 14:00:44 +02:00
[ -z "$1" ] && echo "$0 install plugin [plugin]..."
2016-03-30 16:09:02 +02:00
for p in $@; do
if zaf_is_plugin "$(basename $p)"; then
zaf_wrn "Plugin $(basename $p) already installed. Skipping installation."
2016-04-01 12:20:23 +02:00
continue
fi
2016-03-30 16:09:02 +02:00
zaf_install_plugin "$p"
2016-04-01 12:20:23 +02:00
installed=1
2016-03-30 16:09:02 +02:00
done
2016-04-01 12:20:23 +02:00
[ -n "$installed" ] && zaf_is_root && zaf_restart_agent
;;
reinstall)
2016-04-12 10:36:17 +02:00
shift
2016-04-04 14:00:44 +02:00
[ -z "$1" ] && echo "$0 reinstall plugin [plugin]..."
2016-04-01 12:20:23 +02:00
for p in $@; do
if zaf_is_plugin "$p"; then
2016-04-01 15:51:45 +02:00
zaf_remove_plugin "$(basename $p)"
2016-04-01 12:20:23 +02:00
reinstalled=1
fi
zaf_install_plugin "$p"
reinstalled=1
done
[ -n "$reinstalled" ] && zaf_is_root && zaf_restart_agent
2016-03-23 14:37:51 +01:00
;;
2016-03-23 17:25:18 +01:00
remove)
2016-04-12 10:36:17 +02:00
shift
2016-04-04 14:00:44 +02:00
[ -z "$1" ] && echo "$0 remove plugin [plugin]..."
2016-04-01 12:20:23 +02:00
for p in $@; do
if zaf_is_plugin "$p"; then
zaf_remove_plugin "$p"
removed=1
fi
done
[ -n "$removed" ] && zaf_is_root && zaf_restart_agent
2016-03-23 17:25:18 +01:00
;;
2016-04-19 11:31:23 +02:00
###### Zaf related commands
2016-03-24 15:46:42 +01:00
self-upgrade)
2016-04-12 10:36:17 +02:00
shift
[ -z "$1" ] && auto=auto
2016-04-07 13:14:53 +02:00
zaf_os_specific zaf_check_deps zaf && zaf_err "Zaf is installed as system package. Cannot self-upgrade."
2016-03-30 16:09:02 +02:00
rm -rf /tmp/zaf-installer && mkdir /tmp/zaf-installer
2016-04-04 15:10:38 +02:00
if ! which curl >/dev/null;
then
zaf_err "Curl not found. Cannot continue. Please install it."
2016-03-30 16:09:02 +02:00
fi
2016-04-14 10:04:45 +02:00
zaf_fetch_url $ZAF_RAW_URL/$ZAF_GITBRANCH/install.sh | exec sh -s $auto "$@"
2016-04-04 15:10:38 +02:00
exit
2016-03-24 15:46:42 +01:00
;;
2016-03-24 20:37:03 +01:00
self-remove)
2016-04-12 10:36:17 +02:00
shift
2016-04-07 13:14:53 +02:00
zaf_os_specific zaf_check_deps zaf && zaf_err "Zaf is installed as system package. Cannot self-remove."
2016-04-01 15:51:45 +02:00
. /etc/zaf.conf
2016-04-12 10:36:17 +02:00
if [ "$1" = "force" ]; then
2016-04-01 15:51:45 +02:00
rm -rf /etc/zaf.conf ${ZAF_PLUGINS_DIR} ${ZAF_REPO_DIR} ${ZAF_LIB_DIR} \
${ZAF_BIN_DIR}/zaf ${ZAF_AGENT_CONFIGD}/zaf_*
2016-03-24 20:37:03 +01:00
else
echo "This will remove zaf from this computer and erase all configuration."
2016-04-01 15:51:45 +02:00
echo "This command will be executed:"
echo "rm -rf /etc/zaf.conf ${ZAF_PLUGINS_DIR} ${ZAF_REPO_DIR} ${ZAF_LIB_DIR} \
${ZAF_BIN_DIR}/zaf ${ZAF_AGENT_CONFIGD}/zaf_*"
echo
2016-03-24 20:37:03 +01:00
echo "To continue, please do $0 self-remove force"
fi
;;
2016-04-19 11:31:23 +02:00
###### API related commands
api)
zaf_zbxapi_login
case $2 in
2016-04-18 10:24:55 +02:00
get-*-id)
obj=$(echo $2|cut -d '-' -f 2)
2016-04-18 09:20:57 +02:00
[ -z "$3" ] && zaf_err "$0 $1 $2 <$obj>"
eval zaf_zbxapi_get${obj}id "$3"
;;
2016-04-18 10:24:55 +02:00
get-byid-*|get-id-*)
obj=$(echo $2|cut -d '-' -f 3)
2016-04-18 09:20:57 +02:00
[ -z "$3" ] && zaf_err "$0 $1 $2 <id>"
2016-04-18 10:24:55 +02:00
eval zaf_zbxapi_get${obj} "$3" "$4"
2016-04-18 09:20:57 +02:00
;;
2016-04-18 10:24:55 +02:00
get-host-ids)
2016-04-18 09:20:57 +02:00
if [ -n "$3" ]; then
gid=$(zaf_zbxapi_gethostgroupid "$3") || exit 1
zaf_dbg "Selecting all hosts in group $3($gid)"
zaf_zbxapi_gethostsingroup $gid
else
zaf_dbg "Selecting all hosts in system"
zaf_zbxapi_gethostids
fi
;;
2016-04-18 10:24:55 +02:00
get-inventory)
2016-04-19 11:31:23 +02:00
[ -z "$3" ] && zaf_err "$0 $1 field [host]. If host unspecified, use hostname"
if [ -z "$4" ]; then
host=$(hostname)
else
host="$4"
fi
zaf_zbxapi_gethostinventory $host $3
2016-04-18 10:24:55 +02:00
;;
get-template-ids)
2016-04-18 09:20:57 +02:00
if [ -n "$3" ]; then
gid=$(zaf_zbxapi_gethostgroupid "$3") || exit 1
zaf_dbg "Selecting all templates in group $3($gid)"
zaf_zbxapi_gettemplatesingroup $gid
else
zaf_dbg "Selecting all templates in system"
zaf_zbxapi_gettemplateids
fi
;;
2016-04-18 10:24:55 +02:00
get-map-ids)
2016-04-18 09:20:57 +02:00
zaf_zbxapi_getmapid
;;
2016-04-14 14:46:29 +02:00
export-hosts)
shift; shift
2016-04-14 14:46:29 +02:00
[ -z "$1" ] && zaf_err "$0 api export-hosts dir [hostgroup]"
dir="$1"
shift
2016-04-14 14:46:29 +02:00
if [ -n "$1" ]; then
gid=$(zaf_zbxapi_gethostgroupid "$1") || exit 1
shift
hosts=$(zaf_zbxapi_gethostsingroup $gid)
else
2016-04-18 12:58:49 +02:00
hosts=$(zaf_zbxapi_gethostids)
2016-04-14 14:46:29 +02:00
fi
zaf_wrn "Will backup this hosts: $hosts"
zaf_wrn "Output dir: $dir"
for h in $hosts; do
if zaf_bglimit 5; then
(
2016-04-18 12:58:49 +02:00
hn=$(zaf_zbxapi_gethost $h name)
zaf_wrn "Exporting host $hn($h)..."
zaf_zbxapi_export_host $h >"$dir/$hn.xml"
) &
else
2016-04-18 12:58:49 +02:00
hn=$(zaf_zbxapi_gethost $h name)
zaf_wrn "Exporting host $hn($h)..."
zaf_zbxapi_export_host $h >"$dir/$hn.xml"
fi
done
wait
;;
export-host)
shift; shift
hostid=$(zaf_zbxapi_gethostid "$1") || exit 1
zaf_wrn "Exporting host $3($hostid)..."
zaf_zbxapi_export_host $hostid
;;
export-template)
shift; shift
templateid=$(zaf_zbxapi_gettemplateid "$1") || exit 1
zaf_wrn "Exporting template $3($hostid)..."
zaf_zbxapi_export_template $templateid
;;
export-templates)
shift; shift
2016-04-14 14:46:29 +02:00
[ -z "$1" ] && zaf_err "$0 api export-templates dir"
dir="$1"
2016-04-18 12:58:49 +02:00
templates=$(zaf_zbxapi_gettemplateids)
zaf_wrn "Will backup this templates: $templates"
zaf_wrn "Output dir: $dir"
for t in $templates; do
if zaf_bglimit 5; then
(
2016-04-18 12:58:49 +02:00
tn=$(zaf_zbxapi_gettemplate $t name)
zaf_wrn "Exporting template $tn($t)..."
zaf_zbxapi_export_template $t >"$dir/$tn.xml"
) &
else
2016-04-18 12:58:49 +02:00
tn=$(zaf_zbxapi_gettemplate $t name)
zaf_wrn "Exporting template $tn($t)..."
zaf_zbxapi_export_template $t >"$dir/$tn.xml"
fi
done
wait
;;
import-template)
shift; shift
if zaf_is_plugin $1; then
if [ -f "$ZAF_PLUGINS_DIR/$1/template.xml" ]; then
template="$ZAF_PLUGINS_DIR/$1/template.xml"
zaf_wrn "Importing template $template"
2016-04-19 20:11:09 +02:00
zaf_zbxapi_import_config $template || zaf_err "Error importing template"
else
url="$(zaf_plugin_option $1 Template)"
if [ -n "$url" ]; then
2016-04-19 20:11:09 +02:00
zaf_fetch_url $url | zaf_zbxapi_import_config || zaf_err "Error importing template"
else
url="$(zaf_plugin_option $1 Url)"
2016-04-19 20:11:09 +02:00
zaf_fetch_url $url/template.xml | zaf_zbxapi_import_config || zaf_err "Error importing template"
fi
fi
else
if [ -f $1 ]; then
zaf_wrn "Importing template $1"
2016-04-19 20:11:09 +02:00
zaf_zbxapi_import_config $1 || zaf_err "Error importing template"
else
zaf_err "Unknown plugin $1!"
fi
fi
;;
*)
echo "$0 api command [parameters]"
2016-04-18 09:20:57 +02:00
for i in host template map; do
2016-04-18 10:24:55 +02:00
zaf_hlp "get-${i}-id $i" "Get $i id"
zaf_hlp "get-byid-${i} id [property]" "Get $i property from id. Leave empty property for JSON"
2016-04-18 09:20:57 +02:00
done
zaf_hlp "get-inventory host [fields]" "Get inventory fields [or all fields]"
zaf_hlp "get-host-ids [hg]" "Get all hostids or hostids in group hg"
zaf_hlp "get-template-ids [hg]" "Get all templateids or templateids in group hg"
zaf_hlp "get-map-ids" "Get all mapids"
2016-04-18 09:20:57 +02:00
zaf_hlp "export-hosts dir [hg]" "Backup all hosts [in group hg] (get their config from zabbix and save to dir/hostname.xml)"
zaf_hlp "export-host host" "Backup host (get config from zabbix to stdout)"
zaf_hlp "import-template {plugin|file}" "Import template for plugin or from file"
zaf_hlp "export-template name" "Export template to stdout"
zaf_hlp "export-templates dir" "Export all template to dir"
echo
2016-04-19 11:31:23 +02:00
[ -n "$2" ] && zaf_err "Bad API command '$2'!"
;;
esac
;;
2016-03-24 15:46:42 +01:00
2016-03-23 14:37:51 +01:00
*)
2016-04-04 14:00:44 +02:00
echo "$0 Version ${ZAF_VERSION}. Please use some of this commands:"
2016-04-14 10:44:50 +02:00
echo "$0 Cmd [ZAF_OPTION=value] [ZAF_CTRL_Option=value] [ZAF_CTRLI_Item_Option=value] ..."
2016-04-18 09:20:57 +02:00
echo "Plugin manipulation commands:"
zaf_hlp "$0 update" "To update repo (not plugins, similar to apt-get update)"
zaf_hlp "$0 upgrade" "To upgrade installed plugins from repo"
zaf_hlp "$0 install plugin" "To install plugin"
zaf_hlp "$0 remove plugin" "To remove plugin"
echo
echo "Plugin info commands:"
zaf_hlp "$0 plugins" "To list installed plugins"
zaf_hlp "$0 show [plugin]" "To show installed plugins or plugin info"
zaf_hlp "$0 items [plugin]" "To list all suported items [for plugin]"
echo
echo "Plugin diagnostic commands:"
zaf_hlp "$0 test [plugin[.item]]" "To test [all] suported items by zabbix_agentd [for plugin]"
zaf_hlp "$0 get [plugin[.item]]" "To test [all] suported items by zabbix_get [for plugin]"
zaf_hlp "$0 precache [plugin[.item]]" "To precache [all] suported items"
echo
echo "Zabbix API commands:"
zaf_hlp "$0 api" "To zabbix API functions. See $0 api for more info."
echo
echo "Agent config info commands:"
zaf_hlp "$0 userparms" "See userparms generated from zaf on stdout"
zaf_hlp "$0 agent-config" "Reconfigure zabbix userparms in $ZAF_AGENT_CONFIGD"
echo
echo "Zaf related commands:"
zaf_hlp "$0 self-upgrade" "To self-upgrade zaf"
zaf_hlp "$0 self-remove" "To self-remove zaf and its config"
zaf_hlp "$0 cache-clean" "To remove all entries from cache"
zaf_hlp "$0 cache-list" "To show all entries in cache"
2016-04-12 10:36:17 +02:00
echo
2016-04-19 11:31:23 +02:00
[ -n "$1" ] && zaf_err "Bad command '$1'!"
2016-03-23 14:37:51 +01:00
;;
2016-03-23 17:25:18 +01:00
2016-03-23 14:37:51 +01:00
esac