Skip to content

Commit fac5f9c

Browse files
author
Felix Wischke (65278)
committed
cloudinit: fix multiple vrf device templating
1 parent 4c5d880 commit fac5f9c

File tree

2 files changed

+96
-42
lines changed

2 files changed

+96
-42
lines changed

pkg/cloudinit/network.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,17 @@ const (
4141
{{- end }}
4242
{{- if and $element.IPV6Address (not $element.DHCP6)}}
4343
- '{{ $element.IPV6Address }}'
44-
{{- end }}
44+
{{- end }}
4545
{{- if or (and $element.Gateway (not $element.DHCP4)) (and $element.Gateway6 (not $element.DHCP6)) }}
4646
routes:
4747
{{- if and $element.Gateway (not $element.DHCP4) }}
4848
- to: 0.0.0.0/0
4949
via: {{ $element.Gateway }}
50-
{{- end }}
50+
{{- end }}
5151
{{- if and $element.Gateway6 (not $element.DHCP6) }}
5252
- to: '::/0'
5353
via: '{{ $element.Gateway6 }}'
54-
{{- end }}
54+
{{- end }}
5555
{{- end }}
5656
{{- end }}
5757
{{- if $element.DNSServers }}
@@ -68,7 +68,7 @@ const (
6868
{{- if eq $element.Type "vrf" }}
6969
{{- if eq $vrf 0 }}
7070
vrfs:
71-
{{- $vrf := 1 }}
71+
{{- $vrf = 1 }}
7272
{{- end }}
7373
{{$element.Name}}:
7474
table: {{ $element.Table }}

pkg/cloudinit/network_test.go

Lines changed: 92 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -237,17 +237,7 @@ const (
237237
- eth0
238238
- eth1`
239239

240-
expectedValidNetworkConfigValidFIBRule = `network:
241-
version: 2
242-
renderer: networkd
243-
ethernets:
244-
vrfs:
245-
vrf-blue:
246-
table: 500
247-
routing-policy:
248-
- { "from": "10.10.0.0/16", }`
249-
250-
expectedValidNetworkNotGateway = `network:
240+
expectedValidNetworkConfigMultipleNicsMultipleVRF = `network:
251241
version: 2
252242
renderer: networkd
253243
ethernets:
@@ -272,10 +262,39 @@ const (
272262
dhcp6: false
273263
addresses:
274264
- 196.168.100.124/24
265+
routes:
266+
- to: 0.0.0.0/0
267+
via: 196.168.100.254
275268
nameservers:
276269
addresses:
277270
- '8.8.8.8'
278-
- '8.8.4.4'`
271+
- '8.8.4.4'
272+
vrfs:
273+
vrf-blue:
274+
table: 500
275+
routes:
276+
- { "to": "default", "via": "192.168.178.1", "metric": 100, "table": 100, }
277+
- { "to": "10.10.10.0/24", "via": "192.168.178.254", "metric": 100, }
278+
routing-policy:
279+
- { "to": "0.0.0.0/0", "from": "192.168.178.1/24", "priority": 999, "table": 100, }
280+
interfaces:
281+
- eth0
282+
vrf-red:
283+
table: 501
284+
routing-policy:
285+
- { "to": "0.0.0.0/0", "from": "192.168.100.0/24", "priority": 999, "table": 101, }
286+
interfaces:
287+
- eth1`
288+
289+
expectedValidNetworkConfigValidFIBRule = `network:
290+
version: 2
291+
renderer: networkd
292+
ethernets:
293+
vrfs:
294+
vrf-blue:
295+
table: 500
296+
routing-policy:
297+
- { "from": "10.10.0.0/16", }`
279298
)
280299

281300
func TestNetworkConfig_Render(t *testing.T) {
@@ -625,6 +644,67 @@ func TestNetworkConfig_Render(t *testing.T) {
625644
err: nil,
626645
},
627646
},
647+
"ValidNetworkConfigMultipleNicsMultipleVRF": {
648+
reason: "valid config multiple nics enslaved to multiple VRFs",
649+
args: args{
650+
nics: []NetworkConfigData{
651+
{
652+
Type: "ethernet",
653+
Name: "eth0",
654+
MacAddress: "92:60:a0:5b:22:c2",
655+
IPAddress: "10.10.10.12/24",
656+
Gateway: "10.10.10.1",
657+
DNSServers: []string{"8.8.8.8", "8.8.4.4"},
658+
},
659+
{
660+
Type: "ethernet",
661+
Name: "eth1",
662+
MacAddress: "b4:87:18:bf:a3:60",
663+
IPAddress: "196.168.100.124/24",
664+
Gateway: "196.168.100.254",
665+
DNSServers: []string{"8.8.8.8", "8.8.4.4"},
666+
},
667+
{
668+
Type: "vrf",
669+
Name: "vrf-blue",
670+
Table: 500,
671+
Interfaces: []string{"eth0"},
672+
Routes: []RoutingData{{
673+
To: "default",
674+
Via: "192.168.178.1",
675+
Metric: 100,
676+
Table: 100,
677+
}, {
678+
To: "10.10.10.0/24",
679+
Via: "192.168.178.254",
680+
Metric: 100,
681+
}},
682+
FIBRules: []FIBRuleData{{
683+
To: "0.0.0.0/0",
684+
From: "192.168.178.1/24",
685+
Priority: 999,
686+
Table: 100,
687+
}},
688+
},
689+
{
690+
Type: "vrf",
691+
Name: "vrf-red",
692+
Table: 501,
693+
Interfaces: []string{"eth1"},
694+
FIBRules: []FIBRuleData{{
695+
To: "0.0.0.0/0",
696+
From: "192.168.100.0/24",
697+
Priority: 999,
698+
Table: 101,
699+
}},
700+
},
701+
},
702+
},
703+
want: want{
704+
network: expectedValidNetworkConfigMultipleNicsMultipleVRF,
705+
err: nil,
706+
},
707+
},
628708
"ValidNetworkConfigValidFIBRule": {
629709
reason: "valid config valid routing policy",
630710
args: args{
@@ -664,32 +744,6 @@ func TestNetworkConfig_Render(t *testing.T) {
664744
err: ErrMalformedRoute,
665745
},
666746
},
667-
"AdditionalNicNoGateway": {
668-
reason: "missing route is okay",
669-
args: args{
670-
nics: []NetworkConfigData{
671-
{
672-
Type: "ethernet",
673-
Name: "eth0",
674-
MacAddress: "92:60:a0:5b:22:c2",
675-
IPAddress: "10.10.10.12/24",
676-
Gateway: "10.10.10.1",
677-
DNSServers: []string{"8.8.8.8", "8.8.4.4"},
678-
},
679-
{
680-
Type: "ethernet",
681-
Name: "eth1",
682-
MacAddress: "b4:87:18:bf:a3:60",
683-
IPAddress: "196.168.100.124/24",
684-
DNSServers: []string{"8.8.8.8", "8.8.4.4"},
685-
},
686-
},
687-
},
688-
want: want{
689-
network: expectedValidNetworkNotGateway,
690-
err: nil,
691-
},
692-
},
693747
}
694748

695749
for n, tc := range cases {

0 commit comments

Comments
 (0)