diff --git a/runtime/history/SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1.json b/runtime/history/SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1.json new file mode 100644 index 00000000..5f9e2a62 --- /dev/null +++ b/runtime/history/SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "infra-dr-backupv2-pve-lxc-idmap-wiring-proven-dry-run", + "started_at_utc": "2026-09-15T11:11:46Z", + "finished_at_utc": "2026-09-15T11:12:29Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "18362dd75b65a49ddaf94ddb937e5a756d32c3cd6d06a2994b6062d0db3a7c98", + "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": "d6bc4a986d7adc563929a92c7cda7906ea26b1115217444324c6eda3e6190138", + "sanitized_output_sha256": "d6bc4a986d7adc563929a92c7cda7906ea26b1115217444324c6eda3e6190138", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1\nMODE=READ_ONLY_PVE_LXC_FRESH_PLAN_REAL_DRY_RUN\nNO_BACKUP_EXECUTION=YES\nNO_VZDUMP_EXECUTION=YES\nNO_CLOUD_ACCESS=YES\nNO_SYSTEMD_MUTATION=YES\nNO_PRODUCTION_PROMOTION=YES\nANCHOR_BINDINGS=PASS\nPRODUCTION_AND_CANDIDATE_IDENTITY=PASS\nRUNTIME_QUIESCENCE=PASS\nEXACT_OWNER_GRAPH=PASS\nVALIDATE_JOB_SIGNATURE_BOUND=PASS\nIDMAP_SIGNATURES_BOUND=PASS\nLIVE_INPUT_SCHEMAS={\"config_keys\":[\"arch\",\"cores\",\"digest\",\"features\",\"hostname\",\"memory\",\"nameserver\",\"net0\",\"onboot\",\"ostype\",\"rootfs\",\"searchdomain\",\"startup\",\"swap\",\"unprivileged\"],\"row_keys\":[\"cpu\",\"disk\",\"diskread\",\"diskwrite\",\"id\",\"maxcpu\",\"maxdisk\",\"maxmem\",\"mem\",\"memhost\",\"name\",\"netin\",\"netout\",\"node\",\"status\",\"template\",\"type\",\"uptime\",\"vmid\"],\"storage_row_count\":2}\nNORMALIZED_CONFIG_DICT=PASS\nLIVE_DEFAULTS_SOURCE=PASS\nLIVE_DEFAULTS_SHA256=cf34c8e3812547954bb1d08b50212b6e148ee9cf2b629e895a843ed49d623b38\nLIVE_DEFAULTS_SUMMARY={\"blockers\":[],\"keys\":[],\"present\":true,\"sha256\":\"cf34c8e3812547954bb1d08b50212b6e148ee9cf2b629e895a843ed49d623b38\"}\nLIVE_STORAGE_ROW_KEYS=[[\"active\",\"avail\",\"content\",\"enabled\",\"shared\",\"storage\",\"total\",\"type\",\"used\",\"used_fraction\"],[\"active\",\"avail\",\"content\",\"enabled\",\"shared\",\"storage\",\"total\",\"type\",\"used\",\"used_fraction\"]]\nFRESH_CT112_JOB={\"archive_cap_bytes\":9516036916,\"blockers\":[],\"config_sha256\":\"6973478281aeee0a6c19cd0ab96f5e9ebd88cf5a7e767a49d808e25806758351\",\"configured_archive_bound_bytes\":9516036916,\"configured_disk_bytes\":8589934592,\"coverage_eligible\":true,\"global_defaults_sha256\":\"cf34c8e3812547954bb1d08b50212b6e148ee9cf2b629e895a843ed49d623b38\",\"local_reserve_bytes\":4294967296,\"node\":\"pve01\",\"status\":\"running\",\"type\":\"lxc\",\"vmid\":112}\nFRESH_PLAN_SHA256=f597ec7c565cfbe73aa594c6237d7a825a13a7ef1bfa7f4e47219e492c783a99\nFRESH_PLAN_AND_VALIDATE_JOB=PASS\nVALIDATE_JOB_NOW_DELTA=0\nPVE_CURRENT_ROOT_UID=100000\nPVE_CURRENT_ROOT_GID=100000\nPVE_CURRENT_IDMAP_SHA256=bd754ab7f1f3e547deba05321fe778a10c2933b3318bc09c1d7b0f07b0902b14\nHOST_MAPPING_ALREADY_VALIDATED=PASS\nCANONICAL_MAPPING_FOR_PRODUCER=PASS\nMAPPED_SCRATCH_META={\"gid\":100000,\"mode\":\"0710\",\"uid\":0}\nMAPPED_UID_ACCESS_AND_ISOLATION_PROBE=PASS\nDUMP_ARGV_SHA256=bcf9f888f0046918917de404f0203182dbd52b568415735bff00622d771968ab\nDUMP_ARGV_TOKEN_COUNT=26\nDUMP_ARGV_GENERATED_NOT_EXECUTED=PASS\nPVE265_VALIDATE_TOOLS_SIGNATURE=(tools)\nPVE282_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, expected_config, seconds=14400, emit= at 0x7a9466023920>)\nPVE270_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, seconds=14400, emit= at 0x7a9466021440>)\nPRODUCTION_POST_DRYRUN_UNCHANGED=PASS\nCANDIDATE_POST_DRYRUN_UNCHANGED=PASS\nFRESH_PLAN_REAL_ENVIRONMENT_DRY_RUN=PASS\nPVE270_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, seconds=14400, emit= at 0x7a9466021440>)\nPVE282_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, expected_config, seconds=14400, emit= at 0x7a9466023920>)\nPVE282_SELECT112_SIGNATURE=(current, baseline, now)\nSTATUS=OK\nPHASE=COMPLETE\nREASON=NONE\nNEXT_GATE=CT112_REAL_BACKUP_1_PROVEN_PRODUCER\nCHANGES_MADE=false\nMUTATION_OUTCOME=NO_PERSISTENT_MUTATION\nPRODUCTION_PROMOTION=NO\nBACKUP_EXECUTIONS=0\nVZDUMP_EXECUTIONS=0\nCLOUD_WRITES=0\nCLOUD_DELETIONS=0\nSYSTEMD_MUTATIONS=0\nSCHEDULER_CUTOVER=NO\nLEGACY_BACKUP_DISABLES=0\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n" +} diff --git a/runtime/history/SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1.txt b/runtime/history/SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1.txt new file mode 100644 index 00000000..f86aca61 --- /dev/null +++ b/runtime/history/SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1.txt @@ -0,0 +1,89 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=infra-dr-backupv2-pve-lxc-idmap-wiring-proven-dry-run +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=18362dd75b65a49ddaf94ddb937e5a756d32c3cd6d06a2994b6062d0db3a7c98 +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=d6bc4a986d7adc563929a92c7cda7906ea26b1115217444324c6eda3e6190138 +SANITIZED_OUTPUT_SHA256=d6bc4a986d7adc563929a92c7cda7906ea26b1115217444324c6eda3e6190138 +OUTPUT_BEGIN +COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1 +MODE=READ_ONLY_PVE_LXC_FRESH_PLAN_REAL_DRY_RUN +NO_BACKUP_EXECUTION=YES +NO_VZDUMP_EXECUTION=YES +NO_CLOUD_ACCESS=YES +NO_SYSTEMD_MUTATION=YES +NO_PRODUCTION_PROMOTION=YES +ANCHOR_BINDINGS=PASS +PRODUCTION_AND_CANDIDATE_IDENTITY=PASS +RUNTIME_QUIESCENCE=PASS +EXACT_OWNER_GRAPH=PASS +VALIDATE_JOB_SIGNATURE_BOUND=PASS +IDMAP_SIGNATURES_BOUND=PASS +LIVE_INPUT_SCHEMAS={"config_keys":["arch","cores","digest","features","hostname","memory","nameserver","net0","onboot","ostype","rootfs","searchdomain","startup","swap","unprivileged"],"row_keys":["cpu","disk","diskread","diskwrite","id","maxcpu","maxdisk","maxmem","mem","memhost","name","netin","netout","node","status","template","type","uptime","vmid"],"storage_row_count":2} +NORMALIZED_CONFIG_DICT=PASS +LIVE_DEFAULTS_SOURCE=PASS +LIVE_DEFAULTS_SHA256=cf34c8e3812547954bb1d08b50212b6e148ee9cf2b629e895a843ed49d623b38 +LIVE_DEFAULTS_SUMMARY={"blockers":[],"keys":[],"present":true,"sha256":"cf34c8e3812547954bb1d08b50212b6e148ee9cf2b629e895a843ed49d623b38"} +LIVE_STORAGE_ROW_KEYS=[["active","avail","content","enabled","shared","storage","total","type","used","used_fraction"],["active","avail","content","enabled","shared","storage","total","type","used","used_fraction"]] +FRESH_CT112_JOB={"archive_cap_bytes":9516036916,"blockers":[],"config_sha256":"6973478281aeee0a6c19cd0ab96f5e9ebd88cf5a7e767a49d808e25806758351","configured_archive_bound_bytes":9516036916,"configured_disk_bytes":8589934592,"coverage_eligible":true,"global_defaults_sha256":"cf34c8e3812547954bb1d08b50212b6e148ee9cf2b629e895a843ed49d623b38","local_reserve_bytes":4294967296,"node":"pve01","status":"running","type":"lxc","vmid":112} +FRESH_PLAN_SHA256=f597ec7c565cfbe73aa594c6237d7a825a13a7ef1bfa7f4e47219e492c783a99 +FRESH_PLAN_AND_VALIDATE_JOB=PASS +VALIDATE_JOB_NOW_DELTA=0 +PVE_CURRENT_ROOT_UID=100000 +PVE_CURRENT_ROOT_GID=100000 +PVE_CURRENT_IDMAP_SHA256=bd754ab7f1f3e547deba05321fe778a10c2933b3318bc09c1d7b0f07b0902b14 +HOST_MAPPING_ALREADY_VALIDATED=PASS +CANONICAL_MAPPING_FOR_PRODUCER=PASS +MAPPED_SCRATCH_META={"gid":100000,"mode":"0710","uid":0} +MAPPED_UID_ACCESS_AND_ISOLATION_PROBE=PASS +DUMP_ARGV_SHA256=bcf9f888f0046918917de404f0203182dbd52b568415735bff00622d771968ab +DUMP_ARGV_TOKEN_COUNT=26 +DUMP_ARGV_GENERATED_NOT_EXECUTED=PASS +PVE265_VALIDATE_TOOLS_SIGNATURE=(tools) +PVE282_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, expected_config, seconds=14400, emit= at 0x7a9466023920>) +PVE270_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, seconds=14400, emit= at 0x7a9466021440>) +PRODUCTION_POST_DRYRUN_UNCHANGED=PASS +CANDIDATE_POST_DRYRUN_UNCHANGED=PASS +FRESH_PLAN_REAL_ENVIRONMENT_DRY_RUN=PASS +PVE270_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, seconds=14400, emit= at 0x7a9466021440>) +PVE282_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, expected_config, seconds=14400, emit= at 0x7a9466023920>) +PVE282_SELECT112_SIGNATURE=(current, baseline, now) +STATUS=OK +PHASE=COMPLETE +REASON=NONE +NEXT_GATE=CT112_REAL_BACKUP_1_PROVEN_PRODUCER +CHANGES_MADE=false +MUTATION_OUTCOME=NO_PERSISTENT_MUTATION +PRODUCTION_PROMOTION=NO +BACKUP_EXECUTIONS=0 +VZDUMP_EXECUTIONS=0 +CLOUD_WRITES=0 +CLOUD_DELETIONS=0 +SYSTEMD_MUTATIONS=0 +SCHEDULER_CUTOVER=NO +LEGACY_BACKUP_DISABLES=0 +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 7b42d7ed..5f9e2a62 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-CONTRACT-CANDIDATE-NATIVE-RCA-421R1", + "command_id": "SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", - "component": "infra-dr-backupv2-pve-lxc-idmap-contract-candidate-native-rca", - "started_at_utc": "2026-09-15T11:06:41Z", - "finished_at_utc": "2026-09-15T11:06:53Z", + "component": "infra-dr-backupv2-pve-lxc-idmap-wiring-proven-dry-run", + "started_at_utc": "2026-09-15T11:11:46Z", + "finished_at_utc": "2026-09-15T11:12:29Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "056155b861fab43d54ae68520023904b66639f1227936c956e28c29060b4603f", + "command_sha256": "18362dd75b65a49ddaf94ddb937e5a756d32c3cd6d06a2994b6062d0db3a7c98", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "9e3f02e6dc4d8c5a99db5d3459a48737764e3247e18c2f621d160f13e38aa5a8", - "sanitized_output_sha256": "9e3f02e6dc4d8c5a99db5d3459a48737764e3247e18c2f621d160f13e38aa5a8", + "raw_evidence_sha256": "d6bc4a986d7adc563929a92c7cda7906ea26b1115217444324c6eda3e6190138", + "sanitized_output_sha256": "d6bc4a986d7adc563929a92c7cda7906ea26b1115217444324c6eda3e6190138", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-CONTRACT-CANDIDATE-NATIVE-RCA-421R1\nMODE=READ_ONLY_PVE_LXC_IDMAP_CANDIDATE_NATIVE_RCA\nNO_PVE_SUBPROCESS=YES\nNO_BACKUP_EXECUTION=YES\nNO_VZDUMP_EXECUTION=YES\nNO_CLOUD_ACCESS=YES\nNO_SYSTEMD_MUTATION=YES\nNO_PRODUCTION_PROMOTION=YES\nANCHOR_BINDINGS=PASS\nCANDIDATE_FILE_NAMES=[\"CONTRACT.json\",\"PLAN265_REFERENCE.json\",\"PROVENANCE.json\",\"adapter.py\",\"guest266.py\",\"large264.py\",\"nodeplan263.py\",\"pve265.py\",\"pve270.py\",\"pve282.py\",\"restore262.py\",\"stream263.py\",\"test_guest266.py\",\"test_perl270.py\",\"test_producer282.py\",\"test_pve265.py\",\"test_pve270.py\",\"test_pve282.py\",\"transport261.py\",\"v2core.py\"]\nPVE268_STAGED=NO\nPRODUCTION_AND_CANDIDATE_IDENTITY=PASS\nEXACT_OWNER_GRAPH=PASS\nPVE270_HOST_MAPPING_CONTRACT={\"calls\":[{\"call\":\"validate_mapping(d)\",\"line\":16},{\"call\":\"t.sha(t.read_secure(Path(p), 2 * 1024 ** 2)[0])\",\"line\":4},{\"call\":\"PerlPin('/usr/bin/perl', '/usr/bin/perl5.40.1')\",\"line\":9},{\"call\":\"pin.run(['-MPVE::LXC', '-MJSON::PP', '-e', code])\",\"line\":10},{\"call\":\"need(rc == 0, 'PVE_IDMAP_READ_FAILED')\",\"line\":11},{\"call\":\"pins.items()\",\"line\":12},{\"call\":\"pin.check()\",\"line\":13},{\"call\":\"json.loads(b)\",\"line\":14},{\"call\":\"need(t.sha(t.read_secure(Path(p), 2 * 1024 ** 2)[0]) == h, 'PVE_MAPPING_SOURCE_CHANGED')\",\"line\":12},{\"call\":\"old.PVEError('PVE_IDMAP_JSON')\",\"line\":15},{\"call\":\"t.read_secure(Path(p), 2 * 1024 ** 2)\",\"line\":4},{\"call\":\"Path(p)\",\"line\":4},{\"call\":\"t.sha(t.read_secure(Path(p), 2 * 1024 ** 2)[0])\",\"line\":12},{\"call\":\"t.read_secure(Path(p), 2 * 1024 ** 2)\",\"line\":12},{\"call\":\"Path(p)\",\"line\":12}],\"need_calls\":[{\"code\":\"PVE_IDMAP_READ_FAILED\",\"line\":11,\"predicate\":\"rc == 0\"},{\"code\":\"PVE_MAPPING_SOURCE_CHANGED\",\"line\":12,\"predicate\":\"t.sha(t.read_secure(Path(p), 2 * 1024 ** 2)[0]) == h\"}],\"returns\":[{\"expr\":\"validate_mapping(d)\",\"line\":16}],\"signature\":\"()\",\"source\":\"def host_mapping():\\n # Scope of the exception is this observed, protected system ELF pair only.\\n # PVE modules and private data retain the original single-link reader.\\n pins={p:t.sha(t.read_secure(Path(p),2*1024**2)[0]) for p in\\n ('/usr/share/perl5/PVE/LXC.pm','/usr/share/perl5/PVE/VZDump/LXC.pm')}\\n code=('my($m,$u,$g)=PVE::LXC::parse_id_maps({unprivileged=>1,lxc=>[]});'\\n 'print JSON::PP->new->canonical->encode({root_uid=>0+$u,root_gid=>0+$g,'\\n 'id_map=>[map {[$_->[0],0+$_->[1],0+$_->[2],0+$_->[3]]} @$m]});')\\n with PerlPin('/usr/bin/perl','/usr/bin/perl5.40.1') as pin:\\n rc,b=pin.run(['-MPVE::LXC','-MJSON::PP','-e',code])\\n need(rc==0,'PVE_IDMAP_READ_FAILED')\\n for p,h in pins.items():need(t.sha(t.read_secure(Path(p),2*1024**2)[0])==h,'PVE_MAPPING_SOURCE_CHANGED')\\n pin.check()\\n try:d=json.loads(b)\\n except (ValueError,UnicodeError):raise old.PVEError('PVE_IDMAP_JSON') from None\\n return validate_mapping(d)\\n\",\"source_sha256\":\"20e436dc2a7e0eba4baf39ab556ef75b404e58736cd744c632063aa19ad824c4\"}\nPVE270_VALIDATE_MAPPING_CONTRACT={\"calls\":[{\"call\":\"need(type(d) is dict and set(d) == {'root_uid', 'root_gid', 'id_map'}, 'IDMAP_SCHEMA')\",\"line\":2},{\"call\":\"need(type(d['root_uid']) is int and type(d['root_gid']) is int, 'IDMAP_VALUE')\",\"line\":3},{\"call\":\"need(d['root_uid'] == d['root_gid'] == 100000, 'ONLY_DEFAULT_UNPRIVILEGED_IDMAP')\",\"line\":4},{\"call\":\"need(type(d['id_map']) is list and len(d['id_map']) == 2, 'IDMAP_ROWS')\",\"line\":6},{\"call\":\"zip(d['id_map'], expect)\",\"line\":7},{\"call\":\"need(type(row) is list and len(row) == 4 and (type(row[0]) is str) and all((type(n) is int for n in row[1:])) and (row == exp), 'IDMAP_NONDEFAULT')\",\"line\":8},{\"call\":\"type(d)\",\"line\":2},{\"call\":\"set(d)\",\"line\":2},{\"call\":\"type(d['root_uid'])\",\"line\":3},{\"call\":\"type(d['root_gid'])\",\"line\":3},{\"call\":\"type(d['id_map'])\",\"line\":6},{\"call\":\"len(d['id_map'])\",\"line\":6},{\"call\":\"all((type(n) is int for n in row[1:]))\",\"line\":8},{\"call\":\"type(row)\",\"line\":8},{\"call\":\"len(row)\",\"line\":8},{\"call\":\"type(row[0])\",\"line\":8},{\"call\":\"type(n)\",\"line\":8}],\"need_calls\":[{\"code\":\"IDMAP_SCHEMA\",\"line\":2,\"predicate\":\"type(d) is dict and set(d) == {'root_uid', 'root_gid', 'id_map'}\"},{\"code\":\"IDMAP_VALUE\",\"line\":3,\"predicate\":\"type(d['root_uid']) is int and type(d['root_gid']) is int\"},{\"code\":\"ONLY_DEFAULT_UNPRIVILEGED_IDMAP\",\"line\":4,\"predicate\":\"d['root_uid'] == d['root_gid'] == 100000\"},{\"code\":\"IDMAP_ROWS\",\"line\":6,\"predicate\":\"type(d['id_map']) is list and len(d['id_map']) == 2\"},{\"code\":\"IDMAP_NONDEFAULT\",\"line\":8,\"predicate\":\"type(row) is list and len(row) == 4 and (type(row[0]) is str) and all((type(n) is int for n in row[1:])) and (row == exp)\"}],\"returns\":[{\"expr\":\"(d['root_uid'], d['root_gid'])\",\"line\":9}],\"signature\":\"(d)\",\"source\":\"def validate_mapping(d):\\n need(type(d) is dict and set(d)=={'root_uid','root_gid','id_map'},'IDMAP_SCHEMA')\\n need(type(d['root_uid']) is int and type(d['root_gid']) is int,'IDMAP_VALUE')\\n need(d['root_uid']==d['root_gid']==100000,'ONLY_DEFAULT_UNPRIVILEGED_IDMAP')\\n expect=[['u',0,100000,65536],['g',0,100000,65536]]\\n need(type(d['id_map']) is list and len(d['id_map'])==2,'IDMAP_ROWS')\\n for row,exp in zip(d['id_map'],expect):\\n need(type(row) is list and len(row)==4 and type(row[0]) is str and all(type(n) is int for n in row[1:]) and row==exp,'IDMAP_NONDEFAULT')\\n return d['root_uid'],d['root_gid']\\n\",\"source_sha256\":\"a1cc0bc448cab9212429924789e81ba7ebbc333380aa03477ca7807da28407aa\"}\nIDMAP_AND_PRODUCER_CALL_SITES=[{\"calls\":[{\"call\":\"validate_mapping(d)\",\"line\":154,\"owner\":\"host_mapping\"},{\"call\":\"validate_mapping(mapping)\",\"line\":295,\"owner\":\"produce\"}],\"file\":\"pve270.py\",\"sha256\":\"97015277a4f3f8129c0fd11eb70c06293026366f1f8232a97feeed513a2dbcef\"},{\"calls\":[{\"call\":\"validate_mapping(mapping)\",\"line\":68,\"owner\":\"produce\"}],\"file\":\"pve282.py\",\"sha256\":\"73c6cb7773eb8e82d1e7ed5ab4733b4afb88f74ae69c09125d0378d6e480e012\"},{\"calls\":[{\"call\":\"produce(job, work / 'producer')\",\"line\":92,\"owner\":\"run_flow\"}],\"file\":\"guest266.py\",\"sha256\":\"86433bc424d5fa5017c20f7a237c82874b02357a3283660d8a6b0039ef2bc868\"},{\"calls\":[],\"file\":\"adapter.py\",\"sha256\":\"18eb29cef165371b48bcb78e1a456e1939e6eff253787218133162cc89ab9fa3\"},{\"calls\":[{\"call\":\"f.produce(job, self.work, tools, lambda: None, mapping=MAP, emit=lambda k, v: self.events.append((k, v)))\",\"line\":172,\"owner\":\"produce\"},{\"call\":\"self.produce()\",\"line\":174,\"owner\":\"test_real_tar_sees_metadata_as_mapped_uid\"},{\"call\":\"f.validate_mapping(MAP)\",\"line\":14,\"owner\":\"test_default_mapping\"},{\"call\":\"f.validate_mapping(d)\",\"line\":17,\"owner\":\"test_root_mapping_refused\"},{\"call\":\"f.validate_mapping(d)\",\"line\":20,\"owner\":\"test_custom_mapping_refused\"},{\"call\":\"f.validate_mapping(d)\",\"line\":23,\"owner\":\"test_bool_mapping_refused\"},{\"call\":\"f.validate_mapping(d)\",\"line\":26,\"owner\":\"test_extra_mapping_fields_refused\"},{\"call\":\"self.produce(fail=True)\",\"line\":178,\"owner\":\"test_producer_failed_archive_retained\"},{\"call\":\"self.produce(leftover=True)\",\"line\":182,\"owner\":\"test_nonempty_pve_temp_blocks_success\"},{\"call\":\"f.produce(j, p, tools, lambda: None, mapping=MAP, emit=lambda k, v: self.events.append((k, v)))\",\"line\":191,\"owner\":\"test_fresh_archive_flows_through_existing_two_replica_engine\"}],\"file\":\"test_pve270.py\",\"sha256\":\"9fccd20b490613fdd5b14b4105cf0d9fd744f204e1ed1d6893e54c9f69bf6fb4\"},{\"calls\":[{\"call\":\"f.produce(job, self.work, tools, lambda: None, mapping=MAP, expected_config=job['config_sha256'], emit=lambda k, v: self.events.append((k, v)))\",\"line\":173,\"owner\":\"produce\"},{\"call\":\"self.produce()\",\"line\":175,\"owner\":\"test_real_tar_sees_metadata_as_mapped_uid\"},{\"call\":\"f.validate_mapping(MAP)\",\"line\":14,\"owner\":\"test_default_mapping\"},{\"call\":\"f.validate_mapping(d)\",\"line\":17,\"owner\":\"test_root_mapping_refused\"},{\"call\":\"f.validate_mapping(d)\",\"line\":20,\"owner\":\"test_custom_mapping_refused\"},{\"call\":\"f.validate_mapping(d)\",\"line\":23,\"owner\":\"test_bool_mapping_refused\"},{\"call\":\"f.validate_mapping(d)\",\"line\":26,\"owner\":\"test_extra_mapping_fields_refused\"},{\"call\":\"self.produce(fail=True)\",\"line\":179,\"owner\":\"test_producer_failed_archive_retained\"},{\"call\":\"self.produce(leftover=True)\",\"line\":183,\"owner\":\"test_nonempty_pve_temp_blocks_success\"},{\"call\":\"f.produce(j, p, tools, lambda: None, mapping=MAP, expected_config=job['config_sha256'], emit=lambda k, v: self.events.append((k, v)))\",\"line\":192,\"owner\":\"test_fresh_archive_flows_through_existing_two_replica_engine\"}],\"file\":\"test_producer282.py\",\"sha256\":\"a67d927cc428935791f9eecc3acf571d089f80761162f4589b7d684fba6b8af7\"},{\"calls\":[{\"call\":\"f.select112(a, b, NOW)\",\"line\":35,\"owner\":\"test_input_unchanged\"},{\"call\":\"f.select112(a, b, NOW)\",\"line\":38,\"owner\":\"reject\"},{\"call\":\"f.select112(plan(), plan(), NOW + 301)\",\"line\":43,\"owner\":\"test_stale\"},{\"call\":\"f.select112(plan(), plan(), NOW - 1)\",\"line\":45,\"owner\":\"test_future\"},{\"call\":\"f.select112(plan(), plan(), NOW)\",\"line\":28,\"owner\":\"test_selects_only112\"},{\"call\":\"f.select112(a, b, NOW)\",\"line\":33,\"owner\":\"test_configured_16g_ct_fits_without_compression\"}],\"file\":\"test_pve282.py\",\"sha256\":\"1056407aab76e17181b05e043cb42c086058545a8e0027689ab4e03eee6531c4\"}]\nHISTORICAL_MAPPING_FIXTURES=[{\"file\":\"test_pve270.py\",\"fixtures\":[{\"keys\":[\"root_uid\",\"root_gid\",\"id_map\"],\"kind\":\"Dict\",\"line\":7,\"name\":\"MAP\",\"value_types\":[\"Constant\",\"Constant\",\"List\"]}]},{\"file\":\"test_producer282.py\",\"fixtures\":[{\"keys\":[\"root_uid\",\"root_gid\",\"id_map\"],\"kind\":\"Dict\",\"line\":7,\"name\":\"MAP\",\"value_types\":[\"Constant\",\"Constant\",\"List\"]}]},{\"file\":\"test_pve282.py\",\"fixtures\":[]}]\nADAPTER_IDMAP_RELEVANT_FUNCTIONS=[{\"line\":24,\"name\":\"load_graph\",\"source\":\"def load_graph():\\n import guest266,pve265,pve270,pve282\\n if hasattr(guest266,'dump_argv'):raise RuntimeError('GUEST266_UNEXPECTED_DUMP_ARGV')\\n if not hasattr(pve265,'dump_argv'):raise RuntimeError('PVE265_DUMP_ARGV_MISSING')\\n if getattr(pve270,'old',None) is not pve265:raise RuntimeError('PVE270_OLD_NOT_PVE265')\\n if getattr(pve282,'old',None) is not pve265:raise RuntimeError('PVE282_OLD_NOT_PVE265')\\n if getattr(pve282,'proven',None) is not pve270:raise RuntimeError('PVE282_PROVEN_NOT_PVE270')\\n for n in ('MappedScratch','capture_archive','validate_mapping'):\\n if not hasattr(pve270,n):raise RuntimeError('PVE270_'+n.upper()+'_MISSING')\\n if getattr(pve282,n,None) is not getattr(pve270,n):raise RuntimeError('PVE282_ALIAS_'+n.upper()+'_MISMATCH')\\n return guest266,pve265,pve270,pve282\",\"source_sha256\":\"2bacff83d3a642869c23d0cf65303f0a7176317c36f0050d1b51758658b1b207\"},{\"line\":35,\"name\":\"describe\",\"source\":\"def describe():\\n _,p265,p270,p282=load_graph()\\n funcs={'pve265.dump_argv':p265.dump_argv,'pve265.validate_job':p265.validate_job,'pve265.make_plan':p265.make_plan,'pve270.validate_mapping':p270.validate_mapping,'pve270.capture_archive':p270.capture_archive,'pve270.produce':p270.produce,'pve282.select112':p282.select112,'pve282.produce':p282.produce}\\n return {'schema':1,'bundle':'pve-lxc-adapter-411r1','source_sha256':EXPECTED,'signatures':{k:str(inspect.signature(v)) for k,v in funcs.items()},'owner':{'dump_argv':'pve265','MappedScratch':'pve270','capture_archive':'pve270','validate_mapping':'pve270','pve282.old':'pve265','pve282.proven':'pve270'}}\",\"source_sha256\":\"dbb1a6c5def6887543b0130807d4027afeff33283cf0cb74286b45e9800b252d\"}]\nPRODUCTION_POST_RCA_UNCHANGED=PASS\nCANDIDATE_POST_RCA_UNCHANGED=PASS\nSTATUS=OK\nPHASE=COMPLETE\nREASON=NONE\nNEXT_GATE=PVE_LXC_IDMAP_WIRING_PROVEN_DRY_RUN\nCHANGES_MADE=false\nMUTATION_OUTCOME=NO_MUTATION\nPRODUCTION_PROMOTION=NO\nBACKUP_EXECUTIONS=0\nVZDUMP_EXECUTIONS=0\nCLOUD_WRITES=0\nCLOUD_DELETIONS=0\nSYSTEMD_MUTATIONS=0\nSCHEDULER_CUTOVER=NO\nLEGACY_BACKUP_DISABLES=0\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-CONTRACT-CANDIDATE-NATIVE-RCA-421R1\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n" + "output": "COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1\nMODE=READ_ONLY_PVE_LXC_FRESH_PLAN_REAL_DRY_RUN\nNO_BACKUP_EXECUTION=YES\nNO_VZDUMP_EXECUTION=YES\nNO_CLOUD_ACCESS=YES\nNO_SYSTEMD_MUTATION=YES\nNO_PRODUCTION_PROMOTION=YES\nANCHOR_BINDINGS=PASS\nPRODUCTION_AND_CANDIDATE_IDENTITY=PASS\nRUNTIME_QUIESCENCE=PASS\nEXACT_OWNER_GRAPH=PASS\nVALIDATE_JOB_SIGNATURE_BOUND=PASS\nIDMAP_SIGNATURES_BOUND=PASS\nLIVE_INPUT_SCHEMAS={\"config_keys\":[\"arch\",\"cores\",\"digest\",\"features\",\"hostname\",\"memory\",\"nameserver\",\"net0\",\"onboot\",\"ostype\",\"rootfs\",\"searchdomain\",\"startup\",\"swap\",\"unprivileged\"],\"row_keys\":[\"cpu\",\"disk\",\"diskread\",\"diskwrite\",\"id\",\"maxcpu\",\"maxdisk\",\"maxmem\",\"mem\",\"memhost\",\"name\",\"netin\",\"netout\",\"node\",\"status\",\"template\",\"type\",\"uptime\",\"vmid\"],\"storage_row_count\":2}\nNORMALIZED_CONFIG_DICT=PASS\nLIVE_DEFAULTS_SOURCE=PASS\nLIVE_DEFAULTS_SHA256=cf34c8e3812547954bb1d08b50212b6e148ee9cf2b629e895a843ed49d623b38\nLIVE_DEFAULTS_SUMMARY={\"blockers\":[],\"keys\":[],\"present\":true,\"sha256\":\"cf34c8e3812547954bb1d08b50212b6e148ee9cf2b629e895a843ed49d623b38\"}\nLIVE_STORAGE_ROW_KEYS=[[\"active\",\"avail\",\"content\",\"enabled\",\"shared\",\"storage\",\"total\",\"type\",\"used\",\"used_fraction\"],[\"active\",\"avail\",\"content\",\"enabled\",\"shared\",\"storage\",\"total\",\"type\",\"used\",\"used_fraction\"]]\nFRESH_CT112_JOB={\"archive_cap_bytes\":9516036916,\"blockers\":[],\"config_sha256\":\"6973478281aeee0a6c19cd0ab96f5e9ebd88cf5a7e767a49d808e25806758351\",\"configured_archive_bound_bytes\":9516036916,\"configured_disk_bytes\":8589934592,\"coverage_eligible\":true,\"global_defaults_sha256\":\"cf34c8e3812547954bb1d08b50212b6e148ee9cf2b629e895a843ed49d623b38\",\"local_reserve_bytes\":4294967296,\"node\":\"pve01\",\"status\":\"running\",\"type\":\"lxc\",\"vmid\":112}\nFRESH_PLAN_SHA256=f597ec7c565cfbe73aa594c6237d7a825a13a7ef1bfa7f4e47219e492c783a99\nFRESH_PLAN_AND_VALIDATE_JOB=PASS\nVALIDATE_JOB_NOW_DELTA=0\nPVE_CURRENT_ROOT_UID=100000\nPVE_CURRENT_ROOT_GID=100000\nPVE_CURRENT_IDMAP_SHA256=bd754ab7f1f3e547deba05321fe778a10c2933b3318bc09c1d7b0f07b0902b14\nHOST_MAPPING_ALREADY_VALIDATED=PASS\nCANONICAL_MAPPING_FOR_PRODUCER=PASS\nMAPPED_SCRATCH_META={\"gid\":100000,\"mode\":\"0710\",\"uid\":0}\nMAPPED_UID_ACCESS_AND_ISOLATION_PROBE=PASS\nDUMP_ARGV_SHA256=bcf9f888f0046918917de404f0203182dbd52b568415735bff00622d771968ab\nDUMP_ARGV_TOKEN_COUNT=26\nDUMP_ARGV_GENERATED_NOT_EXECUTED=PASS\nPVE265_VALIDATE_TOOLS_SIGNATURE=(tools)\nPVE282_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, expected_config, seconds=14400, emit= at 0x7a9466023920>)\nPVE270_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, seconds=14400, emit= at 0x7a9466021440>)\nPRODUCTION_POST_DRYRUN_UNCHANGED=PASS\nCANDIDATE_POST_DRYRUN_UNCHANGED=PASS\nFRESH_PLAN_REAL_ENVIRONMENT_DRY_RUN=PASS\nPVE270_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, seconds=14400, emit= at 0x7a9466021440>)\nPVE282_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, expected_config, seconds=14400, emit= at 0x7a9466023920>)\nPVE282_SELECT112_SIGNATURE=(current, baseline, now)\nSTATUS=OK\nPHASE=COMPLETE\nREASON=NONE\nNEXT_GATE=CT112_REAL_BACKUP_1_PROVEN_PRODUCER\nCHANGES_MADE=false\nMUTATION_OUTCOME=NO_PERSISTENT_MUTATION\nPRODUCTION_PROMOTION=NO\nBACKUP_EXECUTIONS=0\nVZDUMP_EXECUTIONS=0\nCLOUD_WRITES=0\nCLOUD_DELETIONS=0\nSYSTEMD_MUTATIONS=0\nSCHEDULER_CUTOVER=NO\nLEGACY_BACKUP_DISABLES=0\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 930a8e52..f86aca61 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-CONTRACT-CANDIDATE-NATIVE-RCA-421R1 +COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1 STATUS=OK RC=0 HOST=pve01 MODE=read-only -COMPONENT=infra-dr-backupv2-pve-lxc-idmap-contract-candidate-native-rca +COMPONENT=infra-dr-backupv2-pve-lxc-idmap-wiring-proven-dry-run REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=056155b861fab43d54ae68520023904b66639f1227936c956e28c29060b4603f +COMMAND_SHA256=18362dd75b65a49ddaf94ddb937e5a756d32c3cd6d06a2994b6062d0db3a7c98 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false @@ -24,35 +24,57 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=9e3f02e6dc4d8c5a99db5d3459a48737764e3247e18c2f621d160f13e38aa5a8 -SANITIZED_OUTPUT_SHA256=9e3f02e6dc4d8c5a99db5d3459a48737764e3247e18c2f621d160f13e38aa5a8 +RAW_EVIDENCE_SHA256=d6bc4a986d7adc563929a92c7cda7906ea26b1115217444324c6eda3e6190138 +SANITIZED_OUTPUT_SHA256=d6bc4a986d7adc563929a92c7cda7906ea26b1115217444324c6eda3e6190138 OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-CONTRACT-CANDIDATE-NATIVE-RCA-421R1 -MODE=READ_ONLY_PVE_LXC_IDMAP_CANDIDATE_NATIVE_RCA -NO_PVE_SUBPROCESS=YES +COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1 +MODE=READ_ONLY_PVE_LXC_FRESH_PLAN_REAL_DRY_RUN NO_BACKUP_EXECUTION=YES NO_VZDUMP_EXECUTION=YES NO_CLOUD_ACCESS=YES NO_SYSTEMD_MUTATION=YES NO_PRODUCTION_PROMOTION=YES ANCHOR_BINDINGS=PASS -CANDIDATE_FILE_NAMES=["CONTRACT.json","PLAN265_REFERENCE.json","PROVENANCE.json","adapter.py","guest266.py","large264.py","nodeplan263.py","pve265.py","pve270.py","pve282.py","restore262.py","stream263.py","test_guest266.py","test_perl270.py","test_producer282.py","test_pve265.py","test_pve270.py","test_pve282.py","transport261.py","v2core.py"] -PVE268_STAGED=NO PRODUCTION_AND_CANDIDATE_IDENTITY=PASS +RUNTIME_QUIESCENCE=PASS EXACT_OWNER_GRAPH=PASS -PVE270_HOST_MAPPING_CONTRACT={"calls":[{"call":"validate_mapping(d)","line":16},{"call":"t.sha(t.read_secure(Path(p), 2 * 1024 ** 2)[0])","line":4},{"call":"PerlPin('/usr/bin/perl', '/usr/bin/perl5.40.1')","line":9},{"call":"pin.run(['-MPVE::LXC', '-MJSON::PP', '-e', code])","line":10},{"call":"need(rc == 0, 'PVE_IDMAP_READ_FAILED')","line":11},{"call":"pins.items()","line":12},{"call":"pin.check()","line":13},{"call":"json.loads(b)","line":14},{"call":"need(t.sha(t.read_secure(Path(p), 2 * 1024 ** 2)[0]) == h, 'PVE_MAPPING_SOURCE_CHANGED')","line":12},{"call":"old.PVEError('PVE_IDMAP_JSON')","line":15},{"call":"t.read_secure(Path(p), 2 * 1024 ** 2)","line":4},{"call":"Path(p)","line":4},{"call":"t.sha(t.read_secure(Path(p), 2 * 1024 ** 2)[0])","line":12},{"call":"t.read_secure(Path(p), 2 * 1024 ** 2)","line":12},{"call":"Path(p)","line":12}],"need_calls":[{"code":"PVE_IDMAP_READ_FAILED","line":11,"predicate":"rc == 0"},{"code":"PVE_MAPPING_SOURCE_CHANGED","line":12,"predicate":"t.sha(t.read_secure(Path(p), 2 * 1024 ** 2)[0]) == h"}],"returns":[{"expr":"validate_mapping(d)","line":16}],"signature":"()","source":"def host_mapping():\n # Scope of the exception is this observed, protected system ELF pair only.\n # PVE modules and private data retain the original single-link reader.\n pins={p:t.sha(t.read_secure(Path(p),2*1024**2)[0]) for p in\n ('/usr/share/perl5/PVE/LXC.pm','/usr/share/perl5/PVE/VZDump/LXC.pm')}\n code=('my($m,$u,$g)=PVE::LXC::parse_id_maps({unprivileged=>1,lxc=>[]});'\n 'print JSON::PP->new->canonical->encode({root_uid=>0+$u,root_gid=>0+$g,'\n 'id_map=>[map {[$_->[0],0+$_->[1],0+$_->[2],0+$_->[3]]} @$m]});')\n with PerlPin('/usr/bin/perl','/usr/bin/perl5.40.1') as pin:\n rc,b=pin.run(['-MPVE::LXC','-MJSON::PP','-e',code])\n need(rc==0,'PVE_IDMAP_READ_FAILED')\n for p,h in pins.items():need(t.sha(t.read_secure(Path(p),2*1024**2)[0])==h,'PVE_MAPPING_SOURCE_CHANGED')\n pin.check()\n try:d=json.loads(b)\n except (ValueError,UnicodeError):raise old.PVEError('PVE_IDMAP_JSON') from None\n return validate_mapping(d)\n","source_sha256":"20e436dc2a7e0eba4baf39ab556ef75b404e58736cd744c632063aa19ad824c4"} -PVE270_VALIDATE_MAPPING_CONTRACT={"calls":[{"call":"need(type(d) is dict and set(d) == {'root_uid', 'root_gid', 'id_map'}, 'IDMAP_SCHEMA')","line":2},{"call":"need(type(d['root_uid']) is int and type(d['root_gid']) is int, 'IDMAP_VALUE')","line":3},{"call":"need(d['root_uid'] == d['root_gid'] == 100000, 'ONLY_DEFAULT_UNPRIVILEGED_IDMAP')","line":4},{"call":"need(type(d['id_map']) is list and len(d['id_map']) == 2, 'IDMAP_ROWS')","line":6},{"call":"zip(d['id_map'], expect)","line":7},{"call":"need(type(row) is list and len(row) == 4 and (type(row[0]) is str) and all((type(n) is int for n in row[1:])) and (row == exp), 'IDMAP_NONDEFAULT')","line":8},{"call":"type(d)","line":2},{"call":"set(d)","line":2},{"call":"type(d['root_uid'])","line":3},{"call":"type(d['root_gid'])","line":3},{"call":"type(d['id_map'])","line":6},{"call":"len(d['id_map'])","line":6},{"call":"all((type(n) is int for n in row[1:]))","line":8},{"call":"type(row)","line":8},{"call":"len(row)","line":8},{"call":"type(row[0])","line":8},{"call":"type(n)","line":8}],"need_calls":[{"code":"IDMAP_SCHEMA","line":2,"predicate":"type(d) is dict and set(d) == {'root_uid', 'root_gid', 'id_map'}"},{"code":"IDMAP_VALUE","line":3,"predicate":"type(d['root_uid']) is int and type(d['root_gid']) is int"},{"code":"ONLY_DEFAULT_UNPRIVILEGED_IDMAP","line":4,"predicate":"d['root_uid'] == d['root_gid'] == 100000"},{"code":"IDMAP_ROWS","line":6,"predicate":"type(d['id_map']) is list and len(d['id_map']) == 2"},{"code":"IDMAP_NONDEFAULT","line":8,"predicate":"type(row) is list and len(row) == 4 and (type(row[0]) is str) and all((type(n) is int for n in row[1:])) and (row == exp)"}],"returns":[{"expr":"(d['root_uid'], d['root_gid'])","line":9}],"signature":"(d)","source":"def validate_mapping(d):\n need(type(d) is dict and set(d)=={'root_uid','root_gid','id_map'},'IDMAP_SCHEMA')\n need(type(d['root_uid']) is int and type(d['root_gid']) is int,'IDMAP_VALUE')\n need(d['root_uid']==d['root_gid']==100000,'ONLY_DEFAULT_UNPRIVILEGED_IDMAP')\n expect=[['u',0,100000,65536],['g',0,100000,65536]]\n need(type(d['id_map']) is list and len(d['id_map'])==2,'IDMAP_ROWS')\n for row,exp in zip(d['id_map'],expect):\n need(type(row) is list and len(row)==4 and type(row[0]) is str and all(type(n) is int for n in row[1:]) and row==exp,'IDMAP_NONDEFAULT')\n return d['root_uid'],d['root_gid']\n","source_sha256":"a1cc0bc448cab9212429924789e81ba7ebbc333380aa03477ca7807da28407aa"} -IDMAP_AND_PRODUCER_CALL_SITES=[{"calls":[{"call":"validate_mapping(d)","line":154,"owner":"host_mapping"},{"call":"validate_mapping(mapping)","line":295,"owner":"produce"}],"file":"pve270.py","sha256":"97015277a4f3f8129c0fd11eb70c06293026366f1f8232a97feeed513a2dbcef"},{"calls":[{"call":"validate_mapping(mapping)","line":68,"owner":"produce"}],"file":"pve282.py","sha256":"73c6cb7773eb8e82d1e7ed5ab4733b4afb88f74ae69c09125d0378d6e480e012"},{"calls":[{"call":"produce(job, work / 'producer')","line":92,"owner":"run_flow"}],"file":"guest266.py","sha256":"86433bc424d5fa5017c20f7a237c82874b02357a3283660d8a6b0039ef2bc868"},{"calls":[],"file":"adapter.py","sha256":"18eb29cef165371b48bcb78e1a456e1939e6eff253787218133162cc89ab9fa3"},{"calls":[{"call":"f.produce(job, self.work, tools, lambda: None, mapping=MAP, emit=lambda k, v: self.events.append((k, v)))","line":172,"owner":"produce"},{"call":"self.produce()","line":174,"owner":"test_real_tar_sees_metadata_as_mapped_uid"},{"call":"f.validate_mapping(MAP)","line":14,"owner":"test_default_mapping"},{"call":"f.validate_mapping(d)","line":17,"owner":"test_root_mapping_refused"},{"call":"f.validate_mapping(d)","line":20,"owner":"test_custom_mapping_refused"},{"call":"f.validate_mapping(d)","line":23,"owner":"test_bool_mapping_refused"},{"call":"f.validate_mapping(d)","line":26,"owner":"test_extra_mapping_fields_refused"},{"call":"self.produce(fail=True)","line":178,"owner":"test_producer_failed_archive_retained"},{"call":"self.produce(leftover=True)","line":182,"owner":"test_nonempty_pve_temp_blocks_success"},{"call":"f.produce(j, p, tools, lambda: None, mapping=MAP, emit=lambda k, v: self.events.append((k, v)))","line":191,"owner":"test_fresh_archive_flows_through_existing_two_replica_engine"}],"file":"test_pve270.py","sha256":"9fccd20b490613fdd5b14b4105cf0d9fd744f204e1ed1d6893e54c9f69bf6fb4"},{"calls":[{"call":"f.produce(job, self.work, tools, lambda: None, mapping=MAP, expected_config=job['config_sha256'], emit=lambda k, v: self.events.append((k, v)))","line":173,"owner":"produce"},{"call":"self.produce()","line":175,"owner":"test_real_tar_sees_metadata_as_mapped_uid"},{"call":"f.validate_mapping(MAP)","line":14,"owner":"test_default_mapping"},{"call":"f.validate_mapping(d)","line":17,"owner":"test_root_mapping_refused"},{"call":"f.validate_mapping(d)","line":20,"owner":"test_custom_mapping_refused"},{"call":"f.validate_mapping(d)","line":23,"owner":"test_bool_mapping_refused"},{"call":"f.validate_mapping(d)","line":26,"owner":"test_extra_mapping_fields_refused"},{"call":"self.produce(fail=True)","line":179,"owner":"test_producer_failed_archive_retained"},{"call":"self.produce(leftover=True)","line":183,"owner":"test_nonempty_pve_temp_blocks_success"},{"call":"f.produce(j, p, tools, lambda: None, mapping=MAP, expected_config=job['config_sha256'], emit=lambda k, v: self.events.append((k, v)))","line":192,"owner":"test_fresh_archive_flows_through_existing_two_replica_engine"}],"file":"test_producer282.py","sha256":"a67d927cc428935791f9eecc3acf571d089f80761162f4589b7d684fba6b8af7"},{"calls":[{"call":"f.select112(a, b, NOW)","line":35,"owner":"test_input_unchanged"},{"call":"f.select112(a, b, NOW)","line":38,"owner":"reject"},{"call":"f.select112(plan(), plan(), NOW + 301)","line":43,"owner":"test_stale"},{"call":"f.select112(plan(), plan(), NOW - 1)","line":45,"owner":"test_future"},{"call":"f.select112(plan(), plan(), NOW)","line":28,"owner":"test_selects_only112"},{"call":"f.select112(a, b, NOW)","line":33,"owner":"test_configured_16g_ct_fits_without_compression"}],"file":"test_pve282.py","sha256":"1056407aab76e17181b05e043cb42c086058545a8e0027689ab4e03eee6531c4"}] -HISTORICAL_MAPPING_FIXTURES=[{"file":"test_pve270.py","fixtures":[{"keys":["root_uid","root_gid","id_map"],"kind":"Dict","line":7,"name":"MAP","value_types":["Constant","Constant","List"]}]},{"file":"test_producer282.py","fixtures":[{"keys":["root_uid","root_gid","id_map"],"kind":"Dict","line":7,"name":"MAP","value_types":["Constant","Constant","List"]}]},{"file":"test_pve282.py","fixtures":[]}] -ADAPTER_IDMAP_RELEVANT_FUNCTIONS=[{"line":24,"name":"load_graph","source":"def load_graph():\n import guest266,pve265,pve270,pve282\n if hasattr(guest266,'dump_argv'):raise RuntimeError('GUEST266_UNEXPECTED_DUMP_ARGV')\n if not hasattr(pve265,'dump_argv'):raise RuntimeError('PVE265_DUMP_ARGV_MISSING')\n if getattr(pve270,'old',None) is not pve265:raise RuntimeError('PVE270_OLD_NOT_PVE265')\n if getattr(pve282,'old',None) is not pve265:raise RuntimeError('PVE282_OLD_NOT_PVE265')\n if getattr(pve282,'proven',None) is not pve270:raise RuntimeError('PVE282_PROVEN_NOT_PVE270')\n for n in ('MappedScratch','capture_archive','validate_mapping'):\n if not hasattr(pve270,n):raise RuntimeError('PVE270_'+n.upper()+'_MISSING')\n if getattr(pve282,n,None) is not getattr(pve270,n):raise RuntimeError('PVE282_ALIAS_'+n.upper()+'_MISMATCH')\n return guest266,pve265,pve270,pve282","source_sha256":"2bacff83d3a642869c23d0cf65303f0a7176317c36f0050d1b51758658b1b207"},{"line":35,"name":"describe","source":"def describe():\n _,p265,p270,p282=load_graph()\n funcs={'pve265.dump_argv':p265.dump_argv,'pve265.validate_job':p265.validate_job,'pve265.make_plan':p265.make_plan,'pve270.validate_mapping':p270.validate_mapping,'pve270.capture_archive':p270.capture_archive,'pve270.produce':p270.produce,'pve282.select112':p282.select112,'pve282.produce':p282.produce}\n return {'schema':1,'bundle':'pve-lxc-adapter-411r1','source_sha256':EXPECTED,'signatures':{k:str(inspect.signature(v)) for k,v in funcs.items()},'owner':{'dump_argv':'pve265','MappedScratch':'pve270','capture_archive':'pve270','validate_mapping':'pve270','pve282.old':'pve265','pve282.proven':'pve270'}}","source_sha256":"dbb1a6c5def6887543b0130807d4027afeff33283cf0cb74286b45e9800b252d"}] -PRODUCTION_POST_RCA_UNCHANGED=PASS -CANDIDATE_POST_RCA_UNCHANGED=PASS +VALIDATE_JOB_SIGNATURE_BOUND=PASS +IDMAP_SIGNATURES_BOUND=PASS +LIVE_INPUT_SCHEMAS={"config_keys":["arch","cores","digest","features","hostname","memory","nameserver","net0","onboot","ostype","rootfs","searchdomain","startup","swap","unprivileged"],"row_keys":["cpu","disk","diskread","diskwrite","id","maxcpu","maxdisk","maxmem","mem","memhost","name","netin","netout","node","status","template","type","uptime","vmid"],"storage_row_count":2} +NORMALIZED_CONFIG_DICT=PASS +LIVE_DEFAULTS_SOURCE=PASS +LIVE_DEFAULTS_SHA256=cf34c8e3812547954bb1d08b50212b6e148ee9cf2b629e895a843ed49d623b38 +LIVE_DEFAULTS_SUMMARY={"blockers":[],"keys":[],"present":true,"sha256":"cf34c8e3812547954bb1d08b50212b6e148ee9cf2b629e895a843ed49d623b38"} +LIVE_STORAGE_ROW_KEYS=[["active","avail","content","enabled","shared","storage","total","type","used","used_fraction"],["active","avail","content","enabled","shared","storage","total","type","used","used_fraction"]] +FRESH_CT112_JOB={"archive_cap_bytes":9516036916,"blockers":[],"config_sha256":"6973478281aeee0a6c19cd0ab96f5e9ebd88cf5a7e767a49d808e25806758351","configured_archive_bound_bytes":9516036916,"configured_disk_bytes":8589934592,"coverage_eligible":true,"global_defaults_sha256":"cf34c8e3812547954bb1d08b50212b6e148ee9cf2b629e895a843ed49d623b38","local_reserve_bytes":4294967296,"node":"pve01","status":"running","type":"lxc","vmid":112} +FRESH_PLAN_SHA256=f597ec7c565cfbe73aa594c6237d7a825a13a7ef1bfa7f4e47219e492c783a99 +FRESH_PLAN_AND_VALIDATE_JOB=PASS +VALIDATE_JOB_NOW_DELTA=0 +PVE_CURRENT_ROOT_UID=100000 +PVE_CURRENT_ROOT_GID=100000 +PVE_CURRENT_IDMAP_SHA256=bd754ab7f1f3e547deba05321fe778a10c2933b3318bc09c1d7b0f07b0902b14 +HOST_MAPPING_ALREADY_VALIDATED=PASS +CANONICAL_MAPPING_FOR_PRODUCER=PASS +MAPPED_SCRATCH_META={"gid":100000,"mode":"0710","uid":0} +MAPPED_UID_ACCESS_AND_ISOLATION_PROBE=PASS +DUMP_ARGV_SHA256=bcf9f888f0046918917de404f0203182dbd52b568415735bff00622d771968ab +DUMP_ARGV_TOKEN_COUNT=26 +DUMP_ARGV_GENERATED_NOT_EXECUTED=PASS +PVE265_VALIDATE_TOOLS_SIGNATURE=(tools) +PVE282_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, expected_config, seconds=14400, emit= at 0x7a9466023920>) +PVE270_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, seconds=14400, emit= at 0x7a9466021440>) +PRODUCTION_POST_DRYRUN_UNCHANGED=PASS +CANDIDATE_POST_DRYRUN_UNCHANGED=PASS +FRESH_PLAN_REAL_ENVIRONMENT_DRY_RUN=PASS +PVE270_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, seconds=14400, emit= at 0x7a9466021440>) +PVE282_PRODUCE_SIGNATURE=(job, work, tools, guard, *, mapping, expected_config, seconds=14400, emit= at 0x7a9466023920>) +PVE282_SELECT112_SIGNATURE=(current, baseline, now) STATUS=OK PHASE=COMPLETE REASON=NONE -NEXT_GATE=PVE_LXC_IDMAP_WIRING_PROVEN_DRY_RUN +NEXT_GATE=CT112_REAL_BACKUP_1_PROVEN_PRODUCER CHANGES_MADE=false -MUTATION_OUTCOME=NO_MUTATION +MUTATION_OUTCOME=NO_PERSISTENT_MUTATION PRODUCTION_PROMOTION=NO BACKUP_EXECUTIONS=0 VZDUMP_EXECUTIONS=0 @@ -61,7 +83,7 @@ CLOUD_DELETIONS=0 SYSTEMD_MUTATIONS=0 SCHEDULER_CUTOVER=NO LEGACY_BACKUP_DISABLES=0 -HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-CONTRACT-CANDIDATE-NATIVE-RCA-421R1","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-WIRING-PROVEN-DRY-RUN-422R1","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} OUTPUT_END CHAT_OUTPUT_END