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.
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.