Add main script (NodeFox)
This commit is contained in:
parent
6ee2653ff1
commit
bc43a7c66c
1 changed files with 127 additions and 0 deletions
127
update-manager.sh
Executable file
127
update-manager.sh
Executable file
|
|
@ -0,0 +1,127 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
CONFIG_FILE="/etc/update-manager.conf"
|
||||||
|
[[ -f "$CONFIG_FILE" ]] || CONFIG_FILE="./update-manager.conf"
|
||||||
|
|
||||||
|
if [[ -f "$CONFIG_FILE" ]]; then
|
||||||
|
# shellcheck disable=SC1090
|
||||||
|
source "$CONFIG_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
DEFAULT_HOSTS_FILE="${HOSTS_FILE:-/opt/update-manager/hosts.conf}"
|
||||||
|
SSH_OPTIONS="${SSH_OPTIONS:--o BatchMode=yes -o ConnectTimeout=5}"
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Ensure hosts file exists
|
||||||
|
########################################
|
||||||
|
|
||||||
|
ensure_hosts_file() {
|
||||||
|
if [[ ! -f "$DEFAULT_HOSTS_FILE" ]]; then
|
||||||
|
echo "Creating example hosts file: $DEFAULT_HOSTS_FILE"
|
||||||
|
|
||||||
|
mkdir -p "$(dirname "$DEFAULT_HOSTS_FILE")"
|
||||||
|
|
||||||
|
cat > "$DEFAULT_HOSTS_FILE" <<'EOF'
|
||||||
|
# Example hosts file
|
||||||
|
# Format:
|
||||||
|
# name ip user
|
||||||
|
#
|
||||||
|
# server1 192.168.1.10 user
|
||||||
|
# server2 192.168.1.20 user
|
||||||
|
# server3 10.0.0.5 root
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Helpers
|
||||||
|
########################################
|
||||||
|
|
||||||
|
get_hosts_file() {
|
||||||
|
if [[ -n "$2" ]]; then
|
||||||
|
echo "$2"
|
||||||
|
else
|
||||||
|
echo "$DEFAULT_HOSTS_FILE"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<USAGE
|
||||||
|
Usage:
|
||||||
|
$0 check [hosts_file]
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
$0 check
|
||||||
|
$0 check /path/to/hosts.conf
|
||||||
|
HOSTS_FILE=/path/to/hosts.conf $0 check
|
||||||
|
USAGE
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Check single host
|
||||||
|
########################################
|
||||||
|
|
||||||
|
check_host() {
|
||||||
|
local name="$1"
|
||||||
|
local ip="$2"
|
||||||
|
local user="$3"
|
||||||
|
local result
|
||||||
|
local rc
|
||||||
|
|
||||||
|
result=$(ssh -n $SSH_OPTIONS "${user}@${ip}" \
|
||||||
|
"apt list --upgradable 2>/dev/null | sed '/^Listing/d'" 2>&1)
|
||||||
|
rc=$?
|
||||||
|
|
||||||
|
printf "===== %s (%s) =====\n" "$name" "$ip"
|
||||||
|
|
||||||
|
if [[ $rc -ne 0 ]]; then
|
||||||
|
echo "❌ connection failed"
|
||||||
|
echo "$result"
|
||||||
|
echo
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$result" ]]; then
|
||||||
|
echo "Up-to-date"
|
||||||
|
else
|
||||||
|
echo "$result"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Check all hosts
|
||||||
|
########################################
|
||||||
|
|
||||||
|
check_all() {
|
||||||
|
local hosts_file="$1"
|
||||||
|
|
||||||
|
ensure_hosts_file
|
||||||
|
|
||||||
|
while IFS= read -r line; do
|
||||||
|
[[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue
|
||||||
|
|
||||||
|
local name ip user
|
||||||
|
read -r name ip user <<< "$line"
|
||||||
|
|
||||||
|
[[ -z "$name" || -z "$ip" || -z "$user" ]] && continue
|
||||||
|
|
||||||
|
check_host "$name" "$ip" "$user"
|
||||||
|
done < "$hosts_file"
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Main
|
||||||
|
########################################
|
||||||
|
|
||||||
|
case "${1:-}" in
|
||||||
|
check)
|
||||||
|
HOSTS_FILE_TO_USE="$(get_hosts_file "$@")"
|
||||||
|
check_all "$HOSTS_FILE_TO_USE"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Loading…
Add table
Add a link
Reference in a new issue