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
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:
@@ -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; } \\
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user