130 lines
3.3 KiB
Bash
130 lines
3.3 KiB
Bash
#!/bin/bash
|
|
# vi: set tabstop=4 shiftwidth=4 expandtab :
|
|
|
|
declare -A M_CONTAINER
|
|
|
|
M_CONTAINER['name']=''
|
|
M_CONTAINER['title']='(NULL)'
|
|
M_CONTAINER['shell']=sh
|
|
M_CONTAINER['upd-sig']=HUP
|
|
|
|
#
|
|
# Статус работы контейнера
|
|
#
|
|
MAP_COMMAND['status']=fn_container_status
|
|
function fn_container_status {
|
|
if [ $(fn_container_check) = 1 ]
|
|
then
|
|
log "${M_CONTAINERP['title']} running"
|
|
podman logs --tail 5 ${M_CONTAINER['name']}
|
|
elif [ $(fn_container_check2) = 1 ]
|
|
then
|
|
log "${M_CONTAINER['title']} container down"
|
|
else
|
|
log "${M_CONTAINER['title']} not running"
|
|
fi
|
|
}
|
|
|
|
#
|
|
# Остановка контейнера
|
|
#
|
|
MAP_COMMAND['stop']=fn_container_stop
|
|
function fn_container_stop {
|
|
if [ $(fn_container_check) = 1 ]
|
|
then
|
|
log "Stop ${M_CONTAINER['title']} container..."
|
|
podman stop ${M_CONTAINER['name']}
|
|
fi
|
|
|
|
if [ $(fn_container_check2) = 1 ]
|
|
then
|
|
log "Remove ${M_CONTAINER['title']} container..."
|
|
local container_id=$(podman rm ${M_CONTAINER['name']})
|
|
log $conainer_id
|
|
# TODO здесь необходимо выполнить проверку на
|
|
# - включен ли модуль network
|
|
# - остались ли после удаления контейнера сетевые файлы
|
|
# - Если да, то запустить процесс зачистки...
|
|
# - ...файлов
|
|
# - ...nftables
|
|
# - Если нет, просто завершить работу
|
|
else
|
|
log "${M_CONTAINER['title']} not runned."
|
|
fi
|
|
}
|
|
|
|
#
|
|
# Перезапуск контейнера
|
|
#
|
|
MAP_COMMAND['restart']=fn_container_restart
|
|
function fn_container_restart {
|
|
fn_container_stop && fn_container_start
|
|
}
|
|
|
|
#
|
|
# Логи контейнера
|
|
#
|
|
MAP_COMMAND['logs']=fn_container_logs
|
|
function fn_logs {
|
|
if [ $(fn_container_check2) = 1 ]
|
|
then
|
|
podman logs --tail 10 -f ${M_CONTAINER['name']}
|
|
else
|
|
log "${M_CONTAINER['title']} not exists"
|
|
fi
|
|
}
|
|
|
|
#
|
|
# Войти в shell контейнера
|
|
#
|
|
MAP_COMMAND['shell']=fn_container_shell
|
|
function fn_container_shell {
|
|
if [ $(fn_container_check) = 1 ]
|
|
then
|
|
log "Enter shell in ${M_CONTAINER['title']} container..."
|
|
podman exec -it ${M_CONTAINER['name']} ${M_CONTAINER['shell']}
|
|
else
|
|
log "${M_CONTAINER['title']} not runned."
|
|
fi
|
|
}
|
|
|
|
#
|
|
# Послать сигнал обновления конфигов.
|
|
# Предназначено для запущенный в контейнере программ.
|
|
#
|
|
MAP_COMMAND['update']=fn_container_update_config
|
|
function fn_container_update_config {
|
|
if [ $(fn_container_check) = 1 ]
|
|
then
|
|
log "Update config ${M_CONTAINER['title']}..."
|
|
podman kill --signal=${M_CONTAINER['upd-sig']} ${M_CONTAINER['name']}
|
|
else
|
|
log "${M_CONTAINER['title']} not runned."
|
|
fi
|
|
}
|
|
|
|
#
|
|
# Статус работы контейнера
|
|
#
|
|
function fn_container_check {
|
|
if [[ -n $(podman ps --filter "name=${M_CONTAINER['name']}" -q) ]]
|
|
then
|
|
echo 1
|
|
else
|
|
echo 0
|
|
fi
|
|
}
|
|
|
|
#
|
|
# Статус существования контейнера
|
|
#
|
|
function fn_container_check2 {
|
|
if [[ -n $(podman ps --filter "name=${M_CONTAINER['name']}" -qa) ]]
|
|
then
|
|
echo 1
|
|
else
|
|
echo 0
|
|
fi
|
|
}
|
|
|