From 5a0fd63c81a14727e141755244e67887f7758743 Mon Sep 17 00:00:00 2001 From: Serge Logvinov Date: Wed, 16 Feb 2022 18:59:16 +0000 Subject: [PATCH] fix: determine openstack interface IP correctly netaddr.Netmask changes the source ip to net clean subnet: 10.1.2.3/24 -> 10.1.2.0/24 Signed-off-by: Serge Logvinov Signed-off-by: Andrey Smirnov --- .../v1alpha1/platform/openstack/openstack.go | 12 +++--- .../platform/openstack/openstack_test.go | 6 +-- .../openstack/{ => testdata}/expected.yaml | 40 +++++++++++++++---- .../openstack/{ => testdata}/metadata.json | 0 .../openstack/{ => testdata}/network.json | 34 +++++++++++----- 5 files changed, 64 insertions(+), 28 deletions(-) rename internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/{ => testdata}/expected.yaml (71%) rename internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/{ => testdata}/metadata.json (100%) rename internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/{ => testdata}/network.json (75%) diff --git a/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/openstack.go b/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/openstack.go index 06809c17d5..dbb3beaad3 100644 --- a/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/openstack.go +++ b/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/openstack.go @@ -9,6 +9,7 @@ import ( "context" stderrors "errors" "fmt" + "net" "strconv" "strings" @@ -120,17 +121,14 @@ func (o *Openstack) ParseMetadata(unmarshalledMetadataConfig *MetadataConfig, un bits, err := strconv.Atoi(ntwrk.Netmask) if err != nil { - maskIP, err := netaddr.ParseIP(ntwrk.Netmask) + netmask, err := netaddr.ParseIP(ntwrk.Netmask) if err != nil { return nil, err } - mask, _ := maskIP.MarshalBinary() //nolint:errcheck // never fails - - ipPrefix, err = ip.Netmask(mask) - if err != nil { - return nil, err - } + mask, _ := netmask.MarshalBinary() //nolint:errcheck // never fails + ones, _ := net.IPMask(mask).Size() + ipPrefix = netaddr.IPPrefixFrom(ip, uint8(ones)) } else { ipPrefix = netaddr.IPPrefixFrom(ip, uint8(bits)) } diff --git a/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/openstack_test.go b/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/openstack_test.go index c342d6c8eb..52ee6362e1 100644 --- a/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/openstack_test.go +++ b/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/openstack_test.go @@ -17,13 +17,13 @@ import ( "github.com/talos-systems/talos/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack" ) -//go:embed metadata.json +//go:embed testdata/metadata.json var rawMetadata []byte -//go:embed network.json +//go:embed testdata/network.json var rawNetwork []byte -//go:embed expected.yaml +//go:embed testdata/expected.yaml var expectedNetworkConfig string func TestParseMetadata(t *testing.T) { diff --git a/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/expected.yaml b/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/testdata/expected.yaml similarity index 71% rename from internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/expected.yaml rename to internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/testdata/expected.yaml index 9869635c8e..038e09c3f3 100644 --- a/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/expected.yaml +++ b/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/testdata/expected.yaml @@ -5,7 +5,13 @@ addresses: scope: global flags: permanent layer: platform - - address: 2000:0:ff00::/56 + - address: 10.184.0.244/20 + linkName: eth1 + family: inet4 + scope: global + flags: permanent + layer: platform + - address: 2001:db8::3257:9652/64 linkName: eth1 family: inet6 scope: global @@ -51,10 +57,34 @@ routes: flags: "" protocol: static layer: platform + - family: inet4 + dst: 192.168.0.0/16 + src: "" + gateway: 10.184.0.1 + outLinkName: eth1 + table: main + priority: 1024 + scope: global + type: unicast + flags: "" + protocol: static + layer: platform + - family: inet4 + dst: "" + src: "" + gateway: 10.184.0.1 + outLinkName: eth1 + table: main + priority: 1024 + scope: global + type: unicast + flags: "" + protocol: static + layer: platform - family: inet6 dst: "" src: "" - gateway: '2000:0:ff00::' + gateway: fd00::1 outLinkName: eth1 table: main priority: 1024 @@ -80,11 +110,5 @@ operators: dhcp4: routeMetric: 1024 layer: platform - - operator: dhcp4 - linkName: eth1 - requireUp: true - dhcp4: - routeMetric: 1024 - layer: platform externalIPs: - 1.2.3.4 diff --git a/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/metadata.json b/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/testdata/metadata.json similarity index 100% rename from internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/metadata.json rename to internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/testdata/metadata.json diff --git a/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/network.json b/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/testdata/network.json similarity index 75% rename from internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/network.json rename to internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/testdata/network.json index cb76f7c41d..bb8f7e76d2 100644 --- a/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/network.json +++ b/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/testdata/network.json @@ -44,22 +44,36 @@ "id": "privatnet-ipv4", "link": "aae16046-6c74-4f33-acf2-a16e9ab093ec", "network_id": "66374c4d-5123-4f11-8fa9-8a6dea2b4fe7", - "type": "ipv4_dhcp" + "type": "ipv4", + "ip_address": "10.184.0.244", + "netmask": "255.255.240.0", + "routes": [ + { + "network": "192.168.0.0", + "netmask": "255.255.0.0", + "gateway": "10.184.0.1" + }, + { + "network": "0.0.0.0", + "netmask": "0.0.0.0", + "gateway": "10.184.0.1" + } + ] }, { + "id": "privatnet-ipv6", + "link": "aae16046-6c74-4f33-acf2-a16e9ab093ec", + "network_id": "66374c4d-5123-4f11-8fa9-8a6dea2b4fe7", + "type": "ipv6", + "ip_address": "2001:db8::3257:9652", + "netmask": "ffff:ffff:ffff:ffff::", "routes": [ { "network": "::", "netmask": "::", - "gateway": "2000:0:ff00::" + "gateway": "fd00::1" } - ], - "id": "privatnet-ipv6", - "link": "aae16046-6c74-4f33-acf2-a16e9ab093ec", - "ip_address": "2000:0:ff00::1", - "netmask": "ffff:ffff:ffff:ff00::", - "network_id": "66374c4d-5123-4f11-8fa9-8a6dea2b4fe7", - "type": "ipv6" + ] } ], "services": [ @@ -72,4 +86,4 @@ "type": "dns" } ] -} +} \ No newline at end of file