Archived
0
This repository has been archived on 2022-03-24. You can view files and clone it, but cannot push or open issues or pull requests.
Files
project-ctl/ctl.d/10-module-container.sh
2022-02-17 13:27:51 +03:00

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
}