Merge pull request #2682 from pikasTech/fix/2681-public-edge-container-identity
让 public-edge status 直接显示容器身份
This commit is contained in:
@@ -1232,7 +1232,8 @@ trap 'rm -rf "$tmp"' EXIT
|
||||
dns_failures_dir="$tmp/dns-failures"
|
||||
site_failures_dir="$tmp/site-failures"
|
||||
mkdir -p "$dns_failures_dir" "$site_failures_dir"
|
||||
container_rc=0; docker inspect -f '{{.State.Running}}' ${shQuote(target.runtime.containerName)} 2>/dev/null | grep -qx true || container_rc=1
|
||||
container_identity="$(docker inspect -f '{{.State.Running}}|{{.Id}}|{{.State.StartedAt}}' ${shQuote(target.runtime.containerName)} 2>/dev/null || true)"
|
||||
container_rc=0; printf '%s' "$container_identity" | grep -q '^true|' || container_rc=1
|
||||
legacy_rc=0; docker inspect -f '{{.State.Running}}' ${shQuote(target.runtime.legacy.containerName)} 2>/dev/null | grep -qx true || legacy_rc=1
|
||||
listeners_rc=0; ss -ltn | grep -Eq '[:.]${target.listener.httpPort}[[:space:]]' || listeners_rc=1; ss -ltn | grep -Eq '[:.]${target.listener.httpsPort}[[:space:]]' || listeners_rc=1
|
||||
udp_rc=0
|
||||
@@ -1256,10 +1257,13 @@ PY
|
||||
fi
|
||||
current_compose_sha=""
|
||||
if [ -f ${shQuote(target.runtime.composePath)} ]; then current_compose_sha="sha256:$(sha256sum ${shQuote(target.runtime.composePath)} | awk '{print $1}')"; fi
|
||||
python3 - "$container_rc" "$legacy_rc" "$listeners_rc" "$udp_rc" "$validate_rc" "$dns_rc" "$sites_rc" "$current_sha" ${shQuote(desiredFingerprint)} "$current_compose_sha" ${shQuote(desiredComposeFingerprint)} ${shQuote(desiredSourceCommit ?? "")} ${shQuote(authorityId)} ${shQuote(target.runtime.statePath)} "$dns_failures_dir" "$site_failures_dir" <<'PY'
|
||||
python3 - "$container_rc" "$legacy_rc" "$listeners_rc" "$udp_rc" "$validate_rc" "$dns_rc" "$sites_rc" "$container_identity" "$current_sha" ${shQuote(desiredFingerprint)} "$current_compose_sha" ${shQuote(desiredComposeFingerprint)} ${shQuote(desiredSourceCommit ?? "")} ${shQuote(authorityId)} ${shQuote(target.runtime.statePath)} "$dns_failures_dir" "$site_failures_dir" <<'PY'
|
||||
import json, pathlib, sys
|
||||
container, legacy, listeners, udp, validate, dns, sites = [int(value) for value in sys.argv[1:8]]
|
||||
current, desired, current_compose, desired_compose, desired_commit, desired_authority, state_path, dns_failures_path, site_failures_path = sys.argv[8:17]
|
||||
container_identity, current, desired, current_compose, desired_compose, desired_commit, desired_authority, state_path, dns_failures_path, site_failures_path = sys.argv[8:18]
|
||||
container_parts = container_identity.split("|", 2)
|
||||
container_id = container_parts[1] if len(container_parts) == 3 and container_parts[1] else None
|
||||
container_started_at = container_parts[2] if len(container_parts) == 3 and container_parts[2] else None
|
||||
def read_failures(directory):
|
||||
return [json.loads(path.read_text(encoding="utf-8")) for path in sorted(pathlib.Path(directory).glob("*.json"))]
|
||||
dns_failures = read_failures(dns_failures_path)
|
||||
@@ -1281,7 +1285,7 @@ state_matches_runtime = (
|
||||
)
|
||||
config_matches_desired = bool(desired) and current == desired and bool(desired_compose) and current_compose == desired_compose
|
||||
ok = all(value == 0 for value in [container, listeners, udp, validate, sites]) and legacy != 0 and state_matches_runtime and config_matches_desired
|
||||
print(json.dumps({"ok": ok, "container": {"exitCode": container}, "legacyContainer": {"exitCode": legacy, "retired": legacy != 0}, "tcpListeners": {"exitCode": listeners}, "preservedUdpListeners": {"exitCode": udp}, "validate": {"exitCode": validate}, "dns": {"exitCode": dns, "blocking": False, "failures": dns_failures}, "siteProbes": {"exitCode": sites, "failures": site_failures}, "provenance": {"installed": state, "desiredSourceCommit": desired_commit or None, "matchesRuntime": state_matches_runtime}, "config": {"currentManagedFingerprint": current or None, "desiredManagedFingerprint": desired or None, "currentComposeFingerprint": current_compose or None, "desiredComposeFingerprint": desired_compose or None, "matchesDesired": config_matches_desired}, "valuesPrinted": False}))
|
||||
print(json.dumps({"ok": ok, "container": {"exitCode": container, "id": container_id, "startedAt": container_started_at}, "legacyContainer": {"exitCode": legacy, "retired": legacy != 0}, "tcpListeners": {"exitCode": listeners}, "preservedUdpListeners": {"exitCode": udp}, "validate": {"exitCode": validate}, "dns": {"exitCode": dns, "blocking": False, "failures": dns_failures}, "siteProbes": {"exitCode": sites, "failures": site_failures}, "provenance": {"installed": state, "desiredSourceCommit": desired_commit or None, "matchesRuntime": state_matches_runtime}, "config": {"currentManagedFingerprint": current or None, "desiredManagedFingerprint": desired or None, "currentComposeFingerprint": current_compose or None, "desiredComposeFingerprint": desired_compose or None, "matchesDesired": config_matches_desired}, "valuesPrinted": False}))
|
||||
raise SystemExit(0 if ok else 1)
|
||||
PY
|
||||
`;
|
||||
|
||||
Reference in New Issue
Block a user