Documentation
¶
Overview ¶
Package unit provides quadlet unit generation and management functionality
Index ¶
- Variables
- func ApplyDependencyRelationships(unit *QuadletUnit, serviceName string, ...)
- func BuildServiceDependencyTree(project *types.Project) map[string]*ServiceDependency
- func GenerateQuadletUnit(unit QuadletUnit, verbose bool) string
- func GetUnitStatus(unitName string, unitType string) (string, error)
- func ProcessComposeProjects(projects []*types.Project, force bool, existingProcessedUnits map[string]bool, ...) (map[string]bool, error)
- func ReloadSystemd() error
- func RestartChangedUnits(changedUnits []QuadletUnit, ...) error
- func RestartUnit(unitName string, unitType string) error
- func ShowUnit(unitName string, unitType string) error
- func StartUnit(unitName string, unitType string) error
- func StartUnitDependencyAware(unitName string, unitType string, dependencyTree map[string]*ServiceDependency) error
- func StopUnit(unitName string, unitType string) error
- type BaseSystemdUnit
- func (u *BaseSystemdUnit) GetServiceName() string
- func (u *BaseSystemdUnit) GetStatus() (string, error)
- func (u *BaseSystemdUnit) GetUnitName() string
- func (u *BaseSystemdUnit) GetUnitType() string
- func (u *BaseSystemdUnit) Restart() error
- func (u *BaseSystemdUnit) Show() error
- func (u *BaseSystemdUnit) Start() error
- func (u *BaseSystemdUnit) Stop() error
- type Change
- type CleanupOrphanedUnitsFunc
- type Container
- func (c *Container) FromComposeService(service types.ServiceConfig, projectName string) *Container
- func (c *Container) GetServiceName() string
- func (c *Container) GetStatus() (string, error)
- func (c *Container) GetUnitName() string
- func (c *Container) GetUnitType() string
- func (c *Container) Restart() error
- func (c *Container) Show() error
- func (c *Container) Start() error
- func (c *Container) Stop() error
- type Network
- func (n *Network) FromComposeNetwork(name string, network types.NetworkConfig) *Network
- func (n *Network) GetServiceName() string
- func (n *Network) GetStatus() (string, error)
- func (n *Network) GetUnitName() string
- func (n *Network) GetUnitType() string
- func (n *Network) Restart() error
- func (n *Network) Show() error
- func (n *Network) Start() error
- func (n *Network) Stop() error
- type ProcessUnitFunc
- type QuadletUnit
- type Repository
- type SQLRepository
- type Secret
- type ServiceDependency
- type SystemdConfig
- type SystemdUnit
- type Unit
- type UpdateUnitDatabaseFunc
- type Volume
- func (v *Volume) FromComposeVolume(name string, volume types.VolumeConfig) *Volume
- func (v *Volume) GetServiceName() string
- func (v *Volume) GetStatus() (string, error)
- func (v *Volume) GetUnitName() string
- func (v *Volume) GetUnitType() string
- func (v *Volume) Restart() error
- func (v *Volume) Show() error
- func (v *Volume) Start() error
- func (v *Volume) Stop() error
- type WriteUnitFileFunc
Constants ¶
This section is empty.
Variables ¶
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 ¶
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 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 ¶
RestartUnit - 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.
Types ¶
type BaseSystemdUnit ¶ added in v0.3.0
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 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
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
GetServiceName returns the full systemd service name.
func (*Container) GetUnitName ¶ added in v0.3.0
GetUnitName returns the name of the unit.
func (*Container) GetUnitType ¶ added in v0.3.0
GetUnitType returns the type of 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
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
GetServiceName returns the full systemd service name.
func (*Network) GetUnitName ¶ added in v0.3.0
GetUnitName returns the name of the unit.
func (*Network) GetUnitType ¶ added in v0.3.0
GetUnitType returns the type of 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 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 (*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
GetServiceName returns the full systemd service name.
func (*Volume) GetUnitName ¶ added in v0.3.0
GetUnitName returns the name of the unit.
func (*Volume) GetUnitType ¶ added in v0.3.0
GetUnitType returns the type of the unit.
type WriteUnitFileFunc ¶ added in v0.5.0
WriteUnitFileFunc is the function signature for writing a unit file.