From 46e58fe8e9e740f3642ce835f5b719593ccaca13 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Tue, 6 Oct 2026 05:32:23 +0000 Subject: [PATCH] runtime: publish SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1 --- ...ETIRE-SEMANTICS-REGISTRY-GATE-99676R1.json | 38 +++ ...RETIRE-SEMANTICS-REGISTRY-GATE-99676R1.txt | 179 ++++++++++++ runtime/latest.json | 22 +- runtime/latest.txt | 265 ++++++++++-------- 4 files changed, 377 insertions(+), 127 deletions(-) create mode 100644 runtime/history/SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1.json create mode 100644 runtime/history/SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1.txt diff --git a/runtime/history/SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1.json b/runtime/history/SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1.json new file mode 100644 index 00000000..09eb8262 --- /dev/null +++ b/runtime/history/SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "pve01-retire-semantics-registry-gate", + "started_at_utc": "2026-10-06T05:32:20Z", + "finished_at_utc": "2026-10-06T05:32:23Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "39cd0243421eb84a2059aafc51dc3b575cf2bbd48c8dc76324424f23ef2a583f", + "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": "0ac00915b9eab03d365b10ab041e032247fe42f639aa6fac8a31e8e322743a74", + "sanitized_output_sha256": "0ac00915b9eab03d365b10ab041e032247fe42f639aa6fac8a31e8e322743a74", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "PVE01_RETIRE_SEMANTICS_REGISTRY_GATE=V1\nMODE=read-only\nNO_REBOOT=true\nNO_APT_UPDATE=true\nNO_PACKAGE_MUTATION=true\nNO_SERVICE_START_STOP_RESTART=true\nNO_RESET_FAILED=true\nNO_CONFIG_WRITE=true\nNO_FILE_DELETE=true\nNO_GUEST_MUTATION=true\nNO_BACKUP_EXECUTION=true\nNO_NETWORK_MUTATION=true\nNODE_HOSTNAME=pve01\nNODE_KERNEL=7.0.12-1-pve\nUNIFIED_SHA=21b1d1cc675e0472f05234f3cc160a43f603427a7ae6a511040ef7fb38722e5d\nV2_SHA=89769a5564a8c208ac64a9edbcfa0942d516ec9c9c362595dd0120f091800989\nHELPER_SHA=c681c44be7557d192d7b453b67e31164237874596168f1d4c78e1e926e2e9cb4\nROLLBACK_UNIFIED_SHA=2f526330152d49461ff66f50adab57d1a195ea5d1b4c292945d523411b8a68a8\nUNIFIED_TARGET_COUNT_NOW=20\nUNIFIED_TARGET_COUNT_PRE99670=21\nREC|UNIFIED_LIFECYCLE_COUNT|ACTIVE|15\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm110|KIND=VM|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm111|KIND=VM|OWNER=pve02\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm112|KIND=VM|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm113|KIND=VM|OWNER=pve02\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm130|KIND=VM|OWNER=pve03\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm150|KIND=VM|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm170|KIND=VM|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm171|KIND=VM|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm190|KIND=VM|OWNER=pve03\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm9130|KIND=VM|OWNER=pve02\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-filebrowser|KIND=APP|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-skladchik-reports-monitor|KIND=APP|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-immich|KIND=APP|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-hbarhub|KIND=APP|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=control-bootstrap-v2|KIND=CONTROL|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_COUNT|RETIRED_PRESERVE|5\nREC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=app-memos|KIND=APP|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=app-skladchik-moderator-assistant|KIND=APP|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=vm180|KIND=VM|OWNER=pve02\nREC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=vm200|KIND=VM|OWNER=pve03\nREC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=app-scrutiny|KIND=APP|OWNER=pve01\nUNIFIED_VM160_COUNT_NOW=0\nUNIFIED_VM160_COUNT_PRE99670=1\nREC|UNIFIED_VM160_PRE|KEYS=id,kind,lifecycle,logical_id,owner\nREC|UNIFIED_VM160_PRE|KIND=VM|LIFECYCLE=ACTIVE|OWNER=pve02\nREGISTRY_HELPER_PARSE_START\nREGISTRY_HELPER_BASH_N_RC=0\nREC|HELPER_SCHEMA_SOURCE|LINE=6|assert_file(){ [[ -s \"STR_SHA_060e76138f09\" && ! -L \"STR_SHA_060e76138f09\" ]] || die REGISTRY_FILE_UNSAFE 66; }\nREC|HELPER_SCHEMA_SOURCE|LINE=7|validate(){\nREC|HELPER_SCHEMA_SOURCE|LINE=8|assert_file\nREC|HELPER_SCHEMA_SOURCE|LINE=9|jq -e '\nREC|HELPER_SCHEMA_SOURCE|LINE=10|.schema==\"homelab-backup-target-registry-v1\" and\nREC|HELPER_SCHEMA_SOURCE|LINE=11|.registry_version==1 and\nREC|HELPER_SCHEMA_SOURCE|LINE=12|.policies.retention_keep.VM==2 and .policies.retention_keep.APP==7 and .policies.retention_keep.CONTROL==4 and\nREC|HELPER_SCHEMA_SOURCE|LINE=13|.policies.freshness_seconds.VM==72000 and .policies.freshness_seconds.APP==72000 and .policies.freshness_seconds.CONTROL==86400 and\nREC|HELPER_SCHEMA_SOURCE|LINE=14|(.targets|type)==\"array\" and (.targets|length)==21 and\nREC|HELPER_SCHEMA_SOURCE|LINE=15|([.targets[].id]|length)==([.targets[].id]|unique|length) and\nREC|HELPER_SCHEMA_SOURCE|LINE=16|([.targets[].logical_id]|length)==([.targets[].logical_id]|unique|length) and\nREC|HELPER_SCHEMA_SOURCE|LINE=17|([.targets[]|select(.kind==\"VM\" and .lifecycle==\"ACTIVE\")]|length)==11 and\nREC|HELPER_SCHEMA_SOURCE|LINE=18|([.targets[]|select(.kind==\"APP\" and .lifecycle==\"ACTIVE\")]|length)==4 and\nREC|HELPER_SCHEMA_SOURCE|LINE=19|([.targets[]|select(.kind==\"APP\" and .lifecycle==\"RETIRED_PRESERVE\")]|length)==3 and\nREC|HELPER_SCHEMA_SOURCE|LINE=20|([.targets[]|select(.kind==\"CONTROL\" and .lifecycle==\"ACTIVE\")]|length)==1 and\nREC|HELPER_SCHEMA_SOURCE|LINE=21|([.targets[]|select((.kind!=\"VM\" and .kind!=\"APP\" and .kind!=\"CONTROL\") or (.lifecycle!=\"ACTIVE\" and .lifecycle!=\"RETIRED_PRESERVE\"))]|length)==0 and\nREC|HELPER_SCHEMA_SOURCE|LINE=22|([.targets[]|select(.kind==\"VM\")|select(.owner!=\"pve01\" and .owner!=\"pve02\" and .owner!=\"pve03\")]|length)==0 and\nREC|HELPER_SCHEMA_SOURCE|LINE=23|([.systemd_expectations[].unit]|length)==([.systemd_expectations[].unit]|unique|length) and\nREC|HELPER_SCHEMA_SOURCE|LINE=24|([.systemd_expectations[]|select(.expected_state!=\"ENABLED_ACTIVE\" and .expected_state!=\"ABSENT\")]|length)==0\nREC|HELPER_SCHEMA_SOURCE|LINE=25|' \"STR_SHA_060e76138f09\" >PATH_REDACTED || die REGISTRY_SCHEMA_INVALID 66\nREC|HELPER_SCHEMA_SOURCE|LINE=26|}\nREC|HELPER_SCHEMA_SOURCE|LINE=27|rows(){ validate; jq -r '.targets[]|[.kind,.id,.logical_id,.owner,.lifecycle,(.source_host/PATH_REDACTED,((.migrate/PATH_REDACTED \"STR_SHA_060e76138f09\"; }\nREC|HELPER_SCHEMA_SOURCE|LINE=28|find_by_id(){ local kind=\"STR_SHA_c1b43b36df09\" id=\"STR_SHA_fc4d602aa161\"; validate; jq -er --arg k \"STR_SHA_e4bc76ce5c49\" --arg i \"STR_SHA_ec4918e40d55\" 'STR_SHA_95b645f19a43' \"STR_SHA_060e76138f09\"; }\nREC|HELPER_SCHEMA_SOURCE|LINE=29|find_by_logical(){ local logical=\"STR_SHA_c1b43b36df09\"; validate; jq -er --arg l \"STR_SHA_49411c7ad16d\" 'STR_SHA_f2080f9514b9' \"STR_SHA_060e76138f09\"; }\nREC|HELPER_SCHEMA_SOURCE|LINE=30|case \"STR_SHA_47688171c2f1\" in\nREC|HELPER_SCHEMA_SOURCE|LINE=31|validate) [[ \"STR_SHA_984bfec110aa\" == 1 ]] || die USAGE 64; validate; printf 'STR_SHA_413ae53f1553' ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=32|active-vm-ids) [[ \"STR_SHA_984bfec110aa\" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_9fee448edc18' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=33|active-app-ids) [[ \"STR_SHA_984bfec110aa\" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_c25a70c95b29' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=34|migrate-app-ids) [[ \"STR_SHA_984bfec110aa\" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_c7791a90ad7b' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=35|app-active) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; find_by_id APP \"STR_SHA_fc4d602aa161\" | jq -e 'STR_SHA_7027d7777639' >PATH_REDACTED ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=36|app-logical) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; find_by_id APP \"STR_SHA_fc4d602aa161\" | jq -er 'STR_SHA_35a51cca66c0' ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=37|app-source-host) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; find_by_id APP \"STR_SHA_fc4d602aa161\" | jq -er 'STR_SHA_bda5c8d010bc' ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=38|logical-owner) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; find_by_logical \"STR_SHA_fc4d602aa161\" | jq -er '.owner' ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=39|lifecycle) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; find_by_logical \"STR_SHA_fc4d602aa161\" | jq -er '.lifecycle' ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=40|retention-logicals) [[ \"STR_SHA_984bfec110aa\" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_82d76addc312' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=41|retention-keep) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; rec=\"STR_SHA_7534d8d5f95b\"$2\"STR_SHA_ba5ec51d07a4\"; life=\"STR_SHA_454c6a8e3109\"$rec\"STR_SHA_ba5ec51d07a4\"; [[ \"STR_SHA_84a56cce4890\" == ACTIVE ]] || die RETENTION_KEEP_NOT_ACTIVE 64; kind=\"STR_SHA_df9501a81fc8\"$rec\"STR_SHA_ba5ec51d07a4\"; jq -er --arg k \"STR_SHA_e4bc76ce5c49\" 'STR_SHA_dafe51033d40' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=42|policy-keep) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; validate; jq -er --arg k \"STR_SHA_fc4d602aa161\" 'STR_SHA_dafe51033d40' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=43|freshness-seconds) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; validate; jq -er --arg k \"STR_SHA_fc4d602aa161\" 'STR_SHA_ce57d65e7846' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=44|systemd-expectations) [[ \"STR_SHA_984bfec110aa\" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_fe303dc2f08c' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=45|rows) [[ \"STR_SHA_984bfec110aa\" == 1 ]] || die USAGE 64; rows ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=46|*) die USAGE_validate_active-vm-ids_active-app-ids_migrate-app-ids_app-active_app-logical_app-source-host_logical-owner_lifecycle_retention-logicals_retention-keep_policy-keep_freshness-seconds_systemd-expectations_rows 64 ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=47|esac\nHELPER_APP_SOURCE_HOST_RC=4\nHELPER_APP_SOURCE_HOST_STDOUT_LINES=0\nHELPER_APP_SOURCE_HOST_STDERR_LINES=1\nREC|HELPER_QUERY_ERR|1|TARGET_REGISTRY_ERROR=REGISTRY_SCHEMA_INVALID\nV2_TARGET_COUNT=28\nV2_ENABLED_TRUE_COUNT=25\nV2_ENABLED_FALSE_COUNT=3\nREC|V2_DISABLED_EXAMPLE|LOGICAL_ID=md-relay|TYPE=vps_md|VMID=|NODE=\nREC|V2_DISABLED_EXAMPLE|LOGICAL_ID=spb-ingress|TYPE=vps_spb|VMID=|NODE=\nREC|V2_DISABLED_EXAMPLE|LOGICAL_ID=us-netbird|TYPE=vps_us|VMID=|NODE=\nV2_VMID160_COUNT=7\nV2_VMID160_ENABLED_TRUE_COUNT=7\nREC|V2_VMID160_SEMANTIC|LOGICAL_ID=vm160|TYPE=pve_guest|ENABLED=True|GREEN1=False|VMID=160|NODE=\nREC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-codevipe|TYPE=xenforo|ENABLED=True|GREEN1=True|VMID=160|NODE=pve02\nREC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-dsmods|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02\nREC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-kingofwolk|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02\nREC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-gamevipe|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02\nREC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-hkmods|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02\nREC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-zakrutim|TYPE=xenforo|ENABLED=True|GREEN1=True|VMID=160|NODE=pve02\nENGINE_FOUND=true\nENGINE_SHA=b6e79f087b9f1d21dac4f77a7b46b743299bbb85bc716e80d2ea67c2e038bcd7\nREC|ENGINE_SEMANTIC_FUNC|load_targets|FOUND=true\nREC|ENGINE_SEMANTIC_SOURCE|load_targets|1|def load_targets():\nREC|ENGINE_SEMANTIC_SOURCE|load_targets|3|if j.get('schema')!=1 or not isinstance(j.get('targets'),list): raise BackupError('TARGET_MANIFEST_SCHEMA')\nREC|ENGINE_SEMANTIC_SOURCE|load_targets|4|ids=[x.get('logical_id') for x in j['targets']]\nREC|ENGINE_SEMANTIC_SOURCE|load_targets|6|return j['targets']\nREC|ENGINE_SEMANTIC_FUNC|choose_due_target|FOUND=true\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|1|def choose_due_target(targets,state,now=None):\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|4|for t in targets:\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|5|if not t.get('enabled',True): continue\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|6|due=max(1,int(t.get('due_seconds',86400)))\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|7|last=int(state.get(t['logical_id'],{}).get('last_success_epoch',0))\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|9|if last==0 or age>=due: c.append((-(age/due),last,t['logical_id'],t))\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|10|if not c: return None\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|12|return c[0][3]\nREC|ENGINE_SEMANTIC_FUNC|scheduled_run|FOUND=true\nREC|ENGINE_SEMANTIC_SOURCE|scheduled_run|2|targets=load_targets(); state=load_state_all(); t=choose_due_target(targets,state)\nREC|ENGINE_SEMANTIC_SOURCE|scheduled_run|4|print('SCHEDULE_DECISION=DEFER_NO_DUE_TARGET'); return 0\nREC|ENGINE_SEMANTIC_SOURCE|scheduled_run|5|print('SCHEDULE_TARGET='+t['logical_id'])\nREC|ENGINE_SEMANTIC_SOURCE|scheduled_run|6|try: backup_target(t,green_verify=False)\nREC|ENGINE_SEMANTIC_SOURCE|scheduled_run|8|print('SCHEDULE_RESULT=FAIL'); print('SCHEDULE_REASON='+e.code); return 2\nREC|ENGINE_SEMANTIC_SOURCE|scheduled_run|9|print('SCHEDULE_RESULT=SUCCESS'); return 0\nVM160_LIVE_CLUSTER_MATCH_COUNT=0\nCEPH_ENTERPRISE_DISABLED=true\nPVEENT_ENTERPRISE_DISABLED=true\nPVE_NO_SUBSCRIPTION_ACTIVE=true\nAPT_FULL_UPGRADE_SIM_RC=0\nAPT_FULL_UPGRADE_SIM_UPGRADE_COUNT=184\nAPT_FULL_UPGRADE_SIM_REMOVE_COUNT=0\nDECISION=PASS_PVE01_RETIRE_SEMANTICS_REGISTRY_GATE\nNEXT_GATE=PVE01_DUAL_REGISTRY_RETIRE_REPAIR\nTASK_RESULT=PVE01_RETIRE_SEMANTICS_REGISTRY_GATE\nCHANGES_MADE=false\nROLLBACK_STARTED=false\nROLLBACK_RESTORED=null\nMUTATION_OUTCOME=NO_MUTATION\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" +} diff --git a/runtime/history/SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1.txt b/runtime/history/SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1.txt new file mode 100644 index 00000000..4926ca18 --- /dev/null +++ b/runtime/history/SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1.txt @@ -0,0 +1,179 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=pve01-retire-semantics-registry-gate +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=39cd0243421eb84a2059aafc51dc3b575cf2bbd48c8dc76324424f23ef2a583f +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=0ac00915b9eab03d365b10ab041e032247fe42f639aa6fac8a31e8e322743a74 +SANITIZED_OUTPUT_SHA256=0ac00915b9eab03d365b10ab041e032247fe42f639aa6fac8a31e8e322743a74 +OUTPUT_BEGIN +PVE01_RETIRE_SEMANTICS_REGISTRY_GATE=V1 +MODE=read-only +NO_REBOOT=true +NO_APT_UPDATE=true +NO_PACKAGE_MUTATION=true +NO_SERVICE_START_STOP_RESTART=true +NO_RESET_FAILED=true +NO_CONFIG_WRITE=true +NO_FILE_DELETE=true +NO_GUEST_MUTATION=true +NO_BACKUP_EXECUTION=true +NO_NETWORK_MUTATION=true +NODE_HOSTNAME=pve01 +NODE_KERNEL=7.0.12-1-pve +UNIFIED_SHA=21b1d1cc675e0472f05234f3cc160a43f603427a7ae6a511040ef7fb38722e5d +V2_SHA=89769a5564a8c208ac64a9edbcfa0942d516ec9c9c362595dd0120f091800989 +HELPER_SHA=c681c44be7557d192d7b453b67e31164237874596168f1d4c78e1e926e2e9cb4 +ROLLBACK_UNIFIED_SHA=2f526330152d49461ff66f50adab57d1a195ea5d1b4c292945d523411b8a68a8 +UNIFIED_TARGET_COUNT_NOW=20 +UNIFIED_TARGET_COUNT_PRE99670=21 +REC|UNIFIED_LIFECYCLE_COUNT|ACTIVE|15 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm110|KIND=VM|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm111|KIND=VM|OWNER=pve02 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm112|KIND=VM|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm113|KIND=VM|OWNER=pve02 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm130|KIND=VM|OWNER=pve03 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm150|KIND=VM|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm170|KIND=VM|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm171|KIND=VM|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm190|KIND=VM|OWNER=pve03 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm9130|KIND=VM|OWNER=pve02 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-filebrowser|KIND=APP|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-skladchik-reports-monitor|KIND=APP|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-immich|KIND=APP|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-hbarhub|KIND=APP|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=control-bootstrap-v2|KIND=CONTROL|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_COUNT|RETIRED_PRESERVE|5 +REC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=app-memos|KIND=APP|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=app-skladchik-moderator-assistant|KIND=APP|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=vm180|KIND=VM|OWNER=pve02 +REC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=vm200|KIND=VM|OWNER=pve03 +REC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=app-scrutiny|KIND=APP|OWNER=pve01 +UNIFIED_VM160_COUNT_NOW=0 +UNIFIED_VM160_COUNT_PRE99670=1 +REC|UNIFIED_VM160_PRE|KEYS=id,kind,lifecycle,logical_id,owner +REC|UNIFIED_VM160_PRE|KIND=VM|LIFECYCLE=ACTIVE|OWNER=pve02 +REGISTRY_HELPER_PARSE_START +REGISTRY_HELPER_BASH_N_RC=0 +REC|HELPER_SCHEMA_SOURCE|LINE=6|assert_file(){ [[ -s "STR_SHA_060e76138f09" && ! -L "STR_SHA_060e76138f09" ]] || die REGISTRY_FILE_UNSAFE 66; } +REC|HELPER_SCHEMA_SOURCE|LINE=7|validate(){ +REC|HELPER_SCHEMA_SOURCE|LINE=8|assert_file +REC|HELPER_SCHEMA_SOURCE|LINE=9|jq -e ' +REC|HELPER_SCHEMA_SOURCE|LINE=10|.schema=="homelab-backup-target-registry-v1" and +REC|HELPER_SCHEMA_SOURCE|LINE=11|.registry_version==1 and +REC|HELPER_SCHEMA_SOURCE|LINE=12|.policies.retention_keep.VM==2 and .policies.retention_keep.APP==7 and .policies.retention_keep.CONTROL==4 and +REC|HELPER_SCHEMA_SOURCE|LINE=13|.policies.freshness_seconds.VM==72000 and .policies.freshness_seconds.APP==72000 and .policies.freshness_seconds.CONTROL==86400 and +REC|HELPER_SCHEMA_SOURCE|LINE=14|(.targets|type)=="array" and (.targets|length)==21 and +REC|HELPER_SCHEMA_SOURCE|LINE=15|([.targets[].id]|length)==([.targets[].id]|unique|length) and +REC|HELPER_SCHEMA_SOURCE|LINE=16|([.targets[].logical_id]|length)==([.targets[].logical_id]|unique|length) and +REC|HELPER_SCHEMA_SOURCE|LINE=17|([.targets[]|select(.kind=="VM" and .lifecycle=="ACTIVE")]|length)==11 and +REC|HELPER_SCHEMA_SOURCE|LINE=18|([.targets[]|select(.kind=="APP" and .lifecycle=="ACTIVE")]|length)==4 and +REC|HELPER_SCHEMA_SOURCE|LINE=19|([.targets[]|select(.kind=="APP" and .lifecycle=="RETIRED_PRESERVE")]|length)==3 and +REC|HELPER_SCHEMA_SOURCE|LINE=20|([.targets[]|select(.kind=="CONTROL" and .lifecycle=="ACTIVE")]|length)==1 and +REC|HELPER_SCHEMA_SOURCE|LINE=21|([.targets[]|select((.kind!="VM" and .kind!="APP" and .kind!="CONTROL") or (.lifecycle!="ACTIVE" and .lifecycle!="RETIRED_PRESERVE"))]|length)==0 and +REC|HELPER_SCHEMA_SOURCE|LINE=22|([.targets[]|select(.kind=="VM")|select(.owner!="pve01" and .owner!="pve02" and .owner!="pve03")]|length)==0 and +REC|HELPER_SCHEMA_SOURCE|LINE=23|([.systemd_expectations[].unit]|length)==([.systemd_expectations[].unit]|unique|length) and +REC|HELPER_SCHEMA_SOURCE|LINE=24|([.systemd_expectations[]|select(.expected_state!="ENABLED_ACTIVE" and .expected_state!="ABSENT")]|length)==0 +REC|HELPER_SCHEMA_SOURCE|LINE=25|' "STR_SHA_060e76138f09" >PATH_REDACTED || die REGISTRY_SCHEMA_INVALID 66 +REC|HELPER_SCHEMA_SOURCE|LINE=26|} +REC|HELPER_SCHEMA_SOURCE|LINE=27|rows(){ validate; jq -r '.targets[]|[.kind,.id,.logical_id,.owner,.lifecycle,(.source_host/PATH_REDACTED,((.migrate/PATH_REDACTED "STR_SHA_060e76138f09"; } +REC|HELPER_SCHEMA_SOURCE|LINE=28|find_by_id(){ local kind="STR_SHA_c1b43b36df09" id="STR_SHA_fc4d602aa161"; validate; jq -er --arg k "STR_SHA_e4bc76ce5c49" --arg i "STR_SHA_ec4918e40d55" 'STR_SHA_95b645f19a43' "STR_SHA_060e76138f09"; } +REC|HELPER_SCHEMA_SOURCE|LINE=29|find_by_logical(){ local logical="STR_SHA_c1b43b36df09"; validate; jq -er --arg l "STR_SHA_49411c7ad16d" 'STR_SHA_f2080f9514b9' "STR_SHA_060e76138f09"; } +REC|HELPER_SCHEMA_SOURCE|LINE=30|case "STR_SHA_47688171c2f1" in +REC|HELPER_SCHEMA_SOURCE|LINE=31|validate) [[ "STR_SHA_984bfec110aa" == 1 ]] || die USAGE 64; validate; printf 'STR_SHA_413ae53f1553' ;; +REC|HELPER_SCHEMA_SOURCE|LINE=32|active-vm-ids) [[ "STR_SHA_984bfec110aa" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_9fee448edc18' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=33|active-app-ids) [[ "STR_SHA_984bfec110aa" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_c25a70c95b29' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=34|migrate-app-ids) [[ "STR_SHA_984bfec110aa" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_c7791a90ad7b' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=35|app-active) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; find_by_id APP "STR_SHA_fc4d602aa161" | jq -e 'STR_SHA_7027d7777639' >PATH_REDACTED ;; +REC|HELPER_SCHEMA_SOURCE|LINE=36|app-logical) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; find_by_id APP "STR_SHA_fc4d602aa161" | jq -er 'STR_SHA_35a51cca66c0' ;; +REC|HELPER_SCHEMA_SOURCE|LINE=37|app-source-host) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; find_by_id APP "STR_SHA_fc4d602aa161" | jq -er 'STR_SHA_bda5c8d010bc' ;; +REC|HELPER_SCHEMA_SOURCE|LINE=38|logical-owner) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; find_by_logical "STR_SHA_fc4d602aa161" | jq -er '.owner' ;; +REC|HELPER_SCHEMA_SOURCE|LINE=39|lifecycle) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; find_by_logical "STR_SHA_fc4d602aa161" | jq -er '.lifecycle' ;; +REC|HELPER_SCHEMA_SOURCE|LINE=40|retention-logicals) [[ "STR_SHA_984bfec110aa" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_82d76addc312' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=41|retention-keep) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; rec="STR_SHA_7534d8d5f95b"$2"STR_SHA_ba5ec51d07a4"; life="STR_SHA_454c6a8e3109"$rec"STR_SHA_ba5ec51d07a4"; [[ "STR_SHA_84a56cce4890" == ACTIVE ]] || die RETENTION_KEEP_NOT_ACTIVE 64; kind="STR_SHA_df9501a81fc8"$rec"STR_SHA_ba5ec51d07a4"; jq -er --arg k "STR_SHA_e4bc76ce5c49" 'STR_SHA_dafe51033d40' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=42|policy-keep) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; validate; jq -er --arg k "STR_SHA_fc4d602aa161" 'STR_SHA_dafe51033d40' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=43|freshness-seconds) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; validate; jq -er --arg k "STR_SHA_fc4d602aa161" 'STR_SHA_ce57d65e7846' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=44|systemd-expectations) [[ "STR_SHA_984bfec110aa" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_fe303dc2f08c' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=45|rows) [[ "STR_SHA_984bfec110aa" == 1 ]] || die USAGE 64; rows ;; +REC|HELPER_SCHEMA_SOURCE|LINE=46|*) die USAGE_validate_active-vm-ids_active-app-ids_migrate-app-ids_app-active_app-logical_app-source-host_logical-owner_lifecycle_retention-logicals_retention-keep_policy-keep_freshness-seconds_systemd-expectations_rows 64 ;; +REC|HELPER_SCHEMA_SOURCE|LINE=47|esac +HELPER_APP_SOURCE_HOST_RC=4 +HELPER_APP_SOURCE_HOST_STDOUT_LINES=0 +HELPER_APP_SOURCE_HOST_STDERR_LINES=1 +REC|HELPER_QUERY_ERR|1|TARGET_REGISTRY_ERROR=REGISTRY_SCHEMA_INVALID +V2_TARGET_COUNT=28 +V2_ENABLED_TRUE_COUNT=25 +V2_ENABLED_FALSE_COUNT=3 +REC|V2_DISABLED_EXAMPLE|LOGICAL_ID=md-relay|TYPE=vps_md|VMID=|NODE= +REC|V2_DISABLED_EXAMPLE|LOGICAL_ID=spb-ingress|TYPE=vps_spb|VMID=|NODE= +REC|V2_DISABLED_EXAMPLE|LOGICAL_ID=us-netbird|TYPE=vps_us|VMID=|NODE= +V2_VMID160_COUNT=7 +V2_VMID160_ENABLED_TRUE_COUNT=7 +REC|V2_VMID160_SEMANTIC|LOGICAL_ID=vm160|TYPE=pve_guest|ENABLED=True|GREEN1=False|VMID=160|NODE= +REC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-codevipe|TYPE=xenforo|ENABLED=True|GREEN1=True|VMID=160|NODE=pve02 +REC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-dsmods|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02 +REC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-kingofwolk|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02 +REC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-gamevipe|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02 +REC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-hkmods|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02 +REC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-zakrutim|TYPE=xenforo|ENABLED=True|GREEN1=True|VMID=160|NODE=pve02 +ENGINE_FOUND=true +ENGINE_SHA=b6e79f087b9f1d21dac4f77a7b46b743299bbb85bc716e80d2ea67c2e038bcd7 +REC|ENGINE_SEMANTIC_FUNC|load_targets|FOUND=true +REC|ENGINE_SEMANTIC_SOURCE|load_targets|1|def load_targets(): +REC|ENGINE_SEMANTIC_SOURCE|load_targets|3|if j.get('schema')!=1 or not isinstance(j.get('targets'),list): raise BackupError('TARGET_MANIFEST_SCHEMA') +REC|ENGINE_SEMANTIC_SOURCE|load_targets|4|ids=[x.get('logical_id') for x in j['targets']] +REC|ENGINE_SEMANTIC_SOURCE|load_targets|6|return j['targets'] +REC|ENGINE_SEMANTIC_FUNC|choose_due_target|FOUND=true +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|1|def choose_due_target(targets,state,now=None): +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|4|for t in targets: +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|5|if not t.get('enabled',True): continue +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|6|due=max(1,int(t.get('due_seconds',86400))) +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|7|last=int(state.get(t['logical_id'],{}).get('last_success_epoch',0)) +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|9|if last==0 or age>=due: c.append((-(age/due),last,t['logical_id'],t)) +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|10|if not c: return None +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|12|return c[0][3] +REC|ENGINE_SEMANTIC_FUNC|scheduled_run|FOUND=true +REC|ENGINE_SEMANTIC_SOURCE|scheduled_run|2|targets=load_targets(); state=load_state_all(); t=choose_due_target(targets,state) +REC|ENGINE_SEMANTIC_SOURCE|scheduled_run|4|print('SCHEDULE_DECISION=DEFER_NO_DUE_TARGET'); return 0 +REC|ENGINE_SEMANTIC_SOURCE|scheduled_run|5|print('SCHEDULE_TARGET='+t['logical_id']) +REC|ENGINE_SEMANTIC_SOURCE|scheduled_run|6|try: backup_target(t,green_verify=False) +REC|ENGINE_SEMANTIC_SOURCE|scheduled_run|8|print('SCHEDULE_RESULT=FAIL'); print('SCHEDULE_REASON='+e.code); return 2 +REC|ENGINE_SEMANTIC_SOURCE|scheduled_run|9|print('SCHEDULE_RESULT=SUCCESS'); return 0 +VM160_LIVE_CLUSTER_MATCH_COUNT=0 +CEPH_ENTERPRISE_DISABLED=true +PVEENT_ENTERPRISE_DISABLED=true +PVE_NO_SUBSCRIPTION_ACTIVE=true +APT_FULL_UPGRADE_SIM_RC=0 +APT_FULL_UPGRADE_SIM_UPGRADE_COUNT=184 +APT_FULL_UPGRADE_SIM_REMOVE_COUNT=0 +DECISION=PASS_PVE01_RETIRE_SEMANTICS_REGISTRY_GATE +NEXT_GATE=PVE01_DUAL_REGISTRY_RETIRE_REPAIR +TASK_RESULT=PVE01_RETIRE_SEMANTICS_REGISTRY_GATE +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1","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 c6164fa1..09eb8262 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-261006-PVE03-VM130-TEMP-BACKUP-REDUNDANCY-99675R1", - "status": "FAIL", - "rc": 1, + "command_id": "SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1", + "status": "OK", + "rc": 0, "host": "pve01", "mode": "read-only", - "component": "pve03-vm130-temp-backup-redundancy", - "started_at_utc": "2026-10-06T05:25:53Z", - "finished_at_utc": "2026-10-06T05:32:04Z", + "component": "pve01-retire-semantics-registry-gate", + "started_at_utc": "2026-10-06T05:32:20Z", + "finished_at_utc": "2026-10-06T05:32:23Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "89f824f7a7cd7c46f222a5892b321797cad3a31b883c1483cde2a05af3ddb24a", + "command_sha256": "39cd0243421eb84a2059aafc51dc3b575cf2bbd48c8dc76324424f23ef2a583f", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -21,7 +21,7 @@ "result_contract_valid": true, "result_contract_status": null, "result_contract_error": null, - "command_rc": 1, + "command_rc": 0, "changes_made": false, "rollback_started": false, "rollback_restored": null, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "e737bd7378ceefbdff5dad2a66e3e874b66ef086f8b280d177c1b1d44bf34879", - "sanitized_output_sha256": "e737bd7378ceefbdff5dad2a66e3e874b66ef086f8b280d177c1b1d44bf34879", + "raw_evidence_sha256": "0ac00915b9eab03d365b10ab041e032247fe42f639aa6fac8a31e8e322743a74", + "sanitized_output_sha256": "0ac00915b9eab03d365b10ab041e032247fe42f639aa6fac8a31e8e322743a74", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "PVE03_VM130_TEMP_BACKUP_REDUNDANCY=V1\nMODE=read-only\nNO_REBOOT=true\nNO_PACKAGE_MUTATION=true\nNO_GUEST_MUTATION=true\nNO_CONFIG_WRITE=true\nNO_FILE_DELETE=true\nNO_STORAGE_MUTATION=true\nNO_NETWORK_MUTATION=true\nNO_SERVICE_RESTART=true\nNO_APT_UPDATE=true\nNO_REMOTE_WRITE=true\nRUNNING_KERNEL=7.0.14-20-pve\nVM130_STATUS_RC=0\nVM130_STATUS=status: running\nFAILED_UNIT_COUNT=0\nTEMP_DIR_EXISTS=true\nTEMP_ARCHIVE_EXISTS=true\nTEMP_LOG_EXISTS=true\nTEMP_ARCHIVE_SIZE=10721856155\nTEMP_ARCHIVE_ALLOC_BYTES=10721861632\nTEMP_ARCHIVE_AGE_D=16\nTEMP_ARCHIVE_MTIME_EPOCH=1789833031\nTEMP_ARCHIVE_SHA256=c65e37b3397746d63cd51f2e4c7a08ca8a84ac7200bf790dec0ea76470d349e9\nTEMP_ARCHIVE_ZSTD_RC=0\nTEMP_ARCHIVE_ZSTD_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nTEMP_ARCHIVE_VMA_RC=0\nTEMP_ARCHIVE_VMA_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nTEMP_ARCHIVE_VMA_OUT_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nTEMP_LOG_SIZE=6472\nTEMP_LOG_SHA256=5bdf970a23f263b288aeba747d9acd251b1f15e0ad32ca0c7c02d9482230a3e9\nTEMP_LOG_AGE_D=16\nTEMP_LOG_SUCCESS_MATCHES=1\nTEMP_LOG_ERROR_MATCHES=0\nTEMP_LOG_ABORT_MATCHES=0\nTEMP_LOG_RCLONE_MATCHES=0\nTEMP_LOG_UPLOAD_MATCHES=0\nTEMP_LOG_REMOVE_MATCHES=0\nTEMP_LOG_VZDUMP_MATCHES=3\nTEMP_LOG_VM130_MATCHES=2\nREC|TEMP_LOG_SIGNAL|1|b9bbde4c8f76eefedd55c9fbc25cfda77c053c0d13bff04bf5df81ac89aa5c5e|2026-09-19 18\nREC|TEMP_LOG_SIGNAL|6|98ec4a64f49488f403178ee2bbabfd02b9dbc9acf7a9332e3c10c5d0d0fe5b12|2026-09-19 18\nREC|TEMP_LOG_SIGNAL|8|b85411fa2bf98b49332d8bbbe2736241ae5cf5c88347f6f0d8f9ed9ca69951f6|2026-09-19 18\nREC|TEMP_LOG_SIGNAL|10|8ac7f341aa58212fc8567395a2c7543ed4593580f42c10d1edd638b7cbcc07f6|2026-09-19 18\nREC|TEMP_LOG_SIGNAL|12|bad917b80a51d717aec0617067721202e7660257afd119d699f8b390101efaef|2026-09-19 18\nREC|TEMP_LOG_SIGNAL|66|94e853603a0cc3608da834de49a479480b0cda79193efbdc127b6319fda294f2|2026-09-19 18\nREC|TEMP_LOG_SIGNAL|68|5aec899a9403f2babe2b916504694ce6fe49141bc1d64a5f15cbd2f7df3d5ea3|2026-09-19 18\nREC|TEMP_LOG_SIGNAL|69|dd770876367b75d7bc3ecf9970f6b506c9d54508b29b8e414ae33e059c8d6212|2026-09-19 18\nLOCAL_VM130_ARCHIVE_COUNT=1\nREC|LOCAL_VM130_ARCHIVE|var/tmp/homelab-vzdump-v2-v2-vm130-20260919T154616Z-ab7315f9c04c/vzdump-qemu-130-2026_09_19-18_46_18.vma.zst|10721856155|1789833031|16|1d223d548834b1b185c3bb6e3351cf5e8f922b3a415a7ae54da701495ffdcc66\nLOCAL_NEWER_VM130_ARCHIVE_COUNT=0\nTEMP_BACKUP_REFERENCE_FILE_COUNT=0\nCURRENT_BACKUP_RELATED_FILE_COUNT=5\nREC|CURRENT_BACKUP_RELATED_FILE|usr/local/libexec/homelab-cloud-quorum-payload|df9e19485e5d87112bf58bf77bdddf3b9b896418dd85ff945a31cd5b6817f352|VZDUMP=0|RCLONE=26|BACKUP=14\nREC|CURRENT_BACKUP_RELATED_FILE|usr/local/libexec/homelab-vm-cloud-quorum-freshness-probe|bd6257397c6ea910df2ea0dd57252b33bccd0bbd965175840486dfe5e079bf96|VZDUMP=0|RCLONE=0|BACKUP=11\nREC|CURRENT_BACKUP_RELATED_FILE|usr/local/libexec/homelab-vm-cloud-quorum-node-worker|91bdd116be865560a38105dffbd1a66d687232035e2359e4a5be4d225e9c61d1|VZDUMP=15|RCLONE=8|BACKUP=19\nREC|CURRENT_BACKUP_RELATED_FILE|usr/local/sbin/homelab-rclone-crypt-healthcheck.sh|0478621221487845b57482958a03a7312e62079755a1ea05eaeaf547c190b76a|VZDUMP=0|RCLONE=7|BACKUP=5\nREC|CURRENT_BACKUP_RELATED_FILE|usr/local/sbin/homelab-rclone-required-check.sh|bca15ae3f67dd2d9ef5aa04a2270f7ec7de45b9f99f39ff72288df183d884cf4|VZDUMP=0|RCLONE=7|BACKUP=0\nCURRENT_BACKUP_RELATED_UNIT_COUNT=2\nREC|CURRENT_BACKUP_RELATED_UNIT|dpkg-db-backup.service|08b71e545d90777929e14260130019cf32973ff56fab9c18457279a1c3a748d9\nREC|CURRENT_BACKUP_RELATED_UNIT|dpkg-db-backup.timer|2d3f67ffbd70312144e7859decc60b13f389407b28bd881be586e679574d4a2f\nBACKUP_RELATED_TIMER_COUNT=0\nBACKUP_WINDOW_JOURNAL_RC=0\nBACKUP_WINDOW_JOURNAL_MATCH_COUNT=0\nBACKUP_WINDOW_VZDUMP_COUNT=0\nBACKUP_WINDOW_RCLONE_COUNT=0\nBACKUP_WINDOW_BACKUP_COUNT=0\nBACKUP_WINDOW_ERROR_COUNT=0\nBACKUP_WINDOW_SUCCESS_COUNT=0\nBACKUP_WINDOW_VM130_COUNT=0\nBACKUP_WINDOW_TEMP_PREFIX_COUNT=0\nRCLONE_LISTREMOTES_RC=0\nRCLONE_REMOTE_COUNT=26\nRCLONE_REMOTE_ba989ba2ee74_RC=0\nRCLONE_REMOTE_ba989ba2ee74_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRCLONE_REMOTE_ba989ba2ee74_VM130_ARCHIVE_COUNT=0\nRCLONE_REMOTE_d6f277cbb6b3_RC=0\nRCLONE_REMOTE_d6f277cbb6b3_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRCLONE_REMOTE_d6f277cbb6b3_VM130_ARCHIVE_COUNT=0\nRCLONE_REMOTE_09cffd1ef8e9_RC=0\nRCLONE_REMOTE_09cffd1ef8e9_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRCLONE_REMOTE_09cffd1ef8e9_VM130_ARCHIVE_COUNT=0\nRCLONE_REMOTE_f5d7b1f80ac6_RC=0\nRCLONE_REMOTE_f5d7b1f80ac6_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRCLONE_REMOTE_f5d7b1f80ac6_VM130_ARCHIVE_COUNT=0\nRCLONE_REMOTE_853fb3c4a4ae_RC=0\nRCLONE_REMOTE_853fb3c4a4ae_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRCLONE_REMOTE_853fb3c4a4ae_VM130_ARCHIVE_COUNT=0\nRCLONE_REMOTE_e089ce77dae7_RC=0\nRCLONE_REMOTE_e089ce77dae7_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRCLONE_REMOTE_e089ce77dae7_VM130_ARCHIVE_COUNT=0\nRCLONE_REMOTE_38a7e061eb54_RC=0\nRCLONE_REMOTE_38a7e061eb54_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRCLONE_REMOTE_38a7e061eb54_VM130_ARCHIVE_COUNT=0\nRCLONE_REMOTE_995342067a8b_RC=1\nRCLONE_REMOTE_995342067a8b_ERR_SHA=18c91d00d64fae4a0bd5a74f5d3c3b9e48c9f3fd09a89fdc088c883a02c02020\nRCLONE_REMOTE_995342067a8b_VM130_ARCHIVE_COUNT=0\nRCLONE_REMOTE_f17fcdb7a565_RC=0\nRCLONE_REMOTE_f17fcdb7a565_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRCLONE_REMOTE_f17fcdb7a565_VM130_ARCHIVE_COUNT=0\nRCLONE_REMOTE_4f35325e339b_RC=0\nRCLONE_REMOTE_4f35325e339b_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRCLONE_REMOTE_4f35325e339b_VM130_ARCHIVE_COUNT=0\nRCLONE_REMOTE_826f9e273863_RC=0\nRCLONE_REMOTE_826f9e273863_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRCLONE_REMOTE_826f9e273863_VM130_ARCHIVE_COUNT=0\nRCLONE_REMOTE_d4b56f8204a4_RC=0\nRCLONE_REMOTE_d4b56f8204a4_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRCLONE_REMOTE_d4b56f8204a4_VM130_ARCHIVE_COUNT=0\nRCLONE_NEWER_VM130_ARCHIVE_COUNT=0\nRCLONE_TOTAL_VM130_ARCHIVE_COUNT=0\nTraceback (most recent call last):\n File \"\", line 240, in \nAttributeError: 'int' object has no attribute 'returncode'\n" + "output": "PVE01_RETIRE_SEMANTICS_REGISTRY_GATE=V1\nMODE=read-only\nNO_REBOOT=true\nNO_APT_UPDATE=true\nNO_PACKAGE_MUTATION=true\nNO_SERVICE_START_STOP_RESTART=true\nNO_RESET_FAILED=true\nNO_CONFIG_WRITE=true\nNO_FILE_DELETE=true\nNO_GUEST_MUTATION=true\nNO_BACKUP_EXECUTION=true\nNO_NETWORK_MUTATION=true\nNODE_HOSTNAME=pve01\nNODE_KERNEL=7.0.12-1-pve\nUNIFIED_SHA=21b1d1cc675e0472f05234f3cc160a43f603427a7ae6a511040ef7fb38722e5d\nV2_SHA=89769a5564a8c208ac64a9edbcfa0942d516ec9c9c362595dd0120f091800989\nHELPER_SHA=c681c44be7557d192d7b453b67e31164237874596168f1d4c78e1e926e2e9cb4\nROLLBACK_UNIFIED_SHA=2f526330152d49461ff66f50adab57d1a195ea5d1b4c292945d523411b8a68a8\nUNIFIED_TARGET_COUNT_NOW=20\nUNIFIED_TARGET_COUNT_PRE99670=21\nREC|UNIFIED_LIFECYCLE_COUNT|ACTIVE|15\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm110|KIND=VM|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm111|KIND=VM|OWNER=pve02\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm112|KIND=VM|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm113|KIND=VM|OWNER=pve02\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm130|KIND=VM|OWNER=pve03\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm150|KIND=VM|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm170|KIND=VM|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm171|KIND=VM|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm190|KIND=VM|OWNER=pve03\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm9130|KIND=VM|OWNER=pve02\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-filebrowser|KIND=APP|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-skladchik-reports-monitor|KIND=APP|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-immich|KIND=APP|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-hbarhub|KIND=APP|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=control-bootstrap-v2|KIND=CONTROL|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_COUNT|RETIRED_PRESERVE|5\nREC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=app-memos|KIND=APP|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=app-skladchik-moderator-assistant|KIND=APP|OWNER=pve01\nREC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=vm180|KIND=VM|OWNER=pve02\nREC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=vm200|KIND=VM|OWNER=pve03\nREC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=app-scrutiny|KIND=APP|OWNER=pve01\nUNIFIED_VM160_COUNT_NOW=0\nUNIFIED_VM160_COUNT_PRE99670=1\nREC|UNIFIED_VM160_PRE|KEYS=id,kind,lifecycle,logical_id,owner\nREC|UNIFIED_VM160_PRE|KIND=VM|LIFECYCLE=ACTIVE|OWNER=pve02\nREGISTRY_HELPER_PARSE_START\nREGISTRY_HELPER_BASH_N_RC=0\nREC|HELPER_SCHEMA_SOURCE|LINE=6|assert_file(){ [[ -s \"STR_SHA_060e76138f09\" && ! -L \"STR_SHA_060e76138f09\" ]] || die REGISTRY_FILE_UNSAFE 66; }\nREC|HELPER_SCHEMA_SOURCE|LINE=7|validate(){\nREC|HELPER_SCHEMA_SOURCE|LINE=8|assert_file\nREC|HELPER_SCHEMA_SOURCE|LINE=9|jq -e '\nREC|HELPER_SCHEMA_SOURCE|LINE=10|.schema==\"homelab-backup-target-registry-v1\" and\nREC|HELPER_SCHEMA_SOURCE|LINE=11|.registry_version==1 and\nREC|HELPER_SCHEMA_SOURCE|LINE=12|.policies.retention_keep.VM==2 and .policies.retention_keep.APP==7 and .policies.retention_keep.CONTROL==4 and\nREC|HELPER_SCHEMA_SOURCE|LINE=13|.policies.freshness_seconds.VM==72000 and .policies.freshness_seconds.APP==72000 and .policies.freshness_seconds.CONTROL==86400 and\nREC|HELPER_SCHEMA_SOURCE|LINE=14|(.targets|type)==\"array\" and (.targets|length)==21 and\nREC|HELPER_SCHEMA_SOURCE|LINE=15|([.targets[].id]|length)==([.targets[].id]|unique|length) and\nREC|HELPER_SCHEMA_SOURCE|LINE=16|([.targets[].logical_id]|length)==([.targets[].logical_id]|unique|length) and\nREC|HELPER_SCHEMA_SOURCE|LINE=17|([.targets[]|select(.kind==\"VM\" and .lifecycle==\"ACTIVE\")]|length)==11 and\nREC|HELPER_SCHEMA_SOURCE|LINE=18|([.targets[]|select(.kind==\"APP\" and .lifecycle==\"ACTIVE\")]|length)==4 and\nREC|HELPER_SCHEMA_SOURCE|LINE=19|([.targets[]|select(.kind==\"APP\" and .lifecycle==\"RETIRED_PRESERVE\")]|length)==3 and\nREC|HELPER_SCHEMA_SOURCE|LINE=20|([.targets[]|select(.kind==\"CONTROL\" and .lifecycle==\"ACTIVE\")]|length)==1 and\nREC|HELPER_SCHEMA_SOURCE|LINE=21|([.targets[]|select((.kind!=\"VM\" and .kind!=\"APP\" and .kind!=\"CONTROL\") or (.lifecycle!=\"ACTIVE\" and .lifecycle!=\"RETIRED_PRESERVE\"))]|length)==0 and\nREC|HELPER_SCHEMA_SOURCE|LINE=22|([.targets[]|select(.kind==\"VM\")|select(.owner!=\"pve01\" and .owner!=\"pve02\" and .owner!=\"pve03\")]|length)==0 and\nREC|HELPER_SCHEMA_SOURCE|LINE=23|([.systemd_expectations[].unit]|length)==([.systemd_expectations[].unit]|unique|length) and\nREC|HELPER_SCHEMA_SOURCE|LINE=24|([.systemd_expectations[]|select(.expected_state!=\"ENABLED_ACTIVE\" and .expected_state!=\"ABSENT\")]|length)==0\nREC|HELPER_SCHEMA_SOURCE|LINE=25|' \"STR_SHA_060e76138f09\" >PATH_REDACTED || die REGISTRY_SCHEMA_INVALID 66\nREC|HELPER_SCHEMA_SOURCE|LINE=26|}\nREC|HELPER_SCHEMA_SOURCE|LINE=27|rows(){ validate; jq -r '.targets[]|[.kind,.id,.logical_id,.owner,.lifecycle,(.source_host/PATH_REDACTED,((.migrate/PATH_REDACTED \"STR_SHA_060e76138f09\"; }\nREC|HELPER_SCHEMA_SOURCE|LINE=28|find_by_id(){ local kind=\"STR_SHA_c1b43b36df09\" id=\"STR_SHA_fc4d602aa161\"; validate; jq -er --arg k \"STR_SHA_e4bc76ce5c49\" --arg i \"STR_SHA_ec4918e40d55\" 'STR_SHA_95b645f19a43' \"STR_SHA_060e76138f09\"; }\nREC|HELPER_SCHEMA_SOURCE|LINE=29|find_by_logical(){ local logical=\"STR_SHA_c1b43b36df09\"; validate; jq -er --arg l \"STR_SHA_49411c7ad16d\" 'STR_SHA_f2080f9514b9' \"STR_SHA_060e76138f09\"; }\nREC|HELPER_SCHEMA_SOURCE|LINE=30|case \"STR_SHA_47688171c2f1\" in\nREC|HELPER_SCHEMA_SOURCE|LINE=31|validate) [[ \"STR_SHA_984bfec110aa\" == 1 ]] || die USAGE 64; validate; printf 'STR_SHA_413ae53f1553' ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=32|active-vm-ids) [[ \"STR_SHA_984bfec110aa\" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_9fee448edc18' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=33|active-app-ids) [[ \"STR_SHA_984bfec110aa\" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_c25a70c95b29' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=34|migrate-app-ids) [[ \"STR_SHA_984bfec110aa\" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_c7791a90ad7b' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=35|app-active) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; find_by_id APP \"STR_SHA_fc4d602aa161\" | jq -e 'STR_SHA_7027d7777639' >PATH_REDACTED ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=36|app-logical) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; find_by_id APP \"STR_SHA_fc4d602aa161\" | jq -er 'STR_SHA_35a51cca66c0' ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=37|app-source-host) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; find_by_id APP \"STR_SHA_fc4d602aa161\" | jq -er 'STR_SHA_bda5c8d010bc' ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=38|logical-owner) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; find_by_logical \"STR_SHA_fc4d602aa161\" | jq -er '.owner' ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=39|lifecycle) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; find_by_logical \"STR_SHA_fc4d602aa161\" | jq -er '.lifecycle' ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=40|retention-logicals) [[ \"STR_SHA_984bfec110aa\" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_82d76addc312' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=41|retention-keep) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; rec=\"STR_SHA_7534d8d5f95b\"$2\"STR_SHA_ba5ec51d07a4\"; life=\"STR_SHA_454c6a8e3109\"$rec\"STR_SHA_ba5ec51d07a4\"; [[ \"STR_SHA_84a56cce4890\" == ACTIVE ]] || die RETENTION_KEEP_NOT_ACTIVE 64; kind=\"STR_SHA_df9501a81fc8\"$rec\"STR_SHA_ba5ec51d07a4\"; jq -er --arg k \"STR_SHA_e4bc76ce5c49\" 'STR_SHA_dafe51033d40' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=42|policy-keep) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; validate; jq -er --arg k \"STR_SHA_fc4d602aa161\" 'STR_SHA_dafe51033d40' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=43|freshness-seconds) [[ \"STR_SHA_984bfec110aa\" == 2 ]] || die USAGE 64; validate; jq -er --arg k \"STR_SHA_fc4d602aa161\" 'STR_SHA_ce57d65e7846' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=44|systemd-expectations) [[ \"STR_SHA_984bfec110aa\" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_fe303dc2f08c' \"STR_SHA_060e76138f09\" ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=45|rows) [[ \"STR_SHA_984bfec110aa\" == 1 ]] || die USAGE 64; rows ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=46|*) die USAGE_validate_active-vm-ids_active-app-ids_migrate-app-ids_app-active_app-logical_app-source-host_logical-owner_lifecycle_retention-logicals_retention-keep_policy-keep_freshness-seconds_systemd-expectations_rows 64 ;;\nREC|HELPER_SCHEMA_SOURCE|LINE=47|esac\nHELPER_APP_SOURCE_HOST_RC=4\nHELPER_APP_SOURCE_HOST_STDOUT_LINES=0\nHELPER_APP_SOURCE_HOST_STDERR_LINES=1\nREC|HELPER_QUERY_ERR|1|TARGET_REGISTRY_ERROR=REGISTRY_SCHEMA_INVALID\nV2_TARGET_COUNT=28\nV2_ENABLED_TRUE_COUNT=25\nV2_ENABLED_FALSE_COUNT=3\nREC|V2_DISABLED_EXAMPLE|LOGICAL_ID=md-relay|TYPE=vps_md|VMID=|NODE=\nREC|V2_DISABLED_EXAMPLE|LOGICAL_ID=spb-ingress|TYPE=vps_spb|VMID=|NODE=\nREC|V2_DISABLED_EXAMPLE|LOGICAL_ID=us-netbird|TYPE=vps_us|VMID=|NODE=\nV2_VMID160_COUNT=7\nV2_VMID160_ENABLED_TRUE_COUNT=7\nREC|V2_VMID160_SEMANTIC|LOGICAL_ID=vm160|TYPE=pve_guest|ENABLED=True|GREEN1=False|VMID=160|NODE=\nREC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-codevipe|TYPE=xenforo|ENABLED=True|GREEN1=True|VMID=160|NODE=pve02\nREC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-dsmods|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02\nREC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-kingofwolk|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02\nREC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-gamevipe|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02\nREC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-hkmods|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02\nREC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-zakrutim|TYPE=xenforo|ENABLED=True|GREEN1=True|VMID=160|NODE=pve02\nENGINE_FOUND=true\nENGINE_SHA=b6e79f087b9f1d21dac4f77a7b46b743299bbb85bc716e80d2ea67c2e038bcd7\nREC|ENGINE_SEMANTIC_FUNC|load_targets|FOUND=true\nREC|ENGINE_SEMANTIC_SOURCE|load_targets|1|def load_targets():\nREC|ENGINE_SEMANTIC_SOURCE|load_targets|3|if j.get('schema')!=1 or not isinstance(j.get('targets'),list): raise BackupError('TARGET_MANIFEST_SCHEMA')\nREC|ENGINE_SEMANTIC_SOURCE|load_targets|4|ids=[x.get('logical_id') for x in j['targets']]\nREC|ENGINE_SEMANTIC_SOURCE|load_targets|6|return j['targets']\nREC|ENGINE_SEMANTIC_FUNC|choose_due_target|FOUND=true\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|1|def choose_due_target(targets,state,now=None):\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|4|for t in targets:\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|5|if not t.get('enabled',True): continue\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|6|due=max(1,int(t.get('due_seconds',86400)))\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|7|last=int(state.get(t['logical_id'],{}).get('last_success_epoch',0))\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|9|if last==0 or age>=due: c.append((-(age/due),last,t['logical_id'],t))\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|10|if not c: return None\nREC|ENGINE_SEMANTIC_SOURCE|choose_due_target|12|return c[0][3]\nREC|ENGINE_SEMANTIC_FUNC|scheduled_run|FOUND=true\nREC|ENGINE_SEMANTIC_SOURCE|scheduled_run|2|targets=load_targets(); state=load_state_all(); t=choose_due_target(targets,state)\nREC|ENGINE_SEMANTIC_SOURCE|scheduled_run|4|print('SCHEDULE_DECISION=DEFER_NO_DUE_TARGET'); return 0\nREC|ENGINE_SEMANTIC_SOURCE|scheduled_run|5|print('SCHEDULE_TARGET='+t['logical_id'])\nREC|ENGINE_SEMANTIC_SOURCE|scheduled_run|6|try: backup_target(t,green_verify=False)\nREC|ENGINE_SEMANTIC_SOURCE|scheduled_run|8|print('SCHEDULE_RESULT=FAIL'); print('SCHEDULE_REASON='+e.code); return 2\nREC|ENGINE_SEMANTIC_SOURCE|scheduled_run|9|print('SCHEDULE_RESULT=SUCCESS'); return 0\nVM160_LIVE_CLUSTER_MATCH_COUNT=0\nCEPH_ENTERPRISE_DISABLED=true\nPVEENT_ENTERPRISE_DISABLED=true\nPVE_NO_SUBSCRIPTION_ACTIVE=true\nAPT_FULL_UPGRADE_SIM_RC=0\nAPT_FULL_UPGRADE_SIM_UPGRADE_COUNT=184\nAPT_FULL_UPGRADE_SIM_REMOVE_COUNT=0\nDECISION=PASS_PVE01_RETIRE_SEMANTICS_REGISTRY_GATE\nNEXT_GATE=PVE01_DUAL_REGISTRY_RETIRE_REPAIR\nTASK_RESULT=PVE01_RETIRE_SEMANTICS_REGISTRY_GATE\nCHANGES_MADE=false\nROLLBACK_STARTED=false\nROLLBACK_RESTORED=null\nMUTATION_OUTCOME=NO_MUTATION\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index bcfa66b8..4926ca18 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,22 +1,22 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-261006-PVE03-VM130-TEMP-BACKUP-REDUNDANCY-99675R1 -STATUS=FAIL -RC=1 +COMMAND_ID=SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1 +STATUS=OK +RC=0 HOST=pve01 MODE=read-only -COMPONENT=pve03-vm130-temp-backup-redundancy +COMPONENT=pve01-retire-semantics-registry-gate REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=89f824f7a7cd7c46f222a5892b321797cad3a31b883c1483cde2a05af3ddb24a +COMMAND_SHA256=39cd0243421eb84a2059aafc51dc3b575cf2bbd48c8dc76324424f23ef2a583f 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=1 +COMMAND_RC=0 CHANGES_MADE=false ROLLBACK_STARTED=false ROLLBACK_RESTORED=null @@ -24,123 +24,156 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=e737bd7378ceefbdff5dad2a66e3e874b66ef086f8b280d177c1b1d44bf34879 -SANITIZED_OUTPUT_SHA256=e737bd7378ceefbdff5dad2a66e3e874b66ef086f8b280d177c1b1d44bf34879 +RAW_EVIDENCE_SHA256=0ac00915b9eab03d365b10ab041e032247fe42f639aa6fac8a31e8e322743a74 +SANITIZED_OUTPUT_SHA256=0ac00915b9eab03d365b10ab041e032247fe42f639aa6fac8a31e8e322743a74 OUTPUT_BEGIN -PVE03_VM130_TEMP_BACKUP_REDUNDANCY=V1 +PVE01_RETIRE_SEMANTICS_REGISTRY_GATE=V1 MODE=read-only NO_REBOOT=true +NO_APT_UPDATE=true NO_PACKAGE_MUTATION=true -NO_GUEST_MUTATION=true +NO_SERVICE_START_STOP_RESTART=true +NO_RESET_FAILED=true NO_CONFIG_WRITE=true NO_FILE_DELETE=true -NO_STORAGE_MUTATION=true +NO_GUEST_MUTATION=true +NO_BACKUP_EXECUTION=true NO_NETWORK_MUTATION=true -NO_SERVICE_RESTART=true -NO_APT_UPDATE=true -NO_REMOTE_WRITE=true -RUNNING_KERNEL=7.0.14-20-pve -VM130_STATUS_RC=0 -VM130_STATUS=status: running -FAILED_UNIT_COUNT=0 -TEMP_DIR_EXISTS=true -TEMP_ARCHIVE_EXISTS=true -TEMP_LOG_EXISTS=true -TEMP_ARCHIVE_SIZE=10721856155 -TEMP_ARCHIVE_ALLOC_BYTES=10721861632 -TEMP_ARCHIVE_AGE_D=16 -TEMP_ARCHIVE_MTIME_EPOCH=1789833031 -TEMP_ARCHIVE_SHA256=c65e37b3397746d63cd51f2e4c7a08ca8a84ac7200bf790dec0ea76470d349e9 -TEMP_ARCHIVE_ZSTD_RC=0 -TEMP_ARCHIVE_ZSTD_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -TEMP_ARCHIVE_VMA_RC=0 -TEMP_ARCHIVE_VMA_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -TEMP_ARCHIVE_VMA_OUT_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -TEMP_LOG_SIZE=6472 -TEMP_LOG_SHA256=5bdf970a23f263b288aeba747d9acd251b1f15e0ad32ca0c7c02d9482230a3e9 -TEMP_LOG_AGE_D=16 -TEMP_LOG_SUCCESS_MATCHES=1 -TEMP_LOG_ERROR_MATCHES=0 -TEMP_LOG_ABORT_MATCHES=0 -TEMP_LOG_RCLONE_MATCHES=0 -TEMP_LOG_UPLOAD_MATCHES=0 -TEMP_LOG_REMOVE_MATCHES=0 -TEMP_LOG_VZDUMP_MATCHES=3 -TEMP_LOG_VM130_MATCHES=2 -REC|TEMP_LOG_SIGNAL|1|b9bbde4c8f76eefedd55c9fbc25cfda77c053c0d13bff04bf5df81ac89aa5c5e|2026-09-19 18 -REC|TEMP_LOG_SIGNAL|6|98ec4a64f49488f403178ee2bbabfd02b9dbc9acf7a9332e3c10c5d0d0fe5b12|2026-09-19 18 -REC|TEMP_LOG_SIGNAL|8|b85411fa2bf98b49332d8bbbe2736241ae5cf5c88347f6f0d8f9ed9ca69951f6|2026-09-19 18 -REC|TEMP_LOG_SIGNAL|10|8ac7f341aa58212fc8567395a2c7543ed4593580f42c10d1edd638b7cbcc07f6|2026-09-19 18 -REC|TEMP_LOG_SIGNAL|12|bad917b80a51d717aec0617067721202e7660257afd119d699f8b390101efaef|2026-09-19 18 -REC|TEMP_LOG_SIGNAL|66|94e853603a0cc3608da834de49a479480b0cda79193efbdc127b6319fda294f2|2026-09-19 18 -REC|TEMP_LOG_SIGNAL|68|5aec899a9403f2babe2b916504694ce6fe49141bc1d64a5f15cbd2f7df3d5ea3|2026-09-19 18 -REC|TEMP_LOG_SIGNAL|69|dd770876367b75d7bc3ecf9970f6b506c9d54508b29b8e414ae33e059c8d6212|2026-09-19 18 -LOCAL_VM130_ARCHIVE_COUNT=1 -REC|LOCAL_VM130_ARCHIVE|var/tmp/homelab-vzdump-v2-v2-vm130-20260919T154616Z-ab7315f9c04c/vzdump-qemu-130-2026_09_19-18_46_18.vma.zst|10721856155|1789833031|16|1d223d548834b1b185c3bb6e3351cf5e8f922b3a415a7ae54da701495ffdcc66 -LOCAL_NEWER_VM130_ARCHIVE_COUNT=0 -TEMP_BACKUP_REFERENCE_FILE_COUNT=0 -CURRENT_BACKUP_RELATED_FILE_COUNT=5 -REC|CURRENT_BACKUP_RELATED_FILE|usr/local/libexec/homelab-cloud-quorum-payload|df9e19485e5d87112bf58bf77bdddf3b9b896418dd85ff945a31cd5b6817f352|VZDUMP=0|RCLONE=26|BACKUP=14 -REC|CURRENT_BACKUP_RELATED_FILE|usr/local/libexec/homelab-vm-cloud-quorum-freshness-probe|bd6257397c6ea910df2ea0dd57252b33bccd0bbd965175840486dfe5e079bf96|VZDUMP=0|RCLONE=0|BACKUP=11 -REC|CURRENT_BACKUP_RELATED_FILE|usr/local/libexec/homelab-vm-cloud-quorum-node-worker|91bdd116be865560a38105dffbd1a66d687232035e2359e4a5be4d225e9c61d1|VZDUMP=15|RCLONE=8|BACKUP=19 -REC|CURRENT_BACKUP_RELATED_FILE|usr/local/sbin/homelab-rclone-crypt-healthcheck.sh|0478621221487845b57482958a03a7312e62079755a1ea05eaeaf547c190b76a|VZDUMP=0|RCLONE=7|BACKUP=5 -REC|CURRENT_BACKUP_RELATED_FILE|usr/local/sbin/homelab-rclone-required-check.sh|bca15ae3f67dd2d9ef5aa04a2270f7ec7de45b9f99f39ff72288df183d884cf4|VZDUMP=0|RCLONE=7|BACKUP=0 -CURRENT_BACKUP_RELATED_UNIT_COUNT=2 -REC|CURRENT_BACKUP_RELATED_UNIT|dpkg-db-backup.service|08b71e545d90777929e14260130019cf32973ff56fab9c18457279a1c3a748d9 -REC|CURRENT_BACKUP_RELATED_UNIT|dpkg-db-backup.timer|2d3f67ffbd70312144e7859decc60b13f389407b28bd881be586e679574d4a2f -BACKUP_RELATED_TIMER_COUNT=0 -BACKUP_WINDOW_JOURNAL_RC=0 -BACKUP_WINDOW_JOURNAL_MATCH_COUNT=0 -BACKUP_WINDOW_VZDUMP_COUNT=0 -BACKUP_WINDOW_RCLONE_COUNT=0 -BACKUP_WINDOW_BACKUP_COUNT=0 -BACKUP_WINDOW_ERROR_COUNT=0 -BACKUP_WINDOW_SUCCESS_COUNT=0 -BACKUP_WINDOW_VM130_COUNT=0 -BACKUP_WINDOW_TEMP_PREFIX_COUNT=0 -RCLONE_LISTREMOTES_RC=0 -RCLONE_REMOTE_COUNT=26 -RCLONE_REMOTE_ba989ba2ee74_RC=0 -RCLONE_REMOTE_ba989ba2ee74_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -RCLONE_REMOTE_ba989ba2ee74_VM130_ARCHIVE_COUNT=0 -RCLONE_REMOTE_d6f277cbb6b3_RC=0 -RCLONE_REMOTE_d6f277cbb6b3_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -RCLONE_REMOTE_d6f277cbb6b3_VM130_ARCHIVE_COUNT=0 -RCLONE_REMOTE_09cffd1ef8e9_RC=0 -RCLONE_REMOTE_09cffd1ef8e9_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -RCLONE_REMOTE_09cffd1ef8e9_VM130_ARCHIVE_COUNT=0 -RCLONE_REMOTE_f5d7b1f80ac6_RC=0 -RCLONE_REMOTE_f5d7b1f80ac6_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -RCLONE_REMOTE_f5d7b1f80ac6_VM130_ARCHIVE_COUNT=0 -RCLONE_REMOTE_853fb3c4a4ae_RC=0 -RCLONE_REMOTE_853fb3c4a4ae_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -RCLONE_REMOTE_853fb3c4a4ae_VM130_ARCHIVE_COUNT=0 -RCLONE_REMOTE_e089ce77dae7_RC=0 -RCLONE_REMOTE_e089ce77dae7_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -RCLONE_REMOTE_e089ce77dae7_VM130_ARCHIVE_COUNT=0 -RCLONE_REMOTE_38a7e061eb54_RC=0 -RCLONE_REMOTE_38a7e061eb54_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -RCLONE_REMOTE_38a7e061eb54_VM130_ARCHIVE_COUNT=0 -RCLONE_REMOTE_995342067a8b_RC=1 -RCLONE_REMOTE_995342067a8b_ERR_SHA=18c91d00d64fae4a0bd5a74f5d3c3b9e48c9f3fd09a89fdc088c883a02c02020 -RCLONE_REMOTE_995342067a8b_VM130_ARCHIVE_COUNT=0 -RCLONE_REMOTE_f17fcdb7a565_RC=0 -RCLONE_REMOTE_f17fcdb7a565_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -RCLONE_REMOTE_f17fcdb7a565_VM130_ARCHIVE_COUNT=0 -RCLONE_REMOTE_4f35325e339b_RC=0 -RCLONE_REMOTE_4f35325e339b_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -RCLONE_REMOTE_4f35325e339b_VM130_ARCHIVE_COUNT=0 -RCLONE_REMOTE_826f9e273863_RC=0 -RCLONE_REMOTE_826f9e273863_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -RCLONE_REMOTE_826f9e273863_VM130_ARCHIVE_COUNT=0 -RCLONE_REMOTE_d4b56f8204a4_RC=0 -RCLONE_REMOTE_d4b56f8204a4_ERR_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -RCLONE_REMOTE_d4b56f8204a4_VM130_ARCHIVE_COUNT=0 -RCLONE_NEWER_VM130_ARCHIVE_COUNT=0 -RCLONE_TOTAL_VM130_ARCHIVE_COUNT=0 -Traceback (most recent call last): - File "", line 240, in -AttributeError: 'int' object has no attribute 'returncode' +NODE_HOSTNAME=pve01 +NODE_KERNEL=7.0.12-1-pve +UNIFIED_SHA=21b1d1cc675e0472f05234f3cc160a43f603427a7ae6a511040ef7fb38722e5d +V2_SHA=89769a5564a8c208ac64a9edbcfa0942d516ec9c9c362595dd0120f091800989 +HELPER_SHA=c681c44be7557d192d7b453b67e31164237874596168f1d4c78e1e926e2e9cb4 +ROLLBACK_UNIFIED_SHA=2f526330152d49461ff66f50adab57d1a195ea5d1b4c292945d523411b8a68a8 +UNIFIED_TARGET_COUNT_NOW=20 +UNIFIED_TARGET_COUNT_PRE99670=21 +REC|UNIFIED_LIFECYCLE_COUNT|ACTIVE|15 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm110|KIND=VM|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm111|KIND=VM|OWNER=pve02 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm112|KIND=VM|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm113|KIND=VM|OWNER=pve02 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm130|KIND=VM|OWNER=pve03 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm150|KIND=VM|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm170|KIND=VM|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm171|KIND=VM|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm190|KIND=VM|OWNER=pve03 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=vm9130|KIND=VM|OWNER=pve02 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-filebrowser|KIND=APP|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-skladchik-reports-monitor|KIND=APP|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-immich|KIND=APP|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=app-hbarhub|KIND=APP|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|ACTIVE|LOGICAL_ID=control-bootstrap-v2|KIND=CONTROL|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_COUNT|RETIRED_PRESERVE|5 +REC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=app-memos|KIND=APP|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=app-skladchik-moderator-assistant|KIND=APP|OWNER=pve01 +REC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=vm180|KIND=VM|OWNER=pve02 +REC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=vm200|KIND=VM|OWNER=pve03 +REC|UNIFIED_LIFECYCLE_EXAMPLE|RETIRED_PRESERVE|LOGICAL_ID=app-scrutiny|KIND=APP|OWNER=pve01 +UNIFIED_VM160_COUNT_NOW=0 +UNIFIED_VM160_COUNT_PRE99670=1 +REC|UNIFIED_VM160_PRE|KEYS=id,kind,lifecycle,logical_id,owner +REC|UNIFIED_VM160_PRE|KIND=VM|LIFECYCLE=ACTIVE|OWNER=pve02 +REGISTRY_HELPER_PARSE_START +REGISTRY_HELPER_BASH_N_RC=0 +REC|HELPER_SCHEMA_SOURCE|LINE=6|assert_file(){ [[ -s "STR_SHA_060e76138f09" && ! -L "STR_SHA_060e76138f09" ]] || die REGISTRY_FILE_UNSAFE 66; } +REC|HELPER_SCHEMA_SOURCE|LINE=7|validate(){ +REC|HELPER_SCHEMA_SOURCE|LINE=8|assert_file +REC|HELPER_SCHEMA_SOURCE|LINE=9|jq -e ' +REC|HELPER_SCHEMA_SOURCE|LINE=10|.schema=="homelab-backup-target-registry-v1" and +REC|HELPER_SCHEMA_SOURCE|LINE=11|.registry_version==1 and +REC|HELPER_SCHEMA_SOURCE|LINE=12|.policies.retention_keep.VM==2 and .policies.retention_keep.APP==7 and .policies.retention_keep.CONTROL==4 and +REC|HELPER_SCHEMA_SOURCE|LINE=13|.policies.freshness_seconds.VM==72000 and .policies.freshness_seconds.APP==72000 and .policies.freshness_seconds.CONTROL==86400 and +REC|HELPER_SCHEMA_SOURCE|LINE=14|(.targets|type)=="array" and (.targets|length)==21 and +REC|HELPER_SCHEMA_SOURCE|LINE=15|([.targets[].id]|length)==([.targets[].id]|unique|length) and +REC|HELPER_SCHEMA_SOURCE|LINE=16|([.targets[].logical_id]|length)==([.targets[].logical_id]|unique|length) and +REC|HELPER_SCHEMA_SOURCE|LINE=17|([.targets[]|select(.kind=="VM" and .lifecycle=="ACTIVE")]|length)==11 and +REC|HELPER_SCHEMA_SOURCE|LINE=18|([.targets[]|select(.kind=="APP" and .lifecycle=="ACTIVE")]|length)==4 and +REC|HELPER_SCHEMA_SOURCE|LINE=19|([.targets[]|select(.kind=="APP" and .lifecycle=="RETIRED_PRESERVE")]|length)==3 and +REC|HELPER_SCHEMA_SOURCE|LINE=20|([.targets[]|select(.kind=="CONTROL" and .lifecycle=="ACTIVE")]|length)==1 and +REC|HELPER_SCHEMA_SOURCE|LINE=21|([.targets[]|select((.kind!="VM" and .kind!="APP" and .kind!="CONTROL") or (.lifecycle!="ACTIVE" and .lifecycle!="RETIRED_PRESERVE"))]|length)==0 and +REC|HELPER_SCHEMA_SOURCE|LINE=22|([.targets[]|select(.kind=="VM")|select(.owner!="pve01" and .owner!="pve02" and .owner!="pve03")]|length)==0 and +REC|HELPER_SCHEMA_SOURCE|LINE=23|([.systemd_expectations[].unit]|length)==([.systemd_expectations[].unit]|unique|length) and +REC|HELPER_SCHEMA_SOURCE|LINE=24|([.systemd_expectations[]|select(.expected_state!="ENABLED_ACTIVE" and .expected_state!="ABSENT")]|length)==0 +REC|HELPER_SCHEMA_SOURCE|LINE=25|' "STR_SHA_060e76138f09" >PATH_REDACTED || die REGISTRY_SCHEMA_INVALID 66 +REC|HELPER_SCHEMA_SOURCE|LINE=26|} +REC|HELPER_SCHEMA_SOURCE|LINE=27|rows(){ validate; jq -r '.targets[]|[.kind,.id,.logical_id,.owner,.lifecycle,(.source_host/PATH_REDACTED,((.migrate/PATH_REDACTED "STR_SHA_060e76138f09"; } +REC|HELPER_SCHEMA_SOURCE|LINE=28|find_by_id(){ local kind="STR_SHA_c1b43b36df09" id="STR_SHA_fc4d602aa161"; validate; jq -er --arg k "STR_SHA_e4bc76ce5c49" --arg i "STR_SHA_ec4918e40d55" 'STR_SHA_95b645f19a43' "STR_SHA_060e76138f09"; } +REC|HELPER_SCHEMA_SOURCE|LINE=29|find_by_logical(){ local logical="STR_SHA_c1b43b36df09"; validate; jq -er --arg l "STR_SHA_49411c7ad16d" 'STR_SHA_f2080f9514b9' "STR_SHA_060e76138f09"; } +REC|HELPER_SCHEMA_SOURCE|LINE=30|case "STR_SHA_47688171c2f1" in +REC|HELPER_SCHEMA_SOURCE|LINE=31|validate) [[ "STR_SHA_984bfec110aa" == 1 ]] || die USAGE 64; validate; printf 'STR_SHA_413ae53f1553' ;; +REC|HELPER_SCHEMA_SOURCE|LINE=32|active-vm-ids) [[ "STR_SHA_984bfec110aa" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_9fee448edc18' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=33|active-app-ids) [[ "STR_SHA_984bfec110aa" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_c25a70c95b29' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=34|migrate-app-ids) [[ "STR_SHA_984bfec110aa" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_c7791a90ad7b' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=35|app-active) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; find_by_id APP "STR_SHA_fc4d602aa161" | jq -e 'STR_SHA_7027d7777639' >PATH_REDACTED ;; +REC|HELPER_SCHEMA_SOURCE|LINE=36|app-logical) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; find_by_id APP "STR_SHA_fc4d602aa161" | jq -er 'STR_SHA_35a51cca66c0' ;; +REC|HELPER_SCHEMA_SOURCE|LINE=37|app-source-host) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; find_by_id APP "STR_SHA_fc4d602aa161" | jq -er 'STR_SHA_bda5c8d010bc' ;; +REC|HELPER_SCHEMA_SOURCE|LINE=38|logical-owner) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; find_by_logical "STR_SHA_fc4d602aa161" | jq -er '.owner' ;; +REC|HELPER_SCHEMA_SOURCE|LINE=39|lifecycle) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; find_by_logical "STR_SHA_fc4d602aa161" | jq -er '.lifecycle' ;; +REC|HELPER_SCHEMA_SOURCE|LINE=40|retention-logicals) [[ "STR_SHA_984bfec110aa" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_82d76addc312' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=41|retention-keep) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; rec="STR_SHA_7534d8d5f95b"$2"STR_SHA_ba5ec51d07a4"; life="STR_SHA_454c6a8e3109"$rec"STR_SHA_ba5ec51d07a4"; [[ "STR_SHA_84a56cce4890" == ACTIVE ]] || die RETENTION_KEEP_NOT_ACTIVE 64; kind="STR_SHA_df9501a81fc8"$rec"STR_SHA_ba5ec51d07a4"; jq -er --arg k "STR_SHA_e4bc76ce5c49" 'STR_SHA_dafe51033d40' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=42|policy-keep) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; validate; jq -er --arg k "STR_SHA_fc4d602aa161" 'STR_SHA_dafe51033d40' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=43|freshness-seconds) [[ "STR_SHA_984bfec110aa" == 2 ]] || die USAGE 64; validate; jq -er --arg k "STR_SHA_fc4d602aa161" 'STR_SHA_ce57d65e7846' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=44|systemd-expectations) [[ "STR_SHA_984bfec110aa" == 1 ]] || die USAGE 64; validate; jq -r 'STR_SHA_fe303dc2f08c' "STR_SHA_060e76138f09" ;; +REC|HELPER_SCHEMA_SOURCE|LINE=45|rows) [[ "STR_SHA_984bfec110aa" == 1 ]] || die USAGE 64; rows ;; +REC|HELPER_SCHEMA_SOURCE|LINE=46|*) die USAGE_validate_active-vm-ids_active-app-ids_migrate-app-ids_app-active_app-logical_app-source-host_logical-owner_lifecycle_retention-logicals_retention-keep_policy-keep_freshness-seconds_systemd-expectations_rows 64 ;; +REC|HELPER_SCHEMA_SOURCE|LINE=47|esac +HELPER_APP_SOURCE_HOST_RC=4 +HELPER_APP_SOURCE_HOST_STDOUT_LINES=0 +HELPER_APP_SOURCE_HOST_STDERR_LINES=1 +REC|HELPER_QUERY_ERR|1|TARGET_REGISTRY_ERROR=REGISTRY_SCHEMA_INVALID +V2_TARGET_COUNT=28 +V2_ENABLED_TRUE_COUNT=25 +V2_ENABLED_FALSE_COUNT=3 +REC|V2_DISABLED_EXAMPLE|LOGICAL_ID=md-relay|TYPE=vps_md|VMID=|NODE= +REC|V2_DISABLED_EXAMPLE|LOGICAL_ID=spb-ingress|TYPE=vps_spb|VMID=|NODE= +REC|V2_DISABLED_EXAMPLE|LOGICAL_ID=us-netbird|TYPE=vps_us|VMID=|NODE= +V2_VMID160_COUNT=7 +V2_VMID160_ENABLED_TRUE_COUNT=7 +REC|V2_VMID160_SEMANTIC|LOGICAL_ID=vm160|TYPE=pve_guest|ENABLED=True|GREEN1=False|VMID=160|NODE= +REC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-codevipe|TYPE=xenforo|ENABLED=True|GREEN1=True|VMID=160|NODE=pve02 +REC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-dsmods|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02 +REC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-kingofwolk|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02 +REC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-gamevipe|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02 +REC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-hkmods|TYPE=xenforo|ENABLED=True|GREEN1=False|VMID=160|NODE=pve02 +REC|V2_VMID160_SEMANTIC|LOGICAL_ID=xf-zakrutim|TYPE=xenforo|ENABLED=True|GREEN1=True|VMID=160|NODE=pve02 +ENGINE_FOUND=true +ENGINE_SHA=b6e79f087b9f1d21dac4f77a7b46b743299bbb85bc716e80d2ea67c2e038bcd7 +REC|ENGINE_SEMANTIC_FUNC|load_targets|FOUND=true +REC|ENGINE_SEMANTIC_SOURCE|load_targets|1|def load_targets(): +REC|ENGINE_SEMANTIC_SOURCE|load_targets|3|if j.get('schema')!=1 or not isinstance(j.get('targets'),list): raise BackupError('TARGET_MANIFEST_SCHEMA') +REC|ENGINE_SEMANTIC_SOURCE|load_targets|4|ids=[x.get('logical_id') for x in j['targets']] +REC|ENGINE_SEMANTIC_SOURCE|load_targets|6|return j['targets'] +REC|ENGINE_SEMANTIC_FUNC|choose_due_target|FOUND=true +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|1|def choose_due_target(targets,state,now=None): +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|4|for t in targets: +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|5|if not t.get('enabled',True): continue +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|6|due=max(1,int(t.get('due_seconds',86400))) +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|7|last=int(state.get(t['logical_id'],{}).get('last_success_epoch',0)) +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|9|if last==0 or age>=due: c.append((-(age/due),last,t['logical_id'],t)) +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|10|if not c: return None +REC|ENGINE_SEMANTIC_SOURCE|choose_due_target|12|return c[0][3] +REC|ENGINE_SEMANTIC_FUNC|scheduled_run|FOUND=true +REC|ENGINE_SEMANTIC_SOURCE|scheduled_run|2|targets=load_targets(); state=load_state_all(); t=choose_due_target(targets,state) +REC|ENGINE_SEMANTIC_SOURCE|scheduled_run|4|print('SCHEDULE_DECISION=DEFER_NO_DUE_TARGET'); return 0 +REC|ENGINE_SEMANTIC_SOURCE|scheduled_run|5|print('SCHEDULE_TARGET='+t['logical_id']) +REC|ENGINE_SEMANTIC_SOURCE|scheduled_run|6|try: backup_target(t,green_verify=False) +REC|ENGINE_SEMANTIC_SOURCE|scheduled_run|8|print('SCHEDULE_RESULT=FAIL'); print('SCHEDULE_REASON='+e.code); return 2 +REC|ENGINE_SEMANTIC_SOURCE|scheduled_run|9|print('SCHEDULE_RESULT=SUCCESS'); return 0 +VM160_LIVE_CLUSTER_MATCH_COUNT=0 +CEPH_ENTERPRISE_DISABLED=true +PVEENT_ENTERPRISE_DISABLED=true +PVE_NO_SUBSCRIPTION_ACTIVE=true +APT_FULL_UPGRADE_SIM_RC=0 +APT_FULL_UPGRADE_SIM_UPGRADE_COUNT=184 +APT_FULL_UPGRADE_SIM_REMOVE_COUNT=0 +DECISION=PASS_PVE01_RETIRE_SEMANTICS_REGISTRY_GATE +NEXT_GATE=PVE01_DUAL_REGISTRY_RETIRE_REPAIR +TASK_RESULT=PVE01_RETIRE_SEMANTICS_REGISTRY_GATE +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-261006-PVE01-RETIRE-SEMANTICS-REGISTRY-GATE-99676R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} OUTPUT_END CHAT_OUTPUT_END