123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package defaults
- import (
- "time"
- "github.com/docker/swarmkit/api"
- "github.com/docker/swarmkit/api/deepcopy"
- gogotypes "github.com/gogo/protobuf/types"
- )
- // Service is a ServiceSpec object with all fields filled in using default
- // values.
- var Service = api.ServiceSpec{
- Task: api.TaskSpec{
- Runtime: &api.TaskSpec_Container{
- Container: &api.ContainerSpec{
- StopGracePeriod: gogotypes.DurationProto(10 * time.Second),
- PullOptions: &api.ContainerSpec_PullOptions{},
- DNSConfig: &api.ContainerSpec_DNSConfig{},
- },
- },
- Resources: &api.ResourceRequirements{},
- Restart: &api.RestartPolicy{
- Condition: api.RestartOnAny,
- Delay: gogotypes.DurationProto(5 * time.Second),
- },
- Placement: &api.Placement{},
- },
- Update: &api.UpdateConfig{
- FailureAction: api.UpdateConfig_PAUSE,
- Monitor: gogotypes.DurationProto(5 * time.Second),
- Parallelism: 1,
- Order: api.UpdateConfig_STOP_FIRST,
- },
- Rollback: &api.UpdateConfig{
- FailureAction: api.UpdateConfig_PAUSE,
- Monitor: gogotypes.DurationProto(5 * time.Second),
- Parallelism: 1,
- Order: api.UpdateConfig_STOP_FIRST,
- },
- }
- // InterpolateService returns a ServiceSpec based on the provided spec, which
- // has all unspecified values filled in with default values.
- func InterpolateService(origSpec *api.ServiceSpec) *api.ServiceSpec {
- spec := origSpec.Copy()
- container := spec.Task.GetContainer()
- defaultContainer := Service.Task.GetContainer()
- if container != nil {
- if container.StopGracePeriod == nil {
- container.StopGracePeriod = &gogotypes.Duration{}
- deepcopy.Copy(container.StopGracePeriod, defaultContainer.StopGracePeriod)
- }
- if container.PullOptions == nil {
- container.PullOptions = defaultContainer.PullOptions.Copy()
- }
- if container.DNSConfig == nil {
- container.DNSConfig = defaultContainer.DNSConfig.Copy()
- }
- }
- if spec.Task.Resources == nil {
- spec.Task.Resources = Service.Task.Resources.Copy()
- }
- if spec.Task.Restart == nil {
- spec.Task.Restart = Service.Task.Restart.Copy()
- } else {
- if spec.Task.Restart.Delay == nil {
- spec.Task.Restart.Delay = &gogotypes.Duration{}
- deepcopy.Copy(spec.Task.Restart.Delay, Service.Task.Restart.Delay)
- }
- }
- if spec.Task.Placement == nil {
- spec.Task.Placement = Service.Task.Placement.Copy()
- }
- if spec.Update == nil {
- spec.Update = Service.Update.Copy()
- } else {
- if spec.Update.Monitor == nil {
- spec.Update.Monitor = &gogotypes.Duration{}
- deepcopy.Copy(spec.Update.Monitor, Service.Update.Monitor)
- }
- }
- if spec.Rollback == nil {
- spec.Rollback = Service.Rollback.Copy()
- } else {
- if spec.Rollback.Monitor == nil {
- spec.Rollback.Monitor = &gogotypes.Duration{}
- deepcopy.Copy(spec.Rollback.Monitor, Service.Rollback.Monitor)
- }
- }
- return spec
- }
|