ansible/scripts/inventory.sh

137 lines
4.3 KiB
Bash
Executable File

#!/bin/bash
# Dynamic inventory script - lists all installed tools and services
# Can be run on any managed host
# Colors
BOLD='\033[1m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
RED='\033[31m'
RESET='\033[0m'
echo -e "${BOLD}=== Installed Software Inventory ===${RESET}\n"
# Function to check if command exists
cmd_exists() {
command -v "$1" >/dev/null 2>&1
}
# Function to get version
get_version() {
if cmd_exists "$1"; then
case "$1" in
node) node --version 2>/dev/null ;;
python3) python3 --version 2>/dev/null | awk '{print $2}' ;;
git) git --version 2>/dev/null | awk '{print $3}' ;;
docker) docker --version 2>/dev/null | awk '{print $3}' | tr -d ',' ;;
conda) conda --version 2>/dev/null | awk '{print $2}' ;;
jupyter) jupyter --version 2>/dev/null | head -1 | awk '{print $3}' ;;
R) R --version 2>/dev/null | head -1 | awk '{print $3}' ;;
yq) yq --version 2>/dev/null | awk '{print $NF}' ;;
btop) btop --version 2>/dev/null | head -1 | awk '{print $3}' ;;
*) echo "unknown" ;;
esac
fi
}
# Development Tools
echo -e "${YELLOW}Development Tools:${RESET}"
for tool in git node python3; do
version=$(get_version $tool)
if [ -n "$version" ]; then
printf " ${GREEN}${RESET} %-15s %s\n" "$tool" "$version"
else
printf " ${RED}${RESET} %-15s %s\n" "$tool" "not installed"
fi
done
# Data Science
echo -e "\n${YELLOW}Data Science Stack:${RESET}"
for tool in conda jupyter R; do
version=$(get_version $tool)
if [ -n "$version" ]; then
printf " ${GREEN}${RESET} %-15s %s\n" "$tool" "$version"
else
printf " ${RED}${RESET} %-15s %s\n" "$tool" "not installed"
fi
done
# Check Jupyter service
if systemctl is-active --quiet jupyter-notebook 2>/dev/null; then
echo -e " ${GREEN}${RESET} Jupyter service running"
else
echo -e " ${RED}${RESET} Jupyter service not running"
fi
# Container Platform
echo -e "\n${YELLOW}Container Platform:${RESET}"
version=$(get_version docker)
if [ -n "$version" ]; then
printf " ${GREEN}${RESET} %-15s %s\n" "docker" "$version"
if cmd_exists docker-compose; then
compose_version=$(docker-compose --version 2>/dev/null | awk '{print $NF}')
printf " ${GREEN}${RESET} %-15s %s\n" "docker-compose" "$compose_version"
fi
else
printf " ${RED}${RESET} %-15s not installed\n" "docker"
fi
# Monitoring Tools
echo -e "\n${YELLOW}Monitoring Tools:${RESET}"
for tool in htop btop iotop nethogs; do
if cmd_exists $tool; then
version=$(get_version $tool)
if [ "$version" = "unknown" ] || [ -z "$version" ]; then
printf " ${GREEN}${RESET} %-15s installed\n" "$tool"
else
printf " ${GREEN}${RESET} %-15s %s\n" "$tool" "$version"
fi
else
printf " ${RED}${RESET} %-15s not installed\n" "$tool"
fi
done
# CLI Utilities
echo -e "\n${YELLOW}CLI Utilities:${RESET}"
for tool in jq yq ripgrep fd; do
if cmd_exists $tool; then
version=$(get_version $tool)
if [ "$version" = "unknown" ] || [ -z "$version" ]; then
printf " ${GREEN}${RESET} %-15s installed\n" "$tool"
else
printf " ${GREEN}${RESET} %-15s %s\n" "$tool" "$version"
fi
else
printf " ${RED}${RESET} %-15s not installed\n" "$tool"
fi
done
# Shell
echo -e "\n${YELLOW}Shell Environment:${RESET}"
current_shell=$(basename "$SHELL")
printf " ${GREEN}${RESET} %-15s %s\n" "current shell" "$current_shell"
if [ -d "$HOME/.oh-my-zsh" ]; then
printf " ${GREEN}${RESET} %-15s installed\n" "oh-my-zsh"
fi
if [ -d "$HOME/.oh-my-zsh/custom/themes/powerlevel10k" ]; then
printf " ${GREEN}${RESET} %-15s installed\n" "powerlevel10k"
fi
# Services
echo -e "\n${YELLOW}System Services:${RESET}"
for service in docker tailscaled fail2ban sshd; do
if systemctl is-active --quiet $service 2>/dev/null; then
printf " ${GREEN}${RESET} %-15s running\n" "$service"
elif systemctl list-unit-files | grep -q "^$service"; then
printf " ${BLUE}${RESET} %-15s installed (not running)\n" "$service"
else
printf " ${RED}${RESET} %-15s not installed\n" "$service"
fi
done
echo ""