github.com/AliyunContainerService/cli@v0.0.0-20181009023821-814ced4b30d0/internal/test/builders/service.go (about) 1 package builders 2 3 import ( 4 "github.com/docker/docker/api/types/swarm" 5 ) 6 7 // Service creates a service with default values. 8 // Any number of service builder functions can be passed to augment it. 9 // Currently, only ServiceName is implemented 10 func Service(builders ...func(*swarm.Service)) *swarm.Service { 11 service := &swarm.Service{ 12 ID: "serviceID", 13 Spec: swarm.ServiceSpec{ 14 Annotations: swarm.Annotations{ 15 Name: "defaultServiceName", 16 }, 17 EndpointSpec: &swarm.EndpointSpec{}, 18 }, 19 } 20 21 for _, builder := range builders { 22 builder(service) 23 } 24 25 return service 26 } 27 28 // ServiceID sets the service ID 29 func ServiceID(ID string) func(*swarm.Service) { 30 return func(service *swarm.Service) { 31 service.ID = ID 32 } 33 } 34 35 // ServiceName sets the service name 36 func ServiceName(name string) func(*swarm.Service) { 37 return func(service *swarm.Service) { 38 service.Spec.Annotations.Name = name 39 } 40 } 41 42 // ServiceLabels sets the service's labels 43 func ServiceLabels(labels map[string]string) func(*swarm.Service) { 44 return func(service *swarm.Service) { 45 service.Spec.Annotations.Labels = labels 46 } 47 } 48 49 // ReplicatedService sets the number of replicas for the service 50 func ReplicatedService(replicas uint64) func(*swarm.Service) { 51 return func(service *swarm.Service) { 52 service.Spec.Mode = swarm.ServiceMode{Replicated: &swarm.ReplicatedService{Replicas: &replicas}} 53 } 54 } 55 56 // ServiceImage sets the service's image 57 func ServiceImage(image string) func(*swarm.Service) { 58 return func(service *swarm.Service) { 59 service.Spec.TaskTemplate = swarm.TaskSpec{ContainerSpec: &swarm.ContainerSpec{Image: image}} 60 } 61 } 62 63 // ServicePort sets the service's port 64 func ServicePort(port swarm.PortConfig) func(*swarm.Service) { 65 return func(service *swarm.Service) { 66 service.Spec.EndpointSpec.Ports = append(service.Spec.EndpointSpec.Ports, port) 67 68 assignedPort := port 69 if assignedPort.PublishedPort == 0 { 70 assignedPort.PublishedPort = 30000 71 } 72 service.Endpoint.Ports = append(service.Endpoint.Ports, assignedPort) 73 } 74 }