github.com/demonoid81/moby@v0.0.0-20200517203328-62dd8e17c460/api/types/swarm/service.go (about) 1 package swarm // import "github.com/demonoid81/moby/api/types/swarm" 2 3 import "time" 4 5 // Service represents a service. 6 type Service struct { 7 ID string 8 Meta 9 Spec ServiceSpec `json:",omitempty"` 10 PreviousSpec *ServiceSpec `json:",omitempty"` 11 Endpoint Endpoint `json:",omitempty"` 12 UpdateStatus *UpdateStatus `json:",omitempty"` 13 14 // ServiceStatus is an optional, extra field indicating the number of 15 // desired and running tasks. It is provided primarily as a shortcut to 16 // calculating these values client-side, which otherwise would require 17 // listing all tasks for a service, an operation that could be 18 // computation and network expensive. 19 ServiceStatus *ServiceStatus `json:",omitempty"` 20 21 // JobStatus is the status of a Service which is in one of ReplicatedJob or 22 // GlobalJob modes. It is absent on Replicated and Global services. 23 JobStatus *JobStatus `json:",omitempty"` 24 } 25 26 // ServiceSpec represents the spec of a service. 27 type ServiceSpec struct { 28 Annotations 29 30 // TaskTemplate defines how the service should construct new tasks when 31 // orchestrating this service. 32 TaskTemplate TaskSpec `json:",omitempty"` 33 Mode ServiceMode `json:",omitempty"` 34 UpdateConfig *UpdateConfig `json:",omitempty"` 35 RollbackConfig *UpdateConfig `json:",omitempty"` 36 37 // Networks field in ServiceSpec is deprecated. The 38 // same field in TaskSpec should be used instead. 39 // This field will be removed in a future release. 40 Networks []NetworkAttachmentConfig `json:",omitempty"` 41 EndpointSpec *EndpointSpec `json:",omitempty"` 42 } 43 44 // ServiceMode represents the mode of a service. 45 type ServiceMode struct { 46 Replicated *ReplicatedService `json:",omitempty"` 47 Global *GlobalService `json:",omitempty"` 48 ReplicatedJob *ReplicatedJob `json:",omitempty"` 49 GlobalJob *GlobalJob `json:",omitempty"` 50 } 51 52 // UpdateState is the state of a service update. 53 type UpdateState string 54 55 const ( 56 // UpdateStateUpdating is the updating state. 57 UpdateStateUpdating UpdateState = "updating" 58 // UpdateStatePaused is the paused state. 59 UpdateStatePaused UpdateState = "paused" 60 // UpdateStateCompleted is the completed state. 61 UpdateStateCompleted UpdateState = "completed" 62 // UpdateStateRollbackStarted is the state with a rollback in progress. 63 UpdateStateRollbackStarted UpdateState = "rollback_started" 64 // UpdateStateRollbackPaused is the state with a rollback in progress. 65 UpdateStateRollbackPaused UpdateState = "rollback_paused" 66 // UpdateStateRollbackCompleted is the state with a rollback in progress. 67 UpdateStateRollbackCompleted UpdateState = "rollback_completed" 68 ) 69 70 // UpdateStatus reports the status of a service update. 71 type UpdateStatus struct { 72 State UpdateState `json:",omitempty"` 73 StartedAt *time.Time `json:",omitempty"` 74 CompletedAt *time.Time `json:",omitempty"` 75 Message string `json:",omitempty"` 76 } 77 78 // ReplicatedService is a kind of ServiceMode. 79 type ReplicatedService struct { 80 Replicas *uint64 `json:",omitempty"` 81 } 82 83 // GlobalService is a kind of ServiceMode. 84 type GlobalService struct{} 85 86 // ReplicatedJob is the a type of Service which executes a defined Tasks 87 // in parallel until the specified number of Tasks have succeeded. 88 type ReplicatedJob struct { 89 // MaxConcurrent indicates the maximum number of Tasks that should be 90 // executing simultaneously for this job at any given time. There may be 91 // fewer Tasks that MaxConcurrent executing simultaneously; for example, if 92 // there are fewer than MaxConcurrent tasks needed to reach 93 // TotalCompletions. 94 // 95 // If this field is empty, it will default to a max concurrency of 1. 96 MaxConcurrent *uint64 `json:",omitempty"` 97 98 // TotalCompletions is the total number of Tasks desired to run to 99 // completion. 100 // 101 // If this field is empty, the value of MaxConcurrent will be used. 102 TotalCompletions *uint64 `json:",omitempty"` 103 } 104 105 // GlobalJob is the type of a Service which executes a Task on every Node 106 // matching the Service's placement constraints. These tasks run to completion 107 // and then exit. 108 // 109 // This type is deliberately empty. 110 type GlobalJob struct{} 111 112 const ( 113 // UpdateFailureActionPause PAUSE 114 UpdateFailureActionPause = "pause" 115 // UpdateFailureActionContinue CONTINUE 116 UpdateFailureActionContinue = "continue" 117 // UpdateFailureActionRollback ROLLBACK 118 UpdateFailureActionRollback = "rollback" 119 120 // UpdateOrderStopFirst STOP_FIRST 121 UpdateOrderStopFirst = "stop-first" 122 // UpdateOrderStartFirst START_FIRST 123 UpdateOrderStartFirst = "start-first" 124 ) 125 126 // UpdateConfig represents the update configuration. 127 type UpdateConfig struct { 128 // Maximum number of tasks to be updated in one iteration. 129 // 0 means unlimited parallelism. 130 Parallelism uint64 131 132 // Amount of time between updates. 133 Delay time.Duration `json:",omitempty"` 134 135 // FailureAction is the action to take when an update failures. 136 FailureAction string `json:",omitempty"` 137 138 // Monitor indicates how long to monitor a task for failure after it is 139 // created. If the task fails by ending up in one of the states 140 // REJECTED, COMPLETED, or FAILED, within Monitor from its creation, 141 // this counts as a failure. If it fails after Monitor, it does not 142 // count as a failure. If Monitor is unspecified, a default value will 143 // be used. 144 Monitor time.Duration `json:",omitempty"` 145 146 // MaxFailureRatio is the fraction of tasks that may fail during 147 // an update before the failure action is invoked. Any task created by 148 // the current update which ends up in one of the states REJECTED, 149 // COMPLETED or FAILED within Monitor from its creation counts as a 150 // failure. The number of failures is divided by the number of tasks 151 // being updated, and if this fraction is greater than 152 // MaxFailureRatio, the failure action is invoked. 153 // 154 // If the failure action is CONTINUE, there is no effect. 155 // If the failure action is PAUSE, no more tasks will be updated until 156 // another update is started. 157 MaxFailureRatio float32 158 159 // Order indicates the order of operations when rolling out an updated 160 // task. Either the old task is shut down before the new task is 161 // started, or the new task is started before the old task is shut down. 162 Order string 163 } 164 165 // ServiceStatus represents the number of running tasks in a service and the 166 // number of tasks desired to be running. 167 type ServiceStatus struct { 168 // RunningTasks is the number of tasks for the service actually in the 169 // Running state 170 RunningTasks uint64 171 172 // DesiredTasks is the number of tasks desired to be running by the 173 // service. For replicated services, this is the replica count. For global 174 // services, this is computed by taking the number of tasks with desired 175 // state of not-Shutdown. 176 DesiredTasks uint64 177 178 // CompletedTasks is the number of tasks in the state Completed, if this 179 // service is in ReplicatedJob or GlobalJob mode. This field must be 180 // cross-referenced with the service type, because the default value of 0 181 // may mean that a service is not in a job mode, or it may mean that the 182 // job has yet to complete any tasks. 183 CompletedTasks uint64 184 } 185 186 // JobStatus is the status of a job-type service. 187 type JobStatus struct { 188 // JobIteration is a value increased each time a Job is executed, 189 // successfully or otherwise. "Executed", in this case, means the job as a 190 // whole has been started, not that an individual Task has been launched. A 191 // job is "Executed" when its ServiceSpec is updated. JobIteration can be 192 // used to disambiguate Tasks belonging to different executions of a job. 193 // 194 // Though JobIteration will increase with each subsequent execution, it may 195 // not necessarily increase by 1, and so JobIteration should not be used to 196 // keep track of the number of times a job has been executed. 197 JobIteration Version 198 199 // LastExecution is the time that the job was last executed, as observed by 200 // Swarm manager. 201 LastExecution time.Time `json:",omitempty"` 202 }