Add scoped start stop and delete actions for application containers

This commit is contained in:
Mikei386
2026-10-01 10:11:58 +02:00
parent 88c6957dac
commit f66e7fbf71
7 changed files with 82 additions and 4 deletions
+13
View File
@@ -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)