mirror of https://github.com/docker/cli.git
112 lines
2.6 KiB
Go
112 lines
2.6 KiB
Go
|
package builders
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
|
||
|
"github.com/docker/docker/api/types/swarm"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
defaultTime = time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
|
||
|
)
|
||
|
|
||
|
// Task creates a task with default values .
|
||
|
// Any number of task function builder can be pass to augment it.
|
||
|
func Task(taskBuilders ...func(*swarm.Task)) *swarm.Task {
|
||
|
task := &swarm.Task{
|
||
|
ID: "taskID",
|
||
|
Meta: swarm.Meta{
|
||
|
CreatedAt: defaultTime,
|
||
|
},
|
||
|
Annotations: swarm.Annotations{
|
||
|
Name: "defaultTaskName",
|
||
|
},
|
||
|
Spec: *TaskSpec(),
|
||
|
ServiceID: "rl02d5gwz6chzu7il5fhtb8be",
|
||
|
Slot: 1,
|
||
|
Status: *TaskStatus(),
|
||
|
DesiredState: swarm.TaskStateReady,
|
||
|
}
|
||
|
|
||
|
for _, builder := range taskBuilders {
|
||
|
builder(task)
|
||
|
}
|
||
|
|
||
|
return task
|
||
|
}
|
||
|
|
||
|
// TaskID sets the task ID
|
||
|
func TaskID(id string) func(*swarm.Task) {
|
||
|
return func(task *swarm.Task) {
|
||
|
task.ID = id
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ServiceID sets the task service's ID
|
||
|
func ServiceID(id string) func(*swarm.Task) {
|
||
|
return func(task *swarm.Task) {
|
||
|
task.ServiceID = id
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// WithStatus sets the task status
|
||
|
func WithStatus(statusBuilders ...func(*swarm.TaskStatus)) func(*swarm.Task) {
|
||
|
return func(task *swarm.Task) {
|
||
|
task.Status = *TaskStatus(statusBuilders...)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// TaskStatus creates a task status with default values .
|
||
|
// Any number of taskStatus function builder can be pass to augment it.
|
||
|
func TaskStatus(statusBuilders ...func(*swarm.TaskStatus)) *swarm.TaskStatus {
|
||
|
timestamp := defaultTime.Add(1 * time.Hour)
|
||
|
taskStatus := &swarm.TaskStatus{
|
||
|
State: swarm.TaskStateReady,
|
||
|
Timestamp: timestamp,
|
||
|
}
|
||
|
|
||
|
for _, builder := range statusBuilders {
|
||
|
builder(taskStatus)
|
||
|
}
|
||
|
|
||
|
return taskStatus
|
||
|
}
|
||
|
|
||
|
// Timestamp sets the task status timestamp
|
||
|
func Timestamp(t time.Time) func(*swarm.TaskStatus) {
|
||
|
return func(taskStatus *swarm.TaskStatus) {
|
||
|
taskStatus.Timestamp = t
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// StatusErr sets the tasks status error
|
||
|
func StatusErr(err string) func(*swarm.TaskStatus) {
|
||
|
return func(taskStatus *swarm.TaskStatus) {
|
||
|
taskStatus.Err = err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// PortStatus sets the tasks port config status
|
||
|
// FIXME(vdemeester) should be a sub builder 👼
|
||
|
func PortStatus(portConfigs []swarm.PortConfig) func(*swarm.TaskStatus) {
|
||
|
return func(taskStatus *swarm.TaskStatus) {
|
||
|
taskStatus.PortStatus.Ports = portConfigs
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// TaskSpec creates a task spec with default values .
|
||
|
// Any number of taskSpec function builder can be pass to augment it.
|
||
|
func TaskSpec(specBuilders ...func(*swarm.TaskSpec)) *swarm.TaskSpec {
|
||
|
taskSpec := &swarm.TaskSpec{
|
||
|
ContainerSpec: swarm.ContainerSpec{
|
||
|
Image: "myimage:mytag",
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, builder := range specBuilders {
|
||
|
builder(taskSpec)
|
||
|
}
|
||
|
|
||
|
return taskSpec
|
||
|
}
|