Skip to content

Commit d3202c8

Browse files
authored
Omitting timer properties from addresses inside NNS (#1413)
The `preferred-life-time` and `valid-life-time` keep changing every time we do `nmstatectl show`. Because of this, NodeNetworkState is updated all the time. In order to reduce the number of updates we are removing those dynamic properties and introduce `dynamic: true` instead. Signed-off-by: Mat Kowalski <[email protected]>
1 parent 38c23db commit d3202c8

File tree

2 files changed

+102
-0
lines changed

2 files changed

+102
-0
lines changed

pkg/state/filter.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ func isInInterfaces(interfaceName string, interfaces []interfaceState) bool {
5959
}
6060

6161
func filterOutDynamicAttributes(iface map[string]interface{}) {
62+
filterOutBridgeDynamicAttributes(iface)
63+
filterOutIPAddressLifetimeAttributes(iface)
64+
}
65+
66+
func filterOutBridgeDynamicAttributes(iface map[string]interface{}) {
6267
// The gc-timer and hello-time are deep into linux-bridge like this
6368
// - bridge:
6469
// options:
@@ -90,6 +95,39 @@ func filterOutDynamicAttributes(iface map[string]interface{}) {
9095
delete(options, "hello-timer")
9196
}
9297

98+
func filterOutIPAddressLifetimeAttributes(iface map[string]interface{}) {
99+
// The preferred-life-time and valid-life-time are in IPv4/IPv6 address entries like this:
100+
// - ipv4:
101+
// address:
102+
// - ip: 192.168.1.1
103+
// prefix-length: 24
104+
// preferred-life-time: 3600
105+
// valid-life-time: 7200
106+
filterOutAddressLifetimes(iface, "ipv4")
107+
filterOutAddressLifetimes(iface, "ipv6")
108+
}
109+
110+
func filterOutAddressLifetimes(iface map[string]interface{}, ipVersion string) {
111+
ip, ok := iface[ipVersion].(map[string]interface{})
112+
if !ok {
113+
return
114+
}
115+
116+
addresses, ok := ip["address"].([]interface{})
117+
if !ok {
118+
return
119+
}
120+
121+
for _, addrRaw := range addresses {
122+
addr, ok := addrRaw.(map[string]interface{})
123+
if !ok {
124+
continue
125+
}
126+
delete(addr, "preferred-life-time")
127+
delete(addr, "valid-life-time")
128+
}
129+
}
130+
93131
func filterOutInterfaces(ifacesState []interfaceState) []interfaceState {
94132
filteredInterfaces := []interfaceState{}
95133
for _, iface := range ifacesState {

pkg/state/filter_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,4 +325,68 @@ dns-resolver:
325325
Expect(returnedState).To(MatchYAML(state))
326326
})
327327
})
328+
329+
Context("when there are interfaces with preferred-life-time and valid-life-time in addresses", func() {
330+
BeforeEach(func() {
331+
state = nmstate.NewState(`
332+
interfaces:
333+
- name: eth1
334+
state: up
335+
type: ethernet
336+
ipv4:
337+
address:
338+
- ip: 192.168.1.1
339+
prefix-length: 24
340+
preferred-life-time: 3600
341+
valid-life-time: 7200
342+
dhcp: false
343+
enabled: true
344+
ipv6:
345+
address:
346+
- ip: 2001:db8::1
347+
prefix-length: 64
348+
preferred-life-time: 1800
349+
valid-life-time: 3600
350+
- ip: fe80::1
351+
prefix-length: 64
352+
preferred-life-time: forever
353+
valid-life-time: forever
354+
autoconf: false
355+
dhcp: false
356+
enabled: true
357+
routes:
358+
config: []
359+
running: []
360+
`)
361+
filteredState = nmstate.NewState(`
362+
interfaces:
363+
- name: eth1
364+
state: up
365+
type: ethernet
366+
ipv4:
367+
address:
368+
- ip: 192.168.1.1
369+
prefix-length: 24
370+
dhcp: false
371+
enabled: true
372+
ipv6:
373+
address:
374+
- ip: 2001:db8::1
375+
prefix-length: 64
376+
- ip: fe80::1
377+
prefix-length: 64
378+
autoconf: false
379+
dhcp: false
380+
enabled: true
381+
routes:
382+
config: []
383+
running: []
384+
`)
385+
})
386+
It("should remove preferred-life-time and valid-life-time from address entries", func() {
387+
returnedState, err := filterOut(state)
388+
Expect(err).ToNot(HaveOccurred())
389+
Expect(returnedState).To(MatchYAML(filteredState))
390+
})
391+
})
328392
})

0 commit comments

Comments
 (0)