#!/bin/sh 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 # Read options as config for ZAF for pair in "$@"; do echo $pair | grep -q '^ZAF\_' || continue option=$(echo $pair|cut -d '=' -f 1) value=$(echo $pair|cut -d '=' -f 2-) eval "${option}='$value'" done [ -z "$ZAF_TMP_BASE" ] && ZAF_TMP_BASE=/tmp/zaf ZAF_TMP_DIR="${ZAF_TMP_BASE}-${USER}" [ -z "$ZAF_CACHE_DIR" ] && ZAF_CACHE_DIR=${ZAF_TMP_BASE}c [ -z "$ZAF_DEBUG" ] && ZAF_DEBUG=1 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 if [ -f ./lib/zaf.lib.sh ]; then . ./lib/zaf.lib.sh . ./lib/os.lib.sh . ./lib/ctrl.lib.sh . ./lib/cache.lib.sh . ./lib/zbxapi.lib.sh [ -f ./lib/zaf.${ZAF_OS}.sh ] && . ./lib/zaf.${ZAF_OS}.sh else . ${ZAF_LIB_DIR}/zaf.lib.sh . ${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 fi if zaf_is_root; then chgrp zabbix "${ZAF_CACHE_DIR}" chmod g+w "${ZAF_CACHE_DIR}" fi zaf_shift(){ local s if echo $1 |grep -q "="; then if echo $2 |grep -q "="; then if echo $3 |grep -q "="; then s=3 else s=2 fi else s=1 fi else s=0 fi echo $s } case $1 in check-agent-config) zaf_check_agent_config ;; cache-clean) zaf_cache_clean ;; userparms) for plugin in $(zaf_list_plugins); do plugindir=$ZAF_PLUGINS_DIR/$plugin control=$plugindir/control.zaf zaf_ctrl_generate_cfg "${control}" "${plugin}" \ | zaf_far '{PLUGINDIR}' "${plugindir}" done ;; agent-config) for plugin in $(zaf_list_plugins); do plugindir=$ZAF_PLUGINS_DIR/$plugin control=$plugindir/control.zaf zaf_ctrl_generate_cfg "${control}" "${plugin}" \ | zaf_far '{PLUGINDIR}' "${plugindir}" >${ZAF_AGENT_CONFIGD}/zaf_${plugin}.conf done ;; update) zaf_wrn "Updating repository ${ZAF_REPO_GITURL}..." zaf_update_repo ;; upgrade) ZAF_DEBUG=$ZAF_DEBUG $0 reinstall $(zaf_list_plugins) ;; show) shift; shift $(zaf_shift "$@") if [ -z "$1" ]; then zaf_list_plugins | while read plugin; do zaf_plugin_info $ZAF_PLUGINS_DIR/$plugin/control.zaf done 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." else if echo $1 |grep -q ^http; then zaf_prepare_plugin "$1" "$ZAF_TMP_DIR/plugin" zaf_plugin_info "$ZAF_TMP_DIR/plugin/control.zaf" else zaf_err "Plugin $1 not installed." fi fi fi ;; plugins) zaf_list_plugins ;; items) shift shift $(zaf_shift "$@") if [ -z "$1" ]; then zaf_list_items else zaf_list_plugin_items "$1" fi ;; test) shift shift $(zaf_shift "$@") if echo $1|grep -q '\.'; then zaf_test_item "$1" exit fi if [ -n "$1" ]; then plugins="$@" else plugins="$(zaf_list_plugins)" fi for p in $plugins; do ! zaf_is_plugin $p && zaf_err "Unknown plugin $p" for i in $(zaf_list_plugin_items $p); do echo $i: $(zaf_test_item $i) done done ;; get) shift shift $(zaf_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); do echo $i: $(zaf_get_item $i) done done ;; precache) shift shift $(zaf_shift "$@") for i in $*; do item=$(echo $i | cut -d '[' -f 1) params=$(echo $i | cut -d '[' -f 2 | cut -d ']' -f 1 | tr ',' ' ') zaf_precache_item $params done ;; install) shift shift $(zaf_shift "$@") [ -z "$1" ] && echo "$0 install plugin [plugin]..." for p in $@; do if zaf_is_plugin "$p"; then zaf_wrn "Plugin $p already installed. Skipping installation." continue fi zaf_install_plugin "$p" installed=1 done [ -n "$installed" ] && zaf_is_root && zaf_restart_agent ;; reinstall) shift shift $(zaf_shift "$@") [ -z "$1" ] && echo "$0 reinstall plugin [plugin]..." for p in $@; do if zaf_is_plugin "$p"; then zaf_remove_plugin "$(basename $p)" reinstalled=1 fi zaf_install_plugin "$p" reinstalled=1 done [ -n "$reinstalled" ] && zaf_is_root && zaf_restart_agent ;; remove) shift shift $(zaf_shift "$@") [ -z "$1" ] && echo "$0 remove plugin [plugin]..." 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 ;; self-upgrade) shift shift $(zaf_shift "$@") [ -z "$1" ] && auto=auto zaf_os_specific zaf_check_deps zaf && zaf_err "Zaf is installed as system package. Cannot self-upgrade." rm -rf /tmp/zaf-installer && mkdir /tmp/zaf-installer if ! which curl >/dev/null; then zaf_err "Curl not found. Cannot continue. Please install it." fi zaf_fetch_url $ZAF_RAW_URL/$ZAF_VERSION/install.sh | exec sh -s $auto "$@" exit ;; self-remove) shift shift $(zaf_shift "$@") zaf_os_specific zaf_check_deps zaf && zaf_err "Zaf is installed as system package. Cannot self-remove." . /etc/zaf.conf if [ "$1" = "force" ]; then rm -rf /etc/zaf.conf ${ZAF_PLUGINS_DIR} ${ZAF_REPO_DIR} ${ZAF_LIB_DIR} \ ${ZAF_BIN_DIR}/zaf ${ZAF_AGENT_CONFIGD}/zaf_* else echo "This will remove zaf from this computer and erase all configuration." 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 echo "To continue, please do $0 self-remove force" fi ;; api) zaf_zbxapi_login case $2 in hostid) zaf_zbxapi_gethostid "$3" ;; host) zaf_zbxapi_gethost "$3" ;; hostgroupid) zaf_zbxapi_gethostgroupid "$3" ;; hosts) gid=$(zaf_zbxapi_gethostgroupid "$3") zaf_zbxapi_gethostsingroup $gid ;; backup-group) set -e shift $(zaf_shift) shift; shift gid=$(zaf_zbxapi_gethostgroupid "$1") shift $(zaf_shift) shift hosts=$(zaf_zbxapi_gethostsingroup $gid) dir="." [ -n "$1" ] && dir="$1" zaf_wrn "Will backup this hosts: $hosts" zaf_wrn "Output dir: $dir" for h in $hosts; do zaf_bglimit 5 (hn=$(zaf_zbxapi_gethost $h) zaf_wrn "Exporting host $hn($h)..." zaf_zbxapi_backuphost $h >$dir/$hn.xml ) done wait ;; backup-host) shift $(zaf_shift) shift; shift hostid=$(zaf_zbxapi_gethostid "$1") zaf_wrn "Exporting host $3($hostid)..." zaf_zbxapi_backuphost $hostid ;; *) echo "$0 api command [parameters]" echo "hostid 'host' Get hostid from hostname" echo "host 'hostid' Get hostname from hostid" echo "hostgroupid 'hostgroup' Get hostgroup id from hostgroup" echo "hosts 'hostgroup' Get hosts in group" echo "backup-group 'hostgroup' [dir] Backup all hosts in group (get their config from zabbix and save to dir/hostname.xml)" echo "backup-host 'host' Backup host (get config from zabbix to stdout)" echo exit ;; esac ;; *) echo "$0 Version ${ZAF_VERSION}. Please use some of this commands:" echo "$0 Cmd [ZAF_OPTION=value] ..." echo "Commands:" echo "$0 update To update repo (not plugins, similar to apt-get update)" echo "$0 upgrade To upgrade installed plugins from repo" echo "$0 plugins To list installed plugins" echo "$0 show [plugin] To show installed plugins or plugin info" echo "$0 items [plugin] To list all suported items [for plugin]" echo "$0 test [plugin[.item]] To test [all] suported items by zabbix_agentd [for plugin]" echo "$0 get [plugin[.item]] To test [all] suported items by zabbix_get [for plugin]" echo "$0 install plugin To install plugin" echo "$0 remove plugin To remove plugin" echo "$0 api To zabbix API functions. See $0 api for more info." echo "$0 userparms See userparms generated from zaf on stdout" echo "$0 agent-config Reconfigure zabbix userparms in $ZAF_AGENT_CONFIGD" echo "$0 self-upgrade To self-upgrade zaf" echo "$0 self-remove To self-remove zaf and its config" echo "$0 cache-clean To remove all entries from cache" echo ;; esac