takod

package
v0.4.6 Latest Latest
Warning

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

Go to latest
Published: Jun 17, 2026 License: MIT Imports: 23 Imported by: 0

Documentation

Index

Constants

View Source
const (
	BackupDir        = "/var/lib/tako/backups"
	DefaultRetention = 7
)
View Source
const (
	PortAllocationKindMeshUpstream = "mesh-upstream"
)

Variables

This section is empty.

Functions

func DeleteVolumeBackup

func DeleteVolumeBackup(ctx context.Context, req BackupRequest) error

func ExportImage

func ExportImage(ctx context.Context, image string, w io.Writer) error

func ReadMeshStatus

func ReadMeshStatus(ctx context.Context, interfaceName string) (*mesh.Status, error)

func RefreshActualStateDocuments

func RefreshActualStateDocuments(ctx context.Context, dataDir string, node string) (int, error)

func ReleaseProjectPortAllocations

func ReleaseProjectPortAllocations(ctx context.Context, dataDir string, project string, environment string) error

func ReleaseServicePortAllocations

func ReleaseServicePortAllocations(ctx context.Context, dataDir string, project string, environment string, service string) error

func RestoreVolumeBackup

func RestoreVolumeBackup(ctx context.Context, req BackupRequest) error

func StreamProxyAccessLogs

func StreamProxyAccessLogs(ctx context.Context, tail int, follow bool, writer io.Writer) error

func StreamServiceLogs

func StreamServiceLogs(ctx context.Context, req LogsRequest, writer io.Writer) error

Types

type AcmeDNSCredentialsRequest

type AcmeDNSCredentialsRequest struct {
	Content string `json:"content"`
}

type AcmeDNSCredentialsResponse

type AcmeDNSCredentialsResponse struct {
	Content string `json:"content"`
}

func ReadAcmeDNSCredentials

func ReadAcmeDNSCredentials() (*AcmeDNSCredentialsResponse, error)

type AcmeDNSRegisterRequest

type AcmeDNSRegisterRequest struct {
	Domain   string `json:"domain"`
	ServerIP string `json:"serverIP"`
}

type AcmeDNSRegisterResponse

type AcmeDNSRegisterResponse struct {
	Registration AcmeDNSRegistration `json:"registration"`
}

type AcmeDNSRegistration

type AcmeDNSRegistration struct {
	Domain      string    `json:"domain"`
	Subdomain   string    `json:"subdomain"`
	Username    string    `json:"username"`
	Password    string    `json:"password"`
	FullDomain  string    `json:"fulldomain"`
	CNAMETarget string    `json:"cname_target"`
	ServerIP    string    `json:"server_ip"`
	CreatedAt   time.Time `json:"created_at"`
}

type ActualRefreshTarget

type ActualRefreshTarget struct {
	Project     string
	Environment string
}

func ListActualRefreshTargets

func ListActualRefreshTargets(dataDir string) ([]ActualRefreshTarget, error)

type ActualService

type ActualService struct {
	Name       string   `json:"name"`
	Image      string   `json:"image,omitempty"`
	Replicas   int      `json:"replicas"`
	Containers []string `json:"containers,omitempty"`
	ConfigHash string   `json:"configHash,omitempty"`
	RuntimeID  string   `json:"runtimeId,omitempty"`
}

type ActualStateResponse

type ActualStateResponse struct {
	Project     string                    `json:"project"`
	Environment string                    `json:"environment"`
	Services    map[string]*ActualService `json:"services"`
}

func GatherActualState

func GatherActualState(ctx context.Context, project string, environment string) (*ActualStateResponse, error)

func ParseActualState

func ParseActualState(project string, environment string, dockerPSOutput string) *ActualStateResponse

type BackupCleanupResponse

type BackupCleanupResponse struct {
	Deleted int `json:"deleted"`
}

func CleanupOldBackups

func CleanupOldBackups(ctx context.Context, req BackupRequest) (*BackupCleanupResponse, error)

type BackupInfo

type BackupInfo struct {
	ID          string    `json:"id"`
	Service     string    `json:"service,omitempty"`
	Volume      string    `json:"volume"`
	Size        int64     `json:"size"`
	CreatedAt   time.Time `json:"createdAt"`
	Path        string    `json:"path"`
	Compression string    `json:"compression"`
}

func CreateVolumeBackup

func CreateVolumeBackup(ctx context.Context, req BackupRequest) (*BackupInfo, error)

type BackupListResponse

type BackupListResponse struct {
	Backups []BackupInfo `json:"backups"`
}

func ListVolumeBackups

func ListVolumeBackups(ctx context.Context, req BackupRequest) (*BackupListResponse, error)

type BackupRequest

type BackupRequest struct {
	Project        string `json:"project"`
	Environment    string `json:"environment"`
	Volume         string `json:"volume,omitempty"`
	DockerVolume   string `json:"dockerVolume,omitempty"`
	ExternalVolume bool   `json:"externalVolume,omitempty"`
	BackupID       string `json:"backupId,omitempty"`
	RetentionDays  int    `json:"retentionDays,omitempty"`
}

type CleanupRequest

type CleanupRequest struct {
	Project                string   `json:"project"`
	Environment            string   `json:"environment,omitempty"`
	RemoveContainers       bool     `json:"removeContainers,omitempty"`
	RemoveImages           bool     `json:"removeImages,omitempty"`
	RemoveNetworks         bool     `json:"removeNetworks,omitempty"`
	RemoveDeployFiles      bool     `json:"removeDeployFiles,omitempty"`
	RemoveTakodState       bool     `json:"removeTakodState,omitempty"`
	ProxyFiles             []string `json:"proxyFiles,omitempty"`
	ExternalVolumes        []string `json:"externalVolumes,omitempty"`
	PruneDocker            bool     `json:"pruneDocker,omitempty"`
	ImageRepositories      []string `json:"imageRepositories,omitempty"`
	KeepImages             int      `json:"keepImages,omitempty"`
	CleanOldImages         bool     `json:"cleanOldImages,omitempty"`
	CleanStoppedContainers bool     `json:"cleanStoppedContainers,omitempty"`
	CleanDanglingImages    bool     `json:"cleanDanglingImages,omitempty"`
	CleanBuildCache        bool     `json:"cleanBuildCache,omitempty"`
	CleanUnusedVolumes     bool     `json:"cleanUnusedVolumes,omitempty"`
	SecureLogPermissions   bool     `json:"secureLogPermissions,omitempty"`
}

type CleanupResponse

type CleanupResponse struct {
	Project               string   `json:"project"`
	Environment           string   `json:"environment,omitempty"`
	ContainersRemoved     int      `json:"containersRemoved,omitempty"`
	ImagesRemoved         int      `json:"imagesRemoved,omitempty"`
	NetworksRemoved       int      `json:"networksRemoved,omitempty"`
	ProxyFilesRemoved     int      `json:"proxyFilesRemoved,omitempty"`
	BuildCacheCleaned     bool     `json:"buildCacheCleaned,omitempty"`
	UnusedVolumesCleaned  bool     `json:"unusedVolumesCleaned,omitempty"`
	LogPermissionsSecured bool     `json:"logPermissionsSecured,omitempty"`
	InitialDiskUsage      string   `json:"initialDiskUsage,omitempty"`
	FinalDiskUsage        string   `json:"finalDiskUsage,omitempty"`
	DockerDiskUsage       string   `json:"dockerDiskUsage,omitempty"`
	Warnings              []string `json:"warnings,omitempty"`
}

func CleanupProject

func CleanupProject(ctx context.Context, req CleanupRequest) (*CleanupResponse, error)

type ContainerSpec

type ContainerSpec struct {
	Name           string   `json:"name"`
	NetworkAliases []string `json:"networkAliases,omitempty"`
	Publishes      []string `json:"publishes,omitempty"`
}

type ContainerStat

type ContainerStat struct {
	Name       string `json:"name"`
	CPUPercent string `json:"cpuPercent"`
	MemUsage   string `json:"memUsage"`
	MemPercent string `json:"memPercent"`
	NetIO      string `json:"netIO"`
	BlockIO    string `json:"blockIO"`
	PIDs       string `json:"pids"`
}

type EnvBundleRequest

type EnvBundleRequest struct {
	Project     string    `json:"project"`
	Environment string    `json:"environment"`
	Content     string    `json:"content,omitempty"`
	UpdatedAt   time.Time `json:"updatedAt,omitempty"`
}

type EnvBundleResponse

type EnvBundleResponse struct {
	Found     bool      `json:"found"`
	Content   string    `json:"content,omitempty"`
	Path      string    `json:"path,omitempty"`
	UpdatedAt time.Time `json:"updatedAt,omitempty"`
}

func ReadEnvBundle

func ReadEnvBundle(ctx context.Context, dataDir string, req EnvBundleRequest) (*EnvBundleResponse, error)

func WriteEnvBundle

func WriteEnvBundle(ctx context.Context, dataDir string, req EnvBundleRequest) (*EnvBundleResponse, error)

type HealthSpec

type HealthSpec struct {
	Command      string `json:"command,omitempty"`
	Path         string `json:"path,omitempty"`
	Port         int    `json:"port,omitempty"`
	Scheme       string `json:"scheme,omitempty"`
	Interval     string `json:"interval,omitempty"`
	Timeout      string `json:"timeout,omitempty"`
	Retries      int    `json:"retries,omitempty"`
	StartPeriod  string `json:"startPeriod,omitempty"`
	WaitAttempts int    `json:"waitAttempts,omitempty"`
}

type ImageBuildResponse

type ImageBuildResponse struct {
	Image  string `json:"image"`
	Output string `json:"output,omitempty"`
}

func BuildImage

func BuildImage(ctx context.Context, image string, r io.Reader, dockerfile ...string) (*ImageBuildResponse, error)

type ImageExistsResponse

type ImageExistsResponse struct {
	Image  string `json:"image"`
	Exists bool   `json:"exists"`
}

func ImageExists

func ImageExists(ctx context.Context, image string) (*ImageExistsResponse, error)

type ImageImportResponse

type ImageImportResponse struct {
	Image  string `json:"image"`
	Output string `json:"output,omitempty"`
}

func ImportImage

func ImportImage(ctx context.Context, image string, r io.Reader) (*ImageImportResponse, error)

type LeaseInfo

type LeaseInfo struct {
	ID          string    `json:"id"`
	ProjectName string    `json:"projectName"`
	Environment string    `json:"environment"`
	Operation   string    `json:"operation"`
	Who         string    `json:"who"`
	PID         int       `json:"pid"`
	CreatedAt   time.Time `json:"createdAt"`
	ExpiresAt   time.Time `json:"expiresAt"`
}

type LeaseRequest

type LeaseRequest struct {
	Project     string `json:"project"`
	Environment string `json:"environment"`
	ID          string `json:"id,omitempty"`
	Operation   string `json:"operation,omitempty"`
	Who         string `json:"who,omitempty"`
	PID         int    `json:"pid,omitempty"`
	TTLSeconds  int64  `json:"ttlSeconds,omitempty"`
}

type LeaseResponse

type LeaseResponse struct {
	Acquired bool       `json:"acquired"`
	Found    bool       `json:"found"`
	Lease    *LeaseInfo `json:"lease,omitempty"`
	Message  string     `json:"message,omitempty"`
}

func AcquireLease

func AcquireLease(ctx context.Context, dataDir string, req LeaseRequest) (*LeaseResponse, error)

func ReadLease

func ReadLease(ctx context.Context, dataDir string, req LeaseRequest) (*LeaseResponse, error)

func ReleaseLease

func ReleaseLease(ctx context.Context, dataDir string, req LeaseRequest) (*LeaseResponse, error)

type LogsRequest

type LogsRequest struct {
	Project     string `json:"project"`
	Environment string `json:"environment"`
	Service     string `json:"service"`
	Tail        int    `json:"tail,omitempty"`
	Follow      bool   `json:"follow,omitempty"`
}

type MeshApplyRequest

type MeshApplyRequest struct {
	Config mesh.WireGuardConfig `json:"config"`
	Node   mesh.Node            `json:"node"`
	Peers  []mesh.Node          `json:"peers,omitempty"`
}

type MeshApplyResponse

type MeshApplyResponse struct {
	Applied bool         `json:"applied"`
	Status  *mesh.Status `json:"status,omitempty"`
}

func ReconcileMesh

func ReconcileMesh(ctx context.Context, request MeshApplyRequest) (*MeshApplyResponse, error)

type MeshKeyResponse

type MeshKeyResponse struct {
	PublicKey string `json:"publicKey"`
}

func EnsureMeshKey

func EnsureMeshKey(ctx context.Context) (*MeshKeyResponse, error)

type MetadataRequest

type MetadataRequest struct {
	Node  any `json:"node,omitempty"`
	Peers any `json:"peers,omitempty"`
}

type MetadataResponse

type MetadataResponse struct {
	NodePath  string `json:"nodePath,omitempty"`
	PeersPath string `json:"peersPath,omitempty"`
}

func WriteMetadata

func WriteMetadata(ctx context.Context, dataDir string, req MetadataRequest) (*MetadataResponse, error)

type MetricsResponse

type MetricsResponse struct {
	Collected bool            `json:"collected"`
	Metrics   json.RawMessage `json:"metrics"`
}

func ReadNodeMetrics

func ReadNodeMetrics(ctx context.Context, collect bool) (*MetricsResponse, error)

type PortAllocationRequest

type PortAllocationRequest struct {
	Kind          string `json:"kind"`
	Project       string `json:"project"`
	Environment   string `json:"environment"`
	Service       string `json:"service"`
	Slot          int    `json:"slot"`
	HostIP        string `json:"hostIp"`
	ContainerPort int    `json:"containerPort"`
	PreferredPort int    `json:"preferredPort"`
	MinPort       int    `json:"minPort"`
	MaxPort       int    `json:"maxPort"`
}

type PortAllocationResponse

type PortAllocationResponse struct {
	Kind          string `json:"kind"`
	Project       string `json:"project"`
	Environment   string `json:"environment"`
	Service       string `json:"service"`
	Slot          int    `json:"slot"`
	HostIP        string `json:"hostIp"`
	HostPort      int    `json:"hostPort"`
	ContainerPort int    `json:"containerPort"`
	Key           string `json:"key"`
}

func AllocatePort

func AllocatePort(ctx context.Context, dataDir string, req PortAllocationRequest) (*PortAllocationResponse, error)

type ProxyFileRequest

type ProxyFileRequest struct {
	Name    string `json:"name"`
	Content string `json:"content"`
}

type ProxyFileResponse

type ProxyFileResponse struct {
	Path string `json:"path"`
}

func RemoveProxyFile

func RemoveProxyFile(ctx context.Context, name string) (*ProxyFileResponse, error)

func WriteProxyFile

func WriteProxyFile(ctx context.Context, req ProxyFileRequest) (*ProxyFileResponse, error)

type ReconcileAcmeDNSRequest

type ReconcileAcmeDNSRequest struct {
	ServerIP string `json:"serverIP"`
	Image    string `json:"image,omitempty"`
}

type ReconcileAcmeDNSResponse

type ReconcileAcmeDNSResponse struct {
	Container string `json:"container"`
	Image     string `json:"image"`
}

func RemoveAcmeDNS

func RemoveAcmeDNS(ctx context.Context) (*ReconcileAcmeDNSResponse, error)

type ReconcileProxyRequest

type ReconcileProxyRequest struct {
	Network string `json:"network"`
	Email   string `json:"email,omitempty"`
	Image   string `json:"image,omitempty"`
}

type ReconcileProxyResponse

type ReconcileProxyResponse struct {
	Container string `json:"container"`
	Image     string `json:"image"`
}

type ReconcileServiceRequest

type ReconcileServiceRequest struct {
	Project         string            `json:"project"`
	Environment     string            `json:"environment"`
	Service         string            `json:"service"`
	Image           string            `json:"image"`
	PullImage       bool              `json:"pullImage,omitempty"`
	Restart         string            `json:"restart,omitempty"`
	Network         string            `json:"network"`
	NetworkAlias    string            `json:"networkAlias,omitempty"`
	EnvFile         string            `json:"envFile,omitempty"`
	EnvFileContent  string            `json:"envFileContent,omitempty"`
	Labels          map[string]string `json:"labels,omitempty"`
	Mounts          []string          `json:"mounts,omitempty"`
	ExternalVolumes []string          `json:"externalVolumes,omitempty"`
	Containers      []ContainerSpec   `json:"containers"`
	Health          *HealthSpec       `json:"health,omitempty"`
	Command         string            `json:"command,omitempty"`
}

type ReconcileServiceResponse

type ReconcileServiceResponse struct {
	Project           string   `json:"project"`
	Environment       string   `json:"environment"`
	Service           string   `json:"service"`
	Containers        []string `json:"containers"`
	RemovedContainers int      `json:"removedContainers,omitempty"`
}

type RemoveServiceRequest

type RemoveServiceRequest struct {
	Project     string `json:"project"`
	Environment string `json:"environment"`
	Service     string `json:"service"`
}

type RemoveServiceResponse

type RemoveServiceResponse struct {
	Project           string `json:"project"`
	Environment       string `json:"environment"`
	Service           string `json:"service"`
	RemovedContainers int    `json:"removedContainers"`
}

type Server

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

func NewServer

func NewServer(socket string, dataDir string, version string) *Server

func NewServerWithOptions

func NewServerWithOptions(socket string, dataDir string, version string, opts ServerOptions) *Server

func (*Server) Run

func (s *Server) Run(ctx context.Context) error

func (*Server) Status

func (s *Server) Status() Status

type ServerOptions

type ServerOptions struct {
	NodeName              string
	ActualRefreshInterval time.Duration
}

type StateDocumentRequest

type StateDocumentRequest struct {
	Project     string `json:"project"`
	Environment string `json:"environment"`
	Document    string `json:"document"`
	Node        string `json:"node,omitempty"`
	RevisionID  string `json:"revisionId,omitempty"`
	Content     string `json:"content,omitempty"`
}

type StateDocumentResponse

type StateDocumentResponse struct {
	Found   bool   `json:"found"`
	Content string `json:"content,omitempty"`
	Path    string `json:"path,omitempty"`
}

func AppendStateEvent

func AppendStateEvent(ctx context.Context, dataDir string, req StateDocumentRequest) (*StateDocumentResponse, error)

func ReadStateDocument

func ReadStateDocument(ctx context.Context, dataDir string, req StateDocumentRequest) (*StateDocumentResponse, error)

func WriteStateDocument

func WriteStateDocument(ctx context.Context, dataDir string, req StateDocumentRequest) (*StateDocumentResponse, error)

type StatsRequest

type StatsRequest struct {
	Project     string `json:"project,omitempty"`
	Environment string `json:"environment,omitempty"`
	Service     string `json:"service,omitempty"`
	All         bool   `json:"all,omitempty"`
}

type StatsResponse

type StatsResponse struct {
	Stats []ContainerStat `json:"stats"`
}

func ReadContainerStats

func ReadContainerStats(ctx context.Context, req StatsRequest) (*StatsResponse, error)

type Status

type Status struct {
	Runtime   string         `json:"runtime"`
	Version   string         `json:"version"`
	Hostname  string         `json:"hostname"`
	Socket    string         `json:"socket"`
	DataDir   string         `json:"dataDir"`
	StartedAt time.Time      `json:"startedAt"`
	Now       time.Time      `json:"now"`
	Node      map[string]any `json:"node,omitempty"`
	Peers     map[string]any `json:"peers,omitempty"`
}

Jump to

Keyboard shortcuts

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