storage

Ansible role that provisions my storage server.

4.7 KBJ2
storage-restart.sh.j2
4.7 KB186 lines • plaintext
1#!/bin/bash
2# Storage Services Restart Script
3# Auto-generated by Ansible Storage Role
4
5set -euo pipefail
6
7# Colors for output
8RED='\033[0;31m'
9GREEN='\033[0;32m'
10YELLOW='\033[1;33m'
11BLUE='\033[0;34m'
12NC='\033[0m' # No Color
13
14# Available services
15SERVICES=(
16{% if jellyfin_enabled %}
17    "jellyfin:{{ jellyfin_data_dir }}"
18{% endif %}
19{% if arr_stack_enabled %}
20    "arr-stack:{{ arr_config_dir }}"
21{% endif %}
22{% if calibre_enabled %}
23    "calibre-stack:{{ calibre_config_dir }}"
24{% endif %}
25{% if restic_backup_server_enabled %}
26    "restic-server:{{ restic_backup_config_dir }}"
27{% endif %}
28)
29
30show_usage() {
31    echo -e "${BLUE}Storage Services Restart Script${NC}"
32    echo ""
33    echo "Usage: $0 [service] [options]"
34    echo ""
35    echo "Available services:"
36{% if jellyfin_enabled %}
37    echo "  jellyfin     - Restart Jellyfin media server"
38{% endif %}
39{% if arr_stack_enabled %}
40    echo "  arr-stack    - Restart Arr stack (Sonarr/Radarr/Prowlarr/Readarr)"
41{% endif %}
42{% if calibre_enabled %}
43    echo "  calibre-stack - Restart Calibre stack (Calibre + Calibre-Web)"
44{% endif %}
45{% if restic_backup_server_enabled %}
46    echo "  restic-server - Restart Restic backup server"
47{% endif %}
48    echo "  all         - Restart all services (default)"
49    echo ""
50    echo "Options:"
51    echo "  -d, --down     Stop services instead of restarting"
52    echo "  -u, --up       Start services instead of restarting"
53    echo "  -f, --force    Force restart (don't wait for graceful shutdown)"
54    echo "  --help         Show this help"
55    echo ""
56    echo "Examples:"
57    echo "  $0                    # Restart all services"
58    echo "  $0 jellyfin           # Restart only Jellyfin"
59    echo "  $0 arr-stack -d       # Stop Arr stack"
60    echo "  $0 calibre -u         # Start Calibre stack"
61    echo ""
62}
63
64# Parse arguments
65SERVICE=""
66ACTION="restart"
67FORCE=false
68
69while [[ $# -gt 0 ]]; do
70    case $1 in
71        -h|--help)
72            show_usage
73            exit 0
74            ;;
75        -d|--down)
76            ACTION="down"
77            shift
78            ;;
79        -u|--up)
80            ACTION="up -d"
81            shift
82            ;;
83        -f|--force)
84            FORCE=true
85            shift
86            ;;
87        *)
88            if [[ -z "$SERVICE" ]]; then
89                SERVICE="$1"
90            else
91                echo -e "${RED}Error: Unknown argument '$1'${NC}"
92                show_usage
93                exit 1
94            fi
95            shift
96            ;;
97    esac
98done
99
100# Default to 'all' if no service specified
101if [[ -z "$SERVICE" ]]; then
102    SERVICE="all"
103fi
104
105manage_service() {
106    local service_name="$1"
107    local service_dir="$2"
108    local action="$3"
109    
110    if [[ ! -f "$service_dir/docker-compose.yml" ]]; then
111        echo -e "${YELLOW}Warning: $service_name not configured at $service_dir${NC}"
112        return 1
113    fi
114    
115    echo -e "${BLUE}=== $service_name: $action ===${NC}"
116    
117    cd "$service_dir"
118    
119    # Build docker compose command
120    local cmd="docker compose $action"
121    
122    if [[ "$FORCE" == "true" && "$action" == "restart" ]]; then
123        cmd="docker compose down && docker compose up -d"
124    elif [[ "$FORCE" == "true" && "$action" == "down" ]]; then
125        cmd="docker compose down --remove-orphans --volumes --timeout 0"
126    fi
127    
128    # Execute command
129    echo "Executing: $cmd"
130    eval "$cmd"
131    
132    local result=$?
133    
134    if [[ $result -eq 0 ]]; then
135        echo -e "${GREEN}✓ $service_name $action completed successfully${NC}"
136    else
137        echo -e "${RED}✗ $service_name $action failed with code $result${NC}"
138    fi
139    
140    echo ""
141    return $result
142}
143
144# Main execution
145case "$SERVICE" in
146    all)
147        for service_info in "${SERVICES[@]}"; do
148            IFS=':' read -r service_name service_dir <<< "$service_info"
149            manage_service "$service_name" "$service_dir" "$ACTION" || continue
150        done
151        ;;
152{% if jellyfin_enabled %}
153    jellyfin)
154        manage_service "jellyfin" "{{ jellyfin_data_dir }}" "$ACTION"
155        ;;
156{% endif %}
157{% if arr_stack_enabled %}
158    arr-stack)
159        manage_service "arr-stack" "{{ arr_config_dir }}" "$ACTION"
160        ;;
161{% endif %}
162{% if calibre_enabled %}
163    calibre-stack)
164        manage_service "calibre-stack" "{{ calibre_config_dir }}" "$ACTION"
165        ;;
166{% endif %}
167{% if restic_backup_server_enabled %}
168    restic-server)
169        manage_service "restic-server" "{{ restic_backup_config_dir }}" "$ACTION"
170        ;;
171{% endif %}
172    *)
173        echo -e "${RED}Error: Unknown service '$SERVICE'${NC}"
174        echo ""
175        show_usage
176        exit 1
177        ;;
178esac
179
180# Display final status
181echo -e "${BLUE}=== Final Status ===${NC}"
182if command -v storage-status.sh >/dev/null 2>&1; then
183    storage-status.sh
184else
185    echo "Install storage-status.sh for detailed status information"
186fi