Add scoped start stop and delete actions for application containers
This commit is contained in:
@@ -141,8 +141,21 @@ class Manager:
|
||||
result=run(['/usr/bin/docker','start',config['container_id']] if start else ['/usr/bin/docker','stop','--time','30',config['container_id']],timeout=45)
|
||||
if result.returncode:raise ValueError('Videodienst konnte nicht gestartet oder beendet werden.')
|
||||
return self.video_status(config)
|
||||
def container_action(self,ident,action):
|
||||
if action not in ('start','stop','delete') or not isinstance(ident,str) or not re.fullmatch('[a-f0-9]{64}',ident):raise ValueError('Ungültige Containeraktion.')
|
||||
with self.lock:
|
||||
row=next((c for c in self.inventory() if c['id']==ident),None)
|
||||
if row is None:raise ValueError('Container nicht für Deck freigegeben oder nicht mehr vorhanden.')
|
||||
if any(c['container_id']==ident for c in self.video_configs()):raise ValueError('Registrierte Video-Laufzeiten über die Steuerung verwalten.')
|
||||
if action=='delete' and row['state'] not in ('exited','created','dead'):raise ValueError('Container vor dem Löschen stoppen.')
|
||||
args=['/usr/bin/docker']+(['stop','--time','30',ident] if action=='stop' else ['rm',ident] if action=='delete' else ['start',ident])
|
||||
result=run(args,timeout=45)
|
||||
if result.returncode:raise ValueError('Containeraktion fehlgeschlagen. Status erneut prüfen.')
|
||||
return dict(changed=True,action=action,id=ident)
|
||||
def dispatch(self,data):
|
||||
if not isinstance(data,dict):raise ValueError('Ungültige Helferanfrage.')
|
||||
if set(data)=={'action','service'} and data['action'] in ('container-start','container-stop','container-delete'):
|
||||
return self.container_action(data['service'],data['action'].removeprefix('container-'))
|
||||
if data.get('action')=='backup-export' and set(data)=={'action'}:
|
||||
import docker_backup
|
||||
return docker_backup.export(self)
|
||||
|
||||
Reference in New Issue
Block a user