182 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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 $*)
 |