diff --git a/docs/examples/all-ethernet-up/captured.yaml b/docs/examples/all-ethernet-up/captured.yaml new file mode 100644 index 00000000..dd1fd3fb --- /dev/null +++ b/docs/examples/all-ethernet-up/captured.yaml @@ -0,0 +1,46 @@ +ethernets: + metaInfo: + time: "2021-12-15T13:45:40Z" + version: "0" + state: + interfaces: + - accept-all-mac-addresses: false + lldp: + enabled: false + mac-address: 52:55:00:D1:55:02 + name: eth0 + state: up + type: ethernet + - accept-all-mac-addresses: false + lldp: + enabled: false + mac-address: 52:55:00:D1:56:02 + name: eth1 + state: down + type: ethernet +ethernets-up: + metaInfo: + time: "2021-12-15T13:45:40Z" + version: "0" + state: + interfaces: + - accept-all-mac-addresses: false + lldp: + enabled: false + mac-address: 52:55:00:D1:55:02 + name: eth0 + state: up + type: ethernet +ethernets-lldp: + metaInfo: + time: "2021-12-15T13:45:40Z" + version: "0" + state: + interfaces: + - accept-all-mac-addresses: false + lldp: + enabled: false + mac-address: 52:55:00:D1:55:02 + name: eth0 + state: up + type: ethernet diff --git a/docs/examples/all-ethernet-up/current.yaml b/docs/examples/all-ethernet-up/current.yaml new file mode 100644 index 00000000..1b4844f1 --- /dev/null +++ b/docs/examples/all-ethernet-up/current.yaml @@ -0,0 +1,15 @@ +interfaces: +- accept-all-mac-addresses: false + lldp: + enabled: false + mac-address: 52:55:00:D1:55:02 + name: eth0 + state: up + type: ethernet +- accept-all-mac-addresses: false + lldp: + enabled: false + mac-address: 52:55:00:D1:56:02 + name: eth1 + state: down + type: ethernet diff --git a/docs/examples/all-ethernet-up/generated.yaml b/docs/examples/all-ethernet-up/generated.yaml new file mode 100644 index 00000000..3c151ade --- /dev/null +++ b/docs/examples/all-ethernet-up/generated.yaml @@ -0,0 +1,8 @@ +interfaces: +- accept-all-mac-addresses: false + lldp: + enabled: true + mac-address: 52:55:00:D1:55:02 + name: eth0 + state: up + type: ethernet diff --git a/docs/examples/all-ethernet-up/policy.md b/docs/examples/all-ethernet-up/policy.md new file mode 100644 index 00000000..9d27dc97 --- /dev/null +++ b/docs/examples/all-ethernet-up/policy.md @@ -0,0 +1,9 @@ +{% raw %} +capture: + ethernets: interfaces.type=="ethernet" + ethernets-up: capture.ethernets.interfaces.state=="up" + ethernets-lldp: capture.ethernets-up | interfaces.lldp.enabled:=true + +desiredState: + interfaces: "{{ capture.ethernets-lldp.interfaces }}" +{% endraw %} diff --git a/nmpolicy/internal/resolver/resolver_test.go b/nmpolicy/internal/resolver/resolver_test.go index 8e490f05..4389e921 100644 --- a/nmpolicy/internal/resolver/resolver_test.go +++ b/nmpolicy/internal/resolver/resolver_test.go @@ -145,6 +145,7 @@ func TestFilter(t *testing.T) { testReplaceCapturedState(t) testReplaceWithCaptureRef(t) testReplaceOptionalField(t) + testFilterStateCaptureRef(t) }) } @@ -376,6 +377,101 @@ base-iface-routes: }) } +func testFilterStateCaptureRef(t *testing.T) { + t.Run("Replace boolean in filtered list with capture reference", func(t *testing.T) { + testToRun := test{ + capturedStatesCache: ` +ethernets: + state: + interfaces: + - name: eth1 + description: "1st ethernet interface" + type: ethernet + state: up + ipv4: + address: + - ip: 10.244.0.1 + prefix-length: 24 + - ip: 169.254.1.0 + prefix-length: 16 + dhcp: false + enabled: true + - name: eth2 + type: ethernet + state: down + ipv4: + address: + - ip: 1.2.3.4 + prefix-length: 24 + dhcp: false + enabled: false +`, + captureASTPool: ` +ethernets-up: + pos: 1 + eqfilter: + - pos: 2 + path: + - pos: 3 + identity: capture + - pos: 4 + identity: ethernets + - pos: 5 + path: + - pos: 6 + identity: interfaces + - pos: 7 + identity: state + - pos: 8 + string: up +`, + + expectedCapturedStates: ` +ethernets: + state: + interfaces: + - name: eth1 + description: "1st ethernet interface" + type: ethernet + state: up + ipv4: + address: + - ip: 10.244.0.1 + prefix-length: 24 + - ip: 169.254.1.0 + prefix-length: 16 + dhcp: false + enabled: true + - name: eth2 + type: ethernet + state: down + ipv4: + address: + - ip: 1.2.3.4 + prefix-length: 24 + dhcp: false + enabled: false +ethernets-up: + state: + interfaces: + - name: eth1 + description: "1st ethernet interface" + type: ethernet + state: up + ipv4: + address: + - ip: 10.244.0.1 + prefix-length: 24 + - ip: 169.254.1.0 + prefix-length: 16 + dhcp: false + enabled: true +`, + } + runTest(t, &testToRun) + }) +} + func testFilterCaptureRefWithoutCapturedState(t *testing.T) { t.Run("Filter list with capture reference", func(t *testing.T) { testToRun := test{