зеркало из
				https://github.com/limosek/zaf.git
				synced 2025-10-31 17:47:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			589 строки
		
	
	
		
			16 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Исполняемый файл
		
	
	
	
	
			
		
		
	
	
			589 строки
		
	
	
		
			16 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Исполняемый файл
		
	
	
	
	
| #!/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
 | |
| 
 | |
| 	# 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
 | |
| 
 | |
| export ZAF_BIN=$(realpath $0)
 | |
| 
 | |
| if [ -n "$ZAF_PROXY" ]; then
 | |
| 	export ALL_PROXY="$ZAF_PROXY"
 | |
| 	export http_proxy="$ZAF_PROXY"
 | |
| 	export https_proxy="$ZAF_PROXY"
 | |
| fi
 | |
| 
 | |
| if [ -f ./lib/zaf.lib.sh ]; then
 | |
| . ./lib/zaf.lib.sh
 | |
| . ./lib/plugin.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}/plugin.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
 | |
| 
 | |
| zaf_debug_init stderr
 | |
| zaf_tmp_init
 | |
| zaf_cache_init
 | |
| 
 | |
| case $1 in
 | |
| 
 | |
| cache-clean)
 | |
| 	zaf_cache_clean
 | |
| 	;;
 | |
| cache-list)
 | |
| 	zaf_cache_list
 | |
| 	;;
 | |
| cache-test1)
 | |
| 	for i in test1 test2 test3; do
 | |
| 		echo "To cache:"
 | |
| 		echo "$i" | zaf_tocache_stdin "test" 10
 | |
| 	done
 | |
| 	;;
 | |
| cache-test2)
 | |
| 	for i in test1 test2 test3; do
 | |
| 		echo "From cache:"
 | |
| 		zaf_fromcache "test"
 | |
| 	done
 | |
| 	;;
 | |
| 
 | |
| 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_items_cfg "${control}" "${plugin}" "noscripts" \
 | |
| 		 | zaf_far '{PLUGINDIR}' "${plugindir}"
 | |
| 	done
 | |
| 	;;
 | |
| agent-config)
 | |
| 	[ -n "$2" ] && force=yes
 | |
| 	for p in $(zaf_list_plugins); do
 | |
| 		if [ -f "$ZAF_PLUGINS_DIR/$p/postinst.need" ]; then
 | |
| 			zaf_wrn "Calling postinstalation of plugin $p"
 | |
| 			zaf_postinstall_plugin $p && rm -f "$ZAF_PLUGINS_DIR/$p/postinst.need"
 | |
| 			force=yes
 | |
| 		fi
 | |
| 	done
 | |
| 	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
 | |
| 		if ! [ -f "${ZAF_AGENT_CONFIGD}/zaf_${plugin}.conf" ] || [ "$control" -nt "${ZAF_AGENT_CONFIGD}/zaf_${plugin}.conf" ] || [ -n "$force" ]; then
 | |
| 			zaf_dbg "Generating ${ZAF_AGENT_CONFIGD}/zaf_${plugin}.conf"
 | |
| 			zaf_ctrl_generate_items_cfg "${control}" "${plugin}" \
 | |
| 			 | zaf_far '{PLUGINDIR}' "${plugindir}" >${ZAF_AGENT_CONFIGD}/zaf_${plugin}.conf
 | |
| 		fi
 | |
| 	done
 | |
| 	;;
 | |
| server-config)
 | |
| 	zaf_wrn "Not implemented yet"
 | |
| 	;;
 | |
| 
 | |
| ###### Plugins related commands
 | |
| update)
 | |
| 	zaf_wrn "Updating repository ${ZAF_REPO_GITURL}..."
 | |
| 	zaf_update_repo
 | |
| 	;;
 | |
| upgrade)
 | |
| 	ZAF_DEBUG=$ZAF_DEBUG $0 reinstall $(zaf_list_plugins)
 | |
| 	;;
 | |
| show)
 | |
| 	shift;
 | |
| 	if [ -z "$1" ]; then
 | |
| 		zaf_list_plugins | while read plugin; do
 | |
| 			zaf_plugin_info $ZAF_PLUGINS_DIR/$plugin/control.zaf
 | |
| 		done
 | |
| 	else
 | |
| 		if echo $1 | grep -vq "\."; then
 | |
| 			if zaf_list_plugins | grep -q "^$1"; then
 | |
| 				zaf_is_plugin $1 && 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
 | |
| 		else
 | |
| 			zaf_item_info "$1"
 | |
| 		fi
 | |
| 	fi
 | |
| 	;;
 | |
| plugins)
 | |
| 	zaf_list_plugins
 | |
| 	;;
 | |
| items)
 | |
| 	shift
 | |
| 	if [ -z "$1" ]; then
 | |
| 		zaf_list_items
 | |
| 	else
 | |
| 		zaf_list_plugin_items "$1"
 | |
| 	fi
 | |
| 	;;
 | |
| test)
 | |
| 	[ "$USER" != "zabbix" ] && zaf_wrn "You are not zabbix user. Test will be run with your privileges and sudo access!"
 | |
| 	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 test); do 
 | |
| 			zaf_test_item $i
 | |
| 			echo
 | |
| 		done
 | |
| 	done
 | |
| 	;;
 | |
| itemsh)
 | |
| 	shift
 | |
| 	if zaf_is_item "$1"; then
 | |
| 		plugin=$(zaf_get_plugin_name "$1")
 | |
| 		item=$(zaf_get_item_name "$1")
 | |
| 		params=$(zaf_get_item_params "$1")
 | |
| 		params2=$(zaf_paramstosh "[$params]")
 | |
| 		script=$(zaf_ctrl_generate_items_cfg "${ZAF_PLUGINS_DIR}/${plugin}/control.zaf" "${plugin}" "" "sh -i #"| grep "UserParameter=$plugin.$item" | cut -d ',' -f 2-)
 | |
| 		exec sh -c "$script" dummy $params2
 | |
| 	else
 | |
| 		zaf_err "No such plugin/item $1"
 | |
| 	fi
 | |
| 	;;
 | |
| run)
 | |
| 	shift
 | |
| 	if zaf_is_item "$1"; then
 | |
| 		plugin=$(zaf_get_plugin_name "$1")
 | |
| 		item=$(zaf_get_item_name "$1")
 | |
| 		params=$(zaf_get_item_params "$1")
 | |
| 		params2=$(zaf_paramstosh "[$params]")
 | |
| 		script=$(zaf_ctrl_generate_items_cfg "${ZAF_PLUGINS_DIR}/${plugin}/control.zaf" "${plugin}" | grep "UserParameter=$plugin.$item" | cut -d ',' -f 2-)
 | |
| 		exec sh -c "$script" dummy $params2
 | |
| 	else
 | |
| 		zaf_err "No such plugin/item $1"
 | |
| 	fi
 | |
| 	;;
 | |
| get)
 | |
| 	shift
 | |
| 	if zaf_is_item "$1"; 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 
 | |
| 			echo $i: $(zaf_get_item $i)
 | |
| 			echo
 | |
| 		done
 | |
| 	done
 | |
| 	;;
 | |
| send)
 | |
| 	shift
 | |
| 	if [ -z "$1" ]; then
 | |
| 		zaf_dbg "Waiting for data on stdin (host item value) per line"
 | |
| 		zscmd="zabbix_sender -z '$ZAF_ZBXSRV_HOST' -p '$ZAF_ZBXSRV_PORT' -i -"
 | |
| 		zaf_dbg $zscmd
 | |
| 		eval $zscmd 2>&1 | zaf_dbg
 | |
| 		exit
 | |
| 	else
 | |
| 		if [ -n "$2" ]; then
 | |
| 			exec $0 send "$2" "$3" ZAF_HOSTNAME="$1"
 | |
| 		else
 | |
| 			if zaf_is_item "$1"; then
 | |
| 				plugin=$(zaf_get_plugin_name "$1")
 | |
| 				item=$(zaf_get_item_name "$1")
 | |
| 				zscmd="zabbix_sender -z '$ZAF_ZBXSRV_HOST' -p '$ZAF_ZBXSRV_PORT' -s '$(zaf_hostname)' -k '$plugin.$item' -o '$(zaf_run_item $1)'"
 | |
| 				zaf_dbg $zscmd
 | |
| 				eval $zscmd 2>&1 | zaf_dbg
 | |
| 				exit
 | |
| 			else
 | |
| 				if echo $1 | grep -q '='; then
 | |
| 					item=$(echo $1 | cut -d '=' -f 1)
 | |
| 					value=$(echo $1 | cut -d '=' -f 2-)
 | |
| 				else
 | |
| 					item=$1
 | |
| 					zaf_dbg "Waiting for value of $(zaf_hostname):$1 on stdin"
 | |
| 					value=$(cat)
 | |
| 				fi
 | |
| 				zscmd="zabbix_sender -z '$ZAF_ZBXSRV_HOST' -p '$ZAF_ZBXSRV_PORT' -s '$(zaf_hostname)' -k '$item' -o '$value'"
 | |
| 				zaf_dbg $zscmd
 | |
| 				eval $zscmd 2>&1 | zaf_dbg
 | |
| 				exit
 | |
| 			fi			
 | |
| 		fi
 | |
| 	fi
 | |
| 
 | |
| 	;;
 | |
| register)
 | |
| 	shift
 | |
| 	if [ -z "$1" ]; then
 | |
| 		hostname=$(zaf_hostname)
 | |
| 	else
 | |
| 		hostname="$1"
 | |
| 		if [ -z "$2" ]; then
 | |
| 			metadata="ZAF"
 | |
| 		else
 | |
| 			metadata="$2"
 | |
| 		fi
 | |
| 
 | |
| 	fi
 | |
| 	zaf_register "$hostname" "$metadata"
 | |
| 	exit;
 | |
| 	;;
 | |
| 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
 | |
| 	;;
 | |
| install)
 | |
| 	shift
 | |
| 	[ -z "$1" ] && echo "$0 install plugin [plugin]..."
 | |
| 	for p in $@; do
 | |
| 		if zaf_is_plugin "$(basename $p)"; then
 | |
| 			zaf_wrn "Plugin $(basename $p) already installed. Skipping installation."
 | |
| 			continue
 | |
| 		fi
 | |
| 		zaf_install_plugin "$p"
 | |
| 		installed=1
 | |
| 	done
 | |
| 	[ -n "$installed" ] && zaf_is_root && zaf_restart_agent
 | |
| 	;;
 | |
| reinstall)
 | |
| 	shift
 | |
| 	[ -z "$1" ] && echo "$0 reinstall plugin [plugin]..."
 | |
| 	for p in $@; do
 | |
| 		if zaf_is_plugin "$p"; then
 | |
| 			params=$(zaf_get_plugin_parameters $p)
 | |
| 			for param in $params; do 
 | |
| 				eval export ZAF_${p}_${param}=$(zaf_get_plugin_parameter "${ZAF_PLUGINS_DIR}/${p}" $param)
 | |
| 				zaf_dbg "Saving ZAF_${p}_${param}"
 | |
| 			done
 | |
| 			zaf_remove_plugin "$p"
 | |
| 			reinstalled=1
 | |
| 		fi
 | |
| 		zaf_install_plugin "$p"
 | |
| 		reinstalled=1
 | |
| 	done
 | |
| 	[ -n "$reinstalled" ] && zaf_is_root && zaf_restart_agent
 | |
| 	;;
 | |
| remove|uninstall)
 | |
| 	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
 | |
| 	;;
 | |
| plugin-set)
 | |
| 	plugin="$2"
 | |
| 	param="$3"
 | |
| 	value="$4"
 | |
| 	if [ -z "$plugin" ] || [ -z "$param" ]; then
 | |
| 		zaf_err "$0 plugin-set plugin parameter value"
 | |
| 	else
 | |
| 		if zaf_is_plugin "$plugin"; then
 | |
| 			plugindir="${ZAF_PLUGINS_DIR}/${plugin}"
 | |
| 			zaf_set_plugin_parameter "$plugindir" "$param" "$value"
 | |
| 		else
 | |
| 			zaf_err "Plugin $plugin is not installed."
 | |
| 		fi
 | |
| 	fi 
 | |
| 	;;
 | |
| 
 | |
| ###### Zaf related commands
 | |
| self-upgrade)
 | |
| 	shift
 | |
| 	[ -z "$1" ] && auto=auto
 | |
| 	zaf_os_specific zaf_check_deps zaf && zaf_err "Zaf is installed as system package. Cannot self-upgrade."
 | |
| 	if ! zaf_which curl >/dev/null;
 | |
| 	then
 | |
| 		zaf_err "Curl not found. Cannot continue. Please install it."
 | |
| 	fi
 | |
| 	zaf_fetch_url $ZAF_RAW_URL/$ZAF_GITBRANCH/install.sh | exec sh -s $auto "$@"
 | |
| 	exit
 | |
| 	;;
 | |
| self-remove)
 | |
| 	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 related commands
 | |
| api)
 | |
| 	zaf_zbxapi_login
 | |
| 	case $2 in
 | |
| 	get-*-id)
 | |
| 		obj=$(echo $2|cut -d '-' -f 2)
 | |
| 		[ -z "$3" ] && zaf_err "$0 $1 $2 <$obj>"
 | |
| 		eval zaf_zbxapi_get${obj}id "$3"
 | |
| 		;;
 | |
| 	get-byid-*|get-id-*)
 | |
| 		obj=$(echo $2|cut -d '-' -f 3)
 | |
| 		[ -z "$3" ] && zaf_err "$0 $1 $2 <id>"
 | |
| 		eval zaf_zbxapi_get${obj} "$3" "$4"
 | |
| 		;;
 | |
| 	get-host-ids)
 | |
| 		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
 | |
| 		;;
 | |
| 	get-inventory)
 | |
| 		[ -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
 | |
| 		;;
 | |
| 	get-template-ids)
 | |
| 		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
 | |
| 		;;
 | |
| 	get-map-ids)
 | |
| 		zaf_zbxapi_getmapid
 | |
| 		;;
 | |
| 	export-hosts)
 | |
| 		shift; shift
 | |
| 		[ -z "$1" ] && zaf_err "$0 api export-hosts dir [hostgroup]"
 | |
| 		dir="$1"
 | |
| 		shift
 | |
| 		if [ -n "$1" ]; then
 | |
| 			gid=$(zaf_zbxapi_gethostgroupid "$1") || exit 1
 | |
| 			shift
 | |
| 			hosts=$(zaf_zbxapi_gethostsingroup $gid)
 | |
| 		else
 | |
| 			hosts=$(zaf_zbxapi_gethostids)
 | |
| 		fi
 | |
| 		zaf_wrn "Will backup this hosts: $hosts"
 | |
| 		zaf_wrn "Output dir: $dir"
 | |
| 		for h in $hosts; do
 | |
| 			if zaf_bglimit 5; then
 | |
| 				(
 | |
| 				hn=$(zaf_zbxapi_gethost $h name)
 | |
| 				zaf_wrn "Exporting host $hn($h)..."
 | |
| 				zaf_zbxapi_export_host $h >"$dir/$hn.xml"
 | |
| 				) &
 | |
| 			else
 | |
| 				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
 | |
| 		[ -z "$1" ] && zaf_err "$0 api export-templates dir"
 | |
| 		dir="$1"
 | |
| 		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
 | |
| 				(
 | |
| 				tn=$(zaf_zbxapi_gettemplate $t name)
 | |
| 				zaf_wrn "Exporting template $tn($t)..."
 | |
| 				zaf_zbxapi_export_template $t >"$dir/$tn.xml"
 | |
| 				) &
 | |
| 			else
 | |
| 				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"
 | |
| 				zaf_zbxapi_import_config $template || zaf_err "Error importing template"
 | |
| 			else
 | |
| 				url="$(zaf_plugin_option $1 Template)"
 | |
| 				if [ -n "$url" ]; then
 | |
| 					zaf_fetch_url $url | zaf_zbxapi_import_config || zaf_err "Error importing template"
 | |
| 				else
 | |
| 					url="$(zaf_plugin_option $1 Url)"
 | |
| 					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"
 | |
| 				zaf_zbxapi_import_config $1 || zaf_err "Error importing template"
 | |
| 			else
 | |
| 				zaf_err "Unknown plugin $1!"
 | |
| 			fi
 | |
| 		fi
 | |
| 		;;
 | |
| 	*)
 | |
| 		echo "$0 api command [parameters]"
 | |
| 		for i in host template map; do
 | |
| 			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" 
 | |
| 		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"
 | |
| 		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
 | |
| 		[ -n "$2" ] && zaf_err "Bad API command '$2'!"
 | |
| 		;;
 | |
| 	esac
 | |
| 	;;
 | |
| 
 | |
| *)
 | |
| 	if zaf_is_plugin "$1"; then
 | |
| 		if [ -z "$2" ]; then
 | |
| 			zaf_list_plugin_commands "$1"
 | |
| 		else
 | |
| 			zaf_plugin_run_command "$@"
 | |
| 		fi
 | |
| 		exit
 | |
| 	fi
 | |
| 	echo "$0 Version ${ZAF_VERSION}. Please use some of this commands:"
 | |
| 	echo "$0 Cmd [ZAF_OPTION=value] [ZAF_CTRL_Option=value] [ZAF_CTRLI_Item_Option=value] ..."
 | |
| 	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 run [plugin[.item]]" "To test [all] suported items by directly runing command [for plugin]"
 | |
| 	zaf_hlp "$0 precache [plugin[.item]]" "To precache [all] suported items"
 | |
| 	zaf_hlp "$0 itemsh plugin.item" "To spawn interactive shell in item context (same as UserParameter)."
 | |
| 	echo
 | |
| 	echo "Zabbix API commands:"
 | |
| 	zaf_hlp "$0 api" "To zabbix API functions. See $0 api for more info."
 | |
| 	echo
 | |
| 	echo "Zabbix trapper commands:"
 | |
| 	zaf_hlp "$0 send plugin.item" "To send result of agent param directly to Zabbix server by zabbix_server."
 | |
| 	zaf_hlp "$0 send item" "To send value for any item from stdin."
 | |
| 	zaf_hlp "$0 send host:item" "To send value for any host:item from stdin."
 | |
| 	echo "Zabbix agent registration:"
 | |
| 	zaf_hlp "$0 register [hostname] [metadata]" "To register hostname on Zabbix server (autoregistration)."
 | |
| 	echo
 | |
| 	echo "Agent config info commands:"
 | |
| 	zaf_hlp "$0 userparms" "See userparms generated from zaf on stdout"
 | |
| 	zaf_hlp "$0 agent-config [force]" "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"
 | |
| 	echo
 | |
| 	[ -n "$1" ] && zaf_err "Bad command '$1'!"
 | |
| 	;;
 | |
| 
 | |
| esac
 | |
| 
 | 
