39 lines
17 KiB
JSON
39 lines
17 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"channel": "homelab-runtime",
|
|
"command_id": "SUPPORT-260924-HOMELAB-MOLDOVA-RELEASE-AUTH-EXACT-1146R1",
|
|
"status": "OK",
|
|
"rc": 0,
|
|
"host": "pve01",
|
|
"mode": "read-only",
|
|
"component": "homelab-moldova-release-auth-exact",
|
|
"started_at_utc": "2026-09-23T22:13:50Z",
|
|
"finished_at_utc": "2026-09-23T22:13:50Z",
|
|
"reference_register_checked": true,
|
|
"reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66",
|
|
"error_register_checked": true,
|
|
"error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0",
|
|
"command_sha256": "2ecf45c3dc29b0d52ce5e023d056614d7ae82c2a141b7e4d50abcf70ede7b8e5",
|
|
"duplicate_failed_command_blocked": false,
|
|
"block_reason": null,
|
|
"execution_started": true,
|
|
"change_declared": false,
|
|
"result_contract_valid": true,
|
|
"result_contract_status": null,
|
|
"result_contract_error": null,
|
|
"command_rc": 0,
|
|
"changes_made": false,
|
|
"rollback_started": false,
|
|
"rollback_restored": null,
|
|
"mutation_outcome": "NO_MUTATION",
|
|
"sanitized": true,
|
|
"secrets_included": false,
|
|
"private_addresses_included": false,
|
|
"raw_evidence_retained_locally": true,
|
|
"raw_evidence_sha256": "33797061a32049635fc79cd84c3c526a8480e12813aa01c6817da699fb08c805",
|
|
"sanitized_output_sha256": "33797061a32049635fc79cd84c3c526a8480e12813aa01c6817da699fb08c805",
|
|
"output_truncated_in_json": false,
|
|
"full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
|
|
"output": "WORKERS2_MOLDOVA_RELEASE_AUTH_EXACT_BEGIN=1\nCOMMAND_ID=SUPPORT-260924-HOMELAB-MOLDOVA-RELEASE-AUTH-EXACT-1146R1\nMODE=read-only\nCOMPONENT=homelab-moldova-release-auth-exact\nMUTATION_BOUNDARY=NONE;EXACT_RELEASE_STATIC_CODE_INSPECTION_ONLY;NO_MOLDOVA_CONNECTION;NO_REMOTE_SSH;NO_PROVIDER_CALL;NO_SYSTEMD_ACTION;NO_BACKUP_RUN;NO_BACKUP_MUTATION;NO_TARGET_POLICY_MUTATION;NO_NETBIRD_MUTATION;NO_MONITORING_MUTATION;NO_GIT_WRITE;NO_SECRET_VALUE_READOUT\nPREDECESSOR_1145=PASS_MOLDOVA_1145_BACKUP_SSH_EXECUTOR_RCA\nPREDECESSOR_1145_RELEASE=/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b\nCARRIER_BASELINE=KNOWN_GOOD_1137_BYTE_SEMANTICS\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nRUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\nTARGETS_SHA256=5cba5f1e14c65211c9fab6d11594c19279ab68369b4db3f7283708c368348288\nMD_RELAY_COUNT=1\nMD_RELAY_ENABLED=false\nMD_RELAY_TYPE=vps_md\nMD_RELAY_SCOPE=vps\nRELEASE_ROOT_BEGIN=1\nRELEASE_EXISTS=true\nRELEASE_MODE=500\nRELEASE_OWNER=root:root\nRELEASE_FILE_COUNT=6\nRELEASE_ROOT_END=1\nRELEASE_IDENTITY_BEGIN=1\nRELEASE_FILES=entry504.py,fresh_lxc_helper.py,lxc_adapter.py,producer_exec_helper.py,qemu_adapter.py,scheduler_adapter.py\nRELEASE_FILE|name=entry504.py|exists=true|bytes=10566|mode=400|uid=0|gid=0|sha256=ca6876fa9c3b1465b045344a8ad46962de16972c7dadc4ac6257c7d225047793|expected_sha256=ca6876fa9c3b1465b045344a8ad46962de16972c7dadc4ac6257c7d225047793|identity_ok=true\nRELEASE_FILE|name=fresh_lxc_helper.py|exists=true|bytes=2320|mode=400|uid=0|gid=0|sha256=dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011|expected_sha256=dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011|identity_ok=true\nRELEASE_FILE|name=lxc_adapter.py|exists=true|bytes=13825|mode=400|uid=0|gid=0|sha256=3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d|expected_sha256=3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d|identity_ok=true\nRELEASE_FILE|name=producer_exec_helper.py|exists=true|bytes=3449|mode=400|uid=0|gid=0|sha256=b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3|expected_sha256=b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3|identity_ok=true\nRELEASE_FILE|name=qemu_adapter.py|exists=true|bytes=4627|mode=400|uid=0|gid=0|sha256=1906db42bd34bbe85eb46fd9797b3572d46e0a41c29d1c29be5f9df5e448f15b|expected_sha256=1906db42bd34bbe85eb46fd9797b3572d46e0a41c29d1c29be5f9df5e448f15b|identity_ok=true\nRELEASE_FILE|name=scheduler_adapter.py|exists=true|bytes=4097|mode=400|uid=0|gid=0|sha256=a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96|expected_sha256=a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96|identity_ok=true\nRELEASE_IDENTITY_BAD=0\nRELEASE_IDENTITY_END=1\nRELEASE_IMPORTS_AND_AUTH_SNIPPETS_BEGIN=1\nSRC|file=entry504.py|line=1|text=from __future__ import annotations\nSRC|file=entry504.py|line=2|text=import hashlib, importlib, json, os, pathlib, stat, sys, types\nSRC|file=entry504.py|line=62|text= required=('capture_pve_guest','backup_target','load_targets','cluster_inventory','ssh_remote',\nSRC|file=entry504.py|line=69|text= if not isinstance(g.get('SCP'),str) or not g['SCP'].startswith('/'):\nSRC|file=entry504.py|line=70|text= raise RuntimeError('LEGACY_SCP_API')\nSRC|file=entry504.py|line=126|text= import tempfile\nSRC|file=fresh_lxc_helper.py|line=1|text=from __future__ import annotations\nSRC|file=fresh_lxc_helper.py|line=2|text=import base64, hashlib, json, pathlib, sys\nSRC|file=fresh_lxc_helper.py|line=19|text= import adapter\nSRC|file=lxc_adapter.py|line=1|text=from __future__ import annotations\nSRC|file=lxc_adapter.py|line=2|text=import base64, hashlib, json, os, pathlib, re, selectors, shlex, signal, stat, subprocess, sys, time\nSRC|file=lxc_adapter.py|line=36|text= p=legacy.ssh_remote(node,['sha256sum','--',path],timeout=30)\nSRC|file=lxc_adapter.py|line=44|text= rows=_j(legacy.ssh_remote(node,['pvesh','get','/cluster/resources','--type','vm','--output-format','json'],timeout=60),'RESOURCES_JSON')\nSRC|file=lxc_adapter.py|line=45|text= stores=_j(legacy.ssh_remote(node,['pvesh','get',f'/nodes/{node}/storage','--output-format','json'],timeout=60),'STORAGE_JSON')\nSRC|file=lxc_adapter.py|line=52|text= cfg=_j(legacy.ssh_remote(node,['pvesh','get',f'/nodes/{node}/{r[\"type\"]}/{rid}/config','--output-format','json'],timeout=60),'CONFIG_JSON')\nSRC|file=lxc_adapter.py|line=55|text= tasks=_j(legacy.ssh_remote(node,['pvesh','get',f'/nodes/{node}/tasks','--limit','999','--output-format','json'],timeout=60),'TASKS_JSON')\nSRC|file=lxc_adapter.py|line=57|text= q=legacy.ssh_remote(node,['test','-f','/etc/vzdump.conf'],timeout=30,check=False)\nSRC|file=lxc_adapter.py|line=59|text= if q.returncode==0: defaults=legacy.ssh_remote(node,['cat','--','/etc/vzdump.conf'],timeout=30).stdout\nSRC|file=lxc_adapter.py|line=68|text= p=subprocess.run(['/usr/bin/python3','-I','-B',str(HELPER)],input=data,capture_output=True,timeout=120,cwd='/',env=ENV)\nSRC|file=lxc_adapter.py|line=95|text= p=subprocess.run(['/usr/bin/python3','-I','-B',str(EXEC_HELPER)],input=data,capture_output=True,timeout=timeout+120,cwd='/',env=ENV)\nSRC|file=lxc_adapter.py|line=112|text= except subprocess.TimeoutExpired:\nSRC|file=lxc_adapter.py|line=130|text= ssh=['/usr/bin/ssh','-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','-o','ConnectTimeout=15',f'root@{node}',remote]\nSRC|file=lxc_adapter.py|line=133|text= p=subprocess.Popen(ssh,stdin=subprocess.DEVNULL,stdout=subprocess.PIPE,stderr=subprocess.PIPE,cwd='/',env=ENV,start_new_session=True,close_fds=True)\nSRC|file=lxc_adapter.py|line=158|text= return {'executor':'remote-bounded-ssh-cwd-root','producer_rc':rc,'size':total,'sha256':digest.hexdigest(),\nSRC|file=lxc_adapter.py|line=162|text= summary={'executor':'remote-bounded-ssh-cwd-root','producer_rc':None if p is None else p.returncode,'archive_bytes':total,\nSRC|file=lxc_adapter.py|line=199|text= legacy.ssh_remote(node,['install','-d','-m','710','-o','0','-g','100000',scratch],timeout=30)\nSRC|file=lxc_adapter.py|line=200|text= q=legacy.ssh_remote(node,['stat','-c','%a:%u:%g',scratch],timeout=30)\nSRC|file=lxc_adapter.py|line=213|text= legacy.ssh_remote(node,['rm','-rf','--',scratch],timeout=60,check=False); raise\nSRC|file=producer_exec_helper.py|line=1|text=from __future__ import annotations\nSRC|file=producer_exec_helper.py|line=2|text=import hashlib, json, os, pathlib, sys\nSRC|file=producer_exec_helper.py|line=29|text= import adapter\nSRC|file=producer_exec_helper.py|line=50|text= import adapter\nSRC|file=qemu_adapter.py|line=1|text=from __future__ import annotations\nSRC|file=qemu_adapter.py|line=2|text=import hashlib, json, pathlib, re\nSRC|file=qemu_adapter.py|line=12|text= p=legacy.ssh_remote(node,['sha256sum','--',path],timeout=30)\nSRC|file=qemu_adapter.py|line=49|text= legacy.ssh_remote(node,['install','-d','-m','700','-o','0','-g','0',srcdir],timeout=30)\nSRC|file=qemu_adapter.py|line=51|text= vp=legacy.ssh_remote(node,['vzdump',str(vmid),'--mode','snapshot','--compress','zstd','--dumpdir',srcdir],timeout=7200,check=False)\nSRC|file=qemu_adapter.py|line=56|text= p=legacy.ssh_remote(node,['find',srcdir,'-maxdepth','1','-type','f','-printf','%p\\n'],timeout=30)\nSRC|file=qemu_adapter.py|line=62|text= q=legacy.ssh_remote(node,['stat','-c','%s','--',src],timeout=30)\nSRC|file=qemu_adapter.py|line=69|text= legacy.run([legacy.SCP,'-q','-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node+':'+src,str(local)],timeout=7200)\nSRC|file=qemu_adapter.py|line=73|text= legacy.ssh_remote(node,['rm','-rf','--',srcdir],timeout=60,check=False); raise\nSRC|file=scheduler_adapter.py|line=1|text=from __future__ import annotations\nSRC|file=scheduler_adapter.py|line=2|text=import json, pathlib\nRELEASE_AUTH_MATCH_COUNT=28\nRELEASE_IMPORTS_AND_AUTH_SNIPPETS_END=1\nRELEASE_AST_CALLS_BEGIN=1\nAST_CALL|file=entry504.py|line=29|fn=RuntimeError|src=RuntimeError('BASE_RELEASE_ROOT')\nAST_CALL|file=entry504.py|line=60|fn=RuntimeError|src=RuntimeError('LEGACY_PROVENANCE_CARDINALITY')\nAST_CALL|file=entry504.py|line=66|fn=RuntimeError|src=RuntimeError('LEGACY_PROVENANCE_API')\nAST_CALL|file=entry504.py|line=70|fn=RuntimeError|src=RuntimeError('LEGACY_SCP_API')\nAST_CALL|file=entry504.py|line=73|fn=RuntimeError|src=RuntimeError('QEMU_ADAPTER_BIND_RESULT')\nAST_CALL|file=entry504.py|line=76|fn=RuntimeError|src=RuntimeError('LXC_ADAPTER_BIND_RESULT')\nAST_CALL|file=entry504.py|line=80|fn=RuntimeError|src=RuntimeError('SCHEDULER_ADAPTER_BIND_RESULT')\nAST_CALL|file=entry504.py|line=95|fn=RuntimeError|src=RuntimeError('LXC_502_BYTE_IDENTITY')\nAST_CALL|file=entry504.py|line=101|fn=RuntimeError|src=RuntimeError('TARGET_CARDINALITY')\nAST_CALL|file=entry504.py|line=107|fn=RuntimeError|src=RuntimeError('PATCH_BINDING')\nAST_CALL|file=entry504.py|line=109|fn=RuntimeError|src=RuntimeError('SCHEDULER_CHOOSE_BINDING')\nAST_CALL|file=entry504.py|line=111|fn=RuntimeError|src=RuntimeError('SCHEDULER_WRITE_BINDING')\nAST_CALL|file=entry504.py|line=113|fn=RuntimeError|src=RuntimeError('SCHEDULER_BACKOFF_CONTRACT')\nAST_CALL|file=entry504.py|line=115|fn=RuntimeError|src=RuntimeError('WRAPPER_PUBLIC_API')\nAST_CALL|file=entry504.py|line=33|fn=RuntimeError|src=RuntimeError('BASE_RELEASE_FILE_'+rel)\nAST_CALL|file=entry504.py|line=69|fn=isinstance|src=isinstance(g.get('SCP'),str)\nAST_CALL|file=entry504.py|line=69|fn=startswith|src=g['SCP'].startswith('/')\nAST_CALL|file=entry504.py|line=129|fn=RuntimeError|src=RuntimeError('SCHEDULER_PROOF_BASE')\nAST_CALL|file=entry504.py|line=170|fn=RuntimeError|src=RuntimeError('PLAN_TARGET_NOT_LEGACY_LXC')\nAST_CALL|file=entry504.py|line=177|fn=RuntimeError|src=RuntimeError('VERIFY_SYNTHETIC_CT112_FORBIDDEN')\nAST_CALL|file=entry504.py|line=69|fn=g.get|src=g.get('SCP')\nAST_CALL|file=entry504.py|line=132|fn=tempfile.TemporaryDirectory|src=tempfile.TemporaryDirectory(prefix='homelab-scheduler-proof-',dir='/run')\nAST_CALL|file=entry504.py|line=143|fn=RuntimeError|src=RuntimeError('SCHEDULER_PROOF_PEER_NOT_SELECTED')\nAST_CALL|file=entry504.py|line=146|fn=RuntimeError|src=RuntimeError('SCHEDULER_PROOF_FAILURE_STATE')\nAST_CALL|file=entry504.py|line=149|fn=RuntimeError|src=RuntimeError('SCHEDULER_PROOF_RETRY_NOT_REELIGIBLE')\nAST_CALL|file=entry504.py|line=153|fn=RuntimeError|src=RuntimeError('SCHEDULER_PROOF_SUCCESS_RESET')\nAST_CALL|file=fresh_lxc_helper.py|line=12|fn=RuntimeError|src=RuntimeError(code)\nAST_CALL|file=lxc_adapter.py|line=36|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['sha256sum','--',path],timeout=30)\nAST_CALL|file=lxc_adapter.py|line=44|fn=_j|src=_j(legacy.ssh_remote(node,['pvesh','get','/cluster/resources','--type','vm','--output-format','json'],timeout=60),'RESOURCES_JSON')\nAST_CALL|file=lxc_adapter.py|line=45|fn=_j|src=_j(legacy.ssh_remote(node,['pvesh','get',f'/nodes/{node}/storage','--output-format','json'],timeout=60),'STORAGE_JSON')\nAST_CALL|file=lxc_adapter.py|line=55|fn=_j|src=_j(legacy.ssh_remote(node,['pvesh','get',f'/nodes/{node}/tasks','--limit','999','--output-format','json'],timeout=60),'TASKS_JSON')\nAST_CALL|file=lxc_adapter.py|line=57|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['test','-f','/etc/vzdump.conf'],timeout=30,check=False)\nAST_CALL|file=lxc_adapter.py|line=68|fn=subprocess.run|src=subprocess.run(['/usr/bin/python3','-I','-B',str(HELPER)],input=data,capture_output=True,timeout=120,cwd='/',env=ENV)\nAST_CALL|file=lxc_adapter.py|line=95|fn=subprocess.run|src=subprocess.run(['/usr/bin/python3','-I','-B',str(EXEC_HELPER)],input=data,capture_output=True,timeout=timeout+120,cwd='/',env=ENV)\nAST_CALL|file=lxc_adapter.py|line=44|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['pvesh','get','/cluster/resources','--type','vm','--output-format','json'],timeout=60)\nAST_CALL|file=lxc_adapter.py|line=45|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['pvesh','get',f'/nodes/{node}/storage','--output-format','json'],timeout=60)\nAST_CALL|file=lxc_adapter.py|line=52|fn=_j|src=_j(legacy.ssh_remote(node,['pvesh','get',f'/nodes/{node}/{r[\"type\"]}/{rid}/config','--output-format','json'],timeout=60),'CONFIG_JSON')\nAST_CALL|file=lxc_adapter.py|line=55|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['pvesh','get',f'/nodes/{node}/tasks','--limit','999','--output-format','json'],timeout=60)\nAST_CALL|file=lxc_adapter.py|line=133|fn=subprocess.Popen|src=subprocess.Popen(ssh,stdin=subprocess.DEVNULL,stdout=subprocess.PIPE,stderr=subprocess.PIPE,cwd='/',env=ENV,start_new_session=True,close_fds=True)\nAST_CALL|file=lxc_adapter.py|line=199|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['install','-d','-m','710','-o','0','-g','100000',scratch],timeout=30)\nAST_CALL|file=lxc_adapter.py|line=200|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['stat','-c','%a:%u:%g',scratch],timeout=30)\nAST_CALL|file=lxc_adapter.py|line=52|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['pvesh','get',f'/nodes/{node}/{r[\"type\"]}/{rid}/config','--output-format','json'],timeout=60)\nAST_CALL|file=lxc_adapter.py|line=59|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['cat','--','/etc/vzdump.conf'],timeout=30)\nAST_CALL|file=lxc_adapter.py|line=213|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['rm','-rf','--',scratch],timeout=60,check=False)\nAST_CALL|file=producer_exec_helper.py|line=16|fn=RuntimeError|src=RuntimeError(code)\nAST_CALL|file=qemu_adapter.py|line=12|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['sha256sum','--',path],timeout=30)\nAST_CALL|file=qemu_adapter.py|line=49|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['install','-d','-m','700','-o','0','-g','0',srcdir],timeout=30)\nAST_CALL|file=qemu_adapter.py|line=51|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['vzdump',str(vmid),'--mode','snapshot','--compress','zstd','--dumpdir',srcdir],timeout=7200,check=False)\nAST_CALL|file=qemu_adapter.py|line=56|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['find',srcdir,'-maxdepth','1','-type','f','-printf','%p\\n'],timeout=30)\nAST_CALL|file=qemu_adapter.py|line=62|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['stat','-c','%s','--',src],timeout=30)\nAST_CALL|file=qemu_adapter.py|line=69|fn=legacy.run|src=legacy.run([legacy.SCP,'-q','-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node+':'+src,str(local)],timeout=7200)\nAST_CALL|file=qemu_adapter.py|line=73|fn=legacy.ssh_remote|src=legacy.ssh_remote(node,['rm','-rf','--',srcdir],timeout=60,check=False)\nRELEASE_AST_CALL_COUNT=52\nRELEASE_AST_CALLS_END=1\nAUTH_PATTERN|name=VPS_MD|count=0|files=\nAUTH_PATTERN|name=SSH|count=4|files=lxc_adapter.py\nAUTH_PATTERN|name=SCP|count=2|files=entry504.py,qemu_adapter.py\nAUTH_PATTERN|name=RSYNC|count=0|files=\nAUTH_PATTERN|name=HOSTKEY|count=2|files=lxc_adapter.py,qemu_adapter.py\nAUTH_PATTERN|name=IDENTITY|count=2|files=lxc_adapter.py\nAUTH_PATTERN|name=BATCH|count=2|files=lxc_adapter.py,qemu_adapter.py\nAUTH_PATTERN|name=OPS_USER|count=0|files=\nRELEASE_AUTH_CLASS=VPS_MD_HANDLER_NOT_LOCATED\nDECISION=PASS_MOLDOVA_1146_RELEASE_AUTH_EXACT_COLLECTED\nNEXT_GATE=READ_EXACT_1146_AND_BUILD_REMOTE_ROLE_PREFLIGHT_FROM_RELEASE_CODE\nTASK_RESULT=PASS_MOLDOVA_RELEASE_AUTH_EXACT\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260924-HOMELAB-MOLDOVA-RELEASE-AUTH-EXACT-1146R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\nWORKERS2_MOLDOVA_RELEASE_AUTH_EXACT_END=1\n"
|
|
}
|