/
esal.in
executable file
·123 lines (108 loc) · 2.73 KB
/
esal.in
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#! /bin/bash
# set some var
: ${ES_DATA_PATH:="/usr/lib/esal"}
ES_MODULES_PATH="${ES_DATA_PATH}/modules"
ES_CORE_PATH="${ES_DATA_PATH}/lib"
ES_DEFAULT_ACTIONS="${ES_CORE_PATH}/default.esal"
ES_BINARY="esal"
ES_ENVCONF="/etc/env.conf"
ES_ESALRC="/etc/esalrc"
ES_VERSION="${ES_BINARY} ${ES_VERSION:="1.1"}"
# unset some bash internal
unset CDPATH GLOBIGNORE
# give us ability for trap execution
trap 'echo "exiting" >&2; exit 250' 15
# every module founded in ES_MODULE_PATH has main functions like
# do_list, do_set, do_help, do_usage, do_enable, do_disable.
# it is possible to have some sort of arbitrary functions in modules (this is bash)
# needed for module operation
es_do_list(){
do_list "${@:3}"
}
es_do_set(){
do_set "$@"
}
es_do_read(){
do_read "${@:3}"
}
es_do_fetch(){
do_fetch"${@:3}"
}
es_do_enable(){
do_enable "$@"
}
es_do_disable(){
do_disable "$@"
}
es_do_help(){
do_help
}
es_do_usage(){
do_usage
}
es_do_show(){
do_show
}
es_do_version(){
do_version
}
es_do_configure(){
inherit config
create_envconf "${ES_ENVCONF}"
}
# Load core functions
source "${ES_CORE_PATH}/core.bash" || exit 255
source "${ES_ESALRC}" || die -m "No esalrc config file"
# Load necessary functions for the main script
inherit colors default output
es_load_module(){
local modname=${1}
if ! (grep -qF "$modname" <<< "${ES_MODULES_AVAILABLE[@]}"); then
die -m "No such module \"$modname\""
fi
[[ -f "$ES_MODULES_PATH/${modname}.esal" ]] && \
source $ES_MODULES_PATH/$modname.esal || \
die -m "Module \"$modname\" dont exist in system"
}
# MAIN process start here
for i in ${@##--}; do
[[ "$i" =~ ^[a-z0-9] ]] && modname+=("$i") && \
action=("${modname[@]:1}")
done
# don't allow blacklisted modules from /etc/esalrc
if ! [[ -z $MODULE_BLACKLIST ]]; then
while read -r mod; do
ES_MODULES_AVAILABLE+=( $(basename "${mod/%.*}") )
done < <(ls -1 ${ES_MODULES_PATH}/*.esal | grep -Ev ${MODULE_BLACKLIST})
else
while read -r mod; do
ES_MODULES_AVAILABLE+=( $(basename "${mod/%.*}") )
done < <(ls -1 $(ls -1 $ES_MODULES_PATH/*.esal))
fi
if [[ $# -gt 0 ]]; then
case ${modname} in
help | usage | version | configure )
[[ $# -eq 1 ]] && es_do_${modname} && exit 1 \
|| die -m "Too many parameters" ;;
* ) es_load_module "$modname" ;;
esac
# every module consist of module parameters which can accept
# standard parameters like (help,usage,version) are not needed as they
# are standard
for i in "${MODULE_PARAMETERS}"; do
[[ $i == $action ]] && action="$i"
done
# modules calling
if ! [[ -n $action ]]; then
es_do_${DEFAULT_ACTION}
else
if is_function es_do_${action}; then
es_do_${action} "$@"
else
die -m "No such action \"$action\""
fi
fi
else
# ececute this if there us no argugument at all
es_do_help
fi