feat: Python on whales test
This commit is contained in:
parent
a31e1cdad9
commit
e67ecb38d4
2 changed files with 4 additions and 45 deletions
|
|
@ -14,7 +14,6 @@ dependencies = [
|
|||
"pyyaml>=6.0.2",
|
||||
"gitpython>=3.1.45",
|
||||
"pykeepass>=4.1.1.post1",
|
||||
"docker>=7.1.0",
|
||||
"injectable==4.0.1",
|
||||
"py-automapper>=2.2.0",
|
||||
"fastapi-utils>=0.8.0",
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
import logging
|
||||
from pathlib import Path
|
||||
|
||||
import docker
|
||||
from docker.models.containers import Container
|
||||
from python_on_whales import DockerClient
|
||||
from injectable import injectable
|
||||
|
||||
from karl.model.containers import Tree, Compose, SimpleContainer
|
||||
|
|
@ -13,47 +12,8 @@ logger = logging.getLogger(__name__)
|
|||
@injectable(singleton=True)
|
||||
class DockerService:
|
||||
def __init__(self):
|
||||
self._client = docker.from_env()
|
||||
# logger.info(f"Docker client initialized. Plugins: {self._client.plugins()}")
|
||||
self._tree = self._init_tree()
|
||||
|
||||
def _init_tree(self) -> Tree:
|
||||
tree = Tree()
|
||||
container: Container
|
||||
for container in self._client.containers.list():
|
||||
labels = container.labels
|
||||
working_dir = labels.get("com.docker.compose.project.working_dir")
|
||||
if working_dir:
|
||||
if tree.composes.get(working_dir) is None:
|
||||
tree.composes[working_dir] = Compose(working_dir)
|
||||
tree.composes[working_dir].containers.append(SimpleContainer.from_container(container))
|
||||
else:
|
||||
tree.containers.append(SimpleContainer.from_container(container))
|
||||
return tree
|
||||
|
||||
@property
|
||||
def tree(self) -> Tree:
|
||||
return self._tree
|
||||
self._client = DockerClient()
|
||||
|
||||
def reload(self, compose_path: Path):
|
||||
# TODO: Won't work in docker container
|
||||
cmd = ["sudo", "docker", "compose", "-f", str(compose_path), "up", "-d"]
|
||||
import subprocess
|
||||
try:
|
||||
process = subprocess.run(
|
||||
cmd,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=False
|
||||
)
|
||||
if process.returncode != 0:
|
||||
logger.error(f"Docker compose failed with code {process.returncode}")
|
||||
logger.error(f"stderr: {process.stderr}")
|
||||
raise Exception(f"Docker compose failed: {process.stderr}")
|
||||
|
||||
logger.info(f"Docker compose executed successfully")
|
||||
logger.debug(f"stdout: {process.stdout}")
|
||||
return process.stdout, process.stderr, process.returncode
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to execute docker compose command: {e}")
|
||||
raise e
|
||||
containers = self._client.compose.ps()
|
||||
logger.info(f"Found {len(containers)} containers")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue