Skip to content
This repository was archived by the owner on Nov 27, 2023. It is now read-only.

Commit 99de963

Browse files
authored
Merge pull request #1053 from docker/aci_udp_ports
ACI: Allow setting protocol when publishing ports
2 parents 016b04e + 5f73043 commit 99de963

File tree

3 files changed

+98
-2
lines changed

3 files changed

+98
-2
lines changed

aci/convert/container.go

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ func ContainerToComposeProject(r containers.ContainerConfig) (types.Project, err
3232
ports = append(ports, types.ServicePortConfig{
3333
Target: p.ContainerPort,
3434
Published: p.HostPort,
35+
Protocol: p.Protocol,
3536
})
3637
}
3738

aci/convert/ports.go

+15-2
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,25 @@ func convertPortsToAci(service serviceConfigAciHelper) ([]containerinstance.Cont
3737
return nil, nil, nil, errors.New(msg)
3838
}
3939
portNumber := int32(portConfig.Target)
40+
var groupProtocol containerinstance.ContainerGroupNetworkProtocol
41+
var containerProtocol containerinstance.ContainerNetworkProtocol
42+
switch portConfig.Protocol {
43+
case "tcp", "":
44+
groupProtocol = containerinstance.TCP
45+
containerProtocol = containerinstance.ContainerNetworkProtocolTCP
46+
case "udp":
47+
groupProtocol = containerinstance.UDP
48+
containerProtocol = containerinstance.ContainerNetworkProtocolUDP
49+
default:
50+
return nil, nil, nil, fmt.Errorf("unknown protocol %q in exposed port for service %q", portConfig.Protocol, service.Name)
51+
}
4052
containerPorts = append(containerPorts, containerinstance.ContainerPort{
41-
Port: to.Int32Ptr(portNumber),
53+
Port: to.Int32Ptr(portNumber),
54+
Protocol: containerProtocol,
4255
})
4356
groupPorts = append(groupPorts, containerinstance.Port{
4457
Port: to.Int32Ptr(portNumber),
45-
Protocol: containerinstance.TCP,
58+
Protocol: groupProtocol,
4659
})
4760
}
4861
var dnsLabelName *string = nil

aci/convert/ports_test.go

+82
Original file line numberDiff line numberDiff line change
@@ -173,3 +173,85 @@ func TestPortConvert(t *testing.T) {
173173
})
174174
}
175175
}
176+
177+
func TestConvertTCPPortsToAci(t *testing.T) {
178+
service := types.ServiceConfig{
179+
Name: "myService",
180+
Ports: []types.ServicePortConfig{
181+
{
182+
Protocol: "",
183+
Target: 80,
184+
Published: 80,
185+
},
186+
{
187+
Protocol: "tcp",
188+
Target: 90,
189+
Published: 90,
190+
},
191+
},
192+
}
193+
containerPorts, groupPports, _, err := convertPortsToAci(serviceConfigAciHelper(service))
194+
assert.NilError(t, err)
195+
assert.DeepEqual(t, containerPorts, []containerinstance.ContainerPort{
196+
{
197+
Port: to.Int32Ptr(80),
198+
Protocol: containerinstance.ContainerNetworkProtocolTCP,
199+
},
200+
{
201+
Port: to.Int32Ptr(90),
202+
Protocol: containerinstance.ContainerNetworkProtocolTCP,
203+
},
204+
})
205+
assert.DeepEqual(t, groupPports, []containerinstance.Port{
206+
{
207+
Port: to.Int32Ptr(80),
208+
Protocol: containerinstance.TCP,
209+
},
210+
{
211+
Port: to.Int32Ptr(90),
212+
Protocol: containerinstance.TCP,
213+
},
214+
})
215+
}
216+
217+
func TestConvertUDPPortsToAci(t *testing.T) {
218+
service := types.ServiceConfig{
219+
Name: "myService",
220+
Ports: []types.ServicePortConfig{
221+
{
222+
Protocol: "udp",
223+
Target: 80,
224+
Published: 80,
225+
},
226+
},
227+
}
228+
containerPorts, groupPports, _, err := convertPortsToAci(serviceConfigAciHelper(service))
229+
assert.NilError(t, err)
230+
assert.DeepEqual(t, containerPorts, []containerinstance.ContainerPort{
231+
{
232+
Port: to.Int32Ptr(80),
233+
Protocol: containerinstance.ContainerNetworkProtocolUDP,
234+
},
235+
})
236+
assert.DeepEqual(t, groupPports, []containerinstance.Port{
237+
{
238+
Port: to.Int32Ptr(80),
239+
Protocol: containerinstance.UDP,
240+
},
241+
})
242+
}
243+
244+
func TestConvertErrorOnMappingPorts(t *testing.T) {
245+
service := types.ServiceConfig{
246+
Name: "myService",
247+
Ports: []types.ServicePortConfig{
248+
{
249+
Protocol: "",
250+
Target: 80,
251+
Published: 90,
252+
},
253+
},
254+
}
255+
_, _, _, err := convertPortsToAci(serviceConfigAciHelper(service))
256+
assert.Error(t, err, "Port mapping is not supported with ACI, cannot map port 90 to 80 for container myService")
257+
}

0 commit comments

Comments
 (0)