316 lines
8.5 KiB
Bash
316 lines
8.5 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
export KAZ_ROOT=$(cd "$(dirname $0)/.."; pwd)
|
||
|
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
|
||
|
setKazVars
|
||
|
|
||
|
RUN_PASS_DIR="secret"
|
||
|
TMPL_PASS_DIR="secret.tmpl"
|
||
|
RUN_PASS_FILE="${RUN_PASS_DIR}/SetAllPass.sh"
|
||
|
TMPL_PASS_FILE="${TMPL_PASS_DIR}/SetAllPass.sh"
|
||
|
NEED_GEN=
|
||
|
|
||
|
########################################
|
||
|
|
||
|
usage () {
|
||
|
echo "Usage: $0 [-n] [-h]"
|
||
|
echo " -h help"
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
case "$1" in
|
||
|
'-h' | '-help' )
|
||
|
usage
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
[ "$#" -eq 0 ] || usage
|
||
|
|
||
|
########################################
|
||
|
# check system
|
||
|
|
||
|
for prg in kompare; do
|
||
|
if ! type "${prg}" > /dev/null; then
|
||
|
printKazError "$0 need ${prg}"
|
||
|
echo "please run \"apt-get install ${prg}\""
|
||
|
exit
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
cd "${KAZ_ROOT}"
|
||
|
########################################
|
||
|
# get lvalues in script
|
||
|
getVars () {
|
||
|
# $1 : filename
|
||
|
grep "^[^#]*=" $1 | sed 's/\([^=]*\).*/\1/' | sort -u
|
||
|
}
|
||
|
|
||
|
# get lvalues in script
|
||
|
getSettedVars () {
|
||
|
# $1 : filename
|
||
|
grep "^[^#]*=..*" $1 | grep -v '^[^#]*=".*--clean_val--.*"' | grep -v '^[^#]*="${' | sort -u
|
||
|
}
|
||
|
|
||
|
getVarFormVal () {
|
||
|
# $1 searched value
|
||
|
# $2 filename
|
||
|
grep "^[^#]*=$1" $2 | sed 's/\s*\([^=]*\).*/\1/'
|
||
|
}
|
||
|
|
||
|
########################################
|
||
|
# synchronized SetAllPass.sh (find missing lvalues)
|
||
|
updatePassFile () {
|
||
|
# $1 : ref filename
|
||
|
# $2 : target filename
|
||
|
|
||
|
REF_FILE="$1"
|
||
|
TARGET_FILE="$2"
|
||
|
NEED_UPDATE=
|
||
|
while : ; do
|
||
|
declare -a listRef listTarget missing
|
||
|
listRef=($(getVars "${REF_FILE}"))
|
||
|
listTarget=($(getVars "${TARGET_FILE}"))
|
||
|
missing=($(comm -23 <(printf "%s\n" ${listRef[@]}) <(printf "%s\n" ${listTarget[@]})))
|
||
|
if [ -n "${missing}" ]; then
|
||
|
echo "missing vars in ${YELLOW}${BOLD}${TARGET_FILE}${NC}:${RED}${BOLD}" ${missing[@]} "${NC}"
|
||
|
read -p "Do you want to add them? [y/n]: " yn
|
||
|
case $yn in
|
||
|
""|[Yy]*)
|
||
|
emacs "${REF_FILE}" "${TARGET_FILE}"
|
||
|
NEED_UPDATE=true
|
||
|
break
|
||
|
;;
|
||
|
[Nn]*)
|
||
|
break
|
||
|
;;
|
||
|
esac
|
||
|
else
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
}
|
||
|
|
||
|
updatePassFile "${TMPL_PASS_FILE}" "${RUN_PASS_FILE}"
|
||
|
[ -n "${NEED_UPDATE}" ] && NEED_GEN=true
|
||
|
updatePassFile "${RUN_PASS_FILE}" "${TMPL_PASS_FILE}"
|
||
|
|
||
|
########################################
|
||
|
# check empty pass in TMPL_PASS_FILE
|
||
|
declare -a settedVars
|
||
|
settedVars=($(getSettedVars "${TMPL_PASS_FILE}"))
|
||
|
if [ -n "${settedVars}" ]; then
|
||
|
echo "unclear password in ${YELLOW}${BOLD}${TMPL_PASS_FILE}${NC}:${BLUE}${BOLD}"
|
||
|
for var in ${settedVars[@]}; do
|
||
|
echo -e "\t${var}"
|
||
|
done
|
||
|
echo "${NC}"
|
||
|
read -p "Do you want to clear them? [y/n]: " yn
|
||
|
case $yn in
|
||
|
""|[Yy]*)
|
||
|
emacs "${TMPL_PASS_FILE}"
|
||
|
;;
|
||
|
esac
|
||
|
fi
|
||
|
|
||
|
########################################
|
||
|
# check new files env-*
|
||
|
createMissingEnv () {
|
||
|
# $1 : ref dir
|
||
|
# $2 : target dir
|
||
|
REF_DIR="$1"
|
||
|
TARGET_DIR="$2"
|
||
|
NEED_UPDATE=
|
||
|
|
||
|
declare -a listRef listTarget missing
|
||
|
listRef=($(cd "${REF_DIR}"; ls -1 env-* | grep -v '~$'))
|
||
|
listTarget=($(cd "${TARGET_DIR}"; ls -1 env-* | grep -v '~$'))
|
||
|
missing=($(comm -23 <(printf "%s\n" ${listRef[@]}) <(printf "%s\n" ${listTarget[@]})))
|
||
|
for envFile in ${missing[@]}; do
|
||
|
read -p "Do you want to create ${GREEN}${BOLD}${TARGET_DIR}/${envFile}${NC}? [y/n]: " yn
|
||
|
case $yn in
|
||
|
""|[Yy]*)
|
||
|
cp "${REF_DIR}/${envFile}" "${TARGET_DIR}/${envFile}"
|
||
|
NEED_UPDATE=true
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
}
|
||
|
|
||
|
createMissingEnv "${RUN_PASS_DIR}" "${TMPL_PASS_DIR}"
|
||
|
[ -n "${NEED_UPDATE}" ] && NEED_GEN=true
|
||
|
createMissingEnv "${TMPL_PASS_DIR}" "${RUN_PASS_DIR}"
|
||
|
[ -n "${NEED_UPDATE}" ] && NEED_GEN=true
|
||
|
|
||
|
########################################
|
||
|
# check missing values in env-* between RUN and TMPL
|
||
|
declare -a listTmpl listRun listCommonFiles
|
||
|
listTmplFiles=($(cd "${TMPL_PASS_DIR}"; ls -1 env-* | grep -v '~$'))
|
||
|
listRunFiles=($(cd "${RUN_PASS_DIR}"; ls -1 env-* | grep -v '~$'))
|
||
|
listCommonFiles=($(comm -3 <(printf "%s\n" ${listTmplFiles[@]}) <(printf "%s\n" ${listRunFiles[@]})))
|
||
|
for envFile in ${listCommonFiles[@]}; do
|
||
|
while : ; do
|
||
|
TMPL_FILE="${TMPL_PASS_DIR}/${envFile}"
|
||
|
RUN_FILE="${RUN_PASS_DIR}/${envFile}"
|
||
|
declare -a listRef list2Target missingInRun missingInTmpl
|
||
|
listTmplVars=($(getVars "${TMPL_FILE}"))
|
||
|
listRunVars=($(getVars "${RUN_FILE}"))
|
||
|
missingInTmpl=($(comm -23 <(printf "%s\n" ${listTmplVars[@]}) <(printf "%s\n" ${listRunVars[@]})))
|
||
|
missingInRun=($(comm -13 <(printf "%s\n" ${listTmplVars[@]}) <(printf "%s\n" ${listRunVars[@]})))
|
||
|
if [ -n "${missingInTmpl}" ] || [ -n "${missingInRun}" ]; then
|
||
|
[ -n "${missingInTmpl}" ] &&
|
||
|
echo "missing vars in ${YELLOW}${BOLD}${TMPL_FILE}${NC}:${RED}${BOLD}" ${missingInTmpl[@]} "${NC}"
|
||
|
[ -n "${missingInRun}" ] &&
|
||
|
echo "missing vars in ${YELLOW}${BOLD}${RUN_FILE}${NC}:${RED}${BOLD}" ${missingInRun[@]} "${NC}"
|
||
|
read -p "Do you want to add them? [y/n]: " yn
|
||
|
case $yn in
|
||
|
""|[Yy]*)
|
||
|
emacs "${TMPL_FILE}" "${RUN_FILE}"
|
||
|
[ -n "${missingInTmpl}" ] && NEED_GEN=true
|
||
|
break
|
||
|
;;
|
||
|
[Nn]*)
|
||
|
break
|
||
|
;;
|
||
|
esac
|
||
|
else
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
done
|
||
|
|
||
|
########################################
|
||
|
# check empty pass in env-*
|
||
|
for envFile in $(ls -1 "${TMPL_PASS_DIR}/"env-* | grep -v '~$'); do
|
||
|
settedVars=($(getSettedVars "${envFile}"))
|
||
|
if [ -n "${settedVars}" ]; then
|
||
|
echo "unclear password in ${GREEN}${BOLD}${envFile}${NC}:${BLUE}${BOLD}"
|
||
|
for var in ${settedVars[@]}; do
|
||
|
echo -e "\t${var}"
|
||
|
done
|
||
|
echo "${NC}"
|
||
|
read -p "Do you want to clear them? [y/n]: " yn
|
||
|
case $yn in
|
||
|
""|[Yy]*)
|
||
|
emacs "${envFile}"
|
||
|
;;
|
||
|
esac
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
########################################
|
||
|
# check extention in dockers.env
|
||
|
declare -a missing
|
||
|
missing=($(for DIR in "${RUN_PASS_DIR}" "${TMPL_PASS_DIR}"; do
|
||
|
for envFile in $(ls -1 "${DIR}/"env-* | grep -v '~$'); do
|
||
|
val="${envFile#*env-}"
|
||
|
varName=$(getVarFormVal "${val}" "${DOCKERS_ENV}")
|
||
|
if [ -z "${varName}" ]; then
|
||
|
echo "${val}"
|
||
|
fi
|
||
|
done
|
||
|
done | sort -u))
|
||
|
if [ -n "${missing}" ]; then
|
||
|
echo "missing def in ${GREEN}${BOLD}${DOCKERS_ENV}${NC}:${BLUE}${BOLD}"
|
||
|
for var in ${missing[@]}; do
|
||
|
echo -e "\t${var}"
|
||
|
done
|
||
|
echo "${NC}"
|
||
|
read -p "Do you want to add them? [y/n]: " yn
|
||
|
case $yn in
|
||
|
""|[Yy]*)
|
||
|
emacs "${DOCKERS_ENV}"
|
||
|
;;
|
||
|
esac
|
||
|
fi
|
||
|
|
||
|
########################################
|
||
|
# check env-* in updateDockerPassword.sh
|
||
|
missing=($(for DIR in "${RUN_PASS_DIR}" "${TMPL_PASS_DIR}"; do
|
||
|
for envFile in $(ls -1 "${DIR}/"env-* | grep -v '~$'); do
|
||
|
val="${envFile#*env-}"
|
||
|
varName=$(getVarFormVal "${val}" "${DOCKERS_ENV}")
|
||
|
[ -z "${varName}" ] && continue
|
||
|
prefixe=$(grep "^\s*updateEnv.*${varName}" "${KAZ_BIN_DIR}/updateDockerPassword.sh" |
|
||
|
sed 's/\s*updateEnv[^"]*"\([^"]*\)".*/\1/' | sort -u)
|
||
|
if [ -z "${prefixe}" ]; then
|
||
|
echo "${envFile#*/}_(\${KAZ_KEY_DIR}/env-\${"${varName}"})"
|
||
|
fi
|
||
|
done
|
||
|
done | sort -u))
|
||
|
if [ -n "${missing}" ]; then
|
||
|
echo "missing update in ${GREEN}${BOLD}${KAZ_BIN_DIR}/updateDockerPassword.sh${NC}:${BLUE}${BOLD}"
|
||
|
for var in ${missing[@]}; do
|
||
|
echo -e "\t${var}"
|
||
|
done
|
||
|
echo "${NC}"
|
||
|
read -p "Do you want to add them? [y/n]: " yn
|
||
|
case $yn in
|
||
|
""|[Yy]*)
|
||
|
emacs "${KAZ_BIN_DIR}/updateDockerPassword.sh"
|
||
|
;;
|
||
|
esac
|
||
|
fi
|
||
|
|
||
|
########################################
|
||
|
# synchronized SetAllPass.sh and env-*
|
||
|
updateEnvFiles () {
|
||
|
# $1 secret dir
|
||
|
DIR=$1
|
||
|
listRef=($(getVars "${DIR}/SetAllPass.sh"))
|
||
|
missing=($(for envFile in $(ls -1 "${DIR}/"env-* | grep -v '~$'); do
|
||
|
val="${envFile#*env-}"
|
||
|
varName=$(getVarFormVal "${val}" "${DOCKERS_ENV}")
|
||
|
[ -z "${varName}" ] && continue
|
||
|
prefixe=$(grep "^\s*updateEnv.*${varName}" "${KAZ_BIN_DIR}/updateDockerPassword.sh" |
|
||
|
sed 's/\s*updateEnv[^"]*"\([^"]*\)".*/\1/' | sort -u)
|
||
|
[ -z "${prefixe}" ] && continue
|
||
|
listVarsInEnv=($(getVars "${envFile}"))
|
||
|
for var in ${listVarsInEnv[@]}; do
|
||
|
[[ ! " ${listRef[@]} " =~ " ${prefixe}_${var} " ]] && echo "${prefixe}_${var}"
|
||
|
done
|
||
|
# XXX doit exister dans SetAllPass.sh avec le prefixe
|
||
|
done))
|
||
|
if [ -n "${missing}" ]; then
|
||
|
echo "missing update in ${GREEN}${BOLD}${DIR}/SetAllPass.sh${NC}:${BLUE}${BOLD}"
|
||
|
for var in ${missing[@]}; do
|
||
|
echo -e "\t${var}"
|
||
|
done
|
||
|
echo "${NC}"
|
||
|
read -p "Do you want to add them? [y/n]: " yn
|
||
|
case $yn in
|
||
|
""|[Yy]*)
|
||
|
emacs "${DIR}/SetAllPass.sh"
|
||
|
;;
|
||
|
esac
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
updateEnvFiles "${RUN_PASS_DIR}"
|
||
|
updateEnvFiles "${TMPL_PASS_DIR}"
|
||
|
|
||
|
# XXX chercher les variables non utilisées dans les SetAllPass.sh
|
||
|
|
||
|
if [ -n "${NEED_GEN}" ]; then
|
||
|
while : ; do
|
||
|
read -p "Do you want to generate blank values? [y/n]: " yn
|
||
|
case $yn in
|
||
|
""|[Yy]*)
|
||
|
"${KAZ_BIN_DIR}/secretGen.sh"
|
||
|
break
|
||
|
;;
|
||
|
[Nn]*)
|
||
|
break
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
|
||
|
# XXX config/dockers.tmpl.env
|
||
|
|
||
|
|
||
|
# XXX ! vérifier init pour dockers.env
|
||
|
|
||
|
|
||
|
|