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  }