Source code for gyoza.cli.commands.worker

"""Worker sub-commands for the gyoza CLI."""

import os
import uuid

import typer

# Importing gyoza.worker here would reach docker.from_env() at import time, and
# this module is loaded by every gyoza command — including the server, which has
# no docker socket. Keep worker imports inside start().

app = typer.Typer(help="Manage gyoza workers.")


[docs] def start( worker_id: str | None = typer.Option( None, "--worker-id", envvar="GYOZA_WORKER_ID", help="Unique identifier for this worker. Defaults to worker-<uuid>.", ), working_directory: str = typer.Option( "/tmp/gyoza/", "--working-directory", envvar="GYOZA_WORKING_DIRECTORY", help="Directory used to stage op run data.", ), claim_wait: float = typer.Option( 25.0, "--claim-wait", envvar="GYOZA_CLAIM_WAIT", help="Seconds the server may hold a claim request while nothing is pending.", ), mounts: str = typer.Option( "", "--mounts", envvar="GYOZA_MOUNTS", help=( "Comma-separated host:container[:ro|:rw] paths mounted into every " "op container." ), ), container_env: str = typer.Option( "", "--container-env", envvar="GYOZA_CONTAINER_ENV", help="Comma-separated KEY=VALUE pairs set on every op container.", ), tags: str = typer.Option( "", "--tags", envvar="GYOZA_WORKER_TAGS", help="Comma-separated tags. Ops requiring tags only run on workers with all.", ), ) -> None: """Start the worker loop.""" os.environ["GYOZA_WORKER_ID"] = worker_id or f"worker-{uuid.uuid4()}" os.environ["GYOZA_WORKING_DIRECTORY"] = working_directory os.environ["GYOZA_CLAIM_WAIT"] = str(claim_wait) os.environ["GYOZA_MOUNTS"] = mounts os.environ["GYOZA_CONTAINER_ENV"] = container_env os.environ["GYOZA_WORKER_TAGS"] = tags from gyoza.worker import runner, shared_runtime # noqa: PLC0415 shared_runtime.validate() runner.start()
app.command("start")(start)