@@ -42,7 +42,10 @@ func (p *PortOpt) Set(value string) error {
4242 return err
4343 }
4444
45- pConfig := swarm.PortConfig {}
45+ pConfig := swarm.PortConfig {
46+ Protocol : swarm .PortConfigProtocolTCP ,
47+ PublishMode : swarm .PortConfigPublishModeIngress ,
48+ }
4649 for _ , field := range fields {
4750 // TODO(thaJeztah): these options should not be case-insensitive.
4851 key , val , ok := strings .Cut (strings .ToLower (field ), "=" )
@@ -51,17 +54,19 @@ func (p *PortOpt) Set(value string) error {
5154 }
5255 switch key {
5356 case portOptProtocol :
54- if val != string (swarm .PortConfigProtocolTCP ) && val != string (swarm .PortConfigProtocolUDP ) && val != string (swarm .PortConfigProtocolSCTP ) {
57+ switch swarm .PortConfigProtocol (val ) {
58+ case swarm .PortConfigProtocolTCP , swarm .PortConfigProtocolUDP , swarm .PortConfigProtocolSCTP :
59+ pConfig .Protocol = swarm .PortConfigProtocol (val )
60+ default :
5561 return fmt .Errorf ("invalid protocol value '%s'" , val )
5662 }
57-
58- pConfig .Protocol = swarm .PortConfigProtocol (val )
5963 case portOptMode :
60- if val != string (swarm .PortConfigPublishModeIngress ) && val != string (swarm .PortConfigPublishModeHost ) {
64+ switch swarm .PortConfigPublishMode (val ) {
65+ case swarm .PortConfigPublishModeIngress , swarm .PortConfigPublishModeHost :
66+ pConfig .PublishMode = swarm .PortConfigPublishMode (val )
67+ default :
6168 return fmt .Errorf ("invalid publish mode value (%s): must be either '%s' or '%s'" , val , swarm .PortConfigPublishModeIngress , swarm .PortConfigPublishModeHost )
6269 }
63-
64- pConfig .PublishMode = swarm .PortConfigPublishMode (val )
6570 case portOptTargetPort :
6671 tPort , err := strconv .ParseUint (val , 10 , 16 )
6772 if err != nil {
@@ -93,18 +98,9 @@ func (p *PortOpt) Set(value string) error {
9398 return fmt .Errorf ("missing mandatory field '%s'" , portOptTargetPort )
9499 }
95100
96- if pConfig .PublishMode == "" {
97- pConfig .PublishMode = swarm .PortConfigPublishModeIngress
98- }
99-
100- if pConfig .Protocol == "" {
101- pConfig .Protocol = swarm .PortConfigProtocolTCP
102- }
103-
104101 p .ports = append (p .ports , pConfig )
105102 } else {
106103 // short syntax
107- portConfigs := []swarm.PortConfig {}
108104 ports , portBindingMap , err := nat .ParsePortSpecs ([]string {value })
109105 if err != nil {
110106 return err
@@ -117,6 +113,7 @@ func (p *PortOpt) Set(value string) error {
117113 }
118114 }
119115
116+ var portConfigs []swarm.PortConfig
120117 for port := range ports {
121118 portConfig , err := ConvertPortToPortConfig (port , portBindingMap )
122119 if err != nil {
@@ -136,7 +133,7 @@ func (*PortOpt) Type() string {
136133
137134// String returns a string repr of this option
138135func (p * PortOpt ) String () string {
139- ports := []string {}
136+ ports := make ( []string , 0 , len ( p . ports ))
140137 for _ , port := range p .ports {
141138 repr := fmt .Sprintf ("%v:%v/%s/%s" , port .PublishedPort , port .TargetPort , port .Protocol , port .PublishMode )
142139 ports = append (ports , repr )
@@ -158,7 +155,7 @@ func ConvertPortToPortConfig(
158155 portInt , _ := strconv .ParseUint (port , 10 , 16 )
159156 proto = strings .ToLower (proto )
160157
161- var ports []swarm.PortConfig
158+ ports := make ( []swarm.PortConfig , 0 , len ( portBindings ))
162159 for _ , binding := range portBindings [portRangeProto ] {
163160 if p := net .ParseIP (binding .HostIP ); p != nil && ! p .IsUnspecified () {
164161 // TODO(thaJeztah): use context-logger, so that this output can be suppressed (in tests).
0 commit comments