Files
truenas/scripts/test_truenas_api_connectivity.sh
Jordan Ramos 52e1822de8 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>
2025-12-16 08:03:33 -07:00

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