network

package
v0.0.2 Latest Latest
Warning

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

Go to latest
Published: Feb 16, 2026 License: Apache-2.0 Imports: 8 Imported by: 0

Documentation

Overview

Package network manages routing, custom domains, TLS certificates, and service discovery for ctrlplane instances. It defines the Router interface for pluggable traffic routing implementations.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AddDomainRequest

type AddDomainRequest struct {
	InstanceID id.ID  `json:"instance_id" validate:"required"`
	Hostname   string `json:"hostname"    validate:"required,fqdn"`
	TLSEnabled bool   `json:"tls_enabled"`
}

AddDomainRequest holds the parameters for adding a custom domain.

type AddRouteRequest

type AddRouteRequest struct {
	InstanceID id.ID  `json:"instance_id" validate:"required"`
	Path       string `json:"path"        validate:"required"`
	Port       int    `json:"port"        validate:"required"`
	Protocol   string `default:"http"     json:"protocol"`
	Weight     int    `default:"100"      json:"weight"`
}

AddRouteRequest holds the parameters for creating a traffic route.

type Certificate

type Certificate struct {
	ctrlplane.Entity

	DomainID  id.ID     `db:"domain_id"  json:"domain_id"`
	TenantID  string    `db:"tenant_id"  json:"tenant_id"`
	Issuer    string    `db:"issuer"     json:"issuer"`
	ExpiresAt time.Time `db:"expires_at" json:"expires_at"`
	AutoRenew bool      `db:"auto_renew" json:"auto_renew"`
}

Certificate holds TLS certificate state.

type Domain

type Domain struct {
	ctrlplane.Entity

	TenantID    string     `db:"tenant_id"    json:"tenant_id"`
	InstanceID  id.ID      `db:"instance_id"  json:"instance_id"`
	Hostname    string     `db:"hostname"     json:"hostname"`
	Verified    bool       `db:"verified"     json:"verified"`
	TLSEnabled  bool       `db:"tls_enabled"  json:"tls_enabled"`
	CertExpiry  *time.Time `db:"cert_expiry"  json:"cert_expiry,omitempty"`
	DNSTarget   string     `db:"dns_target"   json:"dns_target"`
	VerifyToken string     `db:"verify_token" json:"verify_token"`
}

Domain represents a custom domain bound to an instance.

type Route

type Route struct {
	ctrlplane.Entity

	TenantID    string `db:"tenant_id"    json:"tenant_id"`
	InstanceID  id.ID  `db:"instance_id"  json:"instance_id"`
	Path        string `db:"path"         json:"path"`
	Port        int    `db:"port"         json:"port"`
	Protocol    string `db:"protocol"     json:"protocol"`
	Weight      int    `db:"weight"       json:"weight"`
	StripPrefix bool   `db:"strip_prefix" json:"strip_prefix"`
}

Route maps traffic from an endpoint to an instance.

type Router

type Router interface {
	// AddRoute configures a route to an instance.
	AddRoute(ctx context.Context, route *Route) error

	// RemoveRoute removes a route.
	RemoveRoute(ctx context.Context, routeID id.ID) error

	// UpdateRoute modifies an existing route.
	UpdateRoute(ctx context.Context, route *Route) error

	// AddDomain configures a custom domain.
	AddDomain(ctx context.Context, domain *Domain) error

	// RemoveDomain removes a custom domain.
	RemoveDomain(ctx context.Context, domainID id.ID) error

	// ProvisionCert obtains or renews a TLS certificate.
	ProvisionCert(ctx context.Context, domain *Domain) (*Certificate, error)
}

Router abstracts traffic routing implementation. Implement for your load balancer or ingress controller.

type Service

type Service interface {
	// AddDomain registers a custom domain for an instance.
	AddDomain(ctx context.Context, req AddDomainRequest) (*Domain, error)

	// VerifyDomain confirms DNS ownership of a domain.
	VerifyDomain(ctx context.Context, domainID id.ID) (*Domain, error)

	// RemoveDomain removes a custom domain.
	RemoveDomain(ctx context.Context, domainID id.ID) error

	// ListDomains returns all domains for an instance.
	ListDomains(ctx context.Context, instanceID id.ID) ([]Domain, error)

	// AddRoute creates a traffic route to an instance.
	AddRoute(ctx context.Context, req AddRouteRequest) (*Route, error)

	// UpdateRoute modifies an existing route.
	UpdateRoute(ctx context.Context, routeID id.ID, req UpdateRouteRequest) (*Route, error)

	// RemoveRoute removes a traffic route.
	RemoveRoute(ctx context.Context, routeID id.ID) error

	// ListRoutes returns all routes for an instance.
	ListRoutes(ctx context.Context, instanceID id.ID) ([]Route, error)

	// ProvisionCert obtains or renews a TLS certificate for a domain.
	ProvisionCert(ctx context.Context, domainID id.ID) (*Certificate, error)

	// ListCerts returns all certificates for an instance.
	ListCerts(ctx context.Context, instanceID id.ID) ([]Certificate, error)
}

Service manages domains, routes, and certificates for instances.

func NewService

func NewService(store Store, router Router, events event.Bus, auth auth.Provider) Service

NewService creates a new network service.

type Store

type Store interface {
	// InsertDomain persists a new domain.
	InsertDomain(ctx context.Context, domain *Domain) error

	// GetDomain retrieves a domain by ID.
	GetDomain(ctx context.Context, tenantID string, domainID id.ID) (*Domain, error)

	// GetDomainByHostname retrieves a domain by its hostname.
	GetDomainByHostname(ctx context.Context, hostname string) (*Domain, error)

	// ListDomains returns all domains for an instance.
	ListDomains(ctx context.Context, tenantID string, instanceID id.ID) ([]Domain, error)

	// UpdateDomain persists changes to a domain.
	UpdateDomain(ctx context.Context, domain *Domain) error

	// DeleteDomain removes a domain.
	DeleteDomain(ctx context.Context, tenantID string, domainID id.ID) error

	// InsertRoute persists a new route.
	InsertRoute(ctx context.Context, route *Route) error

	// GetRoute retrieves a route by ID.
	GetRoute(ctx context.Context, tenantID string, routeID id.ID) (*Route, error)

	// ListRoutes returns all routes for an instance.
	ListRoutes(ctx context.Context, tenantID string, instanceID id.ID) ([]Route, error)

	// UpdateRoute persists changes to a route.
	UpdateRoute(ctx context.Context, route *Route) error

	// DeleteRoute removes a route.
	DeleteRoute(ctx context.Context, tenantID string, routeID id.ID) error

	// InsertCertificate persists a new certificate.
	InsertCertificate(ctx context.Context, cert *Certificate) error

	// GetCertificate retrieves a certificate by ID.
	GetCertificate(ctx context.Context, tenantID string, certID id.ID) (*Certificate, error)

	// ListCertificates returns all certificates for an instance.
	ListCertificates(ctx context.Context, tenantID string, instanceID id.ID) ([]Certificate, error)

	// UpdateCertificate persists changes to a certificate.
	UpdateCertificate(ctx context.Context, cert *Certificate) error

	// DeleteCertificate removes a certificate.
	DeleteCertificate(ctx context.Context, tenantID string, certID id.ID) error

	// CountDomainsByTenant returns the number of domains for a tenant.
	CountDomainsByTenant(ctx context.Context, tenantID string) (int, error)
}

Store is the persistence interface for domains, routes, and certificates.

type UpdateRouteRequest

type UpdateRouteRequest struct {
	Path        *string `json:"path,omitempty"`
	Weight      *int    `json:"weight,omitempty"`
	StripPrefix *bool   `json:"strip_prefix,omitempty"`
}

UpdateRouteRequest holds the parameters for modifying a route.

Jump to

Keyboard shortcuts

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