本文整理汇总了Golang中github.com/GoogleCloudPlatform/kubernetes/pkg/api.Protocol函数的典型用法代码示例。如果您正苦于以下问题:Golang Protocol函数的具体用法?Golang Protocol怎么用?Golang Protocol使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Protocol函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: fakeDeploymentConfig
func fakeDeploymentConfig(name string, containers ...containerDesc) *deployapi.DeploymentConfig {
specContainers := []kapi.Container{}
for _, c := range containers {
container := kapi.Container{
Name: c.name,
}
container.Ports = []kapi.ContainerPort{}
for _, p := range c.ports {
container.Ports = append(container.Ports, kapi.ContainerPort{
Name: fmt.Sprintf("port-%d-%s", p.port, p.protocol),
ContainerPort: p.port,
Protocol: kapi.Protocol(p.protocol),
})
}
specContainers = append(specContainers, container)
}
return &deployapi.DeploymentConfig{
ObjectMeta: kapi.ObjectMeta{
Name: name,
},
Template: deployapi.DeploymentTemplate{
ControllerTemplate: kapi.ReplicationControllerSpec{
Replicas: 1,
Selector: map[string]string{"name": "test"},
Template: &kapi.PodTemplateSpec{
Spec: kapi.PodSpec{
Containers: specContainers,
},
},
},
},
}
}
示例2: replicationControllerSpecFromService
func replicationControllerSpecFromService(s pmxadapter.Service) api.ReplicationController {
ports := make([]api.Port, len(s.Ports))
for i, p := range s.Ports {
ports[i].HostPort = int(p.HostPort)
ports[i].ContainerPort = int(p.ContainerPort)
ports[i].Protocol = api.Protocol(p.Protocol)
}
env := make([]api.EnvVar, len(s.Environment))
for i, e := range s.Environment {
env[i].Name = e.Variable
env[i].Value = e.Value
}
safeName := sanitizeServiceName(s.Name)
commands := make([]string, 0)
if s.Command != "" {
commands = append(commands, s.Command)
}
replicas := s.Deployment.Count
// The adapter seems to be in charge of adjusting missing replica count from
// the JSON. The UI doesn't allow selection of 0 replicas, so this shouldn't
// screw things up in the current state.
if replicas == 0 {
replicas = 1
}
return api.ReplicationController{
ObjectMeta: api.ObjectMeta{
Name: safeName,
},
Spec: api.ReplicationControllerSpec{
Replicas: replicas,
Selector: map[string]string{"service-name": safeName},
Template: &api.PodTemplateSpec{
ObjectMeta: api.ObjectMeta{
Labels: map[string]string{
"service-name": safeName,
"panamax": "panamax",
},
},
Spec: api.PodSpec{
Containers: []api.Container{
{
Name: safeName,
Image: s.Source,
Command: commands,
Ports: ports,
Env: env,
},
},
},
},
},
}
}
示例3: Generate
func (ServiceGenerator) Generate(params map[string]string) (runtime.Object, error) {
selectorString, found := params["selector"]
if !found || len(selectorString) == 0 {
return nil, fmt.Errorf("'selector' is a required parameter.")
}
selector := ParseLabels(selectorString)
name, found := params["name"]
if !found {
return nil, fmt.Errorf("'name' is a required parameter.")
}
portString, found := params["port"]
if !found {
return nil, fmt.Errorf("'port' is a required parameter.")
}
port, err := strconv.Atoi(portString)
if err != nil {
return nil, err
}
service := api.Service{
ObjectMeta: api.ObjectMeta{
Name: name,
},
Spec: api.ServiceSpec{
Port: port,
Protocol: api.Protocol(params["protocol"]),
Selector: selector,
},
}
containerPort, found := params["container-port"]
if found && len(containerPort) > 0 {
if cPort, err := strconv.Atoi(containerPort); err != nil {
service.Spec.ContainerPort = util.NewIntOrStringFromString(containerPort)
} else {
service.Spec.ContainerPort = util.NewIntOrStringFromInt(cPort)
}
} else {
service.Spec.ContainerPort = util.NewIntOrStringFromInt(port)
}
if params["create-external-load-balancer"] == "true" {
service.Spec.CreateExternalLoadBalancer = true
}
if len(params["public-ip"]) != 0 {
service.Spec.PublicIPs = []string{params["public-ip"]}
}
return &service, nil
}
示例4: kServiceByNameAndPort
func kServiceByNameAndPort(name string, toServiceName string, p pmxadapter.Port) api.Service {
return api.Service{
ObjectMeta: api.ObjectMeta{
Name: name,
Labels: map[string]string{"service-name": toServiceName},
},
Spec: api.ServiceSpec{
// I'm unaware of any wildcard selector, we don't have a name for the
// overarching application being started, and I can't specifically
// target only certain RCs because we don't know if a Service exists
// solely to allow external access. Shrug.
Selector: map[string]string{"panamax": "panamax"},
Port: int(p.HostPort),
ContainerPort: util.NewIntOrStringFromInt(int(p.ContainerPort)),
Protocol: api.Protocol(p.Protocol),
PublicIPs: PublicIPs,
},
}
}
示例5: expectedService
func expectedService(name string, ports ...portDesc) *kapi.Service {
servicePorts := []kapi.ServicePort{}
for _, p := range ports {
servicePorts = append(servicePorts, kapi.ServicePort{
Name: fmt.Sprintf("port-%d-%s", p.port, p.protocol),
Port: p.port,
Protocol: kapi.Protocol(p.protocol),
TargetPort: kutil.NewIntOrStringFromInt(p.port),
})
}
return &kapi.Service{
ObjectMeta: kapi.ObjectMeta{
Name: name,
},
Spec: kapi.ServiceSpec{
Selector: map[string]string{"name": "test"},
Ports: servicePorts,
},
}
}
示例6: init
//.........这里部分代码省略.........
},
func(in *ReplicationController, out *newer.ReplicationController, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.TypeMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Labels, &out.Labels, 0); err != nil {
return err
}
if err := s.Convert(&in.DesiredState, &out.DesiredState, 0); err != nil {
return err
}
if err := s.Convert(&in.CurrentState, &out.CurrentState, 0); err != nil {
return err
}
return nil
},
func(in *newer.Service, out *Service, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Labels, &out.Labels, 0); err != nil {
return err
}
out.Port = in.Spec.Port
out.Protocol = Protocol(in.Spec.Protocol)
if err := s.Convert(&in.Spec.Selector, &out.Selector, 0); err != nil {
return err
}
out.CreateExternalLoadBalancer = in.Spec.CreateExternalLoadBalancer
out.ContainerPort = in.Spec.ContainerPort
out.PortalIP = in.Spec.PortalIP
out.ProxyPort = in.Spec.ProxyPort
return nil
},
func(in *Service, out *newer.Service, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.TypeMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Labels, &out.Labels, 0); err != nil {
return err
}
out.Spec.Port = in.Port
out.Spec.Protocol = newer.Protocol(in.Protocol)
if err := s.Convert(&in.Selector, &out.Spec.Selector, 0); err != nil {
return err
}
out.Spec.CreateExternalLoadBalancer = in.CreateExternalLoadBalancer
out.Spec.ContainerPort = in.ContainerPort
out.Spec.PortalIP = in.PortalIP
out.Spec.ProxyPort = in.ProxyPort
return nil
示例7: DeployableContainer
// DeployableContainer sets up a container for the image ready for deployment
func (r *ImageRef) DeployableContainer() (container *kapi.Container, triggers []deployapi.DeploymentTriggerPolicy, err error) {
name, ok := r.SuggestName()
if !ok {
return nil, nil, fmt.Errorf("unable to suggest a container name for the image %q", r.String())
}
if r.AsImageStream {
tag := r.Tag
if len(tag) == 0 {
tag = imageapi.DefaultImageTag
}
imageChangeParams := &deployapi.DeploymentTriggerImageChangeParams{
Automatic: true,
ContainerNames: []string{name},
Tag: tag,
}
if r.Stream != nil {
imageChangeParams.From = kapi.ObjectReference{
Kind: "ImageStream",
Name: r.Stream.Name,
Namespace: r.Stream.Namespace,
}
} else {
imageChangeParams.From = kapi.ObjectReference{
Kind: "ImageStream",
Name: r.Name,
}
}
triggers = []deployapi.DeploymentTriggerPolicy{
{
Type: deployapi.DeploymentTriggerOnImageChange,
ImageChangeParams: imageChangeParams,
},
}
}
container = &kapi.Container{
Name: name,
Image: r.String(),
}
// If imageInfo present, append ports
if r.Info != nil && r.Info.Config != nil {
ports := []string{}
// ExposedPorts can consist of multiple space-separated ports
for exposed := range r.Info.Config.ExposedPorts {
ports = append(ports, strings.Split(exposed, " ")...)
}
for _, sp := range ports {
p := docker.Port(sp)
port, err := strconv.Atoi(p.Port())
if err != nil {
return nil, nil, fmt.Errorf("failed to parse port %q: %v", p.Port(), err)
}
container.Ports = append(container.Ports, kapi.ContainerPort{
ContainerPort: port,
Protocol: kapi.Protocol(strings.ToUpper(p.Proto())),
})
}
// Create volume mounts with names based on container name
maxDigits := len(fmt.Sprintf("%d", len(r.Info.Config.Volumes)))
baseName := namer.GetName(container.Name, volumeNameInfix, util.LabelValueMaxLength-maxDigits-1)
i := 1
for volume := range r.Info.Config.Volumes {
r.HasEmptyDir = true
container.VolumeMounts = append(container.VolumeMounts, kapi.VolumeMount{
Name: fmt.Sprintf("%s-%d", baseName, i),
ReadOnly: false,
MountPath: volume,
})
i++
}
// TODO: Append environment variables
}
return container, triggers, nil
}
示例8: init
//.........这里部分代码省略.........
if err := s.Convert(&in.RestartPolicy, &out.RestartPolicy, 0); err != nil {
return err
}
out.DNSPolicy = DNSPolicy(in.DNSPolicy)
out.Version = "v1beta2"
return nil
},
func(in *ContainerManifest, out *newer.PodSpec, s conversion.Scope) error {
if err := s.Convert(&in.Volumes, &out.Volumes, 0); err != nil {
return err
}
if err := s.Convert(&in.Containers, &out.Containers, 0); err != nil {
return err
}
if err := s.Convert(&in.RestartPolicy, &out.RestartPolicy, 0); err != nil {
return err
}
out.DNSPolicy = newer.DNSPolicy(in.DNSPolicy)
return nil
},
func(in *newer.Service, out *Service, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Labels, &out.Labels, 0); err != nil {
return err
}
out.Port = in.Spec.Port
out.Protocol = Protocol(in.Spec.Protocol)
if err := s.Convert(&in.Spec.Selector, &out.Selector, 0); err != nil {
return err
}
out.CreateExternalLoadBalancer = in.Spec.CreateExternalLoadBalancer
out.PublicIPs = in.Spec.PublicIPs
out.ContainerPort = in.Spec.ContainerPort
out.PortalIP = in.Spec.PortalIP
out.ProxyPort = in.Spec.ProxyPort
if err := s.Convert(&in.Spec.SessionAffinity, &out.SessionAffinity, 0); err != nil {
return err
}
return nil
},
func(in *Service, out *newer.Service, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.TypeMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Labels, &out.Labels, 0); err != nil {
return err
}
out.Spec.Port = in.Port
out.Spec.Protocol = newer.Protocol(in.Protocol)
if err := s.Convert(&in.Selector, &out.Spec.Selector, 0); err != nil {
return err
}
out.Spec.CreateExternalLoadBalancer = in.CreateExternalLoadBalancer
out.Spec.PublicIPs = in.PublicIPs
示例9: addConversionFuncs
//.........这里部分代码省略.........
}
if err := s.Convert(&in.State, &out.Status, 0); err != nil {
return err
}
return nil
},
func(in *api.PodSpec, out *PodState, s conversion.Scope) error {
if err := s.Convert(&in, &out.Manifest, 0); err != nil {
return err
}
out.Host = in.Host
return nil
},
func(in *PodState, out *api.PodSpec, s conversion.Scope) error {
if err := s.Convert(&in.Manifest, &out, 0); err != nil {
return err
}
out.Host = in.Host
return nil
},
func(in *api.Service, out *Service, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Labels, &out.Labels, 0); err != nil {
return err
}
// Produce legacy fields.
out.Protocol = ProtocolTCP
if len(in.Spec.Ports) > 0 {
out.PortName = in.Spec.Ports[0].Name
out.Port = in.Spec.Ports[0].Port
out.Protocol = Protocol(in.Spec.Ports[0].Protocol)
out.ContainerPort = in.Spec.Ports[0].TargetPort
}
// Copy modern fields.
for i := range in.Spec.Ports {
out.Ports = append(out.Ports, ServicePort{
Name: in.Spec.Ports[i].Name,
Port: in.Spec.Ports[i].Port,
Protocol: Protocol(in.Spec.Ports[i].Protocol),
ContainerPort: in.Spec.Ports[i].TargetPort,
NodePort: in.Spec.Ports[i].NodePort,
})
}
if err := s.Convert(&in.Spec.Selector, &out.Selector, 0); err != nil {
return err
}
out.PublicIPs = in.Spec.DeprecatedPublicIPs
out.PortalIP = in.Spec.PortalIP
if err := s.Convert(&in.Spec.SessionAffinity, &out.SessionAffinity, 0); err != nil {
return err
}
if err := s.Convert(&in.Status.LoadBalancer, &out.LoadBalancerStatus, 0); err != nil {
return err
}
if err := s.Convert(&in.Spec.Type, &out.Type, 0); err != nil {
return err
示例10: DeployableContainer
// DeployableContainer sets up a container for the image ready for deployment
func (r *ImageRef) DeployableContainer() (container *kapi.Container, triggers []deployapi.DeploymentTriggerPolicy, err error) {
name, ok := r.SuggestName()
if !ok {
return nil, nil, fmt.Errorf("unable to suggest a container name for the image %q", r.String())
}
if r.AsImageStream {
tag := r.Tag
if len(tag) == 0 {
tag = imageapi.DefaultImageTag
}
imageChangeParams := &deployapi.DeploymentTriggerImageChangeParams{
Automatic: true,
ContainerNames: []string{name},
Tag: tag,
}
if r.Stream != nil {
imageChangeParams.From = kapi.ObjectReference{
Kind: "ImageStream",
Name: r.Stream.Name,
Namespace: r.Stream.Namespace,
}
} else {
imageChangeParams.From = kapi.ObjectReference{
Kind: "ImageStream",
Name: r.Name,
}
}
triggers = []deployapi.DeploymentTriggerPolicy{
{
Type: deployapi.DeploymentTriggerOnImageChange,
ImageChangeParams: imageChangeParams,
},
}
}
container = &kapi.Container{
Name: name,
Image: r.String(),
}
// If imageInfo present, append ports
if r.Info != nil {
ports := []string{}
// ExposedPorts can consist of multiple space-separated ports
for exposed := range r.Info.Config.ExposedPorts {
ports = append(ports, strings.Split(exposed, " ")...)
}
for _, sp := range ports {
p := docker.Port(sp)
port, err := strconv.Atoi(p.Port())
if err != nil {
return nil, nil, fmt.Errorf("failed to parse port %q: %v", p.Port(), err)
}
container.Ports = append(container.Ports, kapi.ContainerPort{
Name: strings.Join([]string{name, p.Proto(), p.Port()}, "-"),
ContainerPort: port,
Protocol: kapi.Protocol(strings.ToUpper(p.Proto())),
})
}
// TODO: Append volume information and environment variables
}
return container, triggers, nil
}
示例11: init
//.........这里部分代码省略.........
if err := s.Convert(&in.RestartPolicy, &out.RestartPolicy, 0); err != nil {
return err
}
out.DNSPolicy = DNSPolicy(in.DNSPolicy)
out.Version = "v1beta2"
return nil
},
func(in *ContainerManifest, out *newer.PodSpec, s conversion.Scope) error {
if err := s.Convert(&in.Volumes, &out.Volumes, 0); err != nil {
return err
}
if err := s.Convert(&in.Containers, &out.Containers, 0); err != nil {
return err
}
if err := s.Convert(&in.RestartPolicy, &out.RestartPolicy, 0); err != nil {
return err
}
out.DNSPolicy = newer.DNSPolicy(in.DNSPolicy)
return nil
},
func(in *newer.Service, out *Service, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Labels, &out.Labels, 0); err != nil {
return err
}
out.Port = in.Spec.Port
out.Protocol = Protocol(in.Spec.Protocol)
if err := s.Convert(&in.Spec.Selector, &out.Selector, 0); err != nil {
return err
}
out.CreateExternalLoadBalancer = in.Spec.CreateExternalLoadBalancer
out.PublicIPs = in.Spec.PublicIPs
out.ContainerPort = in.Spec.ContainerPort
out.PortalIP = in.Spec.PortalIP
if err := s.Convert(&in.Spec.SessionAffinity, &out.SessionAffinity, 0); err != nil {
return err
}
return nil
},
func(in *Service, out *newer.Service, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.TypeMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Labels, &out.Labels, 0); err != nil {
return err
}
out.Spec.Port = in.Port
out.Spec.Protocol = newer.Protocol(in.Protocol)
if err := s.Convert(&in.Selector, &out.Spec.Selector, 0); err != nil {
return err
}
out.Spec.CreateExternalLoadBalancer = in.CreateExternalLoadBalancer
out.Spec.PublicIPs = in.PublicIPs
out.Spec.ContainerPort = in.ContainerPort
示例12: init
//.........这里部分代码省略.........
if err := s.Convert(&in.Info, &out.Info, 0); err != nil {
return err
}
out.Host = in.Host
out.HostIP = in.HostIP
out.PodIP = in.PodIP
return nil
},
func(in *newer.PodSpec, out *PodState, s conversion.Scope) error {
if err := s.Convert(&in, &out.Manifest, 0); err != nil {
return err
}
return nil
},
func(in *PodState, out *newer.PodSpec, s conversion.Scope) error {
if err := s.Convert(&in.Manifest, &out, 0); err != nil {
return err
}
return nil
},
func(in *newer.Service, out *Service, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Labels, &out.Labels, 0); err != nil {
return err
}
out.Port = in.Spec.Port
out.Protocol = Protocol(in.Spec.Protocol)
if err := s.Convert(&in.Spec.Selector, &out.Selector, 0); err != nil {
return err
}
out.CreateExternalLoadBalancer = in.Spec.CreateExternalLoadBalancer
out.PublicIPs = in.Spec.PublicIPs
out.ContainerPort = in.Spec.ContainerPort
out.PortalIP = in.Spec.PortalIP
out.ProxyPort = in.Spec.ProxyPort
return nil
},
func(in *Service, out *newer.Service, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.TypeMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Labels, &out.Labels, 0); err != nil {
return err
}
out.Spec.Port = in.Port
out.Spec.Protocol = newer.Protocol(in.Protocol)
if err := s.Convert(&in.Selector, &out.Spec.Selector, 0); err != nil {
return err
}
out.Spec.CreateExternalLoadBalancer = in.CreateExternalLoadBalancer
out.Spec.PublicIPs = in.PublicIPs
out.Spec.ContainerPort = in.ContainerPort
out.Spec.PortalIP = in.PortalIP
out.Spec.ProxyPort = in.ProxyPort
示例13: init
//.........这里部分代码省略.........
}
if err := s.Convert(&in.State, &out.Status, 0); err != nil {
return err
}
return nil
},
func(in *newer.PodSpec, out *PodState, s conversion.Scope) error {
if err := s.Convert(&in, &out.Manifest, 0); err != nil {
return err
}
out.Host = in.Host
return nil
},
func(in *PodState, out *newer.PodSpec, s conversion.Scope) error {
if err := s.Convert(&in.Manifest, &out, 0); err != nil {
return err
}
out.Host = in.Host
return nil
},
func(in *newer.Service, out *Service, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Labels, &out.Labels, 0); err != nil {
return err
}
out.Port = in.Spec.Port
out.Protocol = Protocol(in.Spec.Protocol)
if err := s.Convert(&in.Spec.Selector, &out.Selector, 0); err != nil {
return err
}
out.CreateExternalLoadBalancer = in.Spec.CreateExternalLoadBalancer
out.PublicIPs = in.Spec.PublicIPs
out.ContainerPort = in.Spec.TargetPort
out.PortalIP = in.Spec.PortalIP
if err := s.Convert(&in.Spec.SessionAffinity, &out.SessionAffinity, 0); err != nil {
return err
}
return nil
},
func(in *Service, out *newer.Service, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.TypeMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Labels, &out.Labels, 0); err != nil {
return err
}
out.Spec.Port = in.Port
out.Spec.Protocol = newer.Protocol(in.Protocol)
if err := s.Convert(&in.Selector, &out.Spec.Selector, 0); err != nil {
return err
}
out.Spec.CreateExternalLoadBalancer = in.CreateExternalLoadBalancer
out.Spec.PublicIPs = in.PublicIPs
out.Spec.TargetPort = in.ContainerPort
示例14: TestImageRefDeployableContainerPorts
//.........这里部分代码省略.........
"123": {},
"456": {},
},
expectedPorts: map[int]string{
123: "TCP",
456: "TCP",
},
expectError: false,
},
{
name: "tcp implied, multiple ports",
inputPorts: map[string]struct{}{
"123 456": {},
"678 1123": {},
},
expectedPorts: map[int]string{
123: "TCP",
678: "TCP",
456: "TCP",
1123: "TCP",
},
expectError: false,
},
{
name: "tcp and udp, individual ports",
inputPorts: map[string]struct{}{
"123/tcp": {},
"456/udp": {},
},
expectedPorts: map[int]string{
123: "TCP",
456: "UDP",
},
expectError: false,
},
{
name: "tcp implied, multiple ports",
inputPorts: map[string]struct{}{
"123/tcp 456/udp": {},
"678/udp 1123/tcp": {},
},
expectedPorts: map[int]string{
123: "TCP",
456: "UDP",
678: "UDP",
1123: "TCP",
},
expectError: false,
},
{
name: "invalid format",
inputPorts: map[string]struct{}{
"123/tcp abc": {},
},
expectedPorts: map[int]string{},
expectError: true,
},
}
for _, test := range tests {
imageRef := &ImageRef{
DockerImageReference: imageapi.DockerImageReference{
Namespace: "test",
Name: "image",
Tag: imageapi.DefaultImageTag,
},
Info: &imageapi.DockerImage{
Config: imageapi.DockerConfig{
ExposedPorts: test.inputPorts,
},
},
}
container, _, err := imageRef.DeployableContainer()
if err != nil && !test.expectError {
t.Errorf("%s: unexpected error: %v", test.name, err)
continue
}
if err == nil && test.expectError {
t.Errorf("%s: got no error and expected an error", test.name)
continue
}
if test.expectError {
continue
}
remaining := test.expectedPorts
for _, port := range container.Ports {
proto, ok := remaining[port.ContainerPort]
if !ok {
t.Errorf("%s: got unexpected port: %v", test.name, port)
continue
}
if kapi.Protocol(proto) != port.Protocol {
t.Errorf("%s: got unexpected protocol %s for port %v", test.name, port.Protocol, port)
}
delete(remaining, port.ContainerPort)
}
if len(remaining) > 0 {
t.Errorf("%s: did not find expected ports: %#v", test.name, remaining)
}
}
}
示例15: Generate
func (ServiceGenerator) Generate(params map[string]string) (runtime.Object, error) {
selectorString, found := params["selector"]
if !found || len(selectorString) == 0 {
return nil, fmt.Errorf("'selector' is a required parameter.")
}
selector, err := ParseLabels(selectorString)
if err != nil {
return nil, err
}
labelsString, found := params["labels"]
var labels map[string]string
if found && len(labelsString) > 0 {
labels, err = ParseLabels(labelsString)
if err != nil {
return nil, err
}
}
name, found := params["name"]
if !found {
return nil, fmt.Errorf("'name' is a required parameter.")
}
portString, found := params["port"]
if !found {
return nil, fmt.Errorf("'port' is a required parameter.")
}
port, err := strconv.Atoi(portString)
if err != nil {
return nil, err
}
service := api.Service{
ObjectMeta: api.ObjectMeta{
Name: name,
Labels: labels,
},
Spec: api.ServiceSpec{
Selector: selector,
Ports: []api.ServicePort{
{
Name: "default",
Port: port,
Protocol: api.Protocol(params["protocol"]),
},
},
},
}
targetPort, found := params["target-port"]
if !found {
targetPort, found = params["container-port"]
}
if found && len(targetPort) > 0 {
if portNum, err := strconv.Atoi(targetPort); err != nil {
service.Spec.Ports[0].TargetPort = util.NewIntOrStringFromString(targetPort)
} else {
service.Spec.Ports[0].TargetPort = util.NewIntOrStringFromInt(portNum)
}
} else {
service.Spec.Ports[0].TargetPort = util.NewIntOrStringFromInt(port)
}
if params["create-external-load-balancer"] == "true" {
service.Spec.CreateExternalLoadBalancer = true
}
if len(params["public-ip"]) != 0 {
service.Spec.PublicIPs = []string{params["public-ip"]}
}
return &service, nil
}