containerctl: Add containerctl script
Add script to generate and exec control scripts. Signed-off-by: Enno Tensing <tenno@suij.in>
This commit is contained in:
parent
b0df681fea
commit
7200d09621
1 changed files with 134 additions and 0 deletions
134
containerctl
Executable file
134
containerctl
Executable file
|
@ -0,0 +1,134 @@
|
|||
#!/bin/sh
|
||||
|
||||
BASEDIR="/var/lib/containerctl"
|
||||
CONTAINERDIR="${BASEDIR}/containers"
|
||||
CONFIGDIR="${BASEDIR}/configs"
|
||||
LOGDIR="/var/log/containerctl"
|
||||
TODAY="$(date '+%F')"
|
||||
LOG="${LOGDIR}/${TODAY}"
|
||||
|
||||
log_error()
|
||||
{
|
||||
printf '[%b] (EE) %b\n' "${@}" | tee -a "${LOG}"
|
||||
}
|
||||
|
||||
list_dir()
|
||||
{
|
||||
find "${1}" -mindepth 1 -type d
|
||||
}
|
||||
|
||||
list_containers()
|
||||
{
|
||||
list_dir "${CONTAINERDIR}"
|
||||
}
|
||||
|
||||
list_configs()
|
||||
{
|
||||
list_dir "${CONFIGDIR}"
|
||||
}
|
||||
|
||||
exec_script()
|
||||
{
|
||||
container="${1}"
|
||||
script="${2}"
|
||||
|
||||
if [ -z "${container}" ]
|
||||
then
|
||||
log_error "No container passed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${script}" ]
|
||||
then
|
||||
log_error "No script passed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -e "${CONTAINERDIR}/${container}" ]
|
||||
then
|
||||
log_error "${container} does not exist, did you forget to generate it?"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -d "${CONTAINERDIR}/${container}" ]
|
||||
then
|
||||
log_error "${container} does not exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -e "${CONTAINERDIR}/${container}/${script}" ]
|
||||
then
|
||||
log_error "${script} is invalid, maybe try regenerating the container?"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -f "${CONTAINERDIR}/${container}/${script}" ]
|
||||
then
|
||||
log_error "${script} is invalid, please recreate the container"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
/bin/sh "${CONTAINERDIR}/${container}/${script}" || log_error "${script} failed!"
|
||||
}
|
||||
|
||||
|
||||
generate_container()
|
||||
{
|
||||
config="${1}"
|
||||
|
||||
if [ -z "${config}" ]
|
||||
then
|
||||
log_error "No config was passed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -e "${CONFIGDIR}" ]
|
||||
then
|
||||
log_error "${CONFIGDIR} does not exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -d "${CONFIGDIR}" ]
|
||||
then
|
||||
log_error "${CONFIGDIR} is not a directory"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -e "${CONFIGDIR}/${config}" ]
|
||||
then
|
||||
log_error "${config} does not exist!" \
|
||||
"Please check the name and or location of the desired config."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -f "${CONFIGDIR}/${config}" ]
|
||||
then
|
||||
log_error "${config} is not a file."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
/usr/bin/env python3 "${BASEDIR}/generate/generate.py" \
|
||||
"${CONFIGDIR}/${config}" "${LOG}" "${CONTAINERDIR}"
|
||||
|
||||
if [ "${?}" = 1 ]
|
||||
then
|
||||
log_error "Container generation failed."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
generate_all()
|
||||
{
|
||||
list_configs | while read -r config
|
||||
do
|
||||
generate_config "$(printf '%b' "${config}" | sed -e "s|${CONFIGDIR}||g")"
|
||||
done
|
||||
}
|
||||
|
||||
case "${1}" in
|
||||
"list-containers") list_containers ;;
|
||||
"list-configs") list_configs ;;
|
||||
"generate-all") generate_all ;;
|
||||
"generate") shift; generate_config "${@}" ;;
|
||||
*) exec_script "${@}" ;;
|
||||
esac
|
Loading…
Add table
Reference in a new issue