Documentation
¶
Index ¶
- Constants
- func CheckServiceFiles(request ServiceFilesCheckRequest) error
- func CleanupBackupObjects(ctx context.Context, storage BackupStorageConfig, ...) error
- func DeleteVolumeBackup(ctx context.Context, req BackupRequest) error
- func ExportImage(ctx context.Context, image string, w io.Writer) error
- func PublishServiceFiles(ctx context.Context, request ServiceFilesRequest) error
- func ReadMeshStatus(ctx context.Context, interfaceName string) (*mesh.Status, error)
- func RefreshActualStateDocuments(ctx context.Context, dataDir string, node string) (int, error)
- func ReleaseProjectPortAllocations(ctx context.Context, dataDir string, project string, environment string) error
- func ReleaseServicePortAllocations(ctx context.Context, dataDir string, project string, environment string, ...) error
- func ReleaseServicePortAllocationsExceptRevision(ctx context.Context, dataDir string, project string, environment string, ...) error
- func RestoreVolumeBackup(ctx context.Context, req BackupRequest) error
- func RunExecStream(ctx context.Context, req ExecRequest, reader io.Reader, writer io.Writer) error
- func ServiceFileBundlePath(project, environment, service, setID, bundle string) string
- func StreamExec(ctx context.Context, req ExecRequest, writer io.Writer) error
- func StreamProxyAccessLogs(ctx context.Context, tail int, follow bool, writer io.Writer) error
- func StreamServiceLogs(ctx context.Context, req LogsRequest, writer io.Writer) error
- func ValidateBackupStorage(storage BackupStorageConfig) error
- type ActualRefreshTarget
- type ActualService
- type ActualStateResponse
- type BackupCleanupResponse
- type BackupInfo
- type BackupListResponse
- type BackupObject
- type BackupObjectRetention
- type BackupRemoteInfo
- type BackupRequest
- type BackupScheduleRequest
- type BackupScheduleResponse
- type BackupScheduleVolume
- type BackupScheduler
- func (s *BackupScheduler) Delete(ctx context.Context, project string, environment string, service string) (*BackupScheduleResponse, error)
- func (s *BackupScheduler) Run(ctx context.Context)
- func (s *BackupScheduler) Upsert(ctx context.Context, request BackupScheduleRequest) (*BackupScheduleResponse, error)
- type BackupStorageConfig
- type CleanupRequest
- type CleanupResponse
- type ContainerSpec
- type ContainerStat
- type EnvBundleRequest
- type EnvBundleResponse
- type ExecRequest
- type ExportDiscoveryRecord
- type ExportDiscoveryResponse
- type HealthSpec
- type ImageBuildOptions
- type ImageBuildResponse
- func BuildImage(ctx context.Context, image string, r io.Reader, dockerfile ...string) (*ImageBuildResponse, error)
- func BuildImageWithAuth(ctx context.Context, image string, r io.Reader, auths []RegistryAuth, ...) (*ImageBuildResponse, error)
- func BuildImageWithOptions(ctx context.Context, image string, r io.Reader, auths []RegistryAuth, ...) (*ImageBuildResponse, error)
- type ImageBuildTimings
- type ImageExistsResponse
- type ImageImportResponse
- type JobRunRecord
- type JobScheduler
- func (s *JobScheduler) Apply(ctx context.Context, request JobsApplyRequest) (*JobsApplyResponse, error)
- func (s *JobScheduler) List(project string, environment string) []JobStatus
- func (s *JobScheduler) RemoveProject(project string, environment string) ([]string, error)
- func (s *JobScheduler) Run(ctx context.Context)
- func (s *JobScheduler) Runs(project string, environment string, job string) ([]JobRunRecord, error)
- func (s *JobScheduler) Trigger(ctx context.Context, project string, environment string, job string, ...) error
- type JobSpec
- type JobStatus
- type JobTriggerRequest
- type JobsApplyRequest
- type JobsApplyResponse
- type LeaseInfo
- type LeaseRequest
- type LeaseResponse
- type LogsRequest
- type MeshApplyRequest
- type MeshApplyResponse
- type MeshKeyResponse
- type MetadataRequest
- type MetadataResponse
- type MetricsResponse
- type NetworkAttachmentSpec
- type PortAllocationRequest
- type PortAllocationResponse
- type ProxyDynamicDomain
- type ProxyFileRequest
- type ProxyFileResponse
- type ProxyRoute
- type ProxyRouteBasicAuth
- type ProxyRouteHealth
- type ProxyRouteManifest
- type ReconcileProxyRequest
- type ReconcileProxyResponse
- type ReconcileServiceRequest
- type ReconcileServiceResponse
- type RegistryAuth
- type RemoveServiceRequest
- type RemoveServiceResponse
- type Server
- type ServerOptions
- type ServiceFileBundle
- type ServiceFileEntry
- type ServiceFilesCheckRequest
- type ServiceFilesRequest
- type StateDocumentRequest
- type StateDocumentResponse
- func AppendStateEvent(ctx context.Context, dataDir string, req StateDocumentRequest) (*StateDocumentResponse, error)
- func DeleteStateDocument(ctx context.Context, dataDir string, req StateDocumentRequest) (*StateDocumentResponse, error)
- func ReadStateDocument(ctx context.Context, dataDir string, req StateDocumentRequest) (*StateDocumentResponse, error)
- func WriteStateDocument(ctx context.Context, dataDir string, req StateDocumentRequest) (*StateDocumentResponse, error)
- type StatsRequest
- type StatsResponse
- type Status
Constants ¶
const ( BackupDir = "/var/lib/tako/backups" DefaultRetention = 7 )
const ( BackupStorageProviderS3 = "s3" BackupStorageProviderR2 = "r2" BackupStorageProviderS3Compatible = "s3-compatible" )
const ( ExecModeAttach = "attach" ExecModeOneOff = "oneoff" )
Exec modes: attach runs the command inside a running replica via `docker exec`; oneoff runs it in a fresh `docker run --rm` container from the service's current image.
const ( JobRunStatusSucceeded = "succeeded" JobRunStatusFailed = "failed" JobRunStatusTimeout = "timeout" JobRunStatusSkipped = "skipped" )
Job run statuses.
const ( JobTriggerSchedule = "schedule" JobTriggerManual = "manual" )
Job run triggers.
const CapabilityContainerArgvV1 = "container.argv-v1"
CapabilityContainerArgvV1 means reconcile and job payloads preserve the container command/entrypoint argv fields introduced with config exec form.
const CapabilityContainerRuntimeControlsV1 = "container.runtime-controls-v1"
CapabilityContainerRuntimeControlsV1 covers user/workdir/stop/init/hosts, ulimits, and shm-size fields on service and job payloads.
const CapabilityExecOneOffControlsV1 = "exec.oneoff-controls-v1"
CapabilityExecOneOffControlsV1 covers pull auth, entrypoint, labels, and runtime controls on deploy-time one-off exec requests.
const CapabilityImageBuildOptionsV1 = "image.build-options-v1"
CapabilityImageBuildOptionsV1 means the streamed image builder consumes buildArgs and target from the request preamble.
const CapabilityServiceFilesV1 = "service.files-v1"
CapabilityServiceFilesV1 means reconcile, jobs, and one-off execution can atomically publish request-scoped operator file bundles and bind mount them.
const DefaultBuildCacheKeepStorage = "20GB"
const (
DefaultBuildCachePruneInterval = 24 * time.Hour
)
const DefaultServiceFilesRoot = "/var/lib/tako/files"
const ExecContainerMarker = "__TAKO_EXEC_CONTAINER__:"
ExecContainerMarker precedes the resolved-container frame emitted at the start of an exec stream, on its own line.
const ExecExitMarker = "__TAKO_EXEC_EXIT__:"
ExecExitMarker precedes the terminal frame of an exec stream, on its own line, carrying the remote command's exit code.
const (
PortAllocationKindMeshUpstream = "mesh-upstream"
)
const RegistryAuthFailedMarker = "registry authentication failed"
RegistryAuthFailedMarker prefixes auth-classified docker failures so the CLI can raise a typed error distinct from image-not-found.
Variables ¶
This section is empty.
Functions ¶
func CheckServiceFiles ¶ added in v0.9.0
func CheckServiceFiles(request ServiceFilesCheckRequest) error
func CleanupBackupObjects ¶ added in v0.5.4
func CleanupBackupObjects(ctx context.Context, storage BackupStorageConfig, retention BackupObjectRetention) error
func DeleteVolumeBackup ¶
func DeleteVolumeBackup(ctx context.Context, req BackupRequest) error
func PublishServiceFiles ¶ added in v0.9.0
func PublishServiceFiles(ctx context.Context, request ServiceFilesRequest) error
func ReadMeshStatus ¶
func ReleaseServicePortAllocationsExceptRevision ¶ added in v0.5.4
func RestoreVolumeBackup ¶
func RestoreVolumeBackup(ctx context.Context, req BackupRequest) error
func RunExecStream ¶ added in v0.8.1
RunExecStream runs one interactive (optionally PTY-backed) exec session over an upgraded frame stream: container frame first, output frames until the process ends, then a terminal exit frame. It handles stdin/resize frames from the client, enforces absolute and idle timeouts, and cleans up the docker process (and oneoff container) when the client disconnects.
func ServiceFileBundlePath ¶ added in v0.9.0
func StreamExec ¶ added in v0.8.0
StreamExec runs the requested command and streams its combined output to writer, followed by a terminal ExecExitMarker line with the exit code. It returns an error only for failures before any output is streamed (validation, container/image resolution); run-phase failures surface in the stream and the exit marker instead.
func StreamProxyAccessLogs ¶
func StreamServiceLogs ¶
func ValidateBackupStorage ¶ added in v0.5.4
func ValidateBackupStorage(storage BackupStorageConfig) error
Types ¶
type ActualRefreshTarget ¶
func ListActualRefreshTargets ¶
func ListActualRefreshTargets(dataDir string) ([]ActualRefreshTarget, error)
type ActualService ¶
type ActualService struct {
Name string `json:"name"`
Image string `json:"image,omitempty"`
RevisionImages map[string]string `json:"revisionImages,omitempty"`
Replicas int `json:"replicas"`
Containers []string `json:"containers,omitempty"`
ConfigHash string `json:"configHash,omitempty"`
RuntimeID string `json:"runtimeId,omitempty"`
Persistent bool `json:"persistent,omitempty"`
CurrentRevision string `json:"currentRevision,omitempty"`
PreviousRevision string `json:"previousRevision,omitempty"`
WarmingRevisions []string `json:"warmingRevisions,omitempty"`
DeployStrategy string `json:"deployStrategy,omitempty"`
ActiveContainers []string `json:"activeContainers,omitempty"`
WarmingContainers []string `json:"warmingContainers,omitempty"`
}
type ActualStateResponse ¶
type ActualStateResponse struct {
Project string `json:"project"`
Environment string `json:"environment"`
Services map[string]*ActualService `json:"services"`
// Jobs carries the node's scheduled jobs: kind:job services have no
// long-running containers, so their actual state is the cron schedule.
Jobs map[string]*JobStatus `json:"jobs,omitempty"`
}
func GatherActualState ¶
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"`
Remote *BackupRemoteInfo `json:"remote,omitempty"`
Warnings []string `json:"warnings,omitempty"`
}
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 BackupObject ¶ added in v0.5.4
type BackupObjectRetention ¶ added in v0.5.4
type BackupRemoteInfo ¶ added in v0.5.4
type BackupRemoteInfo struct {
Provider string `json:"provider"`
Bucket string `json:"bucket"`
Key string `json:"key"`
Endpoint string `json:"endpoint,omitempty"`
}
func UploadBackupObject ¶ added in v0.5.4
func UploadBackupObject(ctx context.Context, storage BackupStorageConfig, object BackupObject) (*BackupRemoteInfo, 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"`
Storage *BackupStorageConfig `json:"storage,omitempty"`
}
type BackupScheduleRequest ¶ added in v0.5.4
type BackupScheduleRequest struct {
Project string `json:"project"`
Environment string `json:"environment"`
Service string `json:"service"`
Schedule string `json:"schedule"`
RetentionDays int `json:"retentionDays,omitempty"`
Volumes []BackupScheduleVolume `json:"volumes"`
Storage *BackupStorageConfig `json:"storage,omitempty"`
}
type BackupScheduleResponse ¶ added in v0.5.4
type BackupScheduleVolume ¶ added in v0.5.4
type BackupScheduler ¶ added in v0.5.4
type BackupScheduler struct {
// contains filtered or unexported fields
}
func NewBackupScheduler ¶ added in v0.5.4
func NewBackupScheduler(dataDir string) *BackupScheduler
func (*BackupScheduler) Delete ¶ added in v0.5.4
func (s *BackupScheduler) Delete(ctx context.Context, project string, environment string, service string) (*BackupScheduleResponse, error)
func (*BackupScheduler) Run ¶ added in v0.5.4
func (s *BackupScheduler) Run(ctx context.Context)
func (*BackupScheduler) Upsert ¶ added in v0.5.4
func (s *BackupScheduler) Upsert(ctx context.Context, request BackupScheduleRequest) (*BackupScheduleResponse, error)
type BackupStorageConfig ¶ added in v0.5.4
type BackupStorageConfig struct {
Provider string `json:"provider,omitempty"`
Bucket string `json:"bucket,omitempty"`
Region string `json:"region,omitempty"`
Endpoint string `json:"endpoint,omitempty"`
Prefix string `json:"prefix,omitempty"`
AccessKeyID string `json:"accessKeyId,omitempty"`
SecretAccessKey string `json:"secretAccessKey,omitempty"`
SessionToken string `json:"sessionToken,omitempty"`
ForcePathStyle bool `json:"forcePathStyle,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"`
BuildCacheKeepStorage string `json:"buildCacheKeepStorage,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"`
JobsRemoved int `json:"jobsRemoved,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 ContainerStat ¶
type EnvBundleRequest ¶
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 ExecRequest ¶ added in v0.8.0
type ExecRequest struct {
Project string `json:"project"`
Environment string `json:"environment"`
Service string `json:"service"`
Mode string `json:"mode"`
Command []string `json:"command"`
// Replica selects the 1-based running replica for attach mode
// (containers sorted by name); 0 means the first.
Replica int `json:"replica,omitempty"`
// Env adds KEY=VALUE pairs on top of EnvFileContent.
Env []string `json:"env,omitempty"`
// EnvFileContent carries the service's env/secrets for oneoff mode;
// it is written to a 0600 temp file and passed via --env-file.
EnvFileContent string `json:"envFileContent,omitempty"`
// Image overrides the oneoff image; default is the service's current
// image from actual state.
Image string `json:"image,omitempty"`
PullImage bool `json:"pullImage,omitempty"`
RegistryAuths []RegistryAuth `json:"registryAuths,omitempty"`
// Network attaches the oneoff container; default tako_<project>_<env>.
Network string `json:"network,omitempty"`
// Mounts adds --mount specs to oneoff containers (volumes opt-in).
Mounts []string `json:"mounts,omitempty"`
ExternalVolumes []string `json:"externalVolumes,omitempty"`
Files []ServiceFileBundle `json:"files,omitempty"`
FileSetID string `json:"fileSetId,omitempty"`
CleanupFiles bool `json:"cleanupFiles,omitempty"`
Entrypoint []string `json:"entrypoint,omitempty"`
Labels map[string]string `json:"labels,omitempty"`
User string `json:"user,omitempty"`
WorkingDir string `json:"workingDir,omitempty"`
StopTimeoutSeconds int `json:"stopTimeoutSeconds,omitempty"`
Init bool `json:"init,omitempty"`
ExtraHosts []string `json:"extraHosts,omitempty"`
Ulimits map[string]config.UlimitConfig `json:"ulimits,omitempty"`
ShmSize string `json:"shmSize,omitempty"`
MemoryLimit string `json:"memoryLimit,omitempty"`
CPULimit string `json:"cpuLimit,omitempty"`
TimeoutSeconds int `json:"timeoutSeconds,omitempty"`
// Interactive attaches the caller's stdin over the hijacked frame
// stream (docker exec/run -i). Requires the Upgrade handshake.
Interactive bool `json:"interactive,omitempty"`
// PTY allocates a server-side pseudo-terminal around the docker
// process (implies Interactive). Cols/Rows set the initial size;
// resize frames adjust it live.
PTY bool `json:"pty,omitempty"`
Cols int `json:"cols,omitempty"`
Rows int `json:"rows,omitempty"`
// IdleTimeoutSeconds ends an interactive session after this long
// without input or output; 0 uses the default.
IdleTimeoutSeconds int `json:"idleTimeoutSeconds,omitempty"`
}
ExecRequest asks takod to run a command in the context of a service.
type ExportDiscoveryRecord ¶ added in v0.4.35
type ExportDiscoveryResponse ¶ added in v0.4.35
type ExportDiscoveryResponse struct {
Exports []ExportDiscoveryRecord `json:"exports"`
}
func ListExportDiscovery ¶ added in v0.4.35
func ListExportDiscovery(ctx context.Context, environment string) (*ExportDiscoveryResponse, 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"`
SmokePath string `json:"smokePath,omitempty"`
SmokePort int `json:"smokePort,omitempty"`
SmokeExpectedStatus int `json:"smokeExpectedStatus,omitempty"`
}
type ImageBuildOptions ¶
type ImageBuildResponse ¶
type ImageBuildResponse struct {
Image string `json:"image"`
Output string `json:"output,omitempty"`
Timings *ImageBuildTimings `json:"timings,omitempty"`
}
func BuildImage ¶
func BuildImageWithAuth ¶ added in v0.8.0
func BuildImageWithAuth(ctx context.Context, image string, r io.Reader, auths []RegistryAuth, dockerfile ...string) (*ImageBuildResponse, error)
BuildImageWithAuth builds like BuildImage; auths feed an ephemeral DOCKER_CONFIG so the daemon can pull private base images during FROM.
func BuildImageWithOptions ¶
func BuildImageWithOptions(ctx context.Context, image string, r io.Reader, auths []RegistryAuth, options ImageBuildOptions) (*ImageBuildResponse, error)
BuildImageWithOptions builds an uploaded context with validated target and build args. Values arrive in the request body preamble, never the URL.
type ImageBuildTimings ¶ added in v0.5.4
type ImageExistsResponse ¶
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 ¶
type JobRunRecord ¶ added in v0.8.0
type JobRunRecord struct {
Project string `json:"project"`
Environment string `json:"environment"`
Job string `json:"job"`
Trigger string `json:"trigger"`
Container string `json:"container,omitempty"`
StartedAt time.Time `json:"startedAt"`
FinishedAt time.Time `json:"finishedAt"`
DurationMs int64 `json:"durationMs"`
ExitCode int `json:"exitCode"`
Status string `json:"status"`
// Output is the bounded tail of the run's combined output.
Output string `json:"output,omitempty"`
}
JobRunRecord is one completed (or skipped) run in a job's history.
type JobScheduler ¶ added in v0.8.0
type JobScheduler struct {
// contains filtered or unexported fields
}
JobScheduler fires job specs with a local cron, mirroring BackupScheduler: specs persist as JSON under the data dir and are reloaded on start.
func NewJobScheduler ¶ added in v0.8.0
func NewJobScheduler(dataDir string) *JobScheduler
func (*JobScheduler) Apply ¶ added in v0.8.0
func (s *JobScheduler) Apply(ctx context.Context, request JobsApplyRequest) (*JobsApplyResponse, error)
Apply reconciles this node's job set for one project/environment.
func (*JobScheduler) List ¶ added in v0.8.0
func (s *JobScheduler) List(project string, environment string) []JobStatus
List reports scheduled jobs, optionally filtered by project/environment.
func (*JobScheduler) RemoveProject ¶ added in v0.8.0
func (s *JobScheduler) RemoveProject(project string, environment string) ([]string, error)
RemoveProject unschedules every job for a project (one environment, or all when environment is empty) and deletes its specs and run history.
func (*JobScheduler) Run ¶ added in v0.8.0
func (s *JobScheduler) Run(ctx context.Context)
Run loads persisted specs, starts the cron, and blocks until ctx ends.
func (*JobScheduler) Runs ¶ added in v0.8.0
func (s *JobScheduler) Runs(project string, environment string, job string) ([]JobRunRecord, error)
Runs returns run history for one job, or every job in the environment when job is empty, newest first.
func (*JobScheduler) Trigger ¶ added in v0.8.0
func (s *JobScheduler) Trigger(ctx context.Context, project string, environment string, job string, stream io.Writer) error
Trigger runs a scheduled job immediately, streaming raw output framed by the exec markers to stream. An overlapping run surfaces as an error before any bytes are streamed.
type JobSpec ¶ added in v0.8.0
type JobSpec struct {
Project string `json:"project"`
Environment string `json:"environment"`
Name string `json:"name"`
Schedule string `json:"schedule"`
Timezone string `json:"timezone,omitempty"`
Image string `json:"image"`
Command []string `json:"command"`
Entrypoint []string `json:"entrypoint,omitempty"`
Labels map[string]string `json:"labels,omitempty"`
// EnvFileContent carries the job's env/secrets; it is written to a 0600
// temp file per run and passed via --env-file.
EnvFileContent string `json:"envFileContent,omitempty"`
Env []string `json:"env,omitempty"`
// Network attaches run containers; default tako_<project>_<env>.
Network string `json:"network,omitempty"`
Mounts []string `json:"mounts,omitempty"`
Files []ServiceFileBundle `json:"files,omitempty"`
FileSetID string `json:"fileSetId,omitempty"`
MemoryLimit string `json:"memoryLimit,omitempty"`
CPULimit string `json:"cpuLimit,omitempty"`
User string `json:"user,omitempty"`
WorkingDir string `json:"workingDir,omitempty"`
StopTimeoutSeconds int `json:"stopTimeoutSeconds,omitempty"`
Init bool `json:"init,omitempty"`
ExtraHosts []string `json:"extraHosts,omitempty"`
Ulimits map[string]config.UlimitConfig `json:"ulimits,omitempty"`
ShmSize string `json:"shmSize,omitempty"`
TimeoutSeconds int `json:"timeoutSeconds,omitempty"`
// ConfigHash is the deployer's fingerprint of the job's service config,
// reported back through actual state for drift/plan comparison.
ConfigHash string `json:"configHash,omitempty"`
}
JobSpec declares one scheduled job on this node. The owning node receives the spec at deploy time via /v1/jobs/apply and fires it with its local cron; each run is a fresh one-off container from Image.
type JobStatus ¶ added in v0.8.0
type JobStatus struct {
Project string `json:"project"`
Environment string `json:"environment"`
Name string `json:"name"`
Schedule string `json:"schedule"`
Timezone string `json:"timezone,omitempty"`
Image string `json:"image"`
Command []string `json:"command"`
TimeoutSeconds int `json:"timeoutSeconds,omitempty"`
ConfigHash string `json:"configHash,omitempty"`
NextRun *time.Time `json:"nextRun,omitempty"`
LastRun *JobRunRecord `json:"lastRun,omitempty"`
}
JobStatus describes a scheduled job without its env-file content, which must never leave the node through list responses.
type JobTriggerRequest ¶ added in v0.8.0
type JobTriggerRequest struct {
Project string `json:"project"`
Environment string `json:"environment"`
Job string `json:"job"`
}
JobTriggerRequest asks for one immediate run of a scheduled job.
type JobsApplyRequest ¶ added in v0.8.0
type JobsApplyRequest struct {
Project string `json:"project"`
Environment string `json:"environment"`
Jobs []JobSpec `json:"jobs"`
}
JobsApplyRequest declaratively replaces this node's job set for one project/environment: listed jobs are scheduled, absent ones unscheduled.
type JobsApplyResponse ¶ added in v0.8.0
type JobsApplyResponse struct {
Project string `json:"project"`
Environment string `json:"environment"`
Applied []string `json:"applied,omitempty"`
Removed []string `json:"removed,omitempty"`
Warnings []string `json:"warnings,omitempty"`
UpdatedAt time.Time `json:"updatedAt"`
}
JobsApplyResponse reports the applied and removed job names.
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"`
Renew bool `json:"renew,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 MeshApplyRequest ¶
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 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 NetworkAttachmentSpec ¶ added in v0.4.12
type PortAllocationRequest ¶
type PortAllocationRequest struct {
Kind string `json:"kind"`
Project string `json:"project"`
Environment string `json:"environment"`
Service string `json:"service"`
Revision string `json:"revision,omitempty"`
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"`
Revision string `json:"revision,omitempty"`
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 ProxyDynamicDomain ¶ added in v0.5.0
type ProxyDynamicDomain struct {
AskURL string `json:"askUrl"`
}
type ProxyFileRequest ¶
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 ProxyRoute ¶ added in v0.5.0
type ProxyRoute struct {
Service string `json:"service"`
Revision string `json:"revision,omitempty"`
Domains []string `json:"domains,omitempty"`
RedirectFrom []string `json:"redirectFrom,omitempty"`
Upstreams []string `json:"upstreams"`
HealthCheck *ProxyRouteHealth `json:"healthCheck,omitempty"`
Sticky bool `json:"sticky,omitempty"`
Priority int `json:"priority,omitempty"`
Visibility string `json:"visibility,omitempty"`
DynamicDomain *ProxyDynamicDomain `json:"dynamicDomain,omitempty"`
BasicAuth *ProxyRouteBasicAuth `json:"basicAuth,omitempty"`
AllowIPs []string `json:"allowIps,omitempty"`
}
type ProxyRouteBasicAuth ¶ added in v0.8.1
type ProxyRouteBasicAuth struct {
Username string `json:"username"`
PasswordBcrypt string `json:"passwordBcrypt"`
}
ProxyRouteBasicAuth protects a route's serving domains with HTTP basic auth. PasswordBcrypt is a pre-computed hash, never plaintext.
type ProxyRouteHealth ¶ added in v0.5.0
type ProxyRouteManifest ¶ added in v0.5.0
type ProxyRouteManifest struct {
Version int `json:"version"`
Project string `json:"project"`
Environment string `json:"environment"`
Network string `json:"network,omitempty"`
Routes []ProxyRoute `json:"routes"`
}
func ParseProxyRouteManifest ¶ added in v0.5.0
func ParseProxyRouteManifest(content string) (*ProxyRouteManifest, error)
type ReconcileProxyRequest ¶
type ReconcileProxyResponse ¶
type ReconcileProxyResponse struct {
Container string `json:"container"`
Image string `json:"image"`
}
func ReconcileProxy ¶
func ReconcileProxy(ctx context.Context, req ReconcileProxyRequest) (*ReconcileProxyResponse, error)
type ReconcileServiceRequest ¶
type ReconcileServiceRequest struct {
Project string `json:"project"`
Environment string `json:"environment"`
Service string `json:"service"`
Revision string `json:"revision,omitempty"`
DeployStrategy string `json:"deployStrategy,omitempty"`
Image string `json:"image"`
PullImage bool `json:"pullImage,omitempty"`
Restart string `json:"restart,omitempty"`
Network string `json:"network"`
NetworkAlias string `json:"networkAlias,omitempty"`
NetworkAttachments []NetworkAttachmentSpec `json:"networkAttachments,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"`
Files []ServiceFileBundle `json:"files,omitempty"`
FileSetID string `json:"fileSetId,omitempty"`
Containers []ContainerSpec `json:"containers"`
Health *HealthSpec `json:"health,omitempty"`
Command config.StringOrList `json:"command,omitempty,omitzero"`
Entrypoint config.StringOrList `json:"entrypoint,omitempty,omitzero"`
MemoryLimit string `json:"memoryLimit,omitempty"`
CPULimit string `json:"cpuLimit,omitempty"`
User string `json:"user,omitempty"`
WorkingDir string `json:"workingDir,omitempty"`
StopTimeoutSeconds int `json:"stopTimeoutSeconds,omitempty"`
Init bool `json:"init,omitempty"`
ExtraHosts []string `json:"extraHosts,omitempty"`
Ulimits map[string]config.UlimitConfig `json:"ulimits,omitempty"`
ShmSize string `json:"shmSize,omitempty"`
// RegistryAuths carries request-scoped pull credentials; they feed an
// ephemeral DOCKER_CONFIG for this reconcile only and are never
// persisted (ADR 10).
RegistryAuths []RegistryAuth `json:"registryAuths,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"`
}
func ReconcileService ¶
func ReconcileService(ctx context.Context, req ReconcileServiceRequest) (*ReconcileServiceResponse, error)
type RegistryAuth ¶
type RegistryAuth struct {
Registry string `json:"registry"`
Username string `json:"username"`
Password string `json:"password"`
}
RegistryAuth carries request-scoped credentials for one registry host. Credentials ride the request body only: they are written to an ephemeral docker config dir for the single docker invocation and never persist to takod state, argv, query strings, or logs (ADR 10).
type RemoveServiceRequest ¶
type RemoveServiceResponse ¶
type RemoveServiceResponse struct {
Project string `json:"project"`
Environment string `json:"environment"`
Service string `json:"service"`
RemovedContainers int `json:"removedContainers"`
}
func RemoveService ¶
func RemoveService(ctx context.Context, req RemoveServiceRequest) (*RemoveServiceResponse, error)
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
func NewServerWithOptions ¶
func NewServerWithOptions(socket string, dataDir string, version string, opts ServerOptions) *Server
type ServerOptions ¶
type ServiceFileBundle ¶ added in v0.9.0
type ServiceFileBundle struct {
Name string `json:"name"`
Target string `json:"target"`
Directory bool `json:"directory,omitempty"`
Secret bool `json:"secret,omitempty"`
UID int `json:"uid,omitempty"`
GID int `json:"gid,omitempty"`
Entries []ServiceFileEntry `json:"entries"`
}
ServiceFileBundle is one operator-managed file or directory mounted into a container. Data is request-scoped and is never written to desired state.
type ServiceFileEntry ¶ added in v0.9.0
type ServiceFilesCheckRequest ¶ added in v0.9.0
type ServiceFilesRequest ¶ added in v0.9.0
type ServiceFilesRequest struct {
Project string `json:"project"`
Environment string `json:"environment"`
Service string `json:"service"`
FileSetID string `json:"fileSetId"`
Files []ServiceFileBundle `json:"files"`
}
type StateDocumentRequest ¶
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 DeleteStateDocument ¶ added in v0.4.8
func DeleteStateDocument(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 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"`
Capabilities []string `json:"capabilities,omitempty"`
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"`
}
Source Files
¶
- access_logs.go
- actual.go
- actual_refresh.go
- atomic_write.go
- backup.go
- backup_schedule.go
- backup_storage.go
- cleanup.go
- discovery.go
- env_bundle.go
- exec.go
- exec_stream.go
- image.go
- jobs.go
- lease.go
- logs.go
- mesh.go
- metadata.go
- metrics.go
- output.go
- ports.go
- proxy.go
- proxy_file.go
- proxy_routes.go
- reconcile.go
- registry_auth.go
- server.go
- service_file_ownership_unix.go
- service_files.go
- state.go
- stats.go