1
0
mirror of https://github.com/limosek/zaf.git synced 2024-11-24 03:19:05 +01:00
limosek-zaf/lib/ctrl.lib.sh

157 lines
3.9 KiB
Bash
Raw Normal View History

2016-03-30 16:09:02 +02:00
# Control file related functions
2016-04-01 15:51:45 +02:00
# Get item list from control on stdin
2016-03-30 16:09:02 +02:00
zaf_ctrl_get_items() {
grep '^Item ' | cut -d ' ' -f 2 | cut -d ':' -f 1 | tr '\r\n' ' '
}
# Get item body from stdin
# $1 itemname
zaf_ctrl_get_item_block() {
grep -v '^#' | awk '/^Item '$1'/ { i=0;
while (i==0) {
getline;
if (/^\/Item/) exit;
print $0;
}};
END {
exit i==0;
}'
2016-03-30 16:09:02 +02:00
}
# Get global plugin block body from stdin
# $1 itemname
zaf_ctrl_get_global_block() {
grep -v '^#' | awk '{ i=0;
while (i==0) {
getline;
if (/^Item /) exit;
print $0;
}}'
}
# Get item multiline option
# $1 optionname
zaf_block_get_moption() {
awk '/^'$1'::$/ { i=0;
while (i==0) {
getline;
if (/^::$/) {i=1; continue;};
2016-03-30 16:09:02 +02:00
print $0;
}};
END {
exit i==0;
}
'
2016-03-30 16:09:02 +02:00
}
# Get item singleline option from config block on stdin
2016-03-30 16:09:02 +02:00
# $1 optionname
zaf_block_get_option() {
grep "^$1:" | cut -d ' ' -f 2- | tr -d '\r\n'
}
# Get global option (single or multiline)
# $1 - control file
# $2 - option name
zaf_ctrl_get_global_option() {
2016-04-01 15:51:45 +02:00
zaf_ctrl_get_global_block <$1 | zaf_block_get_moption "$2" \
|| zaf_ctrl_get_global_block <$1 | zaf_block_get_option "$2"
}
# Get item specific option (single or multiline)
# $1 - control file
# $2 - item name
# $3 - option name
zaf_ctrl_get_item_option() {
2016-04-01 15:51:45 +02:00
zaf_ctrl_get_item_block <$1 "$2" | zaf_block_get_moption "$3" \
|| zaf_ctrl_get_item_block <$1 "$2" | zaf_block_get_option "$3"
}
2016-04-01 12:20:23 +02:00
# Check dependencies based on control file
2016-03-30 16:09:02 +02:00
zaf_ctrl_check_deps() {
local deps
deps=$(zaf_ctrl_get_global_block <$1 | zaf_block_get_option "Depends-${ZAF_PKG}" )
zaf_os_specific zaf_check_deps $deps
2016-03-30 16:09:02 +02:00
deps=$(zaf_ctrl_get_global_block <$1 | zaf_block_get_option "Depends-bin" )
for cmd in $deps; do
if ! which $cmd >/dev/null; then
zaf_wrn "Missing binary dependency $cmd. Please install it first."
return 1
2016-03-30 16:09:02 +02:00
fi
done
}
# Install binaries from control
2016-04-01 15:51:45 +02:00
# $1 pluginurl
# $2 control
# $3 plugindir
2016-03-30 16:09:02 +02:00
zaf_ctrl_install() {
local binaries
local pdir
local script
local cmd
2016-04-01 15:51:45 +02:00
pdir="$3"
2016-04-06 14:25:10 +02:00
binaries=$(zaf_ctrl_get_global_option $2 "Install-bin")
2016-03-30 16:09:02 +02:00
for b in $binaries; do
2016-04-01 15:51:45 +02:00
zaf_fetch_url "$1/$b" >"${ZAF_TMP_DIR}/$b"
zaf_install_bin "${ZAF_TMP_DIR}/$b" "$pdir"
2016-03-30 16:09:02 +02:00
done
2016-04-06 14:25:10 +02:00
script=$(zaf_ctrl_get_global_option $2 "Install-script")
[ -n "$script" ] && eval "$script"
2016-04-06 14:25:10 +02:00
cmd=$(zaf_ctrl_get_global_option $2 "Install-cmd")
2016-03-30 16:09:02 +02:00
[ -n "$cmd" ] && $cmd
}
# Generates zabbix cfg from control file
# $1 control
# $2 pluginname
zaf_ctrl_generate_cfg() {
local items
local cmd
2016-04-01 15:51:45 +02:00
local iscript
2016-04-01 12:20:23 +02:00
local ikey
local lock
2016-03-30 16:09:02 +02:00
items=$(zaf_ctrl_get_items <"$1")
for i in $items; do
2016-04-01 15:51:45 +02:00
iscript=$(echo $i | tr -d '[]*&;:')
params=$(zaf_ctrl_get_item_option $1 $i "Parameters")
if [ -n "$params" ]; then
ikey="$2.$i[*]"
2016-04-04 14:00:44 +02:00
args=""
apos=1;
for p in $params; do
args="$args \$$apos"
apos=$(expr $apos + 1)
done
2016-04-01 15:51:45 +02:00
else
ikey="$2.$i"
fi
2016-04-01 12:20:23 +02:00
lock=$(zaf_ctrl_get_item_option $1 $i "Lock")
if [ -n "$lock" ]; then
lock="${ZAF_LIB_DIR}/zaflock $lock "
fi
cmd=$(zaf_ctrl_get_item_option $1 $i "Cmd")
if [ -n "$cmd" ]; then
2016-04-05 13:00:35 +02:00
$(which echo) "UserParameter=$ikey,${ZAF_LIB_DIR}/preload.sh $lock$cmd";
continue
fi
cmd=$(zaf_ctrl_get_item_option $1 $i "Function")
if [ -n "$cmd" ]; then
2016-04-05 13:00:35 +02:00
$(which echo) -E "UserParameter=$ikey,${ZAF_LIB_DIR}/preload.sh $lock$cmd";
continue;
fi
cmd=$(zaf_ctrl_get_item_option $1 $i "Script")
if [ -n "$cmd" ]; then
2016-04-01 15:51:45 +02:00
zaf_ctrl_get_item_option $1 $i "Script" >${ZAF_TMP_DIR}/${iscript}.sh;
2016-04-04 14:00:44 +02:00
zaf_install_bin ${ZAF_TMP_DIR}/${iscript}.sh ${ZAF_PLUGINS_DIR}/$2/
$(which echo) "UserParameter=$ikey,${ZAF_LIB_DIR}/preload.sh $lock${ZAF_PLUGINS_DIR}/$2/${iscript}.sh $args";
continue;
fi
2016-04-01 15:51:45 +02:00
zaf_err "Item $i declared in control file but has no Cmd, Function or Script!"
2016-03-30 16:09:02 +02:00
done
}
2016-04-01 12:20:23 +02:00