renamed docker ess
This commit is contained in:
@@ -0,0 +1,159 @@
|
||||
#!/bin/bash
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
# --------------------------------- Docker Network Connect -------------------------------------
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
# Connects specified Docker containers to extra networks on array start.
|
||||
# Useful when containers need to communicate across networks they were not
|
||||
# originally configured with — e.g. memcached needing access to nextcloud-aio network.
|
||||
#
|
||||
# Every container in NETWORK_CONNECT_CONTAINERS is connected to every network
|
||||
# in NETWORK_CONNECT_NETWORKS. Already-connected containers are skipped cleanly.
|
||||
#
|
||||
# Run once at array start via User Scripts plugin.
|
||||
# All configuration in Master.conf under Docker Network Connect section.
|
||||
# Supports --dry-run to preview connections without making them.
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
source "$SCRIPT_DIR/../Master.conf"
|
||||
source "$SCRIPT_DIR/../common.sh"
|
||||
|
||||
parse_args "$@"
|
||||
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
# ━━━ $ICON_GEAR Setup ━━━
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
echo ""
|
||||
echo "━━━ $ICON_GEAR Setup ━━━"
|
||||
|
||||
if [[ "$EUID" -ne 0 ]]; then
|
||||
error "Must be run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
success "Running as root"
|
||||
|
||||
if ! command -v docker &>/dev/null; then
|
||||
error "Docker not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
success "Docker found"
|
||||
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
# ━━━ $ICON_SUMMARY Status ━━━
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
if [[ "$SHOW_STATUS" == true ]]; then
|
||||
echo ""
|
||||
echo "━━━━━ $ICON_SUMMARY STATUS ━━━━━"
|
||||
echo "$ICON_CONTAINERS Containers: ${NETWORK_CONNECT_CONTAINERS[*]}"
|
||||
echo "$ICON_DOCKER_NET Networks: ${NETWORK_CONNECT_NETWORKS[*]}"
|
||||
echo "$ICON_GEAR Dry Run: $DRY_RUN"
|
||||
echo ""
|
||||
echo "━━━ Current Connections ━━━"
|
||||
for container in "${NETWORK_CONNECT_CONTAINERS[@]}"; do
|
||||
[[ -z "$container" ]] && continue
|
||||
echo "$ICON_CONTAINERS $container:"
|
||||
docker inspect "$container" \
|
||||
--format '{{range $k, $v := .NetworkSettings.Networks}} {{$k}}{{"\n"}}{{end}}' \
|
||||
2>/dev/null || echo " not found"
|
||||
done
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
[[ "$DRY_RUN" == true ]] && warn "DRY RUN — no network connections will be made"
|
||||
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
# ━━━ $ICON_DOCKER_NET Network Connect ━━━
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
echo ""
|
||||
echo "━━━ $ICON_DOCKER_NET Network Connect — $(date '+%Y-%m-%d %H:%M:%S') ━━━"
|
||||
echo "$ICON_CONTAINERS Containers: ${NETWORK_CONNECT_CONTAINERS[*]}"
|
||||
echo "$ICON_DOCKER_NET Networks: ${NETWORK_CONNECT_NETWORKS[*]}"
|
||||
echo ""
|
||||
|
||||
START=$(date +%s)
|
||||
CONNECTED=()
|
||||
SKIPPED=()
|
||||
FAILED=()
|
||||
|
||||
for container in "${NETWORK_CONNECT_CONTAINERS[@]}"; do
|
||||
[[ -z "$container" ]] && continue
|
||||
|
||||
echo "━━━ $ICON_CONTAINERS $container ━━━"
|
||||
|
||||
# Verify container exists
|
||||
if ! docker inspect "$container" &>/dev/null; then
|
||||
warn "$container not found — skipping"
|
||||
FAILED+=("$container")
|
||||
echo ""
|
||||
continue
|
||||
fi
|
||||
|
||||
for network in "${NETWORK_CONNECT_NETWORKS[@]}"; do
|
||||
[[ -z "$network" ]] && continue
|
||||
|
||||
# Verify network exists
|
||||
if ! docker network inspect "$network" &>/dev/null; then
|
||||
warn "Network $network not found — skipping"
|
||||
FAILED+=("$container:$network")
|
||||
continue
|
||||
fi
|
||||
|
||||
# Check if already connected
|
||||
if docker network inspect "$network" \
|
||||
--format '{{range .Containers}}{{.Name}} {{end}}' 2>/dev/null \
|
||||
| grep -qw "$container"; then
|
||||
info "$ICON_DOCKER_NET $container already connected to $network — skipping"
|
||||
SKIPPED+=("$container→$network")
|
||||
continue
|
||||
fi
|
||||
|
||||
# Connect
|
||||
if [[ "$DRY_RUN" == true ]]; then
|
||||
warn "DRY RUN — would connect $container to $network"
|
||||
continue
|
||||
fi
|
||||
|
||||
info "$ICON_DOCKER_NET Connecting $container to $network..."
|
||||
if docker network connect "$network" "$container" 2>/dev/null; then
|
||||
success "$ICON_DOCKER_NET $container connected to $network"
|
||||
CONNECTED+=("$container→$network")
|
||||
else
|
||||
error "Failed to connect $container to $network"
|
||||
FAILED+=("$container:$network")
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
done
|
||||
|
||||
END=$(date +%s)
|
||||
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
# ━━━ $ICON_SUMMARY Summary ━━━
|
||||
# -----------------------------------------------------------------------------------------------
|
||||
echo "━━━━━ $ICON_SUMMARY NETWORK CONNECT SUMMARY ━━━━━"
|
||||
echo "$ICON_TIME Duration: $(format_duration $((END - START)))"
|
||||
[[ ${#CONNECTED[@]} -gt 0 ]] && echo "$ICON_DOCKER_NET Connected: ${CONNECTED[*]}"
|
||||
[[ ${#SKIPPED[@]} -gt 0 ]] && echo "$ICON_RUNNING Skipped: ${SKIPPED[*]}"
|
||||
[[ ${#FAILED[@]} -gt 0 ]] && echo "$ICON_ERROR Failed: ${FAILED[*]}"
|
||||
echo ""
|
||||
|
||||
if [[ "$DRY_RUN" == true ]]; then
|
||||
echo "$ICON_WARN Status: DRY RUN — no changes made"
|
||||
elif [[ ${#FAILED[@]} -gt 0 ]]; then
|
||||
echo "$ICON_ERROR Status: $ICON_ERROR SOME CONNECTIONS FAILED"
|
||||
notify "Docker network connect failed on $(hostname) — ${FAILED[*]}" "Network Connect" "warning"
|
||||
else
|
||||
echo "$ICON_DONE Status: $ICON_SUCCESS DONE"
|
||||
if [[ ${#CONNECTED[@]} -gt 0 ]]; then
|
||||
notify "Docker networks connected on $(hostname) — ${CONNECTED[*]}" "Network Connect" "normal"
|
||||
fi
|
||||
fi
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
|
||||
[[ ${#FAILED[@]} -gt 0 ]] && exit 1
|
||||
exit 0
|
||||
Reference in New Issue
Block a user