31 lines
2.7 KiB
Python
31 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
"""Sync only the server-verified shared cognition artifact from JD to JZAO."""
|
|
import argparse,hashlib,json,os,pathlib,subprocess,tempfile
|
|
ROOT=pathlib.Path('/Volumes/JZAO/HoloLake/persona-runtime')
|
|
ACCESS=ROOT/'shared/registries/local-server-access-map.json'
|
|
OUTPUT=ROOT/'shared/tcs-shared-cognition/CURRENT.json'
|
|
def stable_hash(text):return hashlib.sha256(text.encode()).hexdigest()
|
|
def route():
|
|
data=json.loads(ACCESS.read_text());items=[x for x in data['routes'] if x['target_id']=='JD-FD-PRIMARY']
|
|
if len(items)!=1:raise RuntimeError('JD_ROUTE_NOT_UNIQUE')
|
|
return items[0]
|
|
def fetch():
|
|
r=route();cmd=['ssh','-i',r['identity_file'],'-p',str(r.get('port',22)),'-o','BatchMode=yes','-o','StrictHostKeyChecking=yes','-o',f'UserKnownHostsFile={pathlib.Path.home()}/.ssh/known_hosts',f"{r['user']}@{r['host']}",f"test \"$(tr A-Z a-z </sys/class/dmi/id/product_uuid | tr -d '\\r\\n')\" = {r['expected_dmi_instance_uuid']} && curl -fsS http://127.0.0.1:3931/v1/shelf/shared"]
|
|
p=subprocess.run(cmd,text=True,capture_output=True,timeout=30)
|
|
if p.returncode:raise RuntimeError('JD_SHARED_COGNITION_UNAVAILABLE')
|
|
value=json.loads(p.stdout);artifact=value['artifact'];payload=artifact['payload']
|
|
if artifact.get('algorithm')!='Ed25519' or stable_hash(payload)!=artifact.get('sha256'):raise RuntimeError('SHARED_ARTIFACT_INTEGRITY_FAILED')
|
|
brain=json.loads(payload)
|
|
if brain.get('schema')!='guanghu.tcs-shared-cognition/v1':raise RuntimeError('SHARED_BRAIN_SCHEMA')
|
|
return {'schema':'guanghu.tcs-shared-cognition-local-mirror/v1','state':'CURRENT_SERVER_VERIFIED_SHARED_ONLY','server_node':'JD-FD-PRIMARY','transport':'PINNED_SSH_HOST_AND_DMI','zero_core_channel':'ICE-CH-ZC001','index_revision':value['index_revision'],'artifact':artifact,'brain':brain,'private_or_public_branch_copied':False,'synced_at':__import__('datetime').datetime.now(__import__('datetime').timezone.utc).isoformat()}
|
|
def write(value):
|
|
OUTPUT.parent.mkdir(parents=True,exist_ok=True);body=json.dumps(value,ensure_ascii=False,indent=2)+'\n';tmp=OUTPUT.with_name('.CURRENT.'+str(os.getpid())+'.tmp');tmp.write_text(body);os.chmod(tmp,0o600);os.replace(tmp,OUTPUT)
|
|
def status():
|
|
v=json.loads(OUTPUT.read_text());
|
|
if stable_hash(v['artifact']['payload'])!=v['artifact']['sha256']:raise RuntimeError('LOCAL_MIRROR_HASH_FAILED')
|
|
return {'outcome':'PASS','state':v['state'],'index_revision':v['index_revision'],'shared_revision':v['brain']['revision'],'shared_sha256':v['artifact']['sha256'],'private_or_public_branch_copied':v['private_or_public_branch_copied']}
|
|
def main():
|
|
p=argparse.ArgumentParser();p.add_argument('command',choices=['sync','status']);a=p.parse_args();
|
|
if a.command=='sync':write(fetch())
|
|
print(json.dumps(status(),ensure_ascii=False,indent=2))
|
|
if __name__=='__main__':main()
|