Update src/dockerutils.sh

This commit is contained in:
colin 2024-07-24 16:28:21 +00:00
parent 63658f478d
commit 95aba9a28e
1 changed files with 65 additions and 21 deletions

View File

@ -5,7 +5,20 @@ if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
exit 1
fi
check_swarm_status() {
dockerutils() {
echo "Available Docker Utility Functions:"
echo " swarm_status - Check the status of the Docker swarm."
echo " node_role - Check the role of the current node in the swarm."
echo " volumes - List Docker volumes."
echo " networks - List Docker overlay networks."
echo " deploy_stack - Deploy a Docker stack. Usage: deploy_stack <stack-name>"
echo " remove_stack - Remove a Docker stack. Usage: remove_stack <stack-name>"
echo " find_container - Find a container by name pattern. Usage: find_container <container-name-pattern>"
echo " find_service_node - Find the nodes where services matching a pattern are running. Usage: find_service_node <service-name-pattern>"
echo " exec_remote - SSH into the node where a container is running and execute a command inside it. Usage: exec_remote <container-name-pattern> <command>"
}
swarm_status() {
SWARM_STATUS=$(docker info --format '{{.Swarm.LocalNodeState}}')
if [[ "$SWARM_STATUS" == "inactive" ]]; then
echo "Node is not in a swarm. Ready to join."
@ -20,7 +33,7 @@ check_swarm_status() {
fi
}
check_node_role() {
node_role() {
NODE_ROLE=$(docker info --format '{{.Swarm.ControlAvailable}}')
if [[ "$NODE_ROLE" == "true" ]]; then
echo "Node is a manager."
@ -33,13 +46,13 @@ check_node_role() {
fi
}
list_docker_volumes() {
volumes=$(docker volume ls --format '{{.Name}}')
if [[ -z "$volumes" ]]; then
volumes() {
volume_list=$(docker volume ls --format '{{.Name}}')
if [[ -z "$volume_list" ]]; then
echo "No Docker volumes found."
else
echo "Available Docker volumes:"
echo "$volumes"
echo "$volume_list"
fi
if [ $? -ne 0 ]; then
echo "Usage: Ensure Docker is running and you have the correct permissions."
@ -47,13 +60,13 @@ list_docker_volumes() {
fi
}
list_docker_overlay_networks() {
networks=$(docker network ls --filter driver=overlay --format '{{.Name}}')
if [[ -z "$networks" ]]; then
networks() {
network_list=$(docker network ls --filter driver=overlay --format '{{.Name}}')
if [[ -z "$network_list" ]]; then
echo "No Docker overlay networks found."
else
echo "Docker overlay networks:"
echo "$networks"
echo "$network_list"
fi
if [ $? -ne 0 ]; then
echo "Usage: Ensure Docker is running and you have the correct permissions."
@ -61,9 +74,9 @@ list_docker_overlay_networks() {
fi
}
dup() {
deploy_stack() {
if [ -z "$1" ]; then
echo "Usage: dup <stack-name>"
echo "Usage: deploy_stack <stack-name>"
return 1
fi
docker stack deploy --with-registry-auth -c ~/"$1"/"$1".yml "$1"
@ -73,9 +86,9 @@ dup() {
fi
}
ddn() {
remove_stack() {
if [ -z "$1" ]; then
echo "Usage: ddn <stack-name>"
echo "Usage: remove_stack <stack-name>"
return 1
fi
docker stack rm "$1"
@ -85,16 +98,47 @@ ddn() {
fi
}
cid() {
find_container() {
if [ -z "$1" ]; then
echo "Usage: cid <container-name>"
echo "Usage: find_container <container-name-pattern>"
return 1
fi
container_id=$(docker ps -qf "name=^$1$" 2>/dev/null)
if [ -z "$container_id" ]; then
echo "No container found with the name: $1"
echo "Usage: Ensure the container name is correct and the container is running."
container_info=$(docker ps --filter "name=$1" --format "{{.ID}} {{.Names}} {{.Node}}")
if [ -z "$container_info" ]; then
echo "No container found with the pattern: $1"
echo "Usage: Ensure the container name pattern is correct and the container is running."
return 1
fi
echo "$container_id"
echo "$container_info"
}
find_service_node() {
if [ -z "$1" ]; then
echo "Usage: find_service_node <service-name-pattern>"
return 1
fi
service_info=$(docker service ps --filter "desired-state=running" --format "{{.Name}} {{.Node}}" | grep "$1")
if [ -z "$service_info" ]; then
echo "No service found matching pattern: $1"
return 1
fi
echo "$service_info"
}
exec_remote() {
if [ -z "$1" ] || [ -z "$2" ]; then
echo "Usage: exec_remote <container-name-pattern> <command>"
return 1
fi
container_info=$(find_container "$1")
if [ $? -ne 0 ]; then
return 1
fi
container_id=$(echo "$container_info" | awk '{print $1}')
container_node=$(echo "$container_info" | awk '{print $3}')
echo "Connecting to node $container_node to execute command in container $container_id"
ssh "$container_node" "docker exec -it $container_id $2"
}