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