Files
dj/integration-work/deploy_8189_huobao.py

43 lines
2.8 KiB
Python

import pathlib,json,sys,hashlib,datetime,time,urllib.request
sys.path.insert(0,'/home/ps/huobao-gpu-selection')
from docker_worker_ops import api,inspect,write_json,set_env
work=pathlib.Path('/home/ps/huobao-gpu-selection/panel-8189');name='comfyui-manju'
before=json.loads((work/'before.json').read_text());current=inspect(name)
assert current['Id']==before['Id'],'8189 changed since preparation'
def get(path,token=None):
h={'X-H3-Canary-Token':token} if token else {}
with urllib.request.urlopen(urllib.request.Request('http://192.168.110.111:8189'+path,headers=h),timeout=4) as r:return json.load(r)
q=get('/queue');assert not q['queue_running'] and not q['queue_pending'],'8189 is busy; no restart performed'
history=get('/history');snapshot={'schema':1,'queue_empty':True,'source_container_id':before['Id'],'history':history}
assert all(v.get('status',{}).get('status_str') in ('success','error') for v in history.values())
(work/'history.json').write_text(json.dumps(snapshot));(work/'history.json').chmod(0o644)
cfg=json.loads((work/'create.json').read_text());k='H3_HISTORY_SNAPSHOT_SHA256';v=hashlib.sha256((work/'history.json').read_bytes()).hexdigest()
set_env(cfg,k,v);cfg['Cmd'].insert(cfg['Cmd'].index('/opt/conda/bin/python3'),k+'='+v)
write_json(work/'create.json',cfg)
q=get('/queue');assert not q['queue_running'] and not q['queue_pending'],'8189 received a new job; leaving it running'
stamp=datetime.datetime.now().strftime('%Y%m%d-%H%M%S');old=name+'-before-huobao-'+stamp
api('POST','/containers/'+name+'/stop?t=20');api('POST','/containers/'+name+'/rename?name='+old)
created=False
try:
api('POST','/containers/create?name='+name,cfg);created=True;api('POST','/containers/'+name+'/start')
token=(work/'control/canary.token').read_text()
for _ in range(35):
try:
info=get('/object_info',token)
if 'H3CaptionPipeline' in info:break
except Exception:pass
time.sleep(1)
else:raise RuntimeError('8189 did not become ready')
required=set(json.loads((work/'allowed_node_classes.json').read_text())['required_classes'])
assert required<=set(info),'A previously available class is missing'
restored=get('/history',token)
assert all(restored.get(k)==v for k,v in history.items()),'History verification failed'
(work/'control/control.json').write_text(json.dumps({'schema':1,'maintenance':False}))
write_json(work/'deployed.json',{'old_container':old,'new_id':inspect(name)['Id'],'history_count':len(history),'classes':len(info)})
print(json.dumps({'deployed':name,'port':8189,'history_preserved':len(history),'classes':len(info),'previous_container':old}))
except Exception:
if created:
api('POST','/containers/'+name+'/stop?t=10');api('POST','/containers/'+name+'/rename?name='+name+'-failed-'+stamp)
api('POST','/containers/'+old+'/rename?name='+name);api('POST','/containers/'+name+'/start')
raise