182 lines
4.5 KiB
Bash
182 lines
4.5 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
PRG=$(basename $0)
|
||
|
SIMU=""
|
||
|
KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
|
||
|
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
|
||
|
setKazVars
|
||
|
. "${DOCKERS_ENV}"
|
||
|
|
||
|
cd "$(dirname $0)"
|
||
|
|
||
|
ALL_STATUS=$(docker ps -a --format "{{.ID}} {{.Names}} {{.Status}}")
|
||
|
SERVICES_CHOICE="$(getAvailableServices | tr "\n" "|")"
|
||
|
SERVICES_CHOICE="${SERVICES_CHOICE%|}"
|
||
|
|
||
|
usage () {
|
||
|
echo "${RED}${BOLD}" \
|
||
|
"Usage: $0 [-h] {compose|orga|service} {available|validate|enable|disable|status} [names]...${NL}" \
|
||
|
" -h help${NL}" \
|
||
|
" compose {available|validate|enable|disable} : list docker-compose name${NL}" \
|
||
|
" compose status : status of docker-compose (default available)${NL}" \
|
||
|
" service {available|validate} : list services name${NL}" \
|
||
|
" service {enable|disable} : list services in orga${NL}" \
|
||
|
" service status : status of services in orga${NL}" \
|
||
|
" service {${SERVICES_CHOICE}}${NL}" \
|
||
|
" : list of orga enable a service ${NL}" \
|
||
|
" [compose] in${NL}" \
|
||
|
" ${CYAN}$((getAvailableComposes;getAvailableOrgas) | tr "\n" " ")${NC}${NL}"
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
# ========================================
|
||
|
compose_available () {
|
||
|
echo $*
|
||
|
}
|
||
|
|
||
|
getComposeEnableByProxy () {
|
||
|
onList=$(
|
||
|
for type in ${KAZ_CONF_DIR}/container-*.list ; do
|
||
|
getList "${type}"
|
||
|
done)
|
||
|
local compose
|
||
|
for compose in ${onList} ; do
|
||
|
composeFlag="proxy_${compose//-/_}"
|
||
|
[[ "${!composeFlag}" == "on" ]] && echo ${compose}
|
||
|
done
|
||
|
}
|
||
|
|
||
|
compose_validate () {
|
||
|
echo $(
|
||
|
for type in ${KAZ_CONF_DIR}/container-*.list ; do
|
||
|
getList "${type}"
|
||
|
done | filterInList $*)
|
||
|
}
|
||
|
|
||
|
compose_enable () {
|
||
|
echo $(getComposeEnableByProxy | filterInList $*)
|
||
|
}
|
||
|
|
||
|
compose_disable () {
|
||
|
echo $(getAvailableComposes | filterNotInList $(getComposeEnableByProxy) | filterInList $*)
|
||
|
}
|
||
|
|
||
|
compose_status () {
|
||
|
for compose in $*; do
|
||
|
cd "${KAZ_COMP_DIR}/${compose}"
|
||
|
echo "${compose}:"
|
||
|
for service in $(docker-compose ps --services 2>/dev/null); do
|
||
|
id=$(docker-compose ps -q "${service}" | cut -c 1-12)
|
||
|
if [ -z "${id}" ]; then
|
||
|
echo " - ${RED}${BOLD}[Down]${NC} ${service}"
|
||
|
else
|
||
|
status=$(grep "^${id}\b" <<< "${ALL_STATUS}" | sed "s/.*${id}\s\s*\S*\s\s*\(\S*.*\)/\1/")
|
||
|
COLOR=$([[ "${status}" =~ Up ]] && echo "${GREEN}" || echo "${RED}")
|
||
|
echo " - ${COLOR}${BOLD}[${status}]${NC} ${service}"
|
||
|
fi
|
||
|
done
|
||
|
done
|
||
|
}
|
||
|
|
||
|
# ========================================
|
||
|
service_available () {
|
||
|
echo $(getAvailableServices)
|
||
|
}
|
||
|
|
||
|
service_validate () {
|
||
|
echo $(getAvailableServices)
|
||
|
}
|
||
|
|
||
|
getServiceInOrga () {
|
||
|
for orga in $*; do
|
||
|
[[ "${orga}" = *"-orga" ]] || continue
|
||
|
local ORGA_DIR="${KAZ_COMP_DIR}/${orga}"
|
||
|
ORGA_COMPOSE="${ORGA_DIR}/docker-compose.yml"
|
||
|
[[ -f "${ORGA_COMPOSE}" ]] || continue
|
||
|
for service in $(getAvailableServices); do
|
||
|
case "${service}" in
|
||
|
paheko)
|
||
|
[ -f "${ORGA_DIR}/usePaheko" ] && echo "${service}"
|
||
|
;;
|
||
|
wiki)
|
||
|
grep -q "\s*dokuwiki:" "${ORGA_COMPOSE}" 2>/dev/null && echo "${service}"
|
||
|
;;
|
||
|
wp)
|
||
|
grep -q "\s*wordpress:" "${ORGA_COMPOSE}" 2>/dev/null && echo "${service}"
|
||
|
;;
|
||
|
*)
|
||
|
grep -q "\s*${service}:" "${ORGA_COMPOSE}" 2>/dev/null && echo "${service}"
|
||
|
esac
|
||
|
done
|
||
|
done
|
||
|
}
|
||
|
|
||
|
getOrgaWithService() {
|
||
|
service="$1"
|
||
|
shift
|
||
|
case "${service}" in
|
||
|
wiki) keyword="dokuwiki" ;;
|
||
|
wp) keyword="wordpress" ;;
|
||
|
*) keyword="${service}" ;;
|
||
|
esac
|
||
|
for orga in $*; do
|
||
|
[[ "${orga}" = *"-orga" ]] || continue
|
||
|
local ORGA_DIR="${KAZ_COMP_DIR}/${orga}"
|
||
|
ORGA_COMPOSE="${ORGA_DIR}/docker-compose.yml"
|
||
|
[[ -f "${ORGA_COMPOSE}" ]] || continue
|
||
|
if [ "${service}" = "paheko" ]; then
|
||
|
[ -f "${ORGA_DIR}/usePaheko" ] && echo "${orga}"
|
||
|
else
|
||
|
grep -q "\s*${keyword}:" "${ORGA_COMPOSE}" 2>/dev/null && echo "${orga}"
|
||
|
fi
|
||
|
done
|
||
|
}
|
||
|
|
||
|
service_enable () {
|
||
|
echo $(getServiceInOrga $* | sort -u)
|
||
|
}
|
||
|
|
||
|
service_disable () {
|
||
|
echo $(getAvailableServices | filterNotInList $(getServiceInOrga $*))
|
||
|
}
|
||
|
|
||
|
service_status () {
|
||
|
# ps per enable
|
||
|
echo "*** TODO ***"
|
||
|
}
|
||
|
|
||
|
# ========================================
|
||
|
|
||
|
KAZ_CMD=""
|
||
|
case "$1" in
|
||
|
'-h' | '-help' )
|
||
|
usage
|
||
|
;;
|
||
|
compose|service)
|
||
|
KAZ_CMD="$1"
|
||
|
shift
|
||
|
;;
|
||
|
*)
|
||
|
usage
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
KAZ_OPT=""
|
||
|
case "$1" in
|
||
|
available|validate|enable|disable|status)
|
||
|
KAZ_OPT="$1"
|
||
|
shift
|
||
|
;;
|
||
|
*)
|
||
|
if [ "${KAZ_CMD}" = "service" ] && [[ $1 =~ ^(${SERVICES_CHOICE})$ ]]; then
|
||
|
KAZ_OPT="$1"
|
||
|
shift
|
||
|
getOrgaWithService "${KAZ_OPT}" $(filterAvailableComposes $*)
|
||
|
exit
|
||
|
fi
|
||
|
usage
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
${KAZ_CMD}_${KAZ_OPT} $(filterAvailableComposes $*)
|