storage
Ansible role that provisions my storage server.
4.7 KB•J2
storage-restart.sh.j2
4.7 KB • 186 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