unit

package
v0.5.1 Latest Latest
Warning

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

Go to latest
Published: May 3, 2025 License: MIT Imports: 18 Imported by: 0

Documentation

Overview

Package unit provides quadlet unit generation and management functionality

Index

Constants

This section is empty.

Variables

View Source
var (
	ProcessUnit          ProcessUnitFunc          = processUnit
	CleanupOrphanedUnits CleanupOrphanedUnitsFunc = cleanupOrphanedUnits
	WriteUnitFile        WriteUnitFileFunc        = writeUnitFile
	UpdateUnitDatabase   UpdateUnitDatabaseFunc   = updateUnitDatabase
)

Package variables for testing.

Functions

func ApplyDependencyRelationships added in v0.4.0

func ApplyDependencyRelationships(unit *QuadletUnit, serviceName string, dependencies map[string]*ServiceDependency, projectName string)

ApplyDependencyRelationships applies both regular dependencies (After/Requires) and reverse dependencies (PartOf) to a quadlet unit based on the dependency tree.

func BuildServiceDependencyTree added in v0.4.0

func BuildServiceDependencyTree(project *types.Project) map[string]*ServiceDependency

BuildServiceDependencyTree builds a bidirectional dependency tree for all services in a project.

func GenerateQuadletUnit

func GenerateQuadletUnit(unit QuadletUnit, verbose bool) string

GenerateQuadletUnit generates a quadlet unit file content from a unit configuration.

func GetUnitStatus

func GetUnitStatus(unitName string, unitType string) (string, error)

GetUnitStatus - Legacy function for backward compatibility.

func ProcessComposeProjects added in v0.4.0

func ProcessComposeProjects(projects []*types.Project, force bool, existingProcessedUnits map[string]bool, doCleanup bool) (map[string]bool, error)

ProcessComposeProjects processes Docker Compose projects and converts them to Podman systemd units. It accepts an existing processedUnits map to track units across multiple repository calls and a cleanup flag to control when orphaned unit cleanup should occur.

func ReloadSystemd

func ReloadSystemd() error

ReloadSystemd reloads the systemd configuration.

func RestartChangedUnits added in v0.4.0

func RestartChangedUnits(changedUnits []QuadletUnit, projectDependencyTrees map[string]map[string]*ServiceDependency) error

RestartChangedUnits restarts all changed units in dependency-aware order.

func RestartUnit

func RestartUnit(unitName string, unitType string) error

RestartUnit - Legacy function for backward compatibility.

func ShowUnit

func ShowUnit(unitName string, unitType string) error

ShowUnit - Legacy function for backward compatibility.

func StartUnit

func StartUnit(unitName string, unitType string) error

StartUnit - Legacy function for backward compatibility.

func StartUnitDependencyAware added in v0.4.0

func StartUnitDependencyAware(unitName string, unitType string, dependencyTree map[string]*ServiceDependency) error

StartUnitDependencyAware starts or restarts a unit while being dependency-aware.

func StopUnit

func StopUnit(unitName string, unitType string) error

StopUnit - Legacy function for backward compatibility.

Types

type BaseSystemdUnit added in v0.3.0

type BaseSystemdUnit struct {
	Name string
	Type string
}

BaseSystemdUnit provides common implementation for all systemd units.

func (*BaseSystemdUnit) GetServiceName added in v0.3.0

func (u *BaseSystemdUnit) GetServiceName() string

GetServiceName returns the full systemd service name based on unit type.

func (*BaseSystemdUnit) GetStatus added in v0.3.0

func (u *BaseSystemdUnit) GetStatus() (string, error)

GetStatus returns the current status of the unit.

func (*BaseSystemdUnit) GetUnitName added in v0.3.0

func (u *BaseSystemdUnit) GetUnitName() string

GetUnitName returns the name of the unit.

func (*BaseSystemdUnit) GetUnitType added in v0.3.0

func (u *BaseSystemdUnit) GetUnitType() string

GetUnitType returns the type of the unit.

func (*BaseSystemdUnit) Restart added in v0.3.0

func (u *BaseSystemdUnit) Restart() error

Restart restarts the unit.

func (*BaseSystemdUnit) Show added in v0.3.0

func (u *BaseSystemdUnit) Show() error

Show displays the unit configuration and status.

func (*BaseSystemdUnit) Start added in v0.3.0

func (u *BaseSystemdUnit) Start() error

Start starts the unit.

func (*BaseSystemdUnit) Stop added in v0.3.0

func (u *BaseSystemdUnit) Stop() error

Stop stops the unit.

type Change added in v0.4.0

type Change struct {
	Name string
	Type string
	Hash []byte
}

Change tracks changes to a unit.

type CleanupOrphanedUnitsFunc added in v0.5.0

type CleanupOrphanedUnitsFunc func(unitRepo Repository, processedUnits map[string]bool) error

CleanupOrphanedUnitsFunc is the function signature for cleaning up orphaned units.

type Container added in v0.3.0

type Container struct {
	Image       string
	Label       []string
	PublishPort []string
	Environment map[string]string

	EnvironmentFile []string
	Volume          []string
	Network         []string
	NetworkAlias    []string
	Exec            []string
	Entrypoint      []string
	User            string
	Group           string
	WorkingDir      string
	RunInit         *bool
	// Privileged removed - not supported by podman-systemd
	ReadOnly bool
	// SecurityLabel removed - not supported by podman-systemd
	// Use SecurityLabelType, SecurityLabelLevel, etc. instead
	HostName      string
	ContainerName string
	Secrets       []Secret

	// Systemd unit properties
	Name     string
	UnitType string
	// contains filtered or unexported fields
}

Container represents the configuration for a container unit.

func NewContainer added in v0.3.0

func NewContainer(name string) *Container

NewContainer creates a new Container with the given name.

func (*Container) FromComposeService added in v0.4.0

func (c *Container) FromComposeService(service types.ServiceConfig, projectName string) *Container

FromComposeService converts a Docker Compose service to a Podman Quadlet container configuration.

func (*Container) GetServiceName added in v0.3.0

func (c *Container) GetServiceName() string

GetServiceName returns the full systemd service name.

func (*Container) GetStatus added in v0.3.0

func (c *Container) GetStatus() (string, error)

GetStatus returns the current status of the unit.

func (*Container) GetUnitName added in v0.3.0

func (c *Container) GetUnitName() string

GetUnitName returns the name of the unit.

func (*Container) GetUnitType added in v0.3.0

func (c *Container) GetUnitType() string

GetUnitType returns the type of the unit.

func (*Container) Restart added in v0.3.0

func (c *Container) Restart() error

Restart restarts the unit.

func (*Container) Show added in v0.3.0

func (c *Container) Show() error

Show displays the unit configuration and status.

func (*Container) Start added in v0.3.0

func (c *Container) Start() error

Start starts the unit.

func (*Container) Stop added in v0.3.0

func (c *Container) Stop() error

Stop stops the unit.

type Network added in v0.3.0

type Network struct {
	Label    []string `yaml:"label"`
	Driver   string   `yaml:"driver"`
	Gateway  string   `yaml:"gateway"`
	IPRange  string   `yaml:"ip_range"`
	Subnet   string   `yaml:"subnet"`
	IPv6     bool     `yaml:"ipv6"`
	Internal bool     `yaml:"internal"`
	// DNSEnabled removed - not supported by podman-systemd
	Options     []string `yaml:"options"`
	NetworkName string   `yaml:"network_name"`

	// Systemd unit properties
	Name     string
	UnitType string
}

Network represents the configuration for a network in a Quadlet unit.

func NewNetwork added in v0.3.0

func NewNetwork(name string) *Network

NewNetwork creates a new Network with the given name.

func (*Network) FromComposeNetwork added in v0.4.0

func (n *Network) FromComposeNetwork(name string, network types.NetworkConfig) *Network

FromComposeNetwork creates a Network from a Docker Compose network configuration.

func (*Network) GetServiceName added in v0.3.0

func (n *Network) GetServiceName() string

GetServiceName returns the full systemd service name.

func (*Network) GetStatus added in v0.3.0

func (n *Network) GetStatus() (string, error)

GetStatus returns the current status of the unit.

func (*Network) GetUnitName added in v0.3.0

func (n *Network) GetUnitName() string

GetUnitName returns the name of the unit.

func (*Network) GetUnitType added in v0.3.0

func (n *Network) GetUnitType() string

GetUnitType returns the type of the unit.

func (*Network) Restart added in v0.3.0

func (n *Network) Restart() error

Restart restarts the unit.

func (*Network) Show added in v0.3.0

func (n *Network) Show() error

Show displays the unit configuration and status.

func (*Network) Start added in v0.3.0

func (n *Network) Start() error

Start starts the unit.

func (*Network) Stop added in v0.3.0

func (n *Network) Stop() error

Stop stops the unit.

type ProcessUnitFunc added in v0.5.0

type ProcessUnitFunc func(unitRepo Repository, unit *QuadletUnit, force bool, processedUnits map[string]bool, changedUnits *[]QuadletUnit) error

ProcessUnitFunc is the function signature for processing a single quadlet unit.

type QuadletUnit

type QuadletUnit struct {
	Name      string        `yaml:"name"`
	Type      string        `yaml:"type"`
	Systemd   SystemdConfig `yaml:"systemd"`
	Container Container     `yaml:"container,omitempty"`
	Volume    Volume        `yaml:"volume,omitempty"`
	Network   Network       `yaml:"network,omitempty"`
}

QuadletUnit represents the configuration for a Quadlet unit, which can include systemd, container, volume, network, pod, Kubernetes, image, and build settings.

func (*QuadletUnit) GetSystemdUnit added in v0.3.0

func (u *QuadletUnit) GetSystemdUnit() SystemdUnit

GetSystemdUnit returns the appropriate SystemdUnit implementation for this QuadletUnit.

type Repository

type Repository interface {
	FindAll() ([]Unit, error)
	FindByUnitType(unitType string) ([]Unit, error)
	FindByID(id int64) (Unit, error)
	Create(unit *Unit) (int64, error)
	Delete(id int64) error
}

Repository defines the interface for unit data access operations.

func NewUnitRepository

func NewUnitRepository(db *sql.DB) Repository

NewUnitRepository creates a new SQL-based unit repository.

type SQLRepository added in v0.3.0

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

SQLRepository implements UnitRepository interface with SQL database.

func (*SQLRepository) Create added in v0.3.0

func (r *SQLRepository) Create(unit *Unit) (int64, error)

Create inserts or updates a unit in the database.

func (*SQLRepository) Delete added in v0.3.0

func (r *SQLRepository) Delete(id int64) error

Delete removes a unit from the database.

func (*SQLRepository) FindAll added in v0.3.0

func (r *SQLRepository) FindAll() ([]Unit, error)

FindAll retrieves all units from the database.

func (*SQLRepository) FindByID added in v0.3.0

func (r *SQLRepository) FindByID(id int64) (Unit, error)

FindByID retrieves a single unit by ID.

func (*SQLRepository) FindByUnitType added in v0.3.0

func (r *SQLRepository) FindByUnitType(unitType string) ([]Unit, error)

FindByUnitType retrieves units filtered by type.

type Secret added in v0.3.0

type Secret struct {
	Source string
	Target string
	UID    string
	GID    string
	Mode   string
	Type   string
}

Secret represents a container secret definition.

type ServiceDependency added in v0.4.0

type ServiceDependency struct {
	// Dependencies is the list of services this service depends on
	Dependencies map[string]struct{}
	// DependentServices is the list of services that depend on this service
	DependentServices map[string]struct{}
}

ServiceDependency represents the dependencies of a service in both directions.

type SystemdConfig

type SystemdConfig struct {
	Description        string   `yaml:"description"`
	After              []string `yaml:"after"`
	Before             []string `yaml:"before"`
	Requires           []string `yaml:"requires"`
	Wants              []string `yaml:"wants"`
	Conflicts          []string `yaml:"conflicts"`
	PartOf             []string `yaml:"part_of"`              // Services that this unit is part of
	PropagatesReloadTo []string `yaml:"propagates_reload_to"` // Services that should be reloaded when this unit is reloaded
	RestartPolicy      string   `yaml:"restart_policy"`
	TimeoutStartSec    int      `yaml:"timeout_start_sec"`
	Type               string   `yaml:"type"`
	RemainAfterExit    bool     `yaml:"remain_after_exit"`
	WantedBy           []string `yaml:"wanted_by"`
}

SystemdConfig represents the configuration for a systemd unit. It includes settings such as the unit description, dependencies, restart policy, and other systemd-specific options.

type SystemdUnit added in v0.3.0

type SystemdUnit interface {
	// GetServiceName returns the full systemd service name
	GetServiceName() string

	// GetUnitType returns the type of the unit (container, volume, network, etc.)
	GetUnitType() string

	// GetUnitName returns the name of the unit
	GetUnitName() string

	// GetStatus returns the current status of the unit
	GetStatus() (string, error)

	// Start starts the unit
	Start() error

	// Stop stops the unit
	Stop() error

	// Restart restarts the unit
	Restart() error

	// Show displays the unit configuration and status
	Show() error
}

SystemdUnit defines the interface for managing systemd units.

type Unit

type Unit struct {
	ID            int64     `db:"id"`
	Name          string    `db:"name"`
	Type          string    `db:"type"`
	CleanupPolicy string    `db:"cleanup_policy"`
	SHA1Hash      []byte    `db:"sha1_hash"`
	UserMode      bool      `db:"user_mode"`
	CreatedAt     time.Time `db:"created_at"` // Set by database, but not updated on every change
}

Unit represents a record in the units table.

type UpdateUnitDatabaseFunc added in v0.5.0

type UpdateUnitDatabaseFunc func(unitRepo Repository, unit *QuadletUnit, content string) error

UpdateUnitDatabaseFunc is the function signature for updating the unit database.

type Volume added in v0.3.0

type Volume struct {
	ContainersConfModule []string `yaml:"containers_conf_module"`
	Copy                 bool     `yaml:"copy"`
	Device               string   `yaml:"device"`
	Driver               string   `yaml:"driver"`
	GlobalArgs           []string `yaml:"global_args"`
	Group                string   `yaml:"group"`
	Image                string   `yaml:"image"`
	Label                []string `yaml:"label"`
	Options              []string `yaml:"options"`
	PodmanArgs           []string `yaml:"podman_args"`
	Type                 string   `yaml:"type"`
	User                 string   `yaml:"user"`
	VolumeName           string   `yaml:"volume_name"`

	// Systemd unit properties
	Name     string
	UnitType string
}

Volume represents the configuration for a volume in a Quadlet unit.

func NewVolume added in v0.3.0

func NewVolume(name string) *Volume

NewVolume creates a new Volume with the given name.

func (*Volume) FromComposeVolume added in v0.4.0

func (v *Volume) FromComposeVolume(name string, volume types.VolumeConfig) *Volume

FromComposeVolume creates a Volume from a Docker Compose volume configuration.

func (*Volume) GetServiceName added in v0.3.0

func (v *Volume) GetServiceName() string

GetServiceName returns the full systemd service name.

func (*Volume) GetStatus added in v0.3.0

func (v *Volume) GetStatus() (string, error)

GetStatus returns the current status of the unit.

func (*Volume) GetUnitName added in v0.3.0

func (v *Volume) GetUnitName() string

GetUnitName returns the name of the unit.

func (*Volume) GetUnitType added in v0.3.0

func (v *Volume) GetUnitType() string

GetUnitType returns the type of the unit.

func (*Volume) Restart added in v0.3.0

func (v *Volume) Restart() error

Restart restarts the unit.

func (*Volume) Show added in v0.3.0

func (v *Volume) Show() error

Show displays the unit configuration and status.

func (*Volume) Start added in v0.3.0

func (v *Volume) Start() error

Start starts the unit.

func (*Volume) Stop added in v0.3.0

func (v *Volume) Stop() error

Stop stops the unit.

type WriteUnitFileFunc added in v0.5.0

type WriteUnitFileFunc func(unitPath, content string) error

WriteUnitFileFunc is the function signature for writing a unit file.

Jump to

Keyboard shortcuts

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