fix(recovery): include host112 ssh readiness
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Failing after 1m48s
CD Pipeline / build-and-deploy (push) Has been skipped
CD Pipeline / post-deploy-checks (push) Has been skipped

This commit is contained in:
ogt
2026-07-14 09:06:21 +08:00
parent 1a5adef360
commit 074b450827
2 changed files with 39 additions and 2 deletions

View File

@@ -16,7 +16,7 @@ Usage: host112-guest-readiness.sh [--check|--apply]
--check emits a bounded no-secret guest readiness row.
--apply performs only allowlisted idempotent recovery for graphical.target,
LightDM, open-vm-tools and a cooldown-guarded Wazuh Indexer start retry.
LightDM, open-vm-tools, SSH and a cooldown-guarded Wazuh Indexer start retry.
USAGE
}
@@ -65,6 +65,19 @@ start_if_inactive() {
fi
}
enable_if_disabled() {
local unit="$1" action="$2" state
state="$(unit_enabled "$unit")"
if [ "$state" = "enabled" ] || [ "$state" = "static" ]; then
return 0
fi
if systemctl enable "$unit" >/dev/null; then
record_action "$action"
else
record_action "${action}_failed"
fi
}
if [ "$MODE" = "apply" ]; then
if [ "${EUID:-$(id -u)}" -ne 0 ]; then
echo "BLOCKER host112_apply_requires_root" >&2
@@ -83,6 +96,12 @@ if [ "$MODE" = "apply" ]; then
start_if_inactive graphical.target start_graphical_target
start_if_inactive open-vm-tools.service start_vmware_tools
start_if_inactive lightdm.service start_lightdm
if unit_loaded ssh.service; then
enable_if_disabled ssh.service enable_ssh
start_if_inactive ssh.service start_ssh
else
record_action "ssh_service_missing"
fi
uptime_for_retry="$(awk '{print int($1)}' /proc/uptime 2>/dev/null || echo 0)"
indexer_state="$(unit_active wazuh-indexer.service)"
@@ -126,9 +145,22 @@ wazuh_indexer="$(unit_active wazuh-indexer.service)"
wazuh_manager="$(unit_active wazuh-manager.service)"
wazuh_dashboard="$(unit_active wazuh-dashboard.service)"
filebeat="$(unit_active filebeat.service)"
ssh_service="$(unit_active ssh.service)"
ssh_enabled="$(unit_enabled ssh.service)"
startup_enabled="$(unit_enabled awoooi-host112-guest-recovery.timer)"
startup_active="$(unit_active awoooi-host112-guest-recovery.timer)"
ssh_port_listening=0
if ss -H -ltn 2>/dev/null | awk '{print $4}' | grep -Eq '(^|:)22$'; then
ssh_port_listening=1
fi
ssh_ready=0
if [ "$ssh_service" = "active" ] \
&& { [ "$ssh_enabled" = "enabled" ] || [ "$ssh_enabled" = "static" ]; } \
&& [ "$ssh_port_listening" -eq 1 ]; then
ssh_ready=1
fi
xorg="inactive"
if pgrep -x Xorg >/dev/null 2>&1 || pgrep -x Xwayland >/dev/null 2>&1; then
xorg="active"
@@ -160,6 +192,7 @@ fi
guest_ready=0
if [ "$console_ready" -eq 1 ] \
&& [ "$services_ready" -eq 1 ] \
&& [ "$ssh_ready" -eq 1 ] \
&& [ "$recovery_timer_ready" -eq 1 ] \
&& [ "$systemd_state" = "running" ]; then
guest_ready=1
@@ -170,7 +203,7 @@ if [ "${#actions[@]}" -gt 0 ]; then
action_text="$(IFS=,; printf '%s' "${actions[*]}")"
fi
readback="boot_id=$boot_id uptime_seconds=$uptime_seconds systemd_state=$systemd_state startup_enabled=$startup_enabled startup_active=$startup_active default_target=$default_target graphical_target=$graphical_target display_manager=$display_manager lightdm=$lightdm vmware_tools=$vmware_tools xorg=$xorg wazuh_indexer=$wazuh_indexer wazuh_manager=$wazuh_manager wazuh_dashboard=$wazuh_dashboard filebeat=$filebeat console_ready=$console_ready services_ready=$services_ready recovery_timer_ready=$recovery_timer_ready guest_ready=$guest_ready action_count=${#actions[@]} actions=$action_text"
readback="boot_id=$boot_id uptime_seconds=$uptime_seconds systemd_state=$systemd_state startup_enabled=$startup_enabled startup_active=$startup_active default_target=$default_target graphical_target=$graphical_target display_manager=$display_manager lightdm=$lightdm vmware_tools=$vmware_tools xorg=$xorg wazuh_indexer=$wazuh_indexer wazuh_manager=$wazuh_manager wazuh_dashboard=$wazuh_dashboard filebeat=$filebeat ssh_service=$ssh_service ssh_enabled=$ssh_enabled ssh_port_listening=$ssh_port_listening ssh_ready=$ssh_ready console_ready=$console_ready services_ready=$services_ready recovery_timer_ready=$recovery_timer_ready guest_ready=$guest_ready action_count=${#actions[@]} actions=$action_text"
printf '%s\n' "$readback"
if [ "$MODE" = "apply" ]; then

View File

@@ -97,6 +97,10 @@ def test_reboot_p0_contract_covers_all_required_hosts_and_vmware_autostart() ->
assert "systemctl set-default graphical.target" in host112_readiness
assert "start_if_inactive lightdm.service" in host112_readiness
assert "start_if_inactive open-vm-tools.service" in host112_readiness
assert "enable_if_disabled ssh.service enable_ssh" in host112_readiness
assert "start_if_inactive ssh.service start_ssh" in host112_readiness
assert "ssh_port_listening=$ssh_port_listening" in host112_readiness
assert "ssh_ready=$ssh_ready" in host112_readiness
assert "INDEXER_RETRY_COOLDOWN_SECONDS" in host112_readiness
assert "console_ready=$console_ready" in host112_readiness
assert "guest_ready=$guest_ready" in host112_readiness