Skip to content

Commit cccb76c

Browse files
Delyan Raychevakshaysngupta
authored andcommitted
listeners: ignore nil fields when constructing listenerID (#630)
1 parent 5b9aa7b commit cccb76c

File tree

12 files changed

+367
-185
lines changed

12 files changed

+367
-185
lines changed
Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,239 @@
1+
{
2+
"properties": {
3+
"backendAddressPools": [
4+
{
5+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/backendAddressPools/defaultaddresspool",
6+
"name": "defaultaddresspool",
7+
"properties": {
8+
"backendAddresses": []
9+
}
10+
},
11+
{
12+
"etag": "*",
13+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/backendAddressPools/pool---namespace---hello-world-80-bp-80",
14+
"name": "pool---namespace---hello-world-80-bp-80",
15+
"properties": {
16+
"backendAddresses": [
17+
{
18+
"ipAddress": "1.1.1.1"
19+
},
20+
{
21+
"ipAddress": "1.1.1.2"
22+
},
23+
{
24+
"ipAddress": "1.1.1.3"
25+
}
26+
]
27+
}
28+
}
29+
],
30+
"backendHttpSettingsCollection": [
31+
{
32+
"etag": "*",
33+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/backendHttpSettingsCollection/bp---namespace---hello-world-80-80---name--",
34+
"name": "bp---namespace---hello-world-80-80---name--",
35+
"properties": {
36+
"port": 80,
37+
"probe": {
38+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/probes/pb---namespace---hello-world-80---name--"
39+
},
40+
"protocol": "Http"
41+
}
42+
},
43+
{
44+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/backendHttpSettingsCollection/defaulthttpsetting",
45+
"name": "defaulthttpsetting",
46+
"properties": {
47+
"port": 80,
48+
"probe": {
49+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/probes/defaultprobe-Http"
50+
},
51+
"protocol": "Http"
52+
}
53+
}
54+
],
55+
"frontendIPConfigurations": [
56+
{
57+
"etag": "xx2",
58+
"id": "--front-end-ip-id-1--",
59+
"name": "xx3",
60+
"properties": {
61+
"publicIPAddress": {
62+
"id": "xyz"
63+
}
64+
},
65+
"type": "xx1"
66+
},
67+
{
68+
"etag": "yy2",
69+
"id": "--front-end-ip-id-2--",
70+
"name": "yy3",
71+
"properties": {
72+
"privateIPAddress": "abc"
73+
},
74+
"type": "yy1"
75+
}
76+
],
77+
"frontendPorts": [
78+
{
79+
"etag": "*",
80+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/frontendPorts/fp-443",
81+
"name": "fp-443",
82+
"properties": {
83+
"port": 443
84+
}
85+
},
86+
{
87+
"etag": "*",
88+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/frontendPorts/fp-80",
89+
"name": "fp-80",
90+
"properties": {
91+
"port": 80
92+
}
93+
}
94+
],
95+
"httpListeners": [
96+
{
97+
"etag": "*",
98+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/httpListeners/fl-foo.baz-443",
99+
"name": "fl-foo.baz-443",
100+
"properties": {
101+
"frontendIPConfiguration": {
102+
"id": "--front-end-ip-id-1--"
103+
},
104+
"frontendPort": {
105+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/frontendPorts/fp-443"
106+
},
107+
"hostName": "foo.baz",
108+
"protocol": "Https",
109+
"sslCertificate": {
110+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/sslCertificates/--namespace-----the-name-of-the-secret--"
111+
}
112+
}
113+
},
114+
{
115+
"etag": "*",
116+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/httpListeners/fl-foo.baz-80",
117+
"name": "fl-foo.baz-80",
118+
"properties": {
119+
"frontendIPConfiguration": {
120+
"id": "--front-end-ip-id-1--"
121+
},
122+
"frontendPort": {
123+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/frontendPorts/fp-80"
124+
},
125+
"hostName": "foo.baz",
126+
"protocol": "Http"
127+
}
128+
}
129+
],
130+
"probes": [
131+
{
132+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/probes/defaultprobe-Http",
133+
"name": "defaultprobe-Http",
134+
"properties": {
135+
"host": "localhost",
136+
"interval": 30,
137+
"path": "/",
138+
"protocol": "Http",
139+
"timeout": 30,
140+
"unhealthyThreshold": 3
141+
}
142+
},
143+
{
144+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/probes/defaultprobe-Https",
145+
"name": "defaultprobe-Https",
146+
"properties": {
147+
"host": "localhost",
148+
"interval": 30,
149+
"path": "/",
150+
"protocol": "Https",
151+
"timeout": 30,
152+
"unhealthyThreshold": 3
153+
}
154+
},
155+
{
156+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/probes/pb---namespace---hello-world-80---name--",
157+
"name": "pb---namespace---hello-world-80---name--",
158+
"properties": {
159+
"host": "foo.baz",
160+
"interval": 30,
161+
"path": "/",
162+
"protocol": "Http",
163+
"timeout": 30,
164+
"unhealthyThreshold": 3
165+
}
166+
}
167+
],
168+
"redirectConfigurations": [
169+
{
170+
"etag": "*",
171+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/redirectConfigurations/sslr-fl-foo.baz-443",
172+
"name": "sslr-fl-foo.baz-443",
173+
"properties": {
174+
"includePath": true,
175+
"includeQueryString": true,
176+
"redirectType": "Permanent",
177+
"targetListener": {
178+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/httpListeners/fl-foo.baz-443"
179+
}
180+
}
181+
}
182+
],
183+
"requestRoutingRules": [
184+
{
185+
"etag": "*",
186+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/requestRoutingRules/rr-foo.baz-443",
187+
"name": "rr-foo.baz-443",
188+
"properties": {
189+
"backendAddressPool": {
190+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/backendAddressPools/pool---namespace---hello-world-80-bp-80"
191+
},
192+
"backendHttpSettings": {
193+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/backendHttpSettingsCollection/bp---namespace---hello-world-80-80---name--"
194+
},
195+
"httpListener": {
196+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/httpListeners/fl-foo.baz-443"
197+
},
198+
"ruleType": "Basic"
199+
}
200+
},
201+
{
202+
"etag": "*",
203+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/requestRoutingRules/rr-foo.baz-80",
204+
"name": "rr-foo.baz-80",
205+
"properties": {
206+
"httpListener": {
207+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/httpListeners/fl-foo.baz-80"
208+
},
209+
"redirectConfiguration": {
210+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/redirectConfigurations/sslr-fl-foo.baz-443"
211+
},
212+
"ruleType": "Basic"
213+
}
214+
}
215+
],
216+
"sku": {
217+
"capacity": 3,
218+
"name": "Standard_v2",
219+
"tier": "Standard_v2"
220+
},
221+
"sslCertificates": [
222+
{
223+
"etag": "*",
224+
"id": "/subscriptions/--subscription--/resourceGroups/--resource-group--/providers/Microsoft.Network/applicationGateways/--app-gw-name--/sslCertificates/--namespace-----the-name-of-the-secret--",
225+
"name": "--namespace-----the-name-of-the-secret--",
226+
"properties": {
227+
"data": "xx",
228+
"password": "msazure"
229+
}
230+
}
231+
],
232+
"urlPathMaps": null
233+
},
234+
"tags": {
235+
"ingress-for-aks-cluster-id": "/subscriptions/subid/resourcegroups/aksresgp/providers/Microsoft.ContainerService/managedClusters/aksname",
236+
"last-updated-by-k8s-ingress": "2009-11-17 20:34:58.651387237 +0000 UTC",
237+
"managed-by-k8s-ingress": "a/b/c"
238+
}
239+
}

functional_tests/functional_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
"github.com/Azure/application-gateway-kubernetes-ingress/pkg/tests/mocks"
3333
"github.com/Azure/application-gateway-kubernetes-ingress/pkg/utils"
3434
"github.com/Azure/application-gateway-kubernetes-ingress/pkg/version"
35+
"github.com/Azure/application-gateway-kubernetes-ingress/pkg/tests/fixtures"
3536
)
3637

3738
func TestFunctional(t *testing.T) {
@@ -522,5 +523,23 @@ var _ = ginkgo.Describe("Tests `appgw.ConfigBuilder`", func() {
522523
check(cbCtx, "two_ingresses_same_domain_tls_notls.json", stopChannel, ctxt, configBuilder)
523524
})
524525

526+
ginkgo.It("Preexisting port w/ same port number", func() {
527+
528+
cbCtx := &ConfigBuilderContext{
529+
IngressList: []*v1beta1.Ingress{
530+
ingress,
531+
},
532+
ServiceList: serviceList,
533+
EnvVariables: environment.GetFakeEnv(),
534+
DefaultAddressPoolID: to.StringPtr("xx"),
535+
DefaultHTTPSettingsID: to.StringPtr("yyxx"),
536+
ExistingPortsByNumber: map[Port]n.ApplicationGatewayFrontendPort{
537+
Port(80): fixtures.GetDefaultPort(),
538+
Port(8989): fixtures.GetPort(8989),
539+
},
540+
}
541+
check(cbCtx, "duplicate_ports.json", stopChannel, ctxt, configBuilder)
542+
})
543+
525544
})
526545
})

pkg/appgw/configbuilder.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
// Clock is an interface, which allows you to implement your own Time.
2727
type Clock interface {
2828
Now() time.Time
29-
3029
}
3130

3231
// ConfigBuilder is a builder for application gateway configuration

0 commit comments

Comments
 (0)