From aeebe92206ec418759a0e90c0213e016f7b8323b Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Fri, 18 Sep 2026 21:05:07 +0000 Subject: [PATCH] runtime: publish SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2 --- ...-CURRENT-PROD-CALLPATH-READONLY-556R2.json | 38 ++++ ...A-CURRENT-PROD-CALLPATH-READONLY-556R2.txt | 156 +++++++++++++++++ runtime/latest.json | 36 ++-- runtime/latest.txt | 165 +++++++++++++++--- 4 files changed, 351 insertions(+), 44 deletions(-) create mode 100644 runtime/history/SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2.json create mode 100644 runtime/history/SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2.txt diff --git a/runtime/history/SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2.json b/runtime/history/SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2.json new file mode 100644 index 00000000..3ab5a4b4 --- /dev/null +++ b/runtime/history/SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "infra-pve1-moldova-current-prod-callpath-readonly", + "started_at_utc": "2026-09-18T21:05:06Z", + "finished_at_utc": "2026-09-18T21:05:06Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "37ce436636242efdcf203b90c1a92dfa69ada981da23f62e14b4602369702589", + "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": "883672d81581efc0c1d92a09229e4b23c9e7899d7bd8e2f7a4a5a768e0902898", + "sanitized_output_sha256": "0e12c81ca87dc2aca47e61e36d9079f2d2971793fe68f8a3f4c1dae3974247cb", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "ERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nPROD_ENTRY_PRESENT=True\nPROD_ENTRY_IS_SYMLINK=False\nPROD_ENTRY_RESOLVED=/usr/local/sbin/homelab-backup-v2\nPROD_ENTRY_SIZE=1656\nPROD_ENTRY_SHA256=5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2\nPROD_CALLPATH_MATCH_LINE_COUNT=3\nPROD_CALLPATH_MATCH_LINES=3,4,24\nPROD_CALLPATH_CONTEXT_01_RANGE=1-11\nPROD_CALLPATH_CONTEXT_01_LINE_0001=#!/usr/bin/python3\nPROD_CALLPATH_CONTEXT_01_LINE_0002=from __future__ import annotations\nPROD_CALLPATH_CONTEXT_01_LINE_0003=import hashlib, importlib, os, pathlib, stat, sys\nPROD_CALLPATH_CONTEXT_01_LINE_0004=ACCEPTED=pathlib.Path('/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b')\nPROD_CALLPATH_CONTEXT_01_LINE_0005=EXPECTED={'fresh_lxc_helper.py': 'dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011', 'producer_exec_helper.py': 'b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3', 'lxc_adapter.py': '3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d', 'qemu_adapter.py': '1906db42bd34bbe85eb46fd9797b3572d46e0a41c29d1c29be5f9df5e448f15b', 'scheduler_adapter.py': 'a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96', 'entry504.py': 'ca6876fa9c3b1465b045344a8ad46962de16972c7da...\nPROD_CALLPATH_CONTEXT_01_LINE_0006=def sha(p):\nPROD_CALLPATH_CONTEXT_01_LINE_0007=h=hashlib.sha256()\nPROD_CALLPATH_CONTEXT_01_LINE_0008=with open(p,'rb',buffering=0) as f:\nPROD_CALLPATH_CONTEXT_01_LINE_0009=while True:\nPROD_CALLPATH_CONTEXT_01_LINE_0010=b=f.read(1048576)\nPROD_CALLPATH_CONTEXT_01_LINE_0011=if not b: break\nPROD_CALLPATH_CONTEXT_02_RANGE=20-26\nPROD_CALLPATH_CONTEXT_02_LINE_0020=p=ACCEPTED/name; s=os.lstat(p)\nPROD_CALLPATH_CONTEXT_02_LINE_0021=if not stat.S_ISREG(s.st_mode) or stat.S_ISLNK(s.st_mode) or s.st_uid!=0 or s.st_gid!=0 or stat.S_IMODE(s.st_mode)!=0o400 or sha(p)!=want: raise SystemExit('RELEASE_FILE_IDENTITY_'+name)\nPROD_CALLPATH_CONTEXT_02_LINE_0022=sys.dont_write_bytecode=True\nPROD_CALLPATH_CONTEXT_02_LINE_0023=sys.path.insert(0,str(ACCEPTED))\nPROD_CALLPATH_CONTEXT_02_LINE_0024=e=importlib.import_module('entry504')\nPROD_CALLPATH_CONTEXT_02_LINE_0025=return int(e.main())\nPROD_CALLPATH_CONTEXT_02_LINE_0026=if __name__=='__main__': raise SystemExit(main())\nPROD_RELEVANT_FUNCTION_COUNT=0\nPROD_IMPORT_COUNT=7\nPROD_IMPORT_01_LINE=2\nPROD_IMPORT_01_NAME=__future__.annotations\nPROD_IMPORT_02_LINE=3\nPROD_IMPORT_02_NAME=hashlib\nPROD_IMPORT_03_LINE=3\nPROD_IMPORT_03_NAME=importlib\nPROD_IMPORT_04_LINE=3\nPROD_IMPORT_04_NAME=os\nPROD_IMPORT_05_LINE=3\nPROD_IMPORT_05_NAME=pathlib\nPROD_IMPORT_06_LINE=3\nPROD_IMPORT_06_NAME=stat\nPROD_IMPORT_07_LINE=3\nPROD_IMPORT_07_NAME=sys\nPROD_EXEC_CALL_COUNT=0\nPROD_REFERENCED_PATH_COUNT=1\nPROD_REF_01_PATH=/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b\nPROD_REF_01_EXISTS=True\nPROD_REF_01_IS_FILE=False\nPROD_TRANSPORT_SIGNATURE_COUNT=0\nACCEPTED_TRANSPORT_SIGNATURE_COUNT=34\nACCEPTED_TRANSPORT_SIG_01_LINE=16\nACCEPTED_TRANSPORT_SIG_01_TEXT=OPERATOR_KEY=pathlib.Path('[SENSITIVE_PATH]\nACCEPTED_TRANSPORT_SIG_02_LINE=17\nACCEPTED_TRANSPORT_SIG_02_TEXT=VPS_KNOWN_HOSTS=CONFIG_ROOT/'vps_known_hosts'\nACCEPTED_TRANSPORT_SIG_03_LINE=24\nACCEPTED_TRANSPORT_SIG_03_TEXT=OPERATOR_KEY_FINGERPRINT='SHA256:wipXiBB3cpAwyWap9LcB185WjEEmDxtRJsI/UuMVAp0'\nACCEPTED_TRANSPORT_SIG_04_LINE=413\nACCEPTED_TRANSPORT_SIG_04_TEXT=return run([SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,cmd],input=input,timeout=timeout,check=check)\nACCEPTED_TRANSPORT_SIG_05_LINE=492\nACCEPTED_TRANSPORT_SIG_05_TEXT=cmd=[SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,remote]\nACCEPTED_TRANSPORT_SIG_06_LINE=537\nACCEPTED_TRANSPORT_SIG_06_TEXT=else: run([SCP,'-q','-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node+':'+src,str(local)],timeout=7200)\nACCEPTED_TRANSPORT_SIG_07_LINE=543\nACCEPTED_TRANSPORT_SIG_07_TEXT=def operator_key_fingerprint():\nACCEPTED_TRANSPORT_SIG_08_LINE=544\nACCEPTED_TRANSPORT_SIG_08_TEXT=if not OPERATOR_KEY.is_file() or OPERATOR_KEY.is_symlink(): raise BackupError('OPERATOR_KEY_MISSING')\nACCEPTED_TRANSPORT_SIG_09_LINE=545\nACCEPTED_TRANSPORT_SIG_09_TEXT=p=run(['ssh-keygen','-lf',str(OPERATOR_KEY),'-E','sha256'],timeout=30)\nACCEPTED_TRANSPORT_SIG_10_LINE=548\nACCEPTED_TRANSPORT_SIG_10_TEXT=if not m or m.group(1)!=OPERATOR_KEY_FINGERPRINT: raise BackupError('OPERATOR_KEY_FINGERPRINT_MISMATCH')\nACCEPTED_TRANSPORT_SIG_11_LINE=565\nACCEPTED_TRANSPORT_SIG_11_TEXT=def ensure_vps_known_hosts(targets):\nACCEPTED_TRANSPORT_SIG_12_LINE=570\nACCEPTED_TRANSPORT_SIG_12_TEXT=atomic_write(VPS_KNOWN_HOSTS,('\\n'.join(lines)+'\\n').encode(),0o600)\nACCEPTED_TRANSPORT_SIG_13_LINE=572\nACCEPTED_TRANSPORT_SIG_13_TEXT=def vps_ssh_argv(t, *, use_agent=False):\nACCEPTED_TRANSPORT_SIG_14_LINE=573\nACCEPTED_TRANSPORT_SIG_14_TEXT=a=[SSH,'-p',str(t['port']),'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','-o','UserKnownHostsFile='+str(VPS_KNOWN_HOSTS),'-o','ConnectTimeout=15']\nACCEPTED_TRANSPORT_SIG_15_LINE=575\nACCEPTED_TRANSPORT_SIG_15_TEXT=a += ['-o','IdentitiesOnly=no']\nACCEPTED_TRANSPORT_SIG_16_LINE=577\nACCEPTED_TRANSPORT_SIG_16_TEXT=a += ['-i',str(OPERATOR_KEY),'-o','IdentitiesOnly=yes','-o','IdentityAgent=none']\nACCEPTED_TRANSPORT_SIG_17_LINE=581\nACCEPTED_TRANSPORT_SIG_17_TEXT=def vps_run(t, remote_argv, *, input=None, timeout=300, use_agent=False, check=True):\nACCEPTED_TRANSPORT_SIG_18_LINE=583\nACCEPTED_TRANSPORT_SIG_18_TEXT=return run(vps_ssh_argv(t,use_agent=use_agent)+[remote],input=input,timeout=timeout,check=check)\nACCEPTED_TRANSPORT_SIG_19_LINE=586\nACCEPTED_TRANSPORT_SIG_19_TEXT=operator_key_fingerprint()\nACCEPTED_TRANSPORT_SIG_20_LINE=587\nACCEPTED_TRANSPORT_SIG_20_TEXT=ensure_vps_known_hosts(targets)\nACCEPTED_TRANSPORT_SIG_21_LINE=588\nACCEPTED_TRANSPORT_SIG_21_TEXT=pub=run(['ssh-keygen','-y','-f',str(OPERATOR_KEY)],timeout=30).stdout.strip()+b'\\n'\nACCEPTED_TRANSPORT_SIG_22_LINE=592\nACCEPTED_TRANSPORT_SIG_22_TEXT=probe=vps_run(t,['true'],timeout=30,use_agent=False,check=False)\nACCEPTED_TRANSPORT_SIG_23_LINE=594\nACCEPTED_TRANSPORT_SIG_23_TEXT=results[t['logical_id']]='ALREADY_OPERATOR_KEY'; continue\nACCEPTED_TRANSPORT_SIG_24_LINE=600\nACCEPTED_TRANSPORT_SIG_24_TEXT=vps_run(t,['true'],timeout=30,use_agent=False)\nACCEPTED_TRANSPORT_SIG_25_LINE=604\nACCEPTED_TRANSPORT_SIG_25_TEXT=vps_run(us,['true'],timeout=30,use_agent=False)\nACCEPTED_TRANSPORT_SIG_26_LINE=605\nACCEPTED_TRANSPORT_SIG_26_TEXT=results[us['logical_id']]='ALREADY_US_OPERATOR_KEY'\nACCEPTED_TRANSPORT_SIG_27_LINE=609\nACCEPTED_TRANSPORT_SIG_27_TEXT=p=vps_run(t,['sh','-c',command],timeout=120,use_agent=False)\nACCEPTED_TRANSPORT_SIG_28_LINE=617\nACCEPTED_TRANSPORT_SIG_28_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote]\nACCEPTED_TRANSPORT_SIG_29_LINE=627\nACCEPTED_TRANSPORT_SIG_29_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote]\nACCEPTED_TRANSPORT_SIG_30_LINE=664\nACCEPTED_TRANSPORT_SIG_30_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote]\nACCEPTED_TRANSPORT_SIG_31_LINE=851\nACCEPTED_TRANSPORT_SIG_31_TEXT=if OPERATOR_KEY.exists(): p.append('root/.ssh/id_ed25519_netbird_operator')\nACCEPTED_TRANSPORT_SIG_32_LINE=852\nACCEPTED_TRANSPORT_SIG_32_TEXT=if pathlib.Path(str(OPERATOR_KEY)+'.pub').exists(): p.append('root/.ssh/id_ed25519_netbird_operator.pub')\nACCEPTED_TRANSPORT_SIG_33_LINE=868\nACCEPTED_TRANSPORT_SIG_33_TEXT=pipe_to_zstd([SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,remote],payload,timeout=600)\nACCEPTED_TRANSPORT_SIG_34_LINE=933\nACCEPTED_TRANSPORT_SIG_34_TEXT=print('VPS_OPERATOR_KEY_BOOTSTRAP='+json.dumps(boots,sort_keys=True,separators=(',',':')))\nVPS556R2_DECISION=CURRENT_PROD_ENTRY_DELEGATES_TO_LOCAL_COMPONENT\nVPS556R2_NEXT_GATE=READ_CURRENT_DELEGATED_COMPONENT\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" +} diff --git a/runtime/history/SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2.txt b/runtime/history/SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2.txt new file mode 100644 index 00000000..af40638f --- /dev/null +++ b/runtime/history/SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2.txt @@ -0,0 +1,156 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=infra-pve1-moldova-current-prod-callpath-readonly +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=37ce436636242efdcf203b90c1a92dfa69ada981da23f62e14b4602369702589 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=false +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=0 +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=883672d81581efc0c1d92a09229e4b23c9e7899d7bd8e2f7a4a5a768e0902898 +SANITIZED_OUTPUT_SHA256=0e12c81ca87dc2aca47e61e36d9079f2d2971793fe68f8a3f4c1dae3974247cb +OUTPUT_BEGIN +ERROR_REGISTER_CHECK=OK +REFERENCE_CHECK=OK +AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED +PROD_ENTRY_PRESENT=True +PROD_ENTRY_IS_SYMLINK=False +PROD_ENTRY_RESOLVED=/usr/local/sbin/homelab-backup-v2 +PROD_ENTRY_SIZE=1656 +PROD_ENTRY_SHA256=5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2 +PROD_CALLPATH_MATCH_LINE_COUNT=3 +PROD_CALLPATH_MATCH_LINES=3,4,24 +PROD_CALLPATH_CONTEXT_01_RANGE=1-11 +PROD_CALLPATH_CONTEXT_01_LINE_0001=#!/usr/bin/python3 +PROD_CALLPATH_CONTEXT_01_LINE_0002=from __future__ import annotations +PROD_CALLPATH_CONTEXT_01_LINE_0003=import hashlib, importlib, os, pathlib, stat, sys +PROD_CALLPATH_CONTEXT_01_LINE_0004=ACCEPTED=pathlib.Path('/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b') +PROD_CALLPATH_CONTEXT_01_LINE_0005=EXPECTED={'fresh_lxc_helper.py': 'dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011', 'producer_exec_helper.py': 'b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3', 'lxc_adapter.py': '3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d', 'qemu_adapter.py': '1906db42bd34bbe85eb46fd9797b3572d46e0a41c29d1c29be5f9df5e448f15b', 'scheduler_adapter.py': 'a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96', 'entry504.py': 'ca6876fa9c3b1465b045344a8ad46962de16972c7da... +PROD_CALLPATH_CONTEXT_01_LINE_0006=def sha(p): +PROD_CALLPATH_CONTEXT_01_LINE_0007=h=hashlib.sha256() +PROD_CALLPATH_CONTEXT_01_LINE_0008=with open(p,'rb',buffering=0) as f: +PROD_CALLPATH_CONTEXT_01_LINE_0009=while True: +PROD_CALLPATH_CONTEXT_01_LINE_0010=b=f.read(1048576) +PROD_CALLPATH_CONTEXT_01_LINE_0011=if not b: break +PROD_CALLPATH_CONTEXT_02_RANGE=20-26 +PROD_CALLPATH_CONTEXT_02_LINE_0020=p=ACCEPTED/name; s=os.lstat(p) +PROD_CALLPATH_CONTEXT_02_LINE_0021=if not stat.S_ISREG(s.st_mode) or stat.S_ISLNK(s.st_mode) or s.st_uid!=0 or s.st_gid!=0 or stat.S_IMODE(s.st_mode)!=0o400 or sha(p)!=want: raise SystemExit('RELEASE_FILE_IDENTITY_'+name) +PROD_CALLPATH_CONTEXT_02_LINE_0022=sys.dont_write_bytecode=True +PROD_CALLPATH_CONTEXT_02_LINE_0023=sys.path.insert(0,str(ACCEPTED)) +PROD_CALLPATH_CONTEXT_02_LINE_0024=e=importlib.import_module('entry504') +PROD_CALLPATH_CONTEXT_02_LINE_0025=return int(e.main()) +PROD_CALLPATH_CONTEXT_02_LINE_0026=if __name__=='__main__': raise SystemExit(main()) +PROD_RELEVANT_FUNCTION_COUNT=0 +PROD_IMPORT_COUNT=7 +PROD_IMPORT_01_LINE=2 +PROD_IMPORT_01_NAME=__future__.annotations +PROD_IMPORT_02_LINE=3 +PROD_IMPORT_02_NAME=hashlib +PROD_IMPORT_03_LINE=3 +PROD_IMPORT_03_NAME=importlib +PROD_IMPORT_04_LINE=3 +PROD_IMPORT_04_NAME=os +PROD_IMPORT_05_LINE=3 +PROD_IMPORT_05_NAME=pathlib +PROD_IMPORT_06_LINE=3 +PROD_IMPORT_06_NAME=stat +PROD_IMPORT_07_LINE=3 +PROD_IMPORT_07_NAME=sys +PROD_EXEC_CALL_COUNT=0 +PROD_REFERENCED_PATH_COUNT=1 +PROD_REF_01_PATH=/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b +PROD_REF_01_EXISTS=True +PROD_REF_01_IS_FILE=False +PROD_TRANSPORT_SIGNATURE_COUNT=0 +ACCEPTED_TRANSPORT_SIGNATURE_COUNT=34 +ACCEPTED_TRANSPORT_SIG_01_LINE=16 +ACCEPTED_TRANSPORT_SIG_01_TEXT=OPERATOR_KEY=pathlib.Path('[SENSITIVE_PATH] +ACCEPTED_TRANSPORT_SIG_02_LINE=17 +ACCEPTED_TRANSPORT_SIG_02_TEXT=VPS_KNOWN_HOSTS=CONFIG_ROOT/'vps_known_hosts' +ACCEPTED_TRANSPORT_SIG_03_LINE=24 +ACCEPTED_TRANSPORT_SIG_03_TEXT=OPERATOR_KEY_FINGERPRINT='SHA256:wipXiBB3cpAwyWap9LcB185WjEEmDxtRJsI/UuMVAp0' +ACCEPTED_TRANSPORT_SIG_04_LINE=413 +ACCEPTED_TRANSPORT_SIG_04_TEXT=return run([SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,cmd],input=input,timeout=timeout,check=check) +ACCEPTED_TRANSPORT_SIG_05_LINE=492 +ACCEPTED_TRANSPORT_SIG_05_TEXT=cmd=[SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,remote] +ACCEPTED_TRANSPORT_SIG_06_LINE=537 +ACCEPTED_TRANSPORT_SIG_06_TEXT=else: run([SCP,'-q','-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node+':'+src,str(local)],timeout=7200) +ACCEPTED_TRANSPORT_SIG_07_LINE=543 +ACCEPTED_TRANSPORT_SIG_07_TEXT=def operator_key_fingerprint(): +ACCEPTED_TRANSPORT_SIG_08_LINE=544 +ACCEPTED_TRANSPORT_SIG_08_TEXT=if not OPERATOR_KEY.is_file() or OPERATOR_KEY.is_symlink(): raise BackupError('OPERATOR_KEY_MISSING') +ACCEPTED_TRANSPORT_SIG_09_LINE=545 +ACCEPTED_TRANSPORT_SIG_09_TEXT=p=run(['ssh-keygen','-lf',str(OPERATOR_KEY),'-E','sha256'],timeout=30) +ACCEPTED_TRANSPORT_SIG_10_LINE=548 +ACCEPTED_TRANSPORT_SIG_10_TEXT=if not m or m.group(1)!=OPERATOR_KEY_FINGERPRINT: raise BackupError('OPERATOR_KEY_FINGERPRINT_MISMATCH') +ACCEPTED_TRANSPORT_SIG_11_LINE=565 +ACCEPTED_TRANSPORT_SIG_11_TEXT=def ensure_vps_known_hosts(targets): +ACCEPTED_TRANSPORT_SIG_12_LINE=570 +ACCEPTED_TRANSPORT_SIG_12_TEXT=atomic_write(VPS_KNOWN_HOSTS,('\n'.join(lines)+'\n').encode(),0o600) +ACCEPTED_TRANSPORT_SIG_13_LINE=572 +ACCEPTED_TRANSPORT_SIG_13_TEXT=def vps_ssh_argv(t, *, use_agent=False): +ACCEPTED_TRANSPORT_SIG_14_LINE=573 +ACCEPTED_TRANSPORT_SIG_14_TEXT=a=[SSH,'-p',str(t['port']),'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','-o','UserKnownHostsFile='+str(VPS_KNOWN_HOSTS),'-o','ConnectTimeout=15'] +ACCEPTED_TRANSPORT_SIG_15_LINE=575 +ACCEPTED_TRANSPORT_SIG_15_TEXT=a += ['-o','IdentitiesOnly=no'] +ACCEPTED_TRANSPORT_SIG_16_LINE=577 +ACCEPTED_TRANSPORT_SIG_16_TEXT=a += ['-i',str(OPERATOR_KEY),'-o','IdentitiesOnly=yes','-o','IdentityAgent=none'] +ACCEPTED_TRANSPORT_SIG_17_LINE=581 +ACCEPTED_TRANSPORT_SIG_17_TEXT=def vps_run(t, remote_argv, *, input=None, timeout=300, use_agent=False, check=True): +ACCEPTED_TRANSPORT_SIG_18_LINE=583 +ACCEPTED_TRANSPORT_SIG_18_TEXT=return run(vps_ssh_argv(t,use_agent=use_agent)+[remote],input=input,timeout=timeout,check=check) +ACCEPTED_TRANSPORT_SIG_19_LINE=586 +ACCEPTED_TRANSPORT_SIG_19_TEXT=operator_key_fingerprint() +ACCEPTED_TRANSPORT_SIG_20_LINE=587 +ACCEPTED_TRANSPORT_SIG_20_TEXT=ensure_vps_known_hosts(targets) +ACCEPTED_TRANSPORT_SIG_21_LINE=588 +ACCEPTED_TRANSPORT_SIG_21_TEXT=pub=run(['ssh-keygen','-y','-f',str(OPERATOR_KEY)],timeout=30).stdout.strip()+b'\n' +ACCEPTED_TRANSPORT_SIG_22_LINE=592 +ACCEPTED_TRANSPORT_SIG_22_TEXT=probe=vps_run(t,['true'],timeout=30,use_agent=False,check=False) +ACCEPTED_TRANSPORT_SIG_23_LINE=594 +ACCEPTED_TRANSPORT_SIG_23_TEXT=results[t['logical_id']]='ALREADY_OPERATOR_KEY'; continue +ACCEPTED_TRANSPORT_SIG_24_LINE=600 +ACCEPTED_TRANSPORT_SIG_24_TEXT=vps_run(t,['true'],timeout=30,use_agent=False) +ACCEPTED_TRANSPORT_SIG_25_LINE=604 +ACCEPTED_TRANSPORT_SIG_25_TEXT=vps_run(us,['true'],timeout=30,use_agent=False) +ACCEPTED_TRANSPORT_SIG_26_LINE=605 +ACCEPTED_TRANSPORT_SIG_26_TEXT=results[us['logical_id']]='ALREADY_US_OPERATOR_KEY' +ACCEPTED_TRANSPORT_SIG_27_LINE=609 +ACCEPTED_TRANSPORT_SIG_27_TEXT=p=vps_run(t,['sh','-c',command],timeout=120,use_agent=False) +ACCEPTED_TRANSPORT_SIG_28_LINE=617 +ACCEPTED_TRANSPORT_SIG_28_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote] +ACCEPTED_TRANSPORT_SIG_29_LINE=627 +ACCEPTED_TRANSPORT_SIG_29_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote] +ACCEPTED_TRANSPORT_SIG_30_LINE=664 +ACCEPTED_TRANSPORT_SIG_30_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote] +ACCEPTED_TRANSPORT_SIG_31_LINE=851 +ACCEPTED_TRANSPORT_SIG_31_TEXT=if OPERATOR_KEY.exists(): p.append('root/.ssh/id_ed25519_netbird_operator') +ACCEPTED_TRANSPORT_SIG_32_LINE=852 +ACCEPTED_TRANSPORT_SIG_32_TEXT=if pathlib.Path(str(OPERATOR_KEY)+'.pub').exists(): p.append('root/.ssh/id_ed25519_netbird_operator.pub') +ACCEPTED_TRANSPORT_SIG_33_LINE=868 +ACCEPTED_TRANSPORT_SIG_33_TEXT=pipe_to_zstd([SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,remote],payload,timeout=600) +ACCEPTED_TRANSPORT_SIG_34_LINE=933 +ACCEPTED_TRANSPORT_SIG_34_TEXT=print('VPS_OPERATOR_KEY_BOOTSTRAP='+json.dumps(boots,sort_keys=True,separators=(',',':'))) +VPS556R2_DECISION=CURRENT_PROD_ENTRY_DELEGATES_TO_LOCAL_COMPONENT +VPS556R2_NEXT_GATE=READ_CURRENT_DELEGATED_COMPONENT +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index c6bc67d2..3ab5a4b4 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,38 +1,38 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-101", - "status": "FAIL", - "rc": 3, + "command_id": "SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2", + "status": "OK", + "rc": 0, "host": "pve01", - "mode": "change", - "component": "newfi-newfdom-articles205-pack1-two-articles-explicit-moderated-review", - "started_at_utc": "2026-09-18T21:04:22Z", - "finished_at_utc": "2026-09-18T21:04:49Z", + "mode": "read-only", + "component": "infra-pve1-moldova-current-prod-callpath-readonly", + "started_at_utc": "2026-09-18T21:05:06Z", + "finished_at_utc": "2026-09-18T21:05:06Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "8b3a6e6de46089b883204f3a65b6a9486e5c2ec40c18bcb95c92edddb7fb03af", + "command_sha256": "37ce436636242efdcf203b90c1a92dfa69ada981da23f62e14b4602369702589", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, - "change_declared": true, + "change_declared": false, "result_contract_valid": true, - "result_contract_status": "FAIL", + "result_contract_status": null, "result_contract_error": null, - "command_rc": 3, - "changes_made": true, - "rollback_started": true, - "rollback_restored": true, - "mutation_outcome": "ROLLED_BACK", + "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": "17e0dfa85ff201fc8ba95a57fb0093810bf911bc445983effe77d3d879a76ce9", - "sanitized_output_sha256": "17e0dfa85ff201fc8ba95a57fb0093810bf911bc445983effe77d3d879a76ce9", + "raw_evidence_sha256": "883672d81581efc0c1d92a09229e4b23c9e7899d7bd8e2f7a4a5a768e0902898", + "sanitized_output_sha256": "0e12c81ca87dc2aca47e61e36d9079f2d2971793fe68f8a3f4c1dae3974247cb", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "NEWFI101_BEGIN\nCOMMAND_ID=NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-101\nNEWFI101_PREMUTATION_CONTRACT={\"class\": \"XFRM\\\\Service\\\\ResourceItem\\\\Create\", \"getResource\": true, \"getTagChanger\": false, \"save\": true, \"setContent\": true, \"versionProperty\": true}\nNEWFI101_BACKUPS_2OF2=PASS\nNEWFI101_STAGING_REVIEW=PASS\nNEWFI101_STAGING_PUBLISH=PASS\nNEWFI101_STAGING_ROLLBACK=PASS\nNEWFI101_STAGING_REAPPLY=PASS\nNEWFI101_PRODUCTION=PASS\nNEWFI101_SAFE_REPORT={\"changes_made\": true, \"decision\": \"FAIL_ARTICLES205_PACK1_HOLD\", \"error\": \"RuntimeError:HTTP\", \"rollback_restored\": true, \"rollback_started\": true}\nHOMELAB_RESULT_CONTRACT={\"version\": 1, \"command_id\": \"NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-101\", \"status\": \"FAIL\", \"changes_made\": true, \"rollback_started\": true, \"rollback_restored\": true}\n" + "output": "ERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nPROD_ENTRY_PRESENT=True\nPROD_ENTRY_IS_SYMLINK=False\nPROD_ENTRY_RESOLVED=/usr/local/sbin/homelab-backup-v2\nPROD_ENTRY_SIZE=1656\nPROD_ENTRY_SHA256=5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2\nPROD_CALLPATH_MATCH_LINE_COUNT=3\nPROD_CALLPATH_MATCH_LINES=3,4,24\nPROD_CALLPATH_CONTEXT_01_RANGE=1-11\nPROD_CALLPATH_CONTEXT_01_LINE_0001=#!/usr/bin/python3\nPROD_CALLPATH_CONTEXT_01_LINE_0002=from __future__ import annotations\nPROD_CALLPATH_CONTEXT_01_LINE_0003=import hashlib, importlib, os, pathlib, stat, sys\nPROD_CALLPATH_CONTEXT_01_LINE_0004=ACCEPTED=pathlib.Path('/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b')\nPROD_CALLPATH_CONTEXT_01_LINE_0005=EXPECTED={'fresh_lxc_helper.py': 'dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011', 'producer_exec_helper.py': 'b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3', 'lxc_adapter.py': '3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d', 'qemu_adapter.py': '1906db42bd34bbe85eb46fd9797b3572d46e0a41c29d1c29be5f9df5e448f15b', 'scheduler_adapter.py': 'a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96', 'entry504.py': 'ca6876fa9c3b1465b045344a8ad46962de16972c7da...\nPROD_CALLPATH_CONTEXT_01_LINE_0006=def sha(p):\nPROD_CALLPATH_CONTEXT_01_LINE_0007=h=hashlib.sha256()\nPROD_CALLPATH_CONTEXT_01_LINE_0008=with open(p,'rb',buffering=0) as f:\nPROD_CALLPATH_CONTEXT_01_LINE_0009=while True:\nPROD_CALLPATH_CONTEXT_01_LINE_0010=b=f.read(1048576)\nPROD_CALLPATH_CONTEXT_01_LINE_0011=if not b: break\nPROD_CALLPATH_CONTEXT_02_RANGE=20-26\nPROD_CALLPATH_CONTEXT_02_LINE_0020=p=ACCEPTED/name; s=os.lstat(p)\nPROD_CALLPATH_CONTEXT_02_LINE_0021=if not stat.S_ISREG(s.st_mode) or stat.S_ISLNK(s.st_mode) or s.st_uid!=0 or s.st_gid!=0 or stat.S_IMODE(s.st_mode)!=0o400 or sha(p)!=want: raise SystemExit('RELEASE_FILE_IDENTITY_'+name)\nPROD_CALLPATH_CONTEXT_02_LINE_0022=sys.dont_write_bytecode=True\nPROD_CALLPATH_CONTEXT_02_LINE_0023=sys.path.insert(0,str(ACCEPTED))\nPROD_CALLPATH_CONTEXT_02_LINE_0024=e=importlib.import_module('entry504')\nPROD_CALLPATH_CONTEXT_02_LINE_0025=return int(e.main())\nPROD_CALLPATH_CONTEXT_02_LINE_0026=if __name__=='__main__': raise SystemExit(main())\nPROD_RELEVANT_FUNCTION_COUNT=0\nPROD_IMPORT_COUNT=7\nPROD_IMPORT_01_LINE=2\nPROD_IMPORT_01_NAME=__future__.annotations\nPROD_IMPORT_02_LINE=3\nPROD_IMPORT_02_NAME=hashlib\nPROD_IMPORT_03_LINE=3\nPROD_IMPORT_03_NAME=importlib\nPROD_IMPORT_04_LINE=3\nPROD_IMPORT_04_NAME=os\nPROD_IMPORT_05_LINE=3\nPROD_IMPORT_05_NAME=pathlib\nPROD_IMPORT_06_LINE=3\nPROD_IMPORT_06_NAME=stat\nPROD_IMPORT_07_LINE=3\nPROD_IMPORT_07_NAME=sys\nPROD_EXEC_CALL_COUNT=0\nPROD_REFERENCED_PATH_COUNT=1\nPROD_REF_01_PATH=/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b\nPROD_REF_01_EXISTS=True\nPROD_REF_01_IS_FILE=False\nPROD_TRANSPORT_SIGNATURE_COUNT=0\nACCEPTED_TRANSPORT_SIGNATURE_COUNT=34\nACCEPTED_TRANSPORT_SIG_01_LINE=16\nACCEPTED_TRANSPORT_SIG_01_TEXT=OPERATOR_KEY=pathlib.Path('[SENSITIVE_PATH]\nACCEPTED_TRANSPORT_SIG_02_LINE=17\nACCEPTED_TRANSPORT_SIG_02_TEXT=VPS_KNOWN_HOSTS=CONFIG_ROOT/'vps_known_hosts'\nACCEPTED_TRANSPORT_SIG_03_LINE=24\nACCEPTED_TRANSPORT_SIG_03_TEXT=OPERATOR_KEY_FINGERPRINT='SHA256:wipXiBB3cpAwyWap9LcB185WjEEmDxtRJsI/UuMVAp0'\nACCEPTED_TRANSPORT_SIG_04_LINE=413\nACCEPTED_TRANSPORT_SIG_04_TEXT=return run([SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,cmd],input=input,timeout=timeout,check=check)\nACCEPTED_TRANSPORT_SIG_05_LINE=492\nACCEPTED_TRANSPORT_SIG_05_TEXT=cmd=[SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,remote]\nACCEPTED_TRANSPORT_SIG_06_LINE=537\nACCEPTED_TRANSPORT_SIG_06_TEXT=else: run([SCP,'-q','-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node+':'+src,str(local)],timeout=7200)\nACCEPTED_TRANSPORT_SIG_07_LINE=543\nACCEPTED_TRANSPORT_SIG_07_TEXT=def operator_key_fingerprint():\nACCEPTED_TRANSPORT_SIG_08_LINE=544\nACCEPTED_TRANSPORT_SIG_08_TEXT=if not OPERATOR_KEY.is_file() or OPERATOR_KEY.is_symlink(): raise BackupError('OPERATOR_KEY_MISSING')\nACCEPTED_TRANSPORT_SIG_09_LINE=545\nACCEPTED_TRANSPORT_SIG_09_TEXT=p=run(['ssh-keygen','-lf',str(OPERATOR_KEY),'-E','sha256'],timeout=30)\nACCEPTED_TRANSPORT_SIG_10_LINE=548\nACCEPTED_TRANSPORT_SIG_10_TEXT=if not m or m.group(1)!=OPERATOR_KEY_FINGERPRINT: raise BackupError('OPERATOR_KEY_FINGERPRINT_MISMATCH')\nACCEPTED_TRANSPORT_SIG_11_LINE=565\nACCEPTED_TRANSPORT_SIG_11_TEXT=def ensure_vps_known_hosts(targets):\nACCEPTED_TRANSPORT_SIG_12_LINE=570\nACCEPTED_TRANSPORT_SIG_12_TEXT=atomic_write(VPS_KNOWN_HOSTS,('\\n'.join(lines)+'\\n').encode(),0o600)\nACCEPTED_TRANSPORT_SIG_13_LINE=572\nACCEPTED_TRANSPORT_SIG_13_TEXT=def vps_ssh_argv(t, *, use_agent=False):\nACCEPTED_TRANSPORT_SIG_14_LINE=573\nACCEPTED_TRANSPORT_SIG_14_TEXT=a=[SSH,'-p',str(t['port']),'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','-o','UserKnownHostsFile='+str(VPS_KNOWN_HOSTS),'-o','ConnectTimeout=15']\nACCEPTED_TRANSPORT_SIG_15_LINE=575\nACCEPTED_TRANSPORT_SIG_15_TEXT=a += ['-o','IdentitiesOnly=no']\nACCEPTED_TRANSPORT_SIG_16_LINE=577\nACCEPTED_TRANSPORT_SIG_16_TEXT=a += ['-i',str(OPERATOR_KEY),'-o','IdentitiesOnly=yes','-o','IdentityAgent=none']\nACCEPTED_TRANSPORT_SIG_17_LINE=581\nACCEPTED_TRANSPORT_SIG_17_TEXT=def vps_run(t, remote_argv, *, input=None, timeout=300, use_agent=False, check=True):\nACCEPTED_TRANSPORT_SIG_18_LINE=583\nACCEPTED_TRANSPORT_SIG_18_TEXT=return run(vps_ssh_argv(t,use_agent=use_agent)+[remote],input=input,timeout=timeout,check=check)\nACCEPTED_TRANSPORT_SIG_19_LINE=586\nACCEPTED_TRANSPORT_SIG_19_TEXT=operator_key_fingerprint()\nACCEPTED_TRANSPORT_SIG_20_LINE=587\nACCEPTED_TRANSPORT_SIG_20_TEXT=ensure_vps_known_hosts(targets)\nACCEPTED_TRANSPORT_SIG_21_LINE=588\nACCEPTED_TRANSPORT_SIG_21_TEXT=pub=run(['ssh-keygen','-y','-f',str(OPERATOR_KEY)],timeout=30).stdout.strip()+b'\\n'\nACCEPTED_TRANSPORT_SIG_22_LINE=592\nACCEPTED_TRANSPORT_SIG_22_TEXT=probe=vps_run(t,['true'],timeout=30,use_agent=False,check=False)\nACCEPTED_TRANSPORT_SIG_23_LINE=594\nACCEPTED_TRANSPORT_SIG_23_TEXT=results[t['logical_id']]='ALREADY_OPERATOR_KEY'; continue\nACCEPTED_TRANSPORT_SIG_24_LINE=600\nACCEPTED_TRANSPORT_SIG_24_TEXT=vps_run(t,['true'],timeout=30,use_agent=False)\nACCEPTED_TRANSPORT_SIG_25_LINE=604\nACCEPTED_TRANSPORT_SIG_25_TEXT=vps_run(us,['true'],timeout=30,use_agent=False)\nACCEPTED_TRANSPORT_SIG_26_LINE=605\nACCEPTED_TRANSPORT_SIG_26_TEXT=results[us['logical_id']]='ALREADY_US_OPERATOR_KEY'\nACCEPTED_TRANSPORT_SIG_27_LINE=609\nACCEPTED_TRANSPORT_SIG_27_TEXT=p=vps_run(t,['sh','-c',command],timeout=120,use_agent=False)\nACCEPTED_TRANSPORT_SIG_28_LINE=617\nACCEPTED_TRANSPORT_SIG_28_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote]\nACCEPTED_TRANSPORT_SIG_29_LINE=627\nACCEPTED_TRANSPORT_SIG_29_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote]\nACCEPTED_TRANSPORT_SIG_30_LINE=664\nACCEPTED_TRANSPORT_SIG_30_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote]\nACCEPTED_TRANSPORT_SIG_31_LINE=851\nACCEPTED_TRANSPORT_SIG_31_TEXT=if OPERATOR_KEY.exists(): p.append('root/.ssh/id_ed25519_netbird_operator')\nACCEPTED_TRANSPORT_SIG_32_LINE=852\nACCEPTED_TRANSPORT_SIG_32_TEXT=if pathlib.Path(str(OPERATOR_KEY)+'.pub').exists(): p.append('root/.ssh/id_ed25519_netbird_operator.pub')\nACCEPTED_TRANSPORT_SIG_33_LINE=868\nACCEPTED_TRANSPORT_SIG_33_TEXT=pipe_to_zstd([SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,remote],payload,timeout=600)\nACCEPTED_TRANSPORT_SIG_34_LINE=933\nACCEPTED_TRANSPORT_SIG_34_TEXT=print('VPS_OPERATOR_KEY_BOOTSTRAP='+json.dumps(boots,sort_keys=True,separators=(',',':')))\nVPS556R2_DECISION=CURRENT_PROD_ENTRY_DELEGATES_TO_LOCAL_COMPONENT\nVPS556R2_NEXT_GATE=READ_CURRENT_DELEGATED_COMPONENT\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 4a0b65f6..af40638f 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,43 +1,156 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-101 -STATUS=FAIL -RC=3 +COMMAND_ID=SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2 +STATUS=OK +RC=0 HOST=pve01 -MODE=change -COMPONENT=newfi-newfdom-articles205-pack1-two-articles-explicit-moderated-review +MODE=read-only +COMPONENT=infra-pve1-moldova-current-prod-callpath-readonly REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=8b3a6e6de46089b883204f3a65b6a9486e5c2ec40c18bcb95c92edddb7fb03af +COMMAND_SHA256=37ce436636242efdcf203b90c1a92dfa69ada981da23f62e14b4602369702589 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true -CHANGE_DECLARED=true +CHANGE_DECLARED=false RESULT_CONTRACT_VALID=true -RESULT_CONTRACT_STATUS=FAIL +RESULT_CONTRACT_STATUS=NOT_APPLICABLE RESULT_CONTRACT_ERROR=NONE -COMMAND_RC=3 -CHANGES_MADE=true -ROLLBACK_STARTED=true -ROLLBACK_RESTORED=true -MUTATION_OUTCOME=ROLLED_BACK +COMMAND_RC=0 +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=17e0dfa85ff201fc8ba95a57fb0093810bf911bc445983effe77d3d879a76ce9 -SANITIZED_OUTPUT_SHA256=17e0dfa85ff201fc8ba95a57fb0093810bf911bc445983effe77d3d879a76ce9 +RAW_EVIDENCE_SHA256=883672d81581efc0c1d92a09229e4b23c9e7899d7bd8e2f7a4a5a768e0902898 +SANITIZED_OUTPUT_SHA256=0e12c81ca87dc2aca47e61e36d9079f2d2971793fe68f8a3f4c1dae3974247cb OUTPUT_BEGIN -NEWFI101_BEGIN -COMMAND_ID=NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-101 -NEWFI101_PREMUTATION_CONTRACT={"class": "XFRM\\Service\\ResourceItem\\Create", "getResource": true, "getTagChanger": false, "save": true, "setContent": true, "versionProperty": true} -NEWFI101_BACKUPS_2OF2=PASS -NEWFI101_STAGING_REVIEW=PASS -NEWFI101_STAGING_PUBLISH=PASS -NEWFI101_STAGING_ROLLBACK=PASS -NEWFI101_STAGING_REAPPLY=PASS -NEWFI101_PRODUCTION=PASS -NEWFI101_SAFE_REPORT={"changes_made": true, "decision": "FAIL_ARTICLES205_PACK1_HOLD", "error": "RuntimeError:HTTP", "rollback_restored": true, "rollback_started": true} -HOMELAB_RESULT_CONTRACT={"version": 1, "command_id": "NEWFI-260918-NEWFDOM-ARTICLES205-PACK1-101", "status": "FAIL", "changes_made": true, "rollback_started": true, "rollback_restored": true} +ERROR_REGISTER_CHECK=OK +REFERENCE_CHECK=OK +AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED +PROD_ENTRY_PRESENT=True +PROD_ENTRY_IS_SYMLINK=False +PROD_ENTRY_RESOLVED=/usr/local/sbin/homelab-backup-v2 +PROD_ENTRY_SIZE=1656 +PROD_ENTRY_SHA256=5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2 +PROD_CALLPATH_MATCH_LINE_COUNT=3 +PROD_CALLPATH_MATCH_LINES=3,4,24 +PROD_CALLPATH_CONTEXT_01_RANGE=1-11 +PROD_CALLPATH_CONTEXT_01_LINE_0001=#!/usr/bin/python3 +PROD_CALLPATH_CONTEXT_01_LINE_0002=from __future__ import annotations +PROD_CALLPATH_CONTEXT_01_LINE_0003=import hashlib, importlib, os, pathlib, stat, sys +PROD_CALLPATH_CONTEXT_01_LINE_0004=ACCEPTED=pathlib.Path('/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b') +PROD_CALLPATH_CONTEXT_01_LINE_0005=EXPECTED={'fresh_lxc_helper.py': 'dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011', 'producer_exec_helper.py': 'b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3', 'lxc_adapter.py': '3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d', 'qemu_adapter.py': '1906db42bd34bbe85eb46fd9797b3572d46e0a41c29d1c29be5f9df5e448f15b', 'scheduler_adapter.py': 'a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96', 'entry504.py': 'ca6876fa9c3b1465b045344a8ad46962de16972c7da... +PROD_CALLPATH_CONTEXT_01_LINE_0006=def sha(p): +PROD_CALLPATH_CONTEXT_01_LINE_0007=h=hashlib.sha256() +PROD_CALLPATH_CONTEXT_01_LINE_0008=with open(p,'rb',buffering=0) as f: +PROD_CALLPATH_CONTEXT_01_LINE_0009=while True: +PROD_CALLPATH_CONTEXT_01_LINE_0010=b=f.read(1048576) +PROD_CALLPATH_CONTEXT_01_LINE_0011=if not b: break +PROD_CALLPATH_CONTEXT_02_RANGE=20-26 +PROD_CALLPATH_CONTEXT_02_LINE_0020=p=ACCEPTED/name; s=os.lstat(p) +PROD_CALLPATH_CONTEXT_02_LINE_0021=if not stat.S_ISREG(s.st_mode) or stat.S_ISLNK(s.st_mode) or s.st_uid!=0 or s.st_gid!=0 or stat.S_IMODE(s.st_mode)!=0o400 or sha(p)!=want: raise SystemExit('RELEASE_FILE_IDENTITY_'+name) +PROD_CALLPATH_CONTEXT_02_LINE_0022=sys.dont_write_bytecode=True +PROD_CALLPATH_CONTEXT_02_LINE_0023=sys.path.insert(0,str(ACCEPTED)) +PROD_CALLPATH_CONTEXT_02_LINE_0024=e=importlib.import_module('entry504') +PROD_CALLPATH_CONTEXT_02_LINE_0025=return int(e.main()) +PROD_CALLPATH_CONTEXT_02_LINE_0026=if __name__=='__main__': raise SystemExit(main()) +PROD_RELEVANT_FUNCTION_COUNT=0 +PROD_IMPORT_COUNT=7 +PROD_IMPORT_01_LINE=2 +PROD_IMPORT_01_NAME=__future__.annotations +PROD_IMPORT_02_LINE=3 +PROD_IMPORT_02_NAME=hashlib +PROD_IMPORT_03_LINE=3 +PROD_IMPORT_03_NAME=importlib +PROD_IMPORT_04_LINE=3 +PROD_IMPORT_04_NAME=os +PROD_IMPORT_05_LINE=3 +PROD_IMPORT_05_NAME=pathlib +PROD_IMPORT_06_LINE=3 +PROD_IMPORT_06_NAME=stat +PROD_IMPORT_07_LINE=3 +PROD_IMPORT_07_NAME=sys +PROD_EXEC_CALL_COUNT=0 +PROD_REFERENCED_PATH_COUNT=1 +PROD_REF_01_PATH=/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b +PROD_REF_01_EXISTS=True +PROD_REF_01_IS_FILE=False +PROD_TRANSPORT_SIGNATURE_COUNT=0 +ACCEPTED_TRANSPORT_SIGNATURE_COUNT=34 +ACCEPTED_TRANSPORT_SIG_01_LINE=16 +ACCEPTED_TRANSPORT_SIG_01_TEXT=OPERATOR_KEY=pathlib.Path('[SENSITIVE_PATH] +ACCEPTED_TRANSPORT_SIG_02_LINE=17 +ACCEPTED_TRANSPORT_SIG_02_TEXT=VPS_KNOWN_HOSTS=CONFIG_ROOT/'vps_known_hosts' +ACCEPTED_TRANSPORT_SIG_03_LINE=24 +ACCEPTED_TRANSPORT_SIG_03_TEXT=OPERATOR_KEY_FINGERPRINT='SHA256:wipXiBB3cpAwyWap9LcB185WjEEmDxtRJsI/UuMVAp0' +ACCEPTED_TRANSPORT_SIG_04_LINE=413 +ACCEPTED_TRANSPORT_SIG_04_TEXT=return run([SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,cmd],input=input,timeout=timeout,check=check) +ACCEPTED_TRANSPORT_SIG_05_LINE=492 +ACCEPTED_TRANSPORT_SIG_05_TEXT=cmd=[SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,remote] +ACCEPTED_TRANSPORT_SIG_06_LINE=537 +ACCEPTED_TRANSPORT_SIG_06_TEXT=else: run([SCP,'-q','-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node+':'+src,str(local)],timeout=7200) +ACCEPTED_TRANSPORT_SIG_07_LINE=543 +ACCEPTED_TRANSPORT_SIG_07_TEXT=def operator_key_fingerprint(): +ACCEPTED_TRANSPORT_SIG_08_LINE=544 +ACCEPTED_TRANSPORT_SIG_08_TEXT=if not OPERATOR_KEY.is_file() or OPERATOR_KEY.is_symlink(): raise BackupError('OPERATOR_KEY_MISSING') +ACCEPTED_TRANSPORT_SIG_09_LINE=545 +ACCEPTED_TRANSPORT_SIG_09_TEXT=p=run(['ssh-keygen','-lf',str(OPERATOR_KEY),'-E','sha256'],timeout=30) +ACCEPTED_TRANSPORT_SIG_10_LINE=548 +ACCEPTED_TRANSPORT_SIG_10_TEXT=if not m or m.group(1)!=OPERATOR_KEY_FINGERPRINT: raise BackupError('OPERATOR_KEY_FINGERPRINT_MISMATCH') +ACCEPTED_TRANSPORT_SIG_11_LINE=565 +ACCEPTED_TRANSPORT_SIG_11_TEXT=def ensure_vps_known_hosts(targets): +ACCEPTED_TRANSPORT_SIG_12_LINE=570 +ACCEPTED_TRANSPORT_SIG_12_TEXT=atomic_write(VPS_KNOWN_HOSTS,('\n'.join(lines)+'\n').encode(),0o600) +ACCEPTED_TRANSPORT_SIG_13_LINE=572 +ACCEPTED_TRANSPORT_SIG_13_TEXT=def vps_ssh_argv(t, *, use_agent=False): +ACCEPTED_TRANSPORT_SIG_14_LINE=573 +ACCEPTED_TRANSPORT_SIG_14_TEXT=a=[SSH,'-p',str(t['port']),'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','-o','UserKnownHostsFile='+str(VPS_KNOWN_HOSTS),'-o','ConnectTimeout=15'] +ACCEPTED_TRANSPORT_SIG_15_LINE=575 +ACCEPTED_TRANSPORT_SIG_15_TEXT=a += ['-o','IdentitiesOnly=no'] +ACCEPTED_TRANSPORT_SIG_16_LINE=577 +ACCEPTED_TRANSPORT_SIG_16_TEXT=a += ['-i',str(OPERATOR_KEY),'-o','IdentitiesOnly=yes','-o','IdentityAgent=none'] +ACCEPTED_TRANSPORT_SIG_17_LINE=581 +ACCEPTED_TRANSPORT_SIG_17_TEXT=def vps_run(t, remote_argv, *, input=None, timeout=300, use_agent=False, check=True): +ACCEPTED_TRANSPORT_SIG_18_LINE=583 +ACCEPTED_TRANSPORT_SIG_18_TEXT=return run(vps_ssh_argv(t,use_agent=use_agent)+[remote],input=input,timeout=timeout,check=check) +ACCEPTED_TRANSPORT_SIG_19_LINE=586 +ACCEPTED_TRANSPORT_SIG_19_TEXT=operator_key_fingerprint() +ACCEPTED_TRANSPORT_SIG_20_LINE=587 +ACCEPTED_TRANSPORT_SIG_20_TEXT=ensure_vps_known_hosts(targets) +ACCEPTED_TRANSPORT_SIG_21_LINE=588 +ACCEPTED_TRANSPORT_SIG_21_TEXT=pub=run(['ssh-keygen','-y','-f',str(OPERATOR_KEY)],timeout=30).stdout.strip()+b'\n' +ACCEPTED_TRANSPORT_SIG_22_LINE=592 +ACCEPTED_TRANSPORT_SIG_22_TEXT=probe=vps_run(t,['true'],timeout=30,use_agent=False,check=False) +ACCEPTED_TRANSPORT_SIG_23_LINE=594 +ACCEPTED_TRANSPORT_SIG_23_TEXT=results[t['logical_id']]='ALREADY_OPERATOR_KEY'; continue +ACCEPTED_TRANSPORT_SIG_24_LINE=600 +ACCEPTED_TRANSPORT_SIG_24_TEXT=vps_run(t,['true'],timeout=30,use_agent=False) +ACCEPTED_TRANSPORT_SIG_25_LINE=604 +ACCEPTED_TRANSPORT_SIG_25_TEXT=vps_run(us,['true'],timeout=30,use_agent=False) +ACCEPTED_TRANSPORT_SIG_26_LINE=605 +ACCEPTED_TRANSPORT_SIG_26_TEXT=results[us['logical_id']]='ALREADY_US_OPERATOR_KEY' +ACCEPTED_TRANSPORT_SIG_27_LINE=609 +ACCEPTED_TRANSPORT_SIG_27_TEXT=p=vps_run(t,['sh','-c',command],timeout=120,use_agent=False) +ACCEPTED_TRANSPORT_SIG_28_LINE=617 +ACCEPTED_TRANSPORT_SIG_28_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote] +ACCEPTED_TRANSPORT_SIG_29_LINE=627 +ACCEPTED_TRANSPORT_SIG_29_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote] +ACCEPTED_TRANSPORT_SIG_30_LINE=664 +ACCEPTED_TRANSPORT_SIG_30_TEXT=argv=vps_ssh_argv(t,use_agent=False)+[remote] +ACCEPTED_TRANSPORT_SIG_31_LINE=851 +ACCEPTED_TRANSPORT_SIG_31_TEXT=if OPERATOR_KEY.exists(): p.append('root/.ssh/id_ed25519_netbird_operator') +ACCEPTED_TRANSPORT_SIG_32_LINE=852 +ACCEPTED_TRANSPORT_SIG_32_TEXT=if pathlib.Path(str(OPERATOR_KEY)+'.pub').exists(): p.append('root/.ssh/id_ed25519_netbird_operator.pub') +ACCEPTED_TRANSPORT_SIG_33_LINE=868 +ACCEPTED_TRANSPORT_SIG_33_TEXT=pipe_to_zstd([SSH,'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','root@'+node,remote],payload,timeout=600) +ACCEPTED_TRANSPORT_SIG_34_LINE=933 +ACCEPTED_TRANSPORT_SIG_34_TEXT=print('VPS_OPERATOR_KEY_BOOTSTRAP='+json.dumps(boots,sort_keys=True,separators=(',',':'))) +VPS556R2_DECISION=CURRENT_PROD_ENTRY_DELEGATES_TO_LOCAL_COMPONENT +VPS556R2_NEXT_GATE=READ_CURRENT_DELEGATED_COMPONENT +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260918-INFRA-PVE1-MOLDOVA-CURRENT-PROD-CALLPATH-READONLY-556R2","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} OUTPUT_END CHAT_OUTPUT_END