first commit
This commit is contained in:
486
config/orgaTmpl/orga-gen.sh
Executable file
486
config/orgaTmpl/orga-gen.sh
Executable file
@ -0,0 +1,486 @@
|
||||
#!/bin/bash
|
||||
|
||||
# XXX pb arret des services retiré
|
||||
|
||||
PRG=$(basename $0)
|
||||
KAZ_ROOT=$(cd "$(dirname $0)/../.."; pwd)
|
||||
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
|
||||
setKazVars
|
||||
|
||||
cd $(dirname $0)
|
||||
ORGA_DIR="$(basename "$(pwd)")"
|
||||
TIMESTAMP=YES
|
||||
TMPL_PROXY_COMPOSE="${KAZ_COMP_DIR}/proxy/docker-compose.tmpl.yml"
|
||||
TMPL_TRAEFIK_COMPOSE="${KAZ_COMP_DIR}/traefik/docker-compose.tmpl.yml"
|
||||
ORGA_LIST="${KAZ_CONF_DIR}/container-orga.list"
|
||||
LIST=""
|
||||
|
||||
STAGE_DEFAULT=true
|
||||
STAGE_CREATE=
|
||||
STAGE_INIT=
|
||||
|
||||
usage(){
|
||||
echo "Usage: $0 [-h] [-l] [+/-paheko] [-/+cloud [-/+collabora}]] [+/-agora] [+/-wiki] [+/-wp] [+/-pod] [x{G/M/k}] OrgaName"
|
||||
echo " -h|--help : this help"
|
||||
echo " -l|--list : list service"
|
||||
|
||||
echo " --create : only create (before start)"
|
||||
echo " --init : only init (after start)"
|
||||
|
||||
echo " +/- paheko : on/off paheko"
|
||||
echo " +/- cloud : on/off cloud"
|
||||
echo " +/- coll* : on/off collabora"
|
||||
echo " +/- matter*|agora : on/off agora"
|
||||
echo " +/- wiki : on/off wiki"
|
||||
echo " +/- wp|word* : on/off wp"
|
||||
echo " +/- casto*|pod : on/off castopod"
|
||||
echo " x[GMk] : set quota"
|
||||
echo " OrgaName : name must contain a-z0-9_\-"
|
||||
}
|
||||
|
||||
for ARG in "$@"; do
|
||||
case "${ARG}" in
|
||||
'-h' | '--help' )
|
||||
usage
|
||||
exit 0;;
|
||||
'-l' | '--list' )
|
||||
;;
|
||||
'--create' )
|
||||
STAGE_DEFAULT=
|
||||
STAGE_CREATE=true
|
||||
if [[ -n "${STAGE_INIT}" ]]; then
|
||||
usage
|
||||
echo " Incompatible options (--create --init)"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
'--init' )
|
||||
STAGE_DEFAULT=
|
||||
STAGE_INIT=true
|
||||
if [[ -n "${STAGE_CREATE}" ]]; then
|
||||
usage
|
||||
echo " Incompatible options (--create --init)"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
'-'* )
|
||||
;;
|
||||
'+'* )
|
||||
;;
|
||||
[.0-9]*[GMk] )
|
||||
;;
|
||||
* )
|
||||
if [[ "${ORGA_DIR}" = "orgaTmpl" ]]; then
|
||||
if [[ "${ARG}" =~ ^[a-z0-9_\-]+$ ]]; then
|
||||
printKazMsg "create ${ARG}"
|
||||
ORGA_PATH="${KAZ_COMP_DIR}/${ARG}-orga"
|
||||
mkdir -p "${ORGA_PATH}"
|
||||
cd "${ORGA_PATH}"
|
||||
ORGA_DIR="$(basename "$(pwd)")"
|
||||
ln -sf ../../config/dockers.env .env
|
||||
ln -sf ../../config/orgaTmpl/orga-gen.sh
|
||||
ln -sf ../../config/orgaTmpl/orga-rm.sh
|
||||
ln -sf ../../config/orgaTmpl/reload.sh
|
||||
else
|
||||
printKazError "Name must contains only a-z0-9_\-"
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
if [[ "${ARG}-orga" != "${ORGA_DIR}" ]]; then
|
||||
printKazError "Can't cross config ${ARG}-orga with ${ORGA_DIR}"
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ "${ORGA_DIR}" = "orgaTmpl" ]]
|
||||
then
|
||||
printKazError "You must give orga name"
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${ORGA_DIR}" != *"-orga" ]]
|
||||
then
|
||||
printKazError "it's not an orga dir"
|
||||
exit
|
||||
fi
|
||||
ORGA=${ORGA_DIR%-orga}
|
||||
|
||||
if [[ -z "${ORGA}" ]]
|
||||
then
|
||||
printKazError "it's not an orga dir"
|
||||
exit
|
||||
fi
|
||||
|
||||
# default values
|
||||
flagInCompose(){
|
||||
# $1 filename (docker-compose.yml)
|
||||
# $2 service name
|
||||
# $3 default value
|
||||
if [[ ! -f "$1" ]]
|
||||
then
|
||||
echo "$3"
|
||||
else
|
||||
if grep -q "$2" docker-compose.yml
|
||||
then
|
||||
echo on
|
||||
else
|
||||
echo off
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
export cloud=$(flagInCompose docker-compose.yml cloud: off)
|
||||
export collabora=$(flagInCompose docker-compose.yml collabora: off)
|
||||
export agora=$(flagInCompose docker-compose.yml agora: off)
|
||||
export wiki=$(flagInCompose docker-compose.yml dokuwiki: off)
|
||||
export wp=$(flagInCompose docker-compose.yml wordpress: off)
|
||||
export castopod=$(flagInCompose docker-compose.yml castopod: off)
|
||||
export db="off"
|
||||
export services="off"
|
||||
export paheko=$([[ -f usePaheko ]] && echo "on" || echo "off")
|
||||
export quota=10G
|
||||
if [[ -f docker-compose.yml ]]; then
|
||||
if grep -q "storage_opt" docker-compose.yml
|
||||
then
|
||||
quota=$(grep "storage_opt" docker-compose.yml | cut -d : -f 2 | tail -n 1)
|
||||
fi
|
||||
fi
|
||||
|
||||
DBaInitialiser=""
|
||||
INITCMD2="--install"
|
||||
|
||||
|
||||
for ARG in "$@"; do
|
||||
case "${ARG}" in
|
||||
'-show' )
|
||||
for i in cloud collabora agora wiki wp castopod db; do
|
||||
echo "${i}=${!i}"
|
||||
done
|
||||
exit;;
|
||||
'-h' | '--help' )
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
'-l' | '--list' )
|
||||
LIST="list"
|
||||
;;
|
||||
'-time'* )
|
||||
TIMESTAMP=YES
|
||||
;;
|
||||
'-paheko'* )
|
||||
paheko="off"
|
||||
;;
|
||||
'-cloud' )
|
||||
cloud="off"
|
||||
collabora="off"
|
||||
;;
|
||||
'-coll'* | '-offi'* )
|
||||
collabora="off"
|
||||
;;
|
||||
'-matter'* | '-agora')
|
||||
agora="off"
|
||||
;;
|
||||
'-wiki' )
|
||||
wiki="off"
|
||||
;;
|
||||
'-wp' | '-word'* )
|
||||
wp="off"
|
||||
;;
|
||||
'-pod' | '-casto'* )
|
||||
castopod="off"
|
||||
;;
|
||||
'+paheko' )
|
||||
paheko="on"
|
||||
;;
|
||||
'+cloud' )
|
||||
cloud="on"
|
||||
DBaInitialiser="$DBaInitialiser cloud"
|
||||
INITCMD2="$INITCMD2 -cloud"
|
||||
;;
|
||||
'+coll'* | '+offi'* )
|
||||
collabora="on"
|
||||
INITCMD2="$INITCMD2 -office"
|
||||
;;
|
||||
'+matter'* | '+agora' )
|
||||
agora="on"
|
||||
DBaInitialiser="$DBaInitialiser agora"
|
||||
INITCMD2="$INITCMD2 -agora"
|
||||
;;
|
||||
'+wiki' )
|
||||
wiki="on"
|
||||
;;
|
||||
'+wp' | '+word'* )
|
||||
wp="on"
|
||||
DBaInitialiser="$DBaInitialiser wp"
|
||||
INITCMD2="$INITCMD2 -wp"
|
||||
;;
|
||||
'+pod' | '+casto'* )
|
||||
castopod="on"
|
||||
DBaInitialiser="$DBaInitialiser castopod"
|
||||
INITCMD2="$INITCMD2 -pod"
|
||||
;;
|
||||
[.0-9]*[GMk] )
|
||||
quota="${ARG}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "${cloud}" = "on" -o "${agora}" = "on" -o "${wp}" = "on" -o "${castopod}" = "on" ]
|
||||
then
|
||||
db="on"
|
||||
fi
|
||||
if [ "${db}" = "on" -o "${wiki}" = "on" ]
|
||||
then
|
||||
services="on"
|
||||
fi
|
||||
|
||||
. "${DOCKERS_ENV}"
|
||||
ORGA_FLAG=${ORGA_DIR//-/_}
|
||||
DOMAIN_AREA="{{${ORGA_FLAG}\n"
|
||||
ADD_DOMAIN=""
|
||||
DEL_DOMAIN=""
|
||||
|
||||
listServ () {
|
||||
for serv in $(getAvailableServices); do
|
||||
if [[ "${!serv}" == "on" ]]; then
|
||||
echo "${serv}"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
if [[ -n "${LIST}" ]] ; then
|
||||
listServ
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ "${paheko}" = "on" ]]; then
|
||||
touch usePaheko
|
||||
ADD_DOMAIN+="${ORGA}-${pahekoHost} "
|
||||
else
|
||||
rm -f usePaheko
|
||||
DEL_DOMAIN+="${ORGA}-${pahekoHost} "
|
||||
fi
|
||||
if [[ "${cloud}" = "on" ]]; then
|
||||
DOMAIN_AREA+=" - ${ORGA}-\${nextcloudServName}:${ORGA}-\${cloudHost}.\${domain}\n"
|
||||
ADD_DOMAIN+="${ORGA}-${cloudHost} "
|
||||
else
|
||||
DEL_DOMAIN+="${ORGA}-${cloudHost} "
|
||||
fi
|
||||
if [[ "${collabora}" = "on" ]]; then
|
||||
DOMAIN_AREA+=" - ${ORGA}-\${officeServName}:${ORGA}-\${officeHost}.\${domain}\n"
|
||||
ADD_DOMAIN+="${ORGA}-${officeHost} "
|
||||
else
|
||||
DEL_DOMAIN+="${ORGA}-${officeHost} "
|
||||
fi
|
||||
if [[ "${agora}" = "on" ]]; then
|
||||
DOMAIN_AREA+=" - ${ORGA}-\${mattermostServName}:${ORGA}-\${matterHost}.\${domain}\n"
|
||||
ADD_DOMAIN+="${ORGA}-${matterHost} "
|
||||
else
|
||||
DEL_DOMAIN+="${ORGA}-${matterHost} "
|
||||
fi
|
||||
if [[ "${wiki}" = "on" ]]; then
|
||||
DOMAIN_AREA+=" - ${ORGA}-\${dokuwikiServName}:${ORGA}-\${dokuwikiHost}.\${domain}\n"
|
||||
ADD_DOMAIN+="${ORGA}-${dokuwikiHost} "
|
||||
else
|
||||
DEL_DOMAIN+="${ORGA}-${dokuwikiHost} "
|
||||
fi
|
||||
if [[ "${wp}" = "on" ]]; then
|
||||
DOMAIN_AREA+=" - ${ORGA}-\${wordpressServName}:${ORGA}-\${wordpressHost}.\${domain}\n"
|
||||
ADD_DOMAIN+="${ORGA}-${wordpressHost} "
|
||||
else
|
||||
DEL_DOMAIN+="${ORGA}-${wordpressHost} "
|
||||
fi
|
||||
if [[ "${castopod}" = "on" ]]; then
|
||||
DOMAIN_AREA+=" - ${ORGA}-\${castopodServName}:${ORGA}-\${castopodHost}.\${domain}\n"
|
||||
ADD_DOMAIN+="${ORGA}-${castopodHost} "
|
||||
else
|
||||
DEL_DOMAIN+="${ORGA}-${castopodHost} "
|
||||
fi
|
||||
DOMAIN_AREA+="}}\n"
|
||||
|
||||
if [[ -n "${STAGE_DEFAULT}${STAGE_CREATE}" ]]; then
|
||||
if [[ -f "${TMPL_TRAEFIK_COMPOSE}" ]]; then
|
||||
# ########## update traefik/docker-compose.tmpl.yml
|
||||
printKazMsg "Update ${TMPL_TRAEFIK_COMPOSE}"
|
||||
if grep -q "^{{${ORGA_FLAG}" "${TMPL_TRAEFIK_COMPOSE}" 2> /dev/null ; then
|
||||
sed -i -e "/^{{${ORGA_FLAG}/,/^}}/d" "${TMPL_TRAEFIK_COMPOSE}"
|
||||
fi
|
||||
# use net
|
||||
sed "s/^#### END ORGA USE_NET/{{${ORGA_FLAG}\n - ${ORGA}Net\n}}\n#### END ORGA USE_NET/" -i "${TMPL_TRAEFIK_COMPOSE}"
|
||||
# def net
|
||||
sed "s/^#### END ORGA DEF_NET/{{${ORGA_FLAG}\n ${ORGA}Net:\n external: true\n name: ${ORGA}-orgaNet\n}}\n#### END ORGA DEF_NET/" -i "${TMPL_TRAEFIK_COMPOSE}"
|
||||
fi
|
||||
if [[ -f "${TMPL_PROXY_COMPOSE}" ]]; then
|
||||
# ########## update proxy/docker-compose.tmpl.yml
|
||||
printKazMsg "Update ${TMPL_PROXY_COMPOSE}"
|
||||
if grep -q "^{{${ORGA_FLAG}" "${TMPL_PROXY_COMPOSE}" 2> /dev/null ; then
|
||||
sed -i -e "/^{{${ORGA_FLAG}/,/^}}/d" "${TMPL_PROXY_COMPOSE}"
|
||||
fi
|
||||
# domaine
|
||||
sed "s/^#### END ORGA HOST/${DOMAIN_AREA}#### END ORGA HOST/" -i "${TMPL_PROXY_COMPOSE}"
|
||||
# use net
|
||||
sed "s/^#### END ORGA USE_NET/{{${ORGA_FLAG}\n - ${ORGA}Net\n}}\n#### END ORGA USE_NET/" -i "${TMPL_PROXY_COMPOSE}"
|
||||
# def net
|
||||
sed "s/^#### END ORGA DEF_NET/{{${ORGA_FLAG}\n ${ORGA}Net:\n external: true\n name: ${ORGA}-orgaNet\n}}\n#### END ORGA DEF_NET/" -i "${TMPL_PROXY_COMPOSE}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -n "${STAGE_DEFAULT}${STAGE_CREATE}" ]]; then
|
||||
# ########## update DNS
|
||||
printKazMsg "Update DNS"
|
||||
${KAZ_BIN_DIR}/dns.sh add ${ADD_DOMAIN}
|
||||
${KAZ_BIN_DIR}/dns.sh del ${DEL_DOMAIN}
|
||||
fi
|
||||
|
||||
update() {
|
||||
(
|
||||
# $1 = template
|
||||
# $2 = target
|
||||
if [ "${TIMESTAMP}" == "YES" ]; then
|
||||
echo "# Generated by $(pwd)$(basename $0)"
|
||||
echo "# à partir du modèle $1"
|
||||
echo "#" $(date "+%x %X")
|
||||
echo
|
||||
fi
|
||||
FOREIGN_WP=$(grep " ${ORGA};" "${KAZ_CONF_PROXY_DIR}/wp_kaz_map" 2>/dev/null | \
|
||||
sed "s/\([^ ]*\) ${ORGA};/ \|\| Host(\`\1\`)/" | tr -d "\r\n")
|
||||
FOREIGN_NC=$(grep " ${ORGA};" "${KAZ_CONF_PROXY_DIR}/cloud_kaz_map" 2>/dev/null | \
|
||||
sed "s/\([^ ]*\) ${ORGA};/ \|\| Host(\`\1\`)/" | tr -d "\r\n")
|
||||
FOREIGN_DW=$(grep " ${ORGA};" "${KAZ_CONF_PROXY_DIR}/wiki_kaz_map" 2>/dev/null | \
|
||||
sed "s/\([^ ]*\) ${ORGA};/ \|\| Host(\`\1\`)/" | tr -d "\r\n")
|
||||
FOREIGN_POD=$(grep " ${ORGA};" "${KAZ_CONF_PROXY_DIR}/pod_kaz_map" 2>/dev/null | \
|
||||
sed "s/\([^ ]*\) ${ORGA};/ \|\| Host(\`\1\`)/" | tr -d "\r\n")
|
||||
awk '
|
||||
BEGIN {cp=1}
|
||||
/#}}/ {cp=1 ; next};
|
||||
/#{{on/ {cp=1; next};
|
||||
/#{{off/ {cp=0; next};
|
||||
match($0, /#{{[a-zA-Z0-9_]+/) {cp=(ENVIRON[substr($0,RSTART+3,RLENGTH)] == "on"); next};
|
||||
{if (cp) print $0};' $1 | sed \
|
||||
-e "/^[ \t]*$/d"\
|
||||
-e "/^[ ]*#.*$/d"\
|
||||
-e "s/{{FOREIGN_WP}}/${FOREIGN_WP}/"\
|
||||
-e "s/{{FOREIGN_NC}}/${FOREIGN_NC}/"\
|
||||
-e "s/{{FOREIGN_DW}}/${FOREIGN_DW}/"\
|
||||
-e "s/{{FOREIGN_POD}}/${FOREIGN_POD}/"\
|
||||
-e "s|\${orga}|${ORGA}-|g"
|
||||
) > "$2"
|
||||
sed "s/storage_opt:.*/storage_opt: ${quota}/g" -i "$2"
|
||||
}
|
||||
|
||||
if [[ -n "${STAGE_DEFAULT}${STAGE_CREATE}" ]]; then
|
||||
# ########## update ${ORGA_DIR}/docker-compose.tmpl.yml
|
||||
printKazMsg "update docker-compose.yml ${ORGA}"
|
||||
update ${KAZ_CONF_DIR}/orgaTmpl/docker-compose.yml docker-compose.yml
|
||||
printKazMsg "Service enabled:"
|
||||
for service in $(listServ) ; do
|
||||
printKazMsg " * ${service}"
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ -n "${STAGE_DEFAULT}${STAGE_CREATE}" ]]; then
|
||||
# ########## update ${ORGA_DIR}/init-volume.sh
|
||||
update ${KAZ_CONF_DIR}/orgaTmpl/init-volume.sh init-volume.sh
|
||||
chmod a+x init-volume.sh
|
||||
|
||||
ln -sf ../../config/orgaTmpl/orga-gen.sh
|
||||
ln -sf ../../config/orgaTmpl/orga-rm.sh
|
||||
ln -sf ../../config/orgaTmpl/init-paheko.sh
|
||||
ln -sf ../../config/orgaTmpl/initdb.d/
|
||||
ln -sf ../../config/orgaTmpl/app/
|
||||
ln -sf ../../config/orgaTmpl/wiki-conf/
|
||||
ln -sf ../../config/orgaTmpl/reload.sh
|
||||
ln -sf ../../config/orgaTmpl/init-db.sh
|
||||
fi
|
||||
|
||||
if [[ -n "${STAGE_DEFAULT}${STAGE_CREATE}" ]]; then
|
||||
# ########## update ${DOCKERS_ENV}
|
||||
if ! grep -q "proxy_orga=" .env 2> /dev/null
|
||||
then
|
||||
echo "proxy_orga=on" >> .env
|
||||
fi
|
||||
|
||||
if ! grep -q "proxy_${ORGA_FLAG}=" .env 2> /dev/null
|
||||
then
|
||||
echo "proxy_${ORGA_FLAG}=off" >> .env
|
||||
fi
|
||||
touch "${ORGA_LIST}"
|
||||
if ! grep -qx "${ORGA}-orga" "${ORGA_LIST}" 2> /dev/null
|
||||
then
|
||||
echo "${ORGA}-orga" >> "${ORGA_LIST}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -n "${STAGE_DEFAULT}${STAGE_CREATE}" ]]; then
|
||||
# ########## create volume
|
||||
./init-volume.sh
|
||||
fi
|
||||
|
||||
if [[ -n "${STAGE_CREATE}" ]]; then
|
||||
# ########## start docker
|
||||
docker-compose up -d
|
||||
fi
|
||||
if [[ -n "${STAGE_DEFAULT}" ]]; then
|
||||
# ########## start docker proxy
|
||||
${KAZ_BIN_DIR}/container.sh start ${ORGA}-orga
|
||||
fi
|
||||
|
||||
if [[ -n "${STAGE_DEFAULT}" ]]; then
|
||||
# ########## stop ${DOCKERS_ENV}
|
||||
for service in $("${KAZ_BIN_DIR}/kazList.sh" service disable ${ORGA}-orga); do
|
||||
DockerServName=
|
||||
case "${service}" in
|
||||
agora)
|
||||
DockerServName="${ORGA}-${mattermostServName}"
|
||||
;;
|
||||
paheko)
|
||||
continue
|
||||
;;
|
||||
cloud)
|
||||
DockerServName="${ORGA}-${nextcloudServName}"
|
||||
;;
|
||||
collabora)
|
||||
DockerServName="${ORGA}-${officeServName}"
|
||||
;;
|
||||
wiki)
|
||||
DockerServName="${ORGA}-${dokuwikiServName}"
|
||||
;;
|
||||
wp)
|
||||
DockerServName="${ORGA}-${wordpressServName}"
|
||||
;;
|
||||
esac
|
||||
if checkDockerRunning "${DockerServName}"; then
|
||||
printKazMsg " - stop ${service}"
|
||||
docker rm -f "${DockerServName}" 2>/dev/null
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ -n "${STAGE_DEFAULT}${STAGE_INIT}" ]]; then
|
||||
[ -z "$DBaInitialiser" ] || ./init-db.sh $DBaInitialiser
|
||||
# ########## init services
|
||||
[[ "${paheko}" = "on" ]] && ./init-paheko.sh
|
||||
# initCmd="--install"
|
||||
# # XXX risque d'écraser user DB
|
||||
# [[ "${cloud}" = "on" ]] && initCmd="$initCmd -cloud"
|
||||
# # XXX risque d'écraser user DB
|
||||
# [[ "${wp}" = "on" ]] && initCmd="$initCmd -wp"
|
||||
# [[ "${wiki}" = "on" ]] && initCmd="$initCmd -wiki"
|
||||
# # XXX risque d'écraser user DB
|
||||
# [[ "${agora}" = "on" ]] && initCmd="$initCmd -agora"
|
||||
# [[ "${castopod}" = "on" ]] && initCmd="$initCmd -castopod"
|
||||
|
||||
# on initialise que si il y a au moins un truc à initialiser
|
||||
[[ "${INITCMD2}" != "--install" ]] && ${KAZ_BIN_DIR}/gestContainers.sh $INITCMD2 "${ORGA}"
|
||||
fi
|
||||
|
||||
if [[ -n "${STAGE_DEFAULT}" ]]; then
|
||||
# ########## update status web page
|
||||
${KAZ_COMP_DIR}/web/web-gen.sh
|
||||
fi
|
Reference in New Issue
Block a user