deploy

package
v0.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 7, 2026 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func IsRootless

func IsRootless() bool

IsRootless returns true if the current process is running as a non-root user.

func RemoveNetworks

func RemoveNetworks(projectName string) error

RemoveNetworks removes all Podman networks with label com.comquad.managed=true and com.comquad.project=<projectName>.

func RemoveVolumes

func RemoveVolumes(projectName string) error

RemoveVolumes removes all Podman volumes with label com.comquad.managed=true and com.comquad.project=<projectName>.

Types

type PodmanResource

type PodmanResource struct {
	Name        string
	ProjectName string
	Type        string // "container", "network", "volume"
}

PodmanResource represents a discovered Podman resource with its project label

type ProjectState

type ProjectState struct {
	ProjectName string        `json:"project_name"`
	SourcePath  string        `json:"source_path"`
	Files       []string      `json:"files"`               // List of generated quadlet files
	Resources   *ResourceInfo `json:"resources,omitempty"` // Podman resources discovered via labels
}

ProjectState represents the state of a single managed project

type ResourceInfo

type ResourceInfo struct {
	Containers []string `json:"containers"`
	Networks   []string `json:"networks"`
	Volumes    []string `json:"volumes"`
}

ResourceInfo tracks Podman resources for a managed project

type StateManager

type StateManager struct {
	StateFilePath string
	Projects      map[string]ProjectState
	// contains filtered or unexported fields
}

StateManager manages the persistence of project states in a JSON file

func NewStateManager

func NewStateManager() (*StateManager, error)

NewStateManager initializes a new state manager with a default path

func RegenerateState

func RegenerateState() (*StateManager, error)

RegenerateState scans Podman for managed resources and reconstructs the state file.

func (*StateManager) GetProject

func (sm *StateManager) GetProject(name string) (ProjectState, bool)

GetProject returns the state for the named project and whether it exists. This satisfies the StateStore interface without exposing the raw Projects map.

func (*StateManager) GetStateFilePath

func (sm *StateManager) GetStateFilePath() string

GetStateFilePath returns the path of the state file on disk.

func (*StateManager) ListProjects

func (sm *StateManager) ListProjects() []ProjectState

func (*StateManager) RegisterProject

func (sm *StateManager) RegisterProject(project ProjectState) error

func (*StateManager) Save

func (sm *StateManager) Save() error

func (*StateManager) SetProject

func (sm *StateManager) SetProject(name string, state ProjectState)

SetProject directly sets a project in the state without saving. This is used by RegenerateState to batch-populate the map before a single Save.

func (*StateManager) UnregisterProject

func (sm *StateManager) UnregisterProject(projectName string) error

type StateStore

type StateStore interface {
	GetProject(name string) (ProjectState, bool)
	GetStateFilePath() string
	ListProjects() []ProjectState
	RegisterProject(project ProjectState) error
	UnregisterProject(projectName string) error
	Save() error
}

StateStore is the subset of StateManager used by the orchestrator. GetProject replaces direct map access so the interface is satisfiable.

type SystemdClient

type SystemdClient interface {
	Close() error
	ReloadDaemon(filePaths ...string) error
	WaitForUnit(unitName string, timeout time.Duration) error
	StartUnit(unitName string) error
	StopUnit(unitName string) error
	RestartUnit(unitName string) error
	ListUnitsByNames(unitNames []string) ([]dbus.UnitStatus, error)
	ListAllUnits() ([]dbus.UnitStatus, error)
	GetInvocationID(unitName string) (string, error)
}

SystemdClient is the subset of SystemdManager used by the orchestrator. Using an interface here allows tests to inject a fake without a live D-Bus.

type SystemdManager

type SystemdManager struct {
	// contains filtered or unexported fields
}

SystemdManager handles direct communication with the systemd D-Bus

func NewSystemdManager

func NewSystemdManager() (*SystemdManager, error)

NewSystemdManager initializes a new connection to the systemd bus. Uses the user bus for rootless (non-root) and system bus for root.

func (*SystemdManager) Close

func (s *SystemdManager) Close() error

Close closes the D-Bus connection

func (*SystemdManager) GetInvocationID

func (s *SystemdManager) GetInvocationID(unitName string) (string, error)

GetInvocationID returns the invocation ID of a specific unit as raw hex. Returns empty string if the unit is not found or has no invocation ID.

func (*SystemdManager) ListAllUnits

func (s *SystemdManager) ListAllUnits() ([]dbus.UnitStatus, error)

ListAllUnits returns all units known to systemd.

func (*SystemdManager) ListUnitsByNames

func (s *SystemdManager) ListUnitsByNames(unitNames []string) ([]dbus.UnitStatus, error)

ListUnitsByNames returns the current state of the specified units.

func (*SystemdManager) ReloadDaemon

func (s *SystemdManager) ReloadDaemon(filePaths ...string) error

ReloadDaemon triggers a systemd daemon-reload and waits for quadlet generators to produce units for the given file paths.

func (*SystemdManager) RestartUnit

func (s *SystemdManager) RestartUnit(unitName string) error

RestartUnit restarts a specific systemd unit and waits for the job to complete. Unlike StartUnit, this always tears down and recreates the unit even if already active.

func (*SystemdManager) StartUnit

func (s *SystemdManager) StartUnit(unitName string) error

StartUnit starts a specific systemd unit and waits for the job to complete. Returns an error if the unit fails to start or the job does not complete with "done".

func (*SystemdManager) StopUnit

func (s *SystemdManager) StopUnit(unitName string) error

StopUnit stops a specific systemd unit and waits for the job to complete. Returns an error if the unit fails to stop or the job does not complete with "done".

func (*SystemdManager) WaitForUnit

func (s *SystemdManager) WaitForUnit(unitName string, timeout time.Duration) error

WaitForUnit polls systemd until the unit is known or timeout is reached. This is needed because the quadlet generator runs asynchronously after daemon-reload.

type TargetDirResolver

type TargetDirResolver struct{}

TargetDirResolver determines the correct Systemd directory based on UID

func NewTargetDirResolver

func NewTargetDirResolver() *TargetDirResolver

NewTargetDirResolver creates a new resolver

func (*TargetDirResolver) GetSystemdPath

func (r *TargetDirResolver) GetSystemdPath() (string, error)

GetSystemdPath returns either /etc/containers/systemd or ~/.config/containers/systemd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL