haloyd

package
v0.1.0-beta.26 Latest Latest
Warning

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

Go to latest
Published: Jan 13, 2026 License: MIT Imports: 41 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Run

func Run(debug bool)

Types

type CertificatesClientManager

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

func NewCertificatesClientManager

func NewCertificatesClientManager(
	certDir string,
	tlsStaging bool,
	httpProviderPort string,
) (*CertificatesClientManager, error)

func (*CertificatesClientManager) LoadOrRegisterClient

func (cm *CertificatesClientManager) LoadOrRegisterClient(email string) (*lego.Client, error)

type CertificatesDomain

type CertificatesDomain struct {
	Canonical string
	Aliases   []string
	Email     string
}

func (*CertificatesDomain) Validate

func (cm *CertificatesDomain) Validate() error

type CertificatesKeyManager

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

CertificatesKeyManager handles private key operations for the ACME client

func NewCertificatesKeyManager

func NewCertificatesKeyManager(keyDir string) (*CertificatesKeyManager, error)

func (*CertificatesKeyManager) LoadOrCreateKey

func (km *CertificatesKeyManager) LoadOrCreateKey(email string) (crypto.PrivateKey, error)

type CertificatesManager

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

func NewCertificatesManager

func NewCertificatesManager(config CertificatesManagerConfig, updateSignal chan<- string) (*CertificatesManager, error)

func (*CertificatesManager) CleanupExpiredCertificates

func (m *CertificatesManager) CleanupExpiredCertificates(logger *slog.Logger, domains []CertificatesDomain)

func (*CertificatesManager) Refresh

func (cm *CertificatesManager) Refresh(logger *slog.Logger, domains []CertificatesDomain)

Refresh is used for periodic refreshes of certificates.

func (*CertificatesManager) RefreshSync

func (cm *CertificatesManager) RefreshSync(logger *slog.Logger, domains []CertificatesDomain) error

func (*CertificatesManager) Stop

func (m *CertificatesManager) Stop()

type CertificatesManagerConfig

type CertificatesManagerConfig struct {
	CertDir          string
	HTTPProviderPort string
	TlsStaging       bool
}

type CertificatesUser

type CertificatesUser struct {
	Email        string
	Registration *registration.Resource
	// contains filtered or unexported fields
}

func (*CertificatesUser) GetEmail

func (u *CertificatesUser) GetEmail() string

func (*CertificatesUser) GetPrivateKey

func (u *CertificatesUser) GetPrivateKey() crypto.PrivateKey

func (*CertificatesUser) GetRegistration

func (u *CertificatesUser) GetRegistration() *registration.Resource

type ContainerEvent

type ContainerEvent struct {
	Event     events.Message
	Container container.InspectResponse
	Labels    *config.ContainerLabels
}

type Deployment

type Deployment struct {
	Labels    *config.ContainerLabels
	Instances []DeploymentInstance
}

type DeploymentInstance

type DeploymentInstance struct {
	ContainerID string
	IP          string
	Port        string
}

type DeploymentManager

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

func NewDeploymentManager

func NewDeploymentManager(cli *client.Client, haloydConfig *config.HaloydConfig) *DeploymentManager

func (*DeploymentManager) Deployments

func (dm *DeploymentManager) Deployments() map[string]Deployment

func (*DeploymentManager) DiscoverContainers

func (dm *DeploymentManager) DiscoverContainers(ctx context.Context, logger *slog.Logger) (discovered []DiscoveredContainer, failed []FailedContainer, err error)

DiscoverContainers finds all containers with haloy labels and validates their basic configuration. It returns containers that are eligible for health checking, and containers that failed validation.

func (*DeploymentManager) GetCertificateDomains

func (dm *DeploymentManager) GetCertificateDomains() ([]CertificatesDomain, error)

GetCertificateDomains collects all canonical domains and their aliases for certificate management.

func (*DeploymentManager) HealthCheckContainers

func (dm *DeploymentManager) HealthCheckContainers(ctx context.Context, logger *slog.Logger, discovered []DiscoveredContainer) (healthy []HealthyContainer, failed []FailedContainer)

HealthCheckContainers performs health checks on all discovered containers. Returns healthy containers (with IPs) and failed containers with detailed error information.

func (*DeploymentManager) UpdateDeployments

func (dm *DeploymentManager) UpdateDeployments(healthy []HealthyContainer) (hasChanged bool)

UpdateDeployments builds the deployment map from healthy containers and compares with previous state. Returns whether the deployment state has changed.

type DiscoveredContainer

type DiscoveredContainer struct {
	ContainerID   string
	Labels        *config.ContainerLabels
	ContainerInfo container.InspectResponse
	Port          string
}

DiscoveredContainer represents a container found with haloy labels but not yet validated as healthy/routable.

type FailedContainer

type FailedContainer struct {
	ContainerID string
	Labels      *config.ContainerLabels // May be nil if label parsing failed
	Reason      string                  // Human-readable failure reason
	Err         error                   // Underlying error
}

FailedContainer represents a container that failed discovery or health check.

type HAProxyManager

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

func NewHAProxyManager

func NewHAProxyManager(cli *client.Client, haloydConfig *config.HaloydConfig, configDir string, debug bool) *HAProxyManager

func (*HAProxyManager) ApplyConfig

func (hpm *HAProxyManager) ApplyConfig(ctx context.Context, logger *slog.Logger, deployments map[string]Deployment) error

ApplyConfig generates, writes (if not debug), and reloads HAProxy config. This method is concurrency-safe due to the internal mutex.

type HealthyContainer

type HealthyContainer struct {
	ContainerID string
	Labels      *config.ContainerLabels
	IP          string
	Port        string
}

HealthyContainer is a container that passed health checks and is ready to receive traffic.

type TriggerReason

type TriggerReason int
const (
	TriggerReasonInitial    TriggerReason = iota // Initial update at startup
	TriggerReasonAppUpdated                      // An app container was stopped, killed or removed
	TriggerPeriodicRefresh                       // Periodic refresh (e.g., every 5 minutes)
)

func (TriggerReason) String

func (r TriggerReason) String() string

type TriggeredByApp

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

func (*TriggeredByApp) Validate

func (tba *TriggeredByApp) Validate() error

type UpdateResult

type UpdateResult struct {
	// FailedContainers contains containers that failed discovery or health check.
	// This is used by the caller to determine if a triggered app deployment failed.
	FailedContainers []FailedContainer
}

UpdateResult contains information about the update operation.

func (*UpdateResult) GetAppFailures

func (r *UpdateResult) GetAppFailures(appName string) []FailedContainer

GetAppFailures returns failures for a specific app from the update result.

type Updater

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

func NewUpdater

func NewUpdater(config UpdaterConfig) *Updater

func (*Updater) Update

func (u *Updater) Update(ctx context.Context, logger *slog.Logger, reason TriggerReason, app *TriggeredByApp) (UpdateResult, error)

type UpdaterConfig

type UpdaterConfig struct {
	Cli               *client.Client
	DeploymentManager *DeploymentManager
	CertManager       *CertificatesManager
	HAProxyManager    *HAProxyManager
}

Jump to

Keyboard shortcuts

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