Skip to content

Deploy Podman

Deploy Podman — mvp.deploy_podman

Cluster: Core Infrastructure | Type: component | MCP Tools: None

Overview

Rootless container runtime implementation backed by the podman CLI. Shares the same DockerInput schema as deploy_docker and extends DockerRuntime, making it a drop-in replacement for environments where rootless or daemonless containers are required — such as edge nodes, CI runners without Docker daemon access, or SELinux-hardened servers.

When to use:

  • Running G6 base containers in rootless mode on RHEL/Fedora or any daemonless host
  • Swapping Docker for Podman in the cicd pipeline by setting runtime = "podman"
  • Building and pushing OCI-compatible images without a Docker daemon

Low-level deployment primitive

deploy_podman is a runtime adapter, not a complete first-user deployment experience. It is useful when an operator or higher-level pipeline already knows the image, ports, environment variables, registry, and health-check flow. For the launch-plan goal of helping a non-technical user get value in under 10 minutes, wrap this component in a guided quick-start command or the cicd pipeline rather than exposing raw DockerInput construction as the primary path.

Example:

from mvp.deploy_podman import DockerInput, PodmanBlock
from mvp.deploy_core.schema import ImageSpec

block = PodmanBlock(name="podman")
result = block.infer(DockerInput(
    op="build",
    image=ImageSpec(name="g6-rest", tag="dev"),
    context_dir=".",
))
# result.ok → True; result.value.stage → "build"

For staging or production on a single VPS, set production_mode=True when running a container. This keeps host ports stable, assigns a container name, and fails fast on conflicts instead of silently remapping a public service port.

Works well with: deploy_docker, deploy_core, cicd

Public API

PodmanBlock(AIBlock[DockerInput | PodmanInput, DeployResult, None])

AIBlock that delegates to PodmanRuntime based on input.op.

Field Type Default
name str 'podman'

Methods:

infer(data: DockerInput | PodmanInput) -> Result[DeployResult]

PodmanRuntime(DockerRuntime)

ContainerRuntime implementation using the podman CLI.

Constructor:

Parameter Type Default
dry_run bool False
command_runner Callable[[list[str]], tuple[int, str, str]] \| None None

Methods:

capabilities() -> dict[str, Any]

Discover read-only Podman capabilities without mutating host state.

PodmanInput(DockerInput)

Field Type Default
op PodmanOp required
privileged bool False
network_mode str ''
userns str ''
selinux_label str ''
pod_name str ''
quadlet_unit str ''
restart_policy str ''
container_name str ''
request_id str ''
task_id str ''
run_id str ''

Dependencies

  • mvp.deploy_docker