runtime: publish SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-CONTRACT-CANDIDATE-NATIVE-RCA-421R1
This commit is contained in:
+38
File diff suppressed because one or more lines are too long
+67
@@ -0,0 +1,67 @@
|
||||
CHAT_OUTPUT_BEGIN
|
||||
COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-CONTRACT-CANDIDATE-NATIVE-RCA-421R1
|
||||
STATUS=OK
|
||||
RC=0
|
||||
HOST=pve01
|
||||
MODE=read-only
|
||||
COMPONENT=infra-dr-backupv2-pve-lxc-idmap-contract-candidate-native-rca
|
||||
REFERENCE_REGISTER_CHECK=OK
|
||||
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
|
||||
ERROR_REGISTER_CHECK=OK
|
||||
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
|
||||
COMMAND_SHA256=056155b861fab43d54ae68520023904b66639f1227936c956e28c29060b4603f
|
||||
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=9e3f02e6dc4d8c5a99db5d3459a48737764e3247e18c2f621d160f13e38aa5a8
|
||||
SANITIZED_OUTPUT_SHA256=9e3f02e6dc4d8c5a99db5d3459a48737764e3247e18c2f621d160f13e38aa5a8
|
||||
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
|
||||
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
|
||||
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
|
||||
STATUS=OK
|
||||
PHASE=COMPLETE
|
||||
REASON=NONE
|
||||
NEXT_GATE=PVE_LXC_IDMAP_WIRING_PROVEN_DRY_RUN
|
||||
CHANGES_MADE=false
|
||||
MUTATION_OUTCOME=NO_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-CONTRACT-CANDIDATE-NATIVE-RCA-421R1","rollback_restored":null,"rollback_started":false,"status":"OK","version":1}
|
||||
|
||||
OUTPUT_END
|
||||
CHAT_OUTPUT_END
|
||||
+11
-11
File diff suppressed because one or more lines are too long
+25
-17
@@ -1,22 +1,22 @@
|
||||
CHAT_OUTPUT_BEGIN
|
||||
COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-CONTRACT-ADAPTER-WIRING-RCA-420R1
|
||||
STATUS=FAIL
|
||||
RC=2
|
||||
COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-CONTRACT-CANDIDATE-NATIVE-RCA-421R1
|
||||
STATUS=OK
|
||||
RC=0
|
||||
HOST=pve01
|
||||
MODE=read-only
|
||||
COMPONENT=infra-dr-backupv2-pve-lxc-idmap-contract-adapter-wiring-rca
|
||||
COMPONENT=infra-dr-backupv2-pve-lxc-idmap-contract-candidate-native-rca
|
||||
REFERENCE_REGISTER_CHECK=OK
|
||||
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
|
||||
ERROR_REGISTER_CHECK=OK
|
||||
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
|
||||
COMMAND_SHA256=446e4a1bf87d04d05c2a181130f31f026d92ff3c93c69977be1ea502757ee8f7
|
||||
COMMAND_SHA256=056155b861fab43d54ae68520023904b66639f1227936c956e28c29060b4603f
|
||||
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=2
|
||||
COMMAND_RC=0
|
||||
CHANGES_MADE=false
|
||||
ROLLBACK_STARTED=false
|
||||
ROLLBACK_RESTORED=null
|
||||
@@ -24,11 +24,11 @@ MUTATION_OUTCOME=NO_MUTATION
|
||||
SANITIZED=yes
|
||||
SECRETS_INCLUDED=no
|
||||
PRIVATE_ADDRESSES_INCLUDED=no
|
||||
RAW_EVIDENCE_SHA256=9496c75cfc0f1d4f57b6217b3ff5e7dc710aa7b04e070e1e08c42fe2ecedc7ee
|
||||
SANITIZED_OUTPUT_SHA256=9496c75cfc0f1d4f57b6217b3ff5e7dc710aa7b04e070e1e08c42fe2ecedc7ee
|
||||
RAW_EVIDENCE_SHA256=9e3f02e6dc4d8c5a99db5d3459a48737764e3247e18c2f621d160f13e38aa5a8
|
||||
SANITIZED_OUTPUT_SHA256=9e3f02e6dc4d8c5a99db5d3459a48737764e3247e18c2f621d160f13e38aa5a8
|
||||
OUTPUT_BEGIN
|
||||
COMMAND_ID=SUPPORT-260915-INFRA-DR-BACKUPV2-PVE-LXC-IDMAP-CONTRACT-ADAPTER-WIRING-RCA-420R1
|
||||
MODE=READ_ONLY_PVE_LXC_IDMAP_CONTRACT_ADAPTER_WIRING_RCA
|
||||
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
|
||||
NO_BACKUP_EXECUTION=YES
|
||||
NO_VZDUMP_EXECUTION=YES
|
||||
@@ -36,13 +36,21 @@ 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
|
||||
RCA_EXCEPTION_CLASS=builtins.ModuleNotFoundError
|
||||
RCA_EXCEPTION_MESSAGE_SHA256=c3cb05bf923b1c0766367e9b6168468b928708ef22766eed5fc68834590705d1
|
||||
STATUS=FAIL
|
||||
PHASE=IDMAP_CONTRACT_RCA
|
||||
REASON=UNHANDLED_ModuleNotFoundError
|
||||
NEXT_GATE=STOP
|
||||
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
|
||||
STATUS=OK
|
||||
PHASE=COMPLETE
|
||||
REASON=NONE
|
||||
NEXT_GATE=PVE_LXC_IDMAP_WIRING_PROVEN_DRY_RUN
|
||||
CHANGES_MADE=false
|
||||
MUTATION_OUTCOME=NO_MUTATION
|
||||
PRODUCTION_PROMOTION=NO
|
||||
@@ -53,7 +61,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-ADAPTER-WIRING-RCA-420R1","rollback_restored":null,"rollback_started":false,"status":"FAIL","version":1}
|
||||
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}
|
||||
|
||||
OUTPUT_END
|
||||
CHAT_OUTPUT_END
|
||||
|
||||
Reference in New Issue
Block a user