fix(reboot): tighten windows99 vmx backup blocked host truth
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m22s
CD Pipeline / build-and-deploy (push) Successful in 4m50s
CD Pipeline / post-deploy-checks (push) Successful in 1m45s

This commit is contained in:
Your Name
2026-07-03 18:26:26 +08:00
parent e21d6de5b6
commit 9247446077
10 changed files with 165 additions and 43 deletions

View File

@@ -1,7 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
HOSTS="${WINDOWS99_VMX_BACKUP_SEARCH_HOSTS:-110=wooo@192.168.0.110,120=wooo@192.168.0.120,121=wooo@192.168.0.121,188=wooo@192.168.0.188,112=wooo@192.168.0.112}"
DEFAULT_HOSTS="110=wooo@192.168.0.110,120=wooo@192.168.0.120,121=wooo@192.168.0.121,188=wooo@192.168.0.188,112=wooo@192.168.0.112"
HOST_DIRECTORY="${WINDOWS99_VMX_BACKUP_SEARCH_HOST_DIRECTORY:-$DEFAULT_HOSTS}"
HOSTS="${WINDOWS99_VMX_BACKUP_SEARCH_HOSTS:-$DEFAULT_HOSTS}"
SEARCH_ROOTS="${WINDOWS99_VMX_BACKUP_SEARCH_ROOTS:-/home/wooo /mnt /backup /backups /var/backups}"
MAX_DEPTH="${WINDOWS99_VMX_BACKUP_SEARCH_MAX_DEPTH:-7}"
CONNECT_TIMEOUT="${WINDOWS99_VMX_BACKUP_SEARCH_CONNECT_TIMEOUT:-8}"
@@ -96,9 +98,30 @@ blocked_hosts=0
IFS=',' read -r -a host_entries <<<"$HOSTS"
for entry in "${host_entries[@]}"; do
[[ -n "$entry" && "$entry" == *=* ]] || continue
entry="${entry//[[:space:]]/}"
[[ -n "$entry" ]] || continue
alias_name="${entry%%=*}"
ssh_target="${entry#*=}"
ssh_target=""
if [[ "$entry" == *=* ]]; then
ssh_target="${entry#*=}"
else
alias_name="$entry"
IFS=',' read -r -a directory_entries <<<"$HOST_DIRECTORY"
for directory_entry in "${directory_entries[@]}"; do
directory_entry="${directory_entry//[[:space:]]/}"
[[ -n "$directory_entry" && "$directory_entry" == *=* ]] || continue
if [[ "${directory_entry%%=*}" == "$alias_name" ]]; then
ssh_target="${directory_entry#*=}"
break
fi
done
fi
if [[ -z "$ssh_target" || "$ssh_target" == "$alias_name" ]]; then
blocked_hosts=$((blocked_hosts + 1))
printf 'HOST_SEARCH alias=%s status=blocked_host_alias_unresolved candidate_source_count=0 path_fingerprints=\n' \
"$alias_name"
continue
fi
remote_script=$(cat <<REMOTE
set -euo pipefail
{ find ${SEARCH_ROOTS} -maxdepth ${MAX_DEPTH} \\( -iname "*.vmx" -o -iname "*192.168.0.111*" -o -iname "*111*Ubuntu*" \\) 2>/dev/null || true; } \\

View File

@@ -116,3 +116,58 @@ def test_backup_search_collector_emits_fingerprints_not_paths(tmp_path: Path) ->
assert "file_content_read=false" in result.stdout
assert "remote_write_performed=false" in result.stdout
assert "vm_power_change_performed=false" in result.stdout
def test_backup_search_collector_resolves_bare_aliases_and_blocks_unknown(
tmp_path: Path,
) -> None:
fake_bin = tmp_path / "bin"
fake_bin.mkdir()
_write_executable(
fake_bin / "ssh",
"""
#!/usr/bin/env bash
target="${@: -2:1}"
if [[ "$target" == *"blocked"* ]]; then
exit 255
fi
printf '%s\n' 'fp-alias'
""",
)
env = os.environ.copy()
env["PATH"] = f"{fake_bin}:{env['PATH']}"
env["WINDOWS99_VMX_BACKUP_SEARCH_KNOWN_HOSTS_FILE"] = str(
fake_bin / "known_hosts"
)
env["WINDOWS99_VMX_BACKUP_SEARCH_HOST_DIRECTORY"] = (
"ok=wooo@ok,blocked=wooo@blocked"
)
result = subprocess.run(
[
"bash",
str(SCRIPT),
"--hosts",
"ok,blocked,missing",
"--timeout",
"3",
],
cwd=ROOT,
env=env,
capture_output=True,
text=True,
check=False,
)
assert result.returncode == 0
values = _key_values(result.stdout)
assert values["candidate_source_count"] == "1"
assert values["searched_host_count"] == "1"
assert values["blocked_host_count"] == "2"
assert "HOST_SEARCH alias=ok status=searched candidate_source_count=1" in result.stdout
assert "HOST_SEARCH alias=blocked status=blocked_ssh_batchmode_unavailable" in (
result.stdout
)
assert "HOST_SEARCH alias=missing status=blocked_host_alias_unresolved" in (
result.stdout
)