| package builders |
| |
| import ( |
| "time" |
| |
| "github.com/moby/moby/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 |
| } |
| } |
| |
| // TaskName sets the task name |
| func TaskName(name string) func(*swarm.Task) { |
| return func(task *swarm.Task) { |
| task.Annotations.Name = name |
| } |
| } |
| |
| // TaskServiceID sets the task service's ID |
| func TaskServiceID(id string) func(*swarm.Task) { |
| return func(task *swarm.Task) { |
| task.ServiceID = id |
| } |
| } |
| |
| // TaskNodeID sets the task's node id |
| func TaskNodeID(id string) func(*swarm.Task) { |
| return func(task *swarm.Task) { |
| task.NodeID = id |
| } |
| } |
| |
| // TaskDesiredState sets the task's desired state |
| func TaskDesiredState(state swarm.TaskState) func(*swarm.Task) { |
| return func(task *swarm.Task) { |
| task.DesiredState = state |
| } |
| } |
| |
| // TaskSlot sets the task's slot |
| func TaskSlot(slot int) func(*swarm.Task) { |
| return func(task *swarm.Task) { |
| task.Slot = slot |
| } |
| } |
| |
| // 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 |
| } |
| } |
| |
| // TaskState sets the task's current state |
| func TaskState(state swarm.TaskState) func(*swarm.TaskStatus) { |
| return func(taskStatus *swarm.TaskStatus) { |
| taskStatus.State = state |
| } |
| } |
| |
| // 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 |
| } |
| } |
| |
| // WithTaskSpec sets the task spec |
| func WithTaskSpec(specBuilders ...func(*swarm.TaskSpec)) func(*swarm.Task) { |
| return func(task *swarm.Task) { |
| task.Spec = *TaskSpec(specBuilders...) |
| } |
| } |
| |
| // 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 |
| } |
| |
| // TaskImage sets the task's image |
| func TaskImage(image string) func(*swarm.TaskSpec) { |
| return func(taskSpec *swarm.TaskSpec) { |
| taskSpec.ContainerSpec.Image = image |
| } |
| } |