more stuff
This commit is contained in:
parent
6a43132bc8
commit
79e6a1a543
18 changed files with 426 additions and 144 deletions
|
|
@ -218,45 +218,39 @@ setup_inventory_file() {
|
|||
|
||||
EOF
|
||||
|
||||
vps_entries=""
|
||||
if [ -n "$vipy_ip" ]; then
|
||||
cat >> inventory.ini << EOF
|
||||
[vipy]
|
||||
$vipy_ip ansible_user=counterweight ansible_port=22 ansible_ssh_private_key_file=$ssh_key
|
||||
|
||||
EOF
|
||||
vps_entries+="vipy ansible_host=$vipy_ip ansible_user=counterweight ansible_port=22 ansible_ssh_private_key_file=$ssh_key\n"
|
||||
fi
|
||||
|
||||
if [ -n "$watchtower_ip" ]; then
|
||||
cat >> inventory.ini << EOF
|
||||
[watchtower]
|
||||
$watchtower_ip ansible_user=counterweight ansible_port=22 ansible_ssh_private_key_file=$ssh_key
|
||||
|
||||
EOF
|
||||
vps_entries+="watchtower ansible_host=$watchtower_ip ansible_user=counterweight ansible_port=22 ansible_ssh_private_key_file=$ssh_key\n"
|
||||
fi
|
||||
if [ -n "$spacey_ip" ]; then
|
||||
vps_entries+="spacey ansible_host=$spacey_ip ansible_user=counterweight ansible_port=22 ansible_ssh_private_key_file=$ssh_key\n"
|
||||
fi
|
||||
|
||||
if [ -n "$spacey_ip" ]; then
|
||||
if [ -n "$vps_entries" ]; then
|
||||
cat >> inventory.ini << EOF
|
||||
[spacey]
|
||||
$spacey_ip ansible_user=counterweight ansible_port=22 ansible_ssh_private_key_file=$ssh_key
|
||||
|
||||
[vps]
|
||||
${vps_entries}
|
||||
EOF
|
||||
fi
|
||||
|
||||
if [ -n "$nodito_ip" ]; then
|
||||
cat >> inventory.ini << EOF
|
||||
[nodito]
|
||||
$nodito_ip ansible_user=counterweight ansible_port=22 ansible_ssh_private_key_file=$ssh_key
|
||||
[nodito_host]
|
||||
nodito ansible_host=$nodito_ip ansible_user=counterweight ansible_port=22 ansible_ssh_private_key_file=$ssh_key
|
||||
|
||||
EOF
|
||||
fi
|
||||
|
||||
# Add nodito-vms placeholder for VMs that will be created later
|
||||
# Add nodito_vms placeholder for VMs that will be created later
|
||||
cat >> inventory.ini << EOF
|
||||
# Nodito VMs - These don't exist yet and will be created on the Proxmox server
|
||||
# Add them here once you create VMs on nodito (e.g., memos-box, etc.)
|
||||
[nodito-vms]
|
||||
[nodito_vms]
|
||||
# Example:
|
||||
# 192.168.1.150 ansible_user=counterweight ansible_port=22 ansible_ssh_private_key_file=$ssh_key hostname=memos-box
|
||||
# memos_box ansible_host=192.168.1.150 ansible_user=counterweight ansible_port=22 ansible_ssh_private_key_file=$ssh_key
|
||||
|
||||
EOF
|
||||
|
||||
|
|
@ -439,9 +433,9 @@ print_summary() {
|
|||
echo ""
|
||||
|
||||
print_info "Note about inventory groups:"
|
||||
echo " • [nodito-vms] group created as placeholder"
|
||||
echo " • [nodito_vms] group created as placeholder"
|
||||
echo " • These VMs will be created later on Proxmox"
|
||||
echo " • Add their IPs to inventory.ini once created"
|
||||
echo " • Add their host entries to inventory.ini once created"
|
||||
echo ""
|
||||
|
||||
print_info "To test SSH access to a host:"
|
||||
|
|
|
|||
|
|
@ -114,29 +114,63 @@ check_layer_0_complete() {
|
|||
}
|
||||
|
||||
get_hosts_from_inventory() {
|
||||
local group="$1"
|
||||
local target="$1"
|
||||
cd "$ANSIBLE_DIR"
|
||||
ansible-inventory -i inventory.ini --list | \
|
||||
python3 -c "import sys, json; data=json.load(sys.stdin); print(' '.join(data.get('$group', {}).get('hosts', [])))" 2>/dev/null || echo ""
|
||||
|
||||
# Parse inventory.ini directly - more reliable than ansible-inventory
|
||||
if [ -f "$ANSIBLE_DIR/inventory.ini" ]; then
|
||||
# Look for the group section [target]
|
||||
local in_section=false
|
||||
local hosts=""
|
||||
while IFS= read -r line; do
|
||||
# Remove comments and whitespace
|
||||
line=$(echo "$line" | sed 's/#.*$//' | xargs)
|
||||
[ -z "$line" ] && continue
|
||||
|
||||
# Check if we're entering the target section
|
||||
if [[ "$line" =~ ^\[$target\]$ ]]; then
|
||||
in_section=true
|
||||
continue
|
||||
fi
|
||||
|
||||
# Check if we're entering a different section
|
||||
if [[ "$line" =~ ^\[.*\]$ ]]; then
|
||||
in_section=false
|
||||
continue
|
||||
fi
|
||||
|
||||
# If we're in the target section, extract hostname
|
||||
if [ "$in_section" = true ]; then
|
||||
local hostname=$(echo "$line" | awk '{print $1}')
|
||||
if [ -n "$hostname" ]; then
|
||||
hosts="$hosts $hostname"
|
||||
fi
|
||||
fi
|
||||
done < "$ANSIBLE_DIR/inventory.ini"
|
||||
echo "$hosts" | xargs
|
||||
fi
|
||||
}
|
||||
|
||||
check_vps_configured() {
|
||||
print_header "Checking VPS Configuration"
|
||||
|
||||
# Get all hosts from the vps group
|
||||
local vps_hosts=$(get_hosts_from_inventory "vps")
|
||||
local has_vps=false
|
||||
for group in vipy watchtower spacey; do
|
||||
local hosts=$(get_hosts_from_inventory "$group")
|
||||
if [ -n "$hosts" ]; then
|
||||
print_success "$group configured: $hosts"
|
||||
|
||||
# Check for expected VPS hostnames
|
||||
for expected_host in vipy watchtower spacey; do
|
||||
if echo "$vps_hosts" | grep -q "\b$expected_host\b"; then
|
||||
print_success "$expected_host configured"
|
||||
has_vps=true
|
||||
else
|
||||
print_info "$group not configured (skipping)"
|
||||
print_info "$expected_host not configured (skipping)"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$has_vps" = false ]; then
|
||||
print_error "No VPSs configured in inventory.ini"
|
||||
print_info "Add at least one VPS (vipy, watchtower, or spacey) to proceed"
|
||||
print_info "Add at least one VPS (vipy, watchtower, or spacey) to the [vps] group to proceed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
|
@ -154,20 +188,20 @@ check_ssh_connectivity() {
|
|||
|
||||
local all_good=true
|
||||
|
||||
# Get all hosts from the vps group
|
||||
local vps_hosts=$(get_hosts_from_inventory "vps")
|
||||
|
||||
# Test VPSs (vipy, watchtower, spacey)
|
||||
for group in vipy watchtower spacey; do
|
||||
local hosts=$(get_hosts_from_inventory "$group")
|
||||
if [ -n "$hosts" ]; then
|
||||
for host in $hosts; do
|
||||
print_info "Testing SSH to $host as root..."
|
||||
if timeout 10 ssh -i "$ssh_key" -o StrictHostKeyChecking=no -o BatchMode=yes root@$host "echo 'SSH OK'" &>/dev/null; then
|
||||
print_success "SSH to $host as root: OK"
|
||||
else
|
||||
print_error "Cannot SSH to $host as root"
|
||||
print_warning "Make sure your SSH key is added to root on $host"
|
||||
all_good=false
|
||||
fi
|
||||
done
|
||||
for expected_host in vipy watchtower spacey; do
|
||||
if echo "$vps_hosts" | grep -q "\b$expected_host\b"; then
|
||||
print_info "Testing SSH to $expected_host as root..."
|
||||
if timeout 10 ssh -i "$ssh_key" -o StrictHostKeyChecking=no -o BatchMode=yes root@$expected_host "echo 'SSH OK'" &>/dev/null; then
|
||||
print_success "SSH to $expected_host as root: OK"
|
||||
else
|
||||
print_error "Cannot SSH to $expected_host as root"
|
||||
print_warning "Make sure your SSH key is added to root on $expected_host"
|
||||
all_good=false
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
|
|
@ -265,17 +299,17 @@ verify_layer_1a() {
|
|||
|
||||
local all_good=true
|
||||
|
||||
for group in vipy watchtower spacey; do
|
||||
local hosts=$(get_hosts_from_inventory "$group")
|
||||
if [ -n "$hosts" ]; then
|
||||
for host in $hosts; do
|
||||
if timeout 10 ssh -i "$ssh_key" -o StrictHostKeyChecking=no -o BatchMode=yes counterweight@$host "echo 'SSH OK'" &>/dev/null; then
|
||||
print_success "SSH to $host as counterweight: OK"
|
||||
else
|
||||
print_error "Cannot SSH to $host as counterweight"
|
||||
all_good=false
|
||||
fi
|
||||
done
|
||||
# Get all hosts from the vps group
|
||||
local vps_hosts=$(get_hosts_from_inventory "vps")
|
||||
|
||||
for expected_host in vipy watchtower spacey; do
|
||||
if echo "$vps_hosts" | grep -q "\b$expected_host\b"; then
|
||||
if timeout 10 ssh -i "$ssh_key" -o StrictHostKeyChecking=no -o BatchMode=yes counterweight@$expected_host "echo 'SSH OK'" &>/dev/null; then
|
||||
print_success "SSH to $expected_host as counterweight: OK"
|
||||
else
|
||||
print_error "Cannot SSH to $expected_host as counterweight"
|
||||
all_good=false
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
|
|
|
|||
|
|
@ -106,20 +106,30 @@ check_layer_0_complete() {
|
|||
}
|
||||
|
||||
get_hosts_from_inventory() {
|
||||
local group="$1"
|
||||
local target="$1"
|
||||
cd "$ANSIBLE_DIR"
|
||||
ansible-inventory -i inventory.ini --list | \
|
||||
python3 -c "import sys, json; data=json.load(sys.stdin); print(' '.join(data.get('$group', {}).get('hosts', [])))" 2>/dev/null || echo ""
|
||||
python3 - "$target" <<'PY' 2>/dev/null || echo ""
|
||||
import json, sys
|
||||
data = json.load(sys.stdin)
|
||||
target = sys.argv[1]
|
||||
if target in data:
|
||||
print(' '.join(data[target].get('hosts', [])))
|
||||
else:
|
||||
hostvars = data.get('_meta', {}).get('hostvars', {})
|
||||
if target in hostvars:
|
||||
print(target)
|
||||
PY
|
||||
}
|
||||
|
||||
check_nodito_configured() {
|
||||
print_header "Checking Nodito Configuration"
|
||||
|
||||
local nodito_hosts=$(get_hosts_from_inventory "nodito")
|
||||
local nodito_hosts=$(get_hosts_from_inventory "nodito_host")
|
||||
|
||||
if [ -z "$nodito_hosts" ]; then
|
||||
print_error "No nodito host configured in inventory.ini"
|
||||
print_info "Add nodito to [nodito] group in inventory.ini to proceed"
|
||||
print_info "Add the nodito host to the [nodito_host] group in inventory.ini to proceed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
|
|
|||
|
|
@ -95,10 +95,20 @@ check_layer_0_complete() {
|
|||
}
|
||||
|
||||
get_hosts_from_inventory() {
|
||||
local group="$1"
|
||||
local target="$1"
|
||||
cd "$ANSIBLE_DIR"
|
||||
ansible-inventory -i inventory.ini --list | \
|
||||
python3 -c "import sys, json; data=json.load(sys.stdin); print(' '.join(data.get('$group', {}).get('hosts', [])))" 2>/dev/null || echo ""
|
||||
python3 - "$target" <<'PY' 2>/dev/null || echo ""
|
||||
import json, sys
|
||||
data = json.load(sys.stdin)
|
||||
target = sys.argv[1]
|
||||
if target in data:
|
||||
print(' '.join(data[target].get('hosts', [])))
|
||||
else:
|
||||
hostvars = data.get('_meta', {}).get('hostvars', {})
|
||||
if target in hostvars:
|
||||
print(target)
|
||||
PY
|
||||
}
|
||||
|
||||
check_ssh_connectivity() {
|
||||
|
|
|
|||
|
|
@ -95,10 +95,20 @@ check_layer_0_complete() {
|
|||
}
|
||||
|
||||
get_hosts_from_inventory() {
|
||||
local group="$1"
|
||||
local target="$1"
|
||||
cd "$ANSIBLE_DIR"
|
||||
ansible-inventory -i inventory.ini --list | \
|
||||
python3 -c "import sys, json; data=json.load(sys.stdin); print(' '.join(data.get('$group', {}).get('hosts', [])))" 2>/dev/null || echo ""
|
||||
python3 - "$target" <<'PY' 2>/dev/null || echo ""
|
||||
import json, sys
|
||||
data = json.load(sys.stdin)
|
||||
target = sys.argv[1]
|
||||
if target in data:
|
||||
print(' '.join(data[target].get('hosts', [])))
|
||||
else:
|
||||
hostvars = data.get('_meta', {}).get('hostvars', {})
|
||||
if target in hostvars:
|
||||
print(target)
|
||||
PY
|
||||
}
|
||||
|
||||
check_target_hosts() {
|
||||
|
|
|
|||
|
|
@ -55,6 +55,43 @@ confirm_action() {
|
|||
[[ "$response" =~ ^[Yy]$ ]]
|
||||
}
|
||||
|
||||
get_hosts_from_inventory() {
|
||||
local target="$1"
|
||||
cd "$ANSIBLE_DIR"
|
||||
ansible-inventory -i inventory.ini --list | \
|
||||
python3 - "$target" <<'PY' 2>/dev/null || echo ""
|
||||
import json, sys
|
||||
data = json.load(sys.stdin)
|
||||
target = sys.argv[1]
|
||||
if target in data:
|
||||
print(' '.join(data[target].get('hosts', [])))
|
||||
else:
|
||||
hostvars = data.get('_meta', {}).get('hostvars', {})
|
||||
if target in hostvars:
|
||||
print(target)
|
||||
PY
|
||||
}
|
||||
|
||||
get_host_ip() {
|
||||
local target="$1"
|
||||
cd "$ANSIBLE_DIR"
|
||||
ansible-inventory -i inventory.ini --list | \
|
||||
python3 - "$target" <<'PY' 2>/dev/null || echo ""
|
||||
import json, sys
|
||||
data = json.load(sys.stdin)
|
||||
target = sys.argv[1]
|
||||
hostvars = data.get('_meta', {}).get('hostvars', {})
|
||||
if target in hostvars:
|
||||
print(hostvars[target].get('ansible_host', target))
|
||||
else:
|
||||
hosts = data.get(target, {}).get('hosts', [])
|
||||
if hosts:
|
||||
first = hosts[0]
|
||||
hv = hostvars.get(first, {})
|
||||
print(hv.get('ansible_host', first))
|
||||
PY
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Verification Functions
|
||||
###############################################################################
|
||||
|
|
@ -87,7 +124,7 @@ check_prerequisites() {
|
|||
fi
|
||||
|
||||
# Check if watchtower is configured
|
||||
if ! grep -q "^\[watchtower\]" "$ANSIBLE_DIR/inventory.ini"; then
|
||||
if [ -z "$(get_hosts_from_inventory "watchtower")" ]; then
|
||||
print_error "watchtower not configured in inventory.ini"
|
||||
print_info "Layer 4 requires watchtower VPS"
|
||||
((errors++))
|
||||
|
|
@ -131,7 +168,7 @@ check_dns_configuration() {
|
|||
cd "$ANSIBLE_DIR"
|
||||
|
||||
# Get watchtower IP
|
||||
local watchtower_ip=$(ansible-inventory -i inventory.ini --list | python3 -c "import sys, json; data=json.load(sys.stdin); hosts=data.get('watchtower', {}).get('hosts', []); print(hosts[0] if hosts else '')" 2>/dev/null)
|
||||
local watchtower_ip=$(get_host_ip "watchtower")
|
||||
|
||||
if [ -z "$watchtower_ip" ]; then
|
||||
print_error "Could not determine watchtower IP from inventory"
|
||||
|
|
@ -431,7 +468,8 @@ verify_deployments() {
|
|||
local ssh_key=$(grep "ansible_ssh_private_key_file" "$ANSIBLE_DIR/inventory.ini" | head -n1 | sed 's/.*ansible_ssh_private_key_file=\([^ ]*\).*/\1/')
|
||||
ssh_key="${ssh_key/#\~/$HOME}"
|
||||
|
||||
local watchtower_host=$(ansible-inventory -i inventory.ini --list | python3 -c "import sys, json; data=json.load(sys.stdin); print(' '.join(data.get('watchtower', {}).get('hosts', [])))" 2>/dev/null)
|
||||
local watchtower_host
|
||||
watchtower_host=$(get_hosts_from_inventory "watchtower")
|
||||
|
||||
if [ -z "$watchtower_host" ]; then
|
||||
print_error "Could not determine watchtower host"
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ check_prerequisites() {
|
|||
fi
|
||||
|
||||
# Check if spacey is configured
|
||||
if ! grep -q "^\[spacey\]" "$ANSIBLE_DIR/inventory.ini"; then
|
||||
if [ -z "$(get_hosts_from_inventory "spacey")" ]; then
|
||||
print_error "spacey not configured in inventory.ini"
|
||||
print_info "Layer 5 requires spacey VPS for Headscale server"
|
||||
((errors++))
|
||||
|
|
@ -105,10 +105,40 @@ check_prerequisites() {
|
|||
}
|
||||
|
||||
get_hosts_from_inventory() {
|
||||
local group="$1"
|
||||
local target="$1"
|
||||
cd "$ANSIBLE_DIR"
|
||||
ansible-inventory -i inventory.ini --list | \
|
||||
python3 -c "import sys, json; data=json.load(sys.stdin); print(' '.join(data.get('$group', {}).get('hosts', [])))" 2>/dev/null || echo ""
|
||||
python3 - "$target" <<'PY' 2>/dev/null || echo ""
|
||||
import json, sys
|
||||
data = json.load(sys.stdin)
|
||||
target = sys.argv[1]
|
||||
if target in data:
|
||||
print(' '.join(data[target].get('hosts', [])))
|
||||
else:
|
||||
hostvars = data.get('_meta', {}).get('hostvars', {})
|
||||
if target in hostvars:
|
||||
print(target)
|
||||
PY
|
||||
}
|
||||
|
||||
get_host_ip() {
|
||||
local target="$1"
|
||||
cd "$ANSIBLE_DIR"
|
||||
ansible-inventory -i inventory.ini --list | \
|
||||
python3 - "$target" <<'PY' 2>/dev/null || echo ""
|
||||
import json, sys
|
||||
data = json.load(sys.stdin)
|
||||
target = sys.argv[1]
|
||||
hostvars = data.get('_meta', {}).get('hostvars', {})
|
||||
if target in hostvars:
|
||||
print(hostvars[target].get('ansible_host', target))
|
||||
else:
|
||||
hosts = data.get(target, {}).get('hosts', [])
|
||||
if hosts:
|
||||
first = hosts[0]
|
||||
hv = hostvars.get(first, {})
|
||||
print(hv.get('ansible_host', first))
|
||||
PY
|
||||
}
|
||||
|
||||
check_vars_files() {
|
||||
|
|
@ -135,7 +165,7 @@ check_dns_configuration() {
|
|||
cd "$ANSIBLE_DIR"
|
||||
|
||||
# Get spacey IP
|
||||
local spacey_ip=$(ansible-inventory -i inventory.ini --list | python3 -c "import sys, json; data=json.load(sys.stdin); hosts=data.get('spacey', {}).get('hosts', []); print(hosts[0] if hosts else '')" 2>/dev/null)
|
||||
local spacey_ip=$(get_host_ip "spacey")
|
||||
|
||||
if [ -z "$spacey_ip" ]; then
|
||||
print_error "Could not determine spacey IP from inventory"
|
||||
|
|
|
|||
|
|
@ -189,10 +189,20 @@ EOFPYTHON
|
|||
}
|
||||
|
||||
get_hosts_from_inventory() {
|
||||
local group="$1"
|
||||
local target="$1"
|
||||
cd "$ANSIBLE_DIR"
|
||||
ansible-inventory -i inventory.ini --list | \
|
||||
python3 -c "import sys, json; data=json.load(sys.stdin); print(' '.join(data.get('$group', {}).get('hosts', [])))" 2>/dev/null || echo ""
|
||||
python3 - "$target" <<'PY' 2>/dev/null || echo ""
|
||||
import json, sys
|
||||
data = json.load(sys.stdin)
|
||||
target = sys.argv[1]
|
||||
if target in data:
|
||||
print(' '.join(data[target].get('hosts', [])))
|
||||
else:
|
||||
hostvars = data.get('_meta', {}).get('hostvars', {})
|
||||
if target in hostvars:
|
||||
print(target)
|
||||
PY
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ check_prerequisites() {
|
|||
fi
|
||||
|
||||
# Check if vipy is configured
|
||||
if ! grep -q "^\[vipy\]" "$ANSIBLE_DIR/inventory.ini"; then
|
||||
if [ -z "$(get_hosts_from_inventory "vipy")" ]; then
|
||||
print_error "vipy not configured in inventory.ini"
|
||||
print_info "Layer 7 requires vipy VPS"
|
||||
((errors++))
|
||||
|
|
@ -104,10 +104,40 @@ check_prerequisites() {
|
|||
}
|
||||
|
||||
get_hosts_from_inventory() {
|
||||
local group="$1"
|
||||
local target="$1"
|
||||
cd "$ANSIBLE_DIR"
|
||||
ansible-inventory -i inventory.ini --list | \
|
||||
python3 -c "import sys, json; data=json.load(sys.stdin); print(' '.join(data.get('$group', {}).get('hosts', [])))" 2>/dev/null || echo ""
|
||||
python3 - "$target" <<'PY' 2>/dev/null || echo ""
|
||||
import json, sys
|
||||
data = json.load(sys.stdin)
|
||||
target = sys.argv[1]
|
||||
if target in data:
|
||||
print(' '.join(data[target].get('hosts', [])))
|
||||
else:
|
||||
hostvars = data.get('_meta', {}).get('hostvars', {})
|
||||
if target in hostvars:
|
||||
print(target)
|
||||
PY
|
||||
}
|
||||
|
||||
get_host_ip() {
|
||||
local target="$1"
|
||||
cd "$ANSIBLE_DIR"
|
||||
ansible-inventory -i inventory.ini --list | \
|
||||
python3 - "$target" <<'PY' 2>/dev/null || echo ""
|
||||
import json, sys
|
||||
data = json.load(sys.stdin)
|
||||
target = sys.argv[1]
|
||||
hostvars = data.get('_meta', {}).get('hostvars', {})
|
||||
if target in hostvars:
|
||||
print(hostvars[target].get('ansible_host', target))
|
||||
else:
|
||||
hosts = data.get(target, {}).get('hosts', [])
|
||||
if hosts:
|
||||
first = hosts[0]
|
||||
hv = hostvars.get(first, {})
|
||||
print(hv.get('ansible_host', first))
|
||||
PY
|
||||
}
|
||||
|
||||
check_dns_configuration() {
|
||||
|
|
@ -116,7 +146,7 @@ check_dns_configuration() {
|
|||
cd "$ANSIBLE_DIR"
|
||||
|
||||
# Get vipy IP
|
||||
local vipy_ip=$(ansible-inventory -i inventory.ini --list | python3 -c "import sys, json; data=json.load(sys.stdin); hosts=data.get('vipy', {}).get('hosts', []); print(hosts[0] if hosts else '')" 2>/dev/null)
|
||||
local vipy_ip=$(get_host_ip "vipy")
|
||||
|
||||
if [ -z "$vipy_ip" ]; then
|
||||
print_error "Could not determine vipy IP from inventory"
|
||||
|
|
|
|||
|
|
@ -58,17 +58,40 @@ record_summary() {
|
|||
}
|
||||
|
||||
get_hosts_from_inventory() {
|
||||
local group="$1"
|
||||
local target="$1"
|
||||
cd "$ANSIBLE_DIR"
|
||||
ansible-inventory -i inventory.ini --list | \
|
||||
python3 -c "import sys, json; data=json.load(sys.stdin); print(' '.join(data.get('$group', {}).get('hosts', [])))" 2>/dev/null || echo ""
|
||||
python3 - "$target" <<'PY' 2>/dev/null || echo ""
|
||||
import json, sys
|
||||
data = json.load(sys.stdin)
|
||||
target = sys.argv[1]
|
||||
if target in data:
|
||||
print(' '.join(data[target].get('hosts', [])))
|
||||
else:
|
||||
hostvars = data.get('_meta', {}).get('hostvars', {})
|
||||
if target in hostvars:
|
||||
print(target)
|
||||
PY
|
||||
}
|
||||
|
||||
get_primary_host_ip() {
|
||||
local group="$1"
|
||||
local target="$1"
|
||||
cd "$ANSIBLE_DIR"
|
||||
ansible-inventory -i inventory.ini --list | \
|
||||
python3 -c "import sys, json; data=json.load(sys.stdin); hosts=data.get('$group', {}).get('hosts', []); print(hosts[0] if hosts else '')" 2>/dev/null || echo ""
|
||||
python3 - "$target" <<'PY' 2>/dev/null || echo ""
|
||||
import json, sys
|
||||
data = json.load(sys.stdin)
|
||||
target = sys.argv[1]
|
||||
hostvars = data.get('_meta', {}).get('hostvars', {})
|
||||
if target in hostvars:
|
||||
print(hostvars[target].get('ansible_host', target))
|
||||
else:
|
||||
hosts = data.get(target, {}).get('hosts', [])
|
||||
if hosts:
|
||||
first = hosts[0]
|
||||
hv = hostvars.get(first, {})
|
||||
print(hv.get('ansible_host', first))
|
||||
PY
|
||||
}
|
||||
|
||||
check_prerequisites() {
|
||||
|
|
@ -112,14 +135,14 @@ check_prerequisites() {
|
|||
print_success "services_config.yml exists"
|
||||
fi
|
||||
|
||||
if ! grep -q "^\[vipy\]" "$ANSIBLE_DIR/inventory.ini"; then
|
||||
if [ -z "$(get_hosts_from_inventory "vipy")" ]; then
|
||||
print_error "vipy not configured in inventory.ini"
|
||||
((errors++))
|
||||
else
|
||||
print_success "vipy configured in inventory"
|
||||
fi
|
||||
|
||||
if ! grep -q "^\[memos-box\]" "$ANSIBLE_DIR/inventory.ini"; then
|
||||
if [ -z "$(get_hosts_from_inventory "memos-box")" ]; then
|
||||
print_warning "memos-box not configured in inventory.ini (memos deployment will be skipped)"
|
||||
else
|
||||
print_success "memos-box configured in inventory"
|
||||
|
|
@ -173,8 +196,9 @@ check_dns_configuration() {
|
|||
fi
|
||||
|
||||
local memos_ip=""
|
||||
if grep -q "^\[memos-box\]" "$ANSIBLE_DIR/inventory.ini"; then
|
||||
memos_ip=$(get_primary_host_ip "memos-box")
|
||||
local memos_host=$(get_hosts_from_inventory "memos-box")
|
||||
if [ -n "$memos_host" ]; then
|
||||
memos_ip=$(get_primary_host_ip "$memos_host")
|
||||
fi
|
||||
|
||||
local dns_ok=true
|
||||
|
|
@ -262,7 +286,7 @@ deploy_ntfy_emergency_app() {
|
|||
deploy_memos() {
|
||||
print_header "Deploying Memos"
|
||||
|
||||
if ! grep -q "^\[memos-box\]" "$ANSIBLE_DIR/inventory.ini"; then
|
||||
if [ -z "$(get_hosts_from_inventory "memos-box")" ]; then
|
||||
print_warning "memos-box not in inventory. Skipping memos deployment."
|
||||
record_summary "${YELLOW}• memos${NC}: skipped (memos-box missing)"
|
||||
return 0
|
||||
|
|
@ -311,19 +335,16 @@ verify_services() {
|
|||
echo ""
|
||||
fi
|
||||
|
||||
if grep -q "^\[memos-box\]" "$ANSIBLE_DIR/inventory.ini"; then
|
||||
local memos_host
|
||||
memos_host=$(get_hosts_from_inventory "memos-box")
|
||||
|
||||
if [ -n "$memos_host" ]; then
|
||||
print_info "Checking memos on memos-box ($memos_host)..."
|
||||
if timeout 5 ssh -i "$ssh_key" -o StrictHostKeyChecking=no -o BatchMode=yes counterweight@$memos_host "systemctl is-active memos" &>/dev/null; then
|
||||
print_success "memos systemd service running"
|
||||
else
|
||||
print_warning "memos systemd service not running"
|
||||
fi
|
||||
echo ""
|
||||
local memos_host
|
||||
memos_host=$(get_hosts_from_inventory "memos-box")
|
||||
if [ -n "$memos_host" ]; then
|
||||
print_info "Checking memos on memos-box ($memos_host)..."
|
||||
if timeout 5 ssh -i "$ssh_key" -o StrictHostKeyChecking=no -o BatchMode=yes counterweight@$memos_host "systemctl is-active memos" &>/dev/null; then
|
||||
print_success "memos systemd service running"
|
||||
else
|
||||
print_warning "memos systemd service not running"
|
||||
fi
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue