Files
2025-02-24 22:31:18 +01:00

50 lines
1.5 KiB
Python

"""Manage Infix containers"""
import time
from infamy.util import warn
class Container:
"""Helper methods"""
HTTPD_IMAGE = "/lib/oci/curios-httpd-latest.tar.gz"
NFTABLES_IMAGE = "/lib/oci/curios-nftables-latest.tar.gz"
def __init__(self, target):
self.system = target
def _find(self, name):
oper = self.system.get_data("/infix-containers:containers")
if not oper:
return None
for container in oper["containers"]["container"]:
if container["name"] == name:
return container
return None
def exists(self, name):
"""Check if container {name} runs on target."""
container = self._find(name)
if not container:
return False
return True
def running(self, name):
"""Check if container {name} exists and is running."""
container = self._find(name)
if container and container["running"]:
return True
return False
def action(self, name, act):
"""Call container action (context RPC), retry three times."""
xpath = f"/infix-containers:containers/container[name='{name}']/{act}"
for attempt in range(3):
try:
return self.system.call_action(xpath)
except Exception as e:
warn(f"failed {act} {name} ({attempt + 1}/3): {e}")
time.sleep(1)
if attempt == 2:
raise