Initial repository setup for TrueNAS Scale configuration management and disaster recovery. This system provides automated collection, versioning, and documentation of TrueNAS configuration state. Key components: - Configuration collection scripts with API integration - Disaster recovery exports (configs, storage, system state) - Comprehensive documentation and API reference - Sub-agent architecture for specialized operations Infrastructure protected: - Storage pools and datasets configuration - Network configuration and routing - Sharing services (NFS, SMB, iSCSI) - System tasks (snapshots, replication, cloud sync) - User and group management Security measures: - API keys managed via environment variables - Sensitive data excluded via .gitignore - No credentials committed to repository 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
124 lines
3.5 KiB
Bash
Executable File
124 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# TrueNAS Scale API Connectivity Test
|
|
# Purpose: Validate network connectivity and API accessibility for TrueNAS collection script
|
|
# Target: 192.168.2.150
|
|
# Date: 2025-12-14
|
|
|
|
set -euo pipefail
|
|
|
|
TRUENAS_IP="192.168.2.150"
|
|
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
|
|
LOG_FILE="/tmp/truenas_api_test_$(date '+%Y%m%d_%H%M%S').log"
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
log() {
|
|
echo -e "${1}" | tee -a "${LOG_FILE}"
|
|
}
|
|
|
|
TESTS_PASSED=0
|
|
TESTS_FAILED=0
|
|
|
|
log "${BLUE}=========================================="
|
|
log "TrueNAS Scale API Connectivity Test"
|
|
log "=========================================="
|
|
log "${NC}Target: ${TRUENAS_IP}"
|
|
log "Date: ${TIMESTAMP}"
|
|
log ""
|
|
|
|
# TEST 1: Network Connectivity
|
|
log "${YELLOW}[TEST 1] Network Connectivity${NC}"
|
|
if ping -c 3 -W 5 "${TRUENAS_IP}" >> "${LOG_FILE}" 2>&1; then
|
|
log "${GREEN}✓ PASS: Host reachable${NC}"
|
|
((TESTS_PASSED++))
|
|
else
|
|
log "${RED}✗ FAIL: Host NOT reachable${NC}"
|
|
((TESTS_FAILED++))
|
|
exit 1
|
|
fi
|
|
log ""
|
|
|
|
# TEST 2: HTTP Port
|
|
log "${YELLOW}[TEST 2] HTTP Port (80)${NC}"
|
|
if timeout 5 bash -c "echo > /dev/tcp/${TRUENAS_IP}/80" 2>/dev/null; then
|
|
log "${GREEN}✓ PASS: Port 80 OPEN${NC}"
|
|
((TESTS_PASSED++))
|
|
HTTP_AVAILABLE=true
|
|
else
|
|
log "${RED}✗ FAIL: Port 80 CLOSED${NC}"
|
|
((TESTS_FAILED++))
|
|
HTTP_AVAILABLE=false
|
|
fi
|
|
log ""
|
|
|
|
# TEST 3: HTTPS Port
|
|
log "${YELLOW}[TEST 3] HTTPS Port (443)${NC}"
|
|
if timeout 5 bash -c "echo > /dev/tcp/${TRUENAS_IP}/443" 2>/dev/null; then
|
|
log "${GREEN}✓ PASS: Port 443 OPEN${NC}"
|
|
((TESTS_PASSED++))
|
|
HTTPS_AVAILABLE=true
|
|
else
|
|
log "${RED}✗ FAIL: Port 443 CLOSED${NC}"
|
|
((TESTS_FAILED++))
|
|
HTTPS_AVAILABLE=false
|
|
fi
|
|
log ""
|
|
|
|
# TEST 4: HTTP API
|
|
if [ "$HTTP_AVAILABLE" = true ]; then
|
|
log "${YELLOW}[TEST 4] HTTP API Endpoint${NC}"
|
|
HTTP_RESPONSE=$(curl -s -w "\n%{http_code}" -m 10 "http://${TRUENAS_IP}/api/v2.0/system/version" 2>&1 || echo "000")
|
|
HTTP_CODE=$(echo "$HTTP_RESPONSE" | tail -n 1)
|
|
|
|
log "HTTP Status: ${HTTP_CODE}"
|
|
if [ "$HTTP_CODE" = "200" ]; then
|
|
log "${GREEN}✓ PASS: HTTP API accessible${NC}"
|
|
((TESTS_PASSED++))
|
|
elif [ "$HTTP_CODE" = "401" ] || [ "$HTTP_CODE" = "403" ]; then
|
|
log "${YELLOW}⚠ INFO: Authentication required${NC}"
|
|
((TESTS_PASSED++))
|
|
else
|
|
log "${RED}✗ FAIL: Unexpected status ${HTTP_CODE}${NC}"
|
|
((TESTS_FAILED++))
|
|
fi
|
|
fi
|
|
log ""
|
|
|
|
# TEST 5: HTTPS API
|
|
if [ "$HTTPS_AVAILABLE" = true ]; then
|
|
log "${YELLOW}[TEST 5] HTTPS API Endpoint${NC}"
|
|
HTTPS_RESPONSE=$(curl -s -k -w "\n%{http_code}" -m 10 "https://${TRUENAS_IP}/api/v2.0/system/version" 2>&1 || echo "000")
|
|
HTTPS_CODE=$(echo "$HTTPS_RESPONSE" | tail -n 1)
|
|
HTTPS_BODY=$(echo "$HTTPS_RESPONSE" | sed '$d')
|
|
|
|
log "HTTPS Status: ${HTTPS_CODE}"
|
|
log "Response: ${HTTPS_BODY}"
|
|
|
|
if [ "$HTTPS_CODE" = "200" ]; then
|
|
log "${GREEN}✓ PASS: HTTPS API accessible${NC}"
|
|
((TESTS_PASSED++))
|
|
elif [ "$HTTPS_CODE" = "401" ] || [ "$HTTPS_CODE" = "403" ]; then
|
|
log "${YELLOW}⚠ INFO: Authentication required${NC}"
|
|
((TESTS_PASSED++))
|
|
else
|
|
log "${RED}✗ FAIL: Unexpected status ${HTTPS_CODE}${NC}"
|
|
((TESTS_FAILED++))
|
|
fi
|
|
fi
|
|
log ""
|
|
|
|
log "${BLUE}=========================================="
|
|
log "SUMMARY"
|
|
log "=========================================="
|
|
log "${NC}Passed: ${GREEN}${TESTS_PASSED}${NC}"
|
|
log "Failed: ${RED}${TESTS_FAILED}${NC}"
|
|
log ""
|
|
log "Log: ${LOG_FILE}"
|
|
|
|
exit $TESTS_FAILED
|