#!/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 }