diff --git a/.gitignore b/.gitignore index b25c15b..47f6dfc 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *~ +plugins/ diff --git a/control b/control new file mode 100644 index 0000000..646b13b --- /dev/null +++ b/control @@ -0,0 +1,23 @@ +Plugin: zaf + Basic items for Zabbix Agent Framework + +Version: 0.1 + +Url: https://raw.githubusercontent.com/limosek/zaf/master/ + +Web: https://github.com/limosek/zaf/ + +Maintainer: Lukas Macura + +Item: version + Returns version of zaf installed. + +Item-cmd-version: {ZAFLIB} zaf_list_plugins + +Item: plugins + Returns installed plugins + +Item-cmd-plugins: {ZAFLOCK} zaf list + +Binary-Depends: echo zaf + diff --git a/install.sh b/install.sh index 085a805..0ee8268 100755 --- a/install.sh +++ b/install.sh @@ -2,6 +2,10 @@ ZAF_CFG_FILE=/etc/zaf.conf +zaf_msg() { + [ "$ZAF_DEBUG" = "1" ] && echo $@ +} + # Read option. If it is already set in zaf.conf, it is skipped. If env variable is set, it is used instead of default # It sets global variable name on result. # $1 - option name @@ -13,7 +17,7 @@ zaf_get_option(){ eval opt=\$$1 if [ -n "$opt" ] && ! [ "$4" = "user" ]; then eval "$1='$opt'" - echo "Got $2 <$1> from ENV: $opt" >&2 + zaf_msg "Got $2 <$1> from ENV: $opt" >&2 return else opt="$3" @@ -26,9 +30,9 @@ zaf_get_option(){ fi if [ -z "$opt" ]; then opt="$3" - echo "Got $2 <$1> from Defaults: $opt" >&2 + zaf_msg "Got $2 <$1> from Defaults: $opt" >&2 else - echo "Got $2 <$1> from USER: $opt" + zaf_msg "Got $2 <$1> from USER: $opt" fi eval "$1='$opt'" } @@ -39,7 +43,9 @@ zaf_get_option(){ zaf_set_option(){ if ! grep -q "^$1=" ${ZAF_CFG_FILE}; then echo "$1='$2'" >>${ZAF_CFG_FILE} - echo "Saving $1 to $2 in ${ZAF_CFG_FILE}" >&2 + zaf_msg "Saving $1 to $2 in ${ZAF_CFG_FILE}" >&2 + else + zaf_msg "Preserving $1 to $2 in ${ZAF_CFG_FILE}" >&2 fi } @@ -74,40 +80,60 @@ zaf_no_perms(){ zaf_configure(){ - zaf_detect_pkg ZAF_PKG "Packaging system to use" "$(zaf_detect_pkg)" - zaf_get_option ZAF_TMP_DIR "Tmp directory" "/tmp/zaf" - zaf_get_option ZAF_LIB_DIR "Libraries directory" "/usr/lib/zaf" - zaf_get_option ZAF_PLUGINS_DIR "Plugins directory" "${ZAF_LIB_DIR}/plugins" - zaf_get_option ZAF_PLUGINS_REPO "Plugins reposiory" "git://github.com/limosek/zaf-plugins.git" - zaf_get_option ZAF_AGENT_CONFIG "Zabbix agent config" "/etc/zabbix/zabbix_agentd.conf" - zaf_get_option ZAF_AGENT_CONFIGD "Zabbix agent config.d" "/etc/zabbix/zabbix_agentd.conf.d/" - zaf_get_option ZAF_AGENT_BIN "Zabbix agent binary" "/usr/sbin/zabbix_agentd" - zaf_get_option ZAF_AGENT_RESTART "Zabbix agent restart cmd" "service zabbix-agent restart" + [ "$1" = "user" ] && ZAF_DEBUG=1 + zaf_detect_pkg ZAF_PKG "Packaging system to use" "$(zaf_detect_pkg)" "$1" + zaf_get_option ZAF_TMP_BASE "Tmp directory prefix (\$USER will be added)" "/tmp/zaf" "$1" + zaf_get_option ZAF_LIB_DIR "Libraries directory" "/usr/lib/zaf" "$1" + zaf_get_option ZAF_PLUGINS_DIR "Plugins directory" "${ZAF_LIB_DIR}/plugins" "$1" + zaf_get_option ZAF_PLUGINS_REPO "Plugins reposiory" "git://github.com/limosek/zaf-plugins.git" "$1" + zaf_get_option ZAF_REPO_DIR "Plugins directory" "${ZAF_LIB_DIR}/repo" "$1" + zaf_get_option ZAF_AGENT_CONFIG "Zabbix agent config" "/etc/zabbix/zabbix_agentd.conf" "$1" + zaf_get_option ZAF_AGENT_CONFIGD "Zabbix agent config.d" "/etc/zabbix/zabbix_agentd.conf.d/" "$1" + zaf_get_option ZAF_AGENT_BIN "Zabbix agent binary" "/usr/sbin/zabbix_agentd" "$1" + zaf_get_option ZAF_AGENT_RESTART "Zabbix agent restart cmd" "service zabbix-agent restart" "$1" if ! which $ZAF_AGENT_BIN >/dev/null; then echo "Zabbix agent not installed? Use ZAF_ZABBIX_AGENT_BIN env variable to specify location. Exiting." exit 3 fi + if which git >/dev/null; then + ZAF_GIT=1 + else + ZAF_GIT="" + fi + if ! [ -f "${ZAF_CFG_FILE}" ]; then touch "${ZAF_CFG_FILE}" || zaf_no_perms "${ZAF_CFG_FILE}" fi zaf_set_option ZAF_PKG "${ZAF_PKG}" - zaf_set_option ZAF_TMP_DIR "$ZAF_TMP_DIR" + zaf_set_option ZAF_GIT "${ZAF_GIT}" + zaf_set_option ZAF_TMP_BASE "$ZAF_TMP_BASE" zaf_set_option ZAF_LIB_DIR "$ZAF_LIB_DIR" zaf_set_option ZAF_PLUGINS_DIR "$ZAF_PLUGINS_DIR" zaf_set_option ZAF_PLUGINS_REPO "$ZAF_PLUGINS_REPO" + zaf_set_option ZAF_REPO_DIR "$ZAF_REPO_DIR" zaf_set_option ZAF_AGENT_CONFIG "$ZAF_AGENT_CONFIG" zaf_set_option ZAF_AGENT_CONFIGD "$ZAF_AGENT_CONFIGD" zaf_set_option ZAF_AGENT_BIN "$ZAF_AGENT_BIN" - zaf_set_option ZAF_AGENTRESTART "$ZAF_AGENT_RESTART" + zaf_set_option ZAF_AGENT_RESTART "$ZAF_AGENT_RESTART" + ZAF_TMP_DIR="${ZAF_TMP_BASE}-${USER}-$$" } if [ -f "${ZAF_CFG_FILE}" ]; then . "${ZAF_CFG_FILE}" fi +ZAF_TMP_DIR="${ZAF_TMP_BASE}-${USER}-$$" case $1 in +reconf) + zaf_configure user + $0 install + ;; +defconf) + zaf_configure silent + $0 install + ;; *) zaf_configure rm -rif ${ZAF_TMP_DIR} @@ -115,10 +141,14 @@ case $1 in install -d ${ZAF_LIB_DIR} install -d ${ZAF_PLUGINS_DIR} install $(getrest lib/zaf.lib.sh) ${ZAF_LIB_DIR}/ + install $(getrest lib/jshn.sh) ${ZAF_LIB_DIR}/ + install $(getrest lib/zaflock) ${ZAF_LIB_DIR}/ + mkdir -p ${ZAF_TMP_DIR}/p/zaf + install $(getrest control) ${ZAF_TMP_DIR}/p/zaf/ + install $(getrest template.xml) ${ZAF_TMP_DIR}/p/zaf/ mkdir -p ${ZAF_PLUGINS_DIR} - echo "UserParameter=zaf.version,echo master" >${ZAF_AGENT_CONFIGD}/zaf_base.conf - install $(getrest zaf) /usr/bin - echo "Install OK. Installing plugins (${ZAF_DEFAULT_PLUGINS})." + install $(getrest zaf) /usr/bin/ + /usr/bin/zaf install ${ZAF_TMP_DIR}/p/zaf/ if ! /usr/bin/zaf check-agent-config; then echo "Something is wrong with zabbix agent config." echo "Ensure that zabbix_agentd reads ${ZAF_AGENT_CONFIG}" @@ -126,11 +156,8 @@ case $1 in echo "Does ${ZAF_AGENT_RESTART} work?" exit 1 fi - for plugin in ${ZAF_DEFAULT_PLUGINS}; do - /usr/bin/zaf install $plugin || exit $? - done rm -rif ${ZAF_TMP_DIR} - echo "Done" + echo "Install OK. Use 'zaf' without parameters to continue." ;; esac diff --git a/lib/jshn.sh b/lib/jshn.sh new file mode 100644 index 0000000..bf76edb --- /dev/null +++ b/lib/jshn.sh @@ -0,0 +1,280 @@ +# functions for parsing and generating json + +_json_get_var() { + # dest=$1 + # var=$2 + eval "$1=\"\$${JSON_PREFIX}$2\"" +} + +_json_set_var() { + # var=$1 + local ___val="$2" + eval "${JSON_PREFIX}$1=\"\$___val\"" +} + +__jshn_raw_append() { + # var=$1 + local value="$2" + local sep="${3:- }" + + eval "export -- \"$1=\${$1:+\${$1}\${value:+\$sep}}\$value\"" +} + +_jshn_append() { + # var=$1 + local _a_value="$2" + eval "${JSON_PREFIX}$1=\"\${${JSON_PREFIX}$1} \$_a_value\"" +} + +_get_var() { + # var=$1 + # value=$2 + eval "$1=\"\$$2\"" +} + +_set_var() { + # var=$1 + local __val="$2" + eval "$1=\"\$__val\"" +} + +_json_inc() { + # var=$1 + # dest=$2 + + let "${JSON_PREFIX}$1 += 1" "$2 = ${JSON_PREFIX}$1" +} + +_json_add_generic() { + # type=$1 + # name=$2 + # value=$3 + # cur=$4 + + local var + if [ "${4%%[0-9]*}" = "J_A" ]; then + _json_inc "S_$4" var + else + var="${2//[^a-zA-Z0-9_]/_}" + [[ "$var" == "$2" ]] || export -- "${JSON_PREFIX}N_${4}_${var}=$2" + fi + + export -- \ + "${JSON_PREFIX}${4}_$var=$3" \ + "${JSON_PREFIX}T_${4}_$var=$1" + _jshn_append "JSON_UNSET" "${4}_$var" + _jshn_append "K_$4" "$var" +} + +_json_add_table() { + # name=$1 + # type=$2 + # itype=$3 + local cur seq + + _json_get_var cur JSON_CUR + _json_inc JSON_SEQ seq + + local table="J_$3$seq" + _json_set_var "U_$table" "$cur" + export -- "${JSON_PREFIX}K_$table=" + unset "${JSON_PREFIX}S_$table" + _json_set_var JSON_CUR "$table" + _jshn_append "JSON_UNSET" "$table" + + _json_add_generic "$2" "$1" "$table" "$cur" +} + +_json_close_table() { + local _s_cur + + _json_get_var _s_cur JSON_CUR + _json_get_var "${JSON_PREFIX}JSON_CUR" "U_$_s_cur" +} + +json_set_namespace() { + local _new="$1" + local _old="$2" + + [ -n "$_old" ] && _set_var "$_old" "$JSON_PREFIX" + JSON_PREFIX="$_new" +} + +json_cleanup() { + local unset tmp + + _json_get_var unset JSON_UNSET + for tmp in $unset J_V; do + unset \ + ${JSON_PREFIX}U_$tmp \ + ${JSON_PREFIX}K_$tmp \ + ${JSON_PREFIX}S_$tmp \ + ${JSON_PREFIX}T_$tmp \ + ${JSON_PREFIX}N_$tmp \ + ${JSON_PREFIX}$tmp + done + + unset \ + ${JSON_PREFIX}JSON_SEQ \ + ${JSON_PREFIX}JSON_CUR \ + ${JSON_PREFIX}JSON_UNSET +} + +json_init() { + json_cleanup + export -n ${JSON_PREFIX}JSON_SEQ=0 + export -- \ + ${JSON_PREFIX}JSON_CUR="J_V" \ + ${JSON_PREFIX}K_J_V= +} + +json_add_object() { + _json_add_table "$1" object T +} + +json_close_object() { + _json_close_table +} + +json_add_array() { + _json_add_table "$1" array A +} + +json_close_array() { + _json_close_table +} + +json_add_string() { + local cur + _json_get_var cur JSON_CUR + _json_add_generic string "$1" "$2" "$cur" +} + +json_add_int() { + local cur + _json_get_var cur JSON_CUR + _json_add_generic int "$1" "$2" "$cur" +} + +json_add_boolean() { + local cur + _json_get_var cur JSON_CUR + _json_add_generic boolean "$1" "$2" "$cur" +} + +json_add_double() { + local cur + _json_get_var cur JSON_CUR + _json_add_generic double "$1" "$2" "$cur" +} + +# functions read access to json variables + +json_load() { + eval "`jshn -r "$1"`" +} + +json_dump() { + jshn "$@" ${JSON_PREFIX:+-p "$JSON_PREFIX"} -w +} + +json_get_type() { + local __dest="$1" + local __cur + + _json_get_var __cur JSON_CUR + local __var="${JSON_PREFIX}T_${__cur}_${2//[^a-zA-Z0-9_]/_}" + eval "export -- \"$__dest=\${$__var}\"; [ -n \"\${$__var+x}\" ]" +} + +json_get_keys() { + local __dest="$1" + local _tbl_cur + + if [ -n "$2" ]; then + json_get_var _tbl_cur "$2" + else + _json_get_var _tbl_cur JSON_CUR + fi + local __var="${JSON_PREFIX}K_${_tbl_cur}" + eval "export -- \"$__dest=\${$__var}\"; [ -n \"\${$__var+x}\" ]" +} + +json_get_values() { + local _v_dest="$1" + local _v_keys _v_val _select= + local _json_no_warning=1 + + unset "$_v_dest" + [ -n "$2" ] && { + json_select "$2" || return 1 + _select=1 + } + + json_get_keys _v_keys + set -- $_v_keys + while [ "$#" -gt 0 ]; do + json_get_var _v_val "$1" + __jshn_raw_append "$_v_dest" "$_v_val" + shift + done + [ -n "$_select" ] && json_select .. + + return 0 +} + +json_get_var() { + local __dest="$1" + local __cur + + _json_get_var __cur JSON_CUR + local __var="${JSON_PREFIX}${__cur}_${2//[^a-zA-Z0-9_]/_}" + eval "export -- \"$__dest=\${$__var:-$3}\"; [ -n \"\${$__var+x}\${3+x}\" ]" +} + +json_get_vars() { + while [ "$#" -gt 0 ]; do + local _var="$1"; shift + if [ "$_var" != "${_var#*:}" ]; then + json_get_var "${_var%%:*}" "${_var%%:*}" "${_var#*:}" + else + json_get_var "$_var" "$_var" + fi + done +} + +json_select() { + local target="$1" + local type + local cur + + [ -z "$1" ] && { + _json_set_var JSON_CUR "J_V" + return 0 + } + [[ "$1" == ".." ]] && { + _json_get_var cur JSON_CUR + _json_get_var cur "U_$cur" + _json_set_var JSON_CUR "$cur" + return 0 + } + json_get_type type "$target" + case "$type" in + object|array) + json_get_var cur "$target" + _json_set_var JSON_CUR "$cur" + ;; + *) + [ -n "$_json_no_warning" ] || \ + echo "WARNING: Variable '$target' does not exist or is not an array/object" + return 1 + ;; + esac +} + +json_is_a() { + local type + + json_get_type type "$1" + [ "$type" = "$2" ] +} diff --git a/lib/zaf.lib.sh b/lib/zaf.lib.sh index d08417a..e47ef49 100644 --- a/lib/zaf.lib.sh +++ b/lib/zaf.lib.sh @@ -1,4 +1,11 @@ +. /etc/zaf.conf +. ${ZAF_LIB_DIR}/jshn.sh +ZAF_TMP_DIR="${ZAF_TMP_BASE}-${USER}-$$" +trap "rm -rif ${ZAF_TMP_DIR}" EXIT + +! [ -d "${ZAF_TMP_DIR}" ] && mkdir "${ZAF_TMP_DIR}" + # Fetch url to stdout # $1 url # It supports real file, file:// and other schemes known by curl @@ -48,14 +55,11 @@ zaf_check_agent_config() { # Update repo zaf_update_repo() { + [ "$ZAF_GIT" != 1 ] && { echo "Git is not installed."; return 1; } + ! [ -d ${ZAF_REPO_DIR} ] && git clone "${ZAF_PLUGINS_REPO}" "${ZAF_REPO_DIR}" [ -n "${ZAF_PLUGINS_REPO}" ] && cd ${ZAF_REPO_DIR} && git pull } -# List installed plugins -zaf_list_installed_plugins() { - cd ${ZAF_PLUGINS_DIR}; ls --hide '.' -} - # Check plugin url # $1 plugin uri # $2 local file to fetch @@ -69,7 +73,20 @@ zaf_plugin_fetch_control() { # $1 control file # $2 option zaf_ctrl_get_option() { - grep -E '^(.*): ' "$1" | grep -F "$2:" | cut -d ' ' -f 2- + awk 'BEGIN { FS=": "; }; /^'$2': / { printf $2$3$4$5"\n"; }' <$1 +} + +# Get description from control file +# $1 control file +# $2 option +zaf_ctrl_get_description() { + awk \ + "/^$2/"' { i=1; + while (1) { + getline; if (substr($0,0,1) != " ") exit; + printf $0"\n"; + } + }' <$1 } zaf_ctrl_binary_deps() { @@ -100,8 +117,11 @@ zaf_ctrl_install_bin() { zaf_ctrl_generate_cfg() { local items local cmd + local ilock + items=$(zaf_ctrl_get_option "$1" Item) for i in $items; do + ilock=$(echo $i | tr -d '[]*&;:') cmd=$(zaf_ctrl_get_option "$1" "Item-cmd-$i") echo "UserParameter=$2.${i},$cmd" done @@ -120,45 +140,118 @@ zaf_install_plugin() { else url="$1" fi - plugin=$(basename "$url") - echo Installing plugin $plugin from $url... + plugin="plug$$" rm -rf ${ZAF_TMP_DIR}/${plugin} control=${ZAF_TMP_DIR}/${plugin}/control - plugindir="${ZAF_PLUGINS_DIR}/${plugin}" mkdir -p "${ZAF_TMP_DIR}/${plugin}" if zaf_plugin_fetch_control "$url" "${control}"; then set -e - zaf_ctrl_binary_deps "${control}" - mkdir -p $plugindir - zaf_ctrl_install_bin "${control}" "${plugin}" - zaf_ctrl_generate_cfg "${control}" "${plugin}" | zaf_far '{PLUGINDIR}' "$plugindir" >${ZAF_AGENT_CONFIGD}/zaf_${plugin}.conf - zaf_restart_agent - cp $control "$plugindir"/ - zaf_fetch_url $url/template.xml >"$plugindir"/template.xml + plugin=$(zaf_ctrl_get_option "${control}" Plugin) + if [ -n "$plugin" ]; then + echo Installing plugin $plugin from $url... + plugindir="${ZAF_PLUGINS_DIR}/${plugin}" + zaf_ctrl_binary_deps "${control}" + mkdir -p $plugindir + zaf_ctrl_install_bin "${control}" "${plugin}" + zaf_ctrl_generate_cfg "${control}" "${plugin}" | \ + zaf_far '{PLUGINDIR}' "$plugindir" | \ + zaf_far '{ZAFLIB}' ". ${ZAF_LIB_DIR}/zaf.lib.sh; " | \ + zaf_far '{ZAFLOCK}' "${ZAF_LIB_DIR}/zaflock '$plugin' " \ + >${ZAF_AGENT_CONFIGD}/zaf_${plugin}.conf + zaf_restart_agent + cp $control "$plugindir"/ + zaf_fetch_url $url/template.xml >"$plugindir"/template.xml + else + echo "Bad control file!" + cat $control + exit 4 + fi else echo "Cannot fetch control file!" exit 4 fi } -zaf_plugin_info() { +# Show installed plugins (human readable) +# $1 - plugin +zaf_show_installed_plugins() { + local cfile + local plugin + cd ${ZAF_PLUGINS_DIR}; ls --hide '.' -1 | while read plugin; do + cfile=${ZAF_PLUGINS_DIR}/$plugin/control + echo Plugin $plugin: + zaf_ctrl_get_description $cfile Plugin: + echo "Homepage:" $(zaf_ctrl_get_option $cfile Web) + echo "Maintainer:" $(zaf_ctrl_get_option $cfile Maintainer) + echo + done +} + +# List installed plugins +# $1 - plugin +zaf_list_plugins() { + local cfile + local plugin + cd ${ZAF_PLUGINS_DIR}; ls --hide '.' -1 +} + +zaf_show_plugin() { local items local plugindir + local cfile + local tst + if [ -z "$1" ]; then + echo "Missing plugin name"; + exit 1 + fi + [ -n "$2" ] && tst=1 plugindir="${ZAF_PLUGINS_DIR}/$1" - if [ -d "$plugindir" ]; then - items=$(zaf_ctrl_get_option "$plugindir/control" Item) - echo "Items supported:" - echo "$items" + cfile="$plugindir/control" + if [ -d "$plugindir" ] ; then + echo "Plugin $1:" + zaf_ctrl_get_description "$cfile" "Plugin:" + echo "Homepage:" $(zaf_ctrl_get_option $cfile Web) + echo "Maintainer:" $(zaf_ctrl_get_option $cfile Maintainer) + items=$(zaf_list_plugin_items $1) + echo + echo "Supported items:" + for i in $items; do + echo -n "$1.$i: " + [ -n "$tst" ] && ${ZAF_AGENT_BIN} -t "$1.$i" + echo + zaf_ctrl_get_description "$cfile" "Item: $i"; + echo + done else echo "Plugin $1 not installed" fi } +zaf_list_plugin_items() { + if [ -z "$1" ]; then + echo "Missing plugin name"; + exit 1 + fi + plugindir="${ZAF_PLUGINS_DIR}/$1" + cfile="$plugindir/control" + if [ -d "$plugindir" ] ; then + zaf_ctrl_get_option "$cfile" Item + else + echo "Plugin $1 not installed" + fi +} + +zaf_list_items() { + for p in $(zaf_list_plugins); do + zaf_list_plugin_items $p + done +} + zaf_remove_plugin() { + ! [ -d ${ZAF_PLUGINS_DIR}/$1 ] && { echo "Plugin $1 not installed!"; exit 2; } rm -rf ${ZAF_PLUGINS_DIR}/$1 rm -f ${ZAF_AGENT_CONFIGD}/zaf_${plugin}.conf } - diff --git a/lib/zaflock b/lib/zaflock new file mode 100644 index 0000000..5c004b8 --- /dev/null +++ b/lib/zaflock @@ -0,0 +1,37 @@ +#!/bin/sh + +. /etc/zaf.conf + +. ${ZAF_LIB_DIR}/zaf.lib.sh + +help() { + echo "$0 key cmd" + exit 2 +} + +lkey="$1" +[ -z "$lkey" ] && help +shift + +[ -z "${ZAF_LOCK_SECONDS}" ] && seconds=5 +[ -z "${ZAF_LOCK_FORCE}" ] && force=1 + +lockfile="${ZAF_TMP_DIR}/zaflock_${lkey}" +i=0 +while [ -f "$lockfile" ] && [ $i -lt $seconds ]; do + sleep 1 + i=$(expr $i + 1) +done +if [ -f "$lockfile" ] && [ -n "$force" ]; then + logger -s -t "zlock" -p daemon.warn "Releasing $lockfile!" + rm -f "$lockfile" +fi +if [ -f "$lockfile" ] && [ -z "$force" ]; then + logger -s -t "zlock" -p daemon.err "Could not get lock for $lockfile!" + exit 1 +fi + +touch "$lockfile" +[ -n "$*" ] && $@ +rm -f "$lockfile" + diff --git a/template.xml b/template.xml new file mode 100644 index 0000000..e69de29 diff --git a/zaf b/zaf index cee0202..9704e9a 100755 --- a/zaf +++ b/zaf @@ -1,14 +1,10 @@ #!/bin/sh -# Some defaults - -ZAF_AGENT_RESTART="service zabbix-agentd restart" -ZAF_AGENT_CONFIG="/etc/zabbix/zabbix_agentd.conf" -ZAF_LIB_DIR="/usr/lib/zaf/" -ZAF_PLUGINS_DIR="/usr/lib/zaf/plugins/" - if [ -f /etc/zaf.conf ]; then . /etc/zaf.conf +else + echo "Missing config file /etc/zaf.conf! Exiting." + exit 2 fi . ${ZAF_LIB_DIR}/zaf.lib.sh @@ -23,12 +19,28 @@ update) zaf_update_repo ;; -list) - zaf_list_installed_plugins +show) + if [ -z "$2" ]; then + zaf_show_installed_plugins + else + zaf_show_plugin "$2" + fi ;; -info) - zaf_plugin_info "$2" +list) + zaf_list_plugins + ;; + +list-items) + if [ -z "$2" ]; then + zaf_list_items + else + zaf_list_plugin_items "$2" + fi + ;; + +test-items) + zaf_show_plugin "$2" tst ;; install) @@ -39,11 +51,19 @@ remove) zaf_remove_plugin "$2" ;; +self-upgrade) + curl -s https://raw.githubusercontent.com/limosek/zaf/master/install.sh | sh + ;; + *) - echo "$0 update" - echo "$0 list" - echo "$0 install plugin" - echo "$0 remove plugin" + echo "$0 update To update repo" + echo "$0 list To list installed plugins" + echo "$0 show [plugin] To show installed plugins or plugin info" + echo "$0 list-items [plugin] To list all suported items [for plugin]" + echo "$0 test-items plugin To test all suported items for plugin" + echo "$0 install plugin To install plugin" + echo "$0 remove plugin To remove plugin" + echo "$0 self-upgrade To self-upgrade zaf" ;; esac