feat(infrastructure): initialize TrueNAS Scale infrastructure collection system
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>
This commit is contained in:
123
scripts/test_truenas_api_connectivity.sh
Executable file
123
scripts/test_truenas_api_connectivity.sh
Executable file
@@ -0,0 +1,123 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user