From b4bfb22c26937904292e47ae027bf1916ea0300d Mon Sep 17 00:00:00 2001 From: Ruslan Bayandinov Date: Wed, 11 Jan 2023 05:58:40 +0000 Subject: [PATCH 1/3] remove duplicated IPAM code Signed-off-by: Ruslan Bayandinov --- go.mod | 2 +- go.sum | 4 ++-- internal/pkg/config/config.go | 6 ++++-- internal/pkg/imports/imports_linux.go | 4 ++-- main.go | 23 ++++------------------- 5 files changed, 13 insertions(+), 26 deletions(-) diff --git a/go.mod b/go.mod index 62a0cb2..c244cfe 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/kelseyhightower/envconfig v1.4.0 github.com/networkservicemesh/api v1.6.2-0.20221205183940-84c7ff837cdd - github.com/networkservicemesh/sdk v0.5.1-0.20221229093003-75d6d5d1c617 + github.com/networkservicemesh/sdk v0.5.1-0.20230109230417-1492e69a650d github.com/pkg/errors v0.9.1 github.com/sirupsen/logrus v1.9.0 github.com/spiffe/go-spiffe/v2 v2.0.0 diff --git a/go.sum b/go.sum index 2f86a13..f93e584 100644 --- a/go.sum +++ b/go.sum @@ -193,8 +193,8 @@ github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182aff github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= github.com/networkservicemesh/api v1.6.2-0.20221205183940-84c7ff837cdd h1:26HR90HrJFZHIPPP3SCLGNRpPCMFoEnSSZfhHH8MPSo= github.com/networkservicemesh/api v1.6.2-0.20221205183940-84c7ff837cdd/go.mod h1:hOF2844BSstH1311oDMDgqqXS+kdc77htZNPRKl9mf8= -github.com/networkservicemesh/sdk v0.5.1-0.20221229093003-75d6d5d1c617 h1:icUm4c2okUrtNtz1iTU0iyE9CU6U6uLlg44Xu87+E3M= -github.com/networkservicemesh/sdk v0.5.1-0.20221229093003-75d6d5d1c617/go.mod h1:++MSpR2wuFlCpCYoR6lELxJ4ILKd650vDQ8d9CtGAzA= +github.com/networkservicemesh/sdk v0.5.1-0.20230109230417-1492e69a650d h1:1EhczRkzfkutymvDj5XYinD68omLpFk2F2kJdhzYG+U= +github.com/networkservicemesh/sdk v0.5.1-0.20230109230417-1492e69a650d/go.mod h1:++MSpR2wuFlCpCYoR6lELxJ4ILKd650vDQ8d9CtGAzA= github.com/open-policy-agent/opa v0.44.0 h1:sEZthsrWBqIN+ShTMJ0Hcz6a3GkYsY4FaB2S/ou2hZk= github.com/open-policy-agent/opa v0.44.0/go.mod h1:YpJaFIk5pq89n/k72c1lVvfvR5uopdJft2tMg1CW/yU= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/internal/pkg/config/config.go b/internal/pkg/config/config.go index 0803d21..f7f3332 100644 --- a/internal/pkg/config/config.go +++ b/internal/pkg/config/config.go @@ -1,4 +1,4 @@ -// Copyright (c) 2021-2022 Nordix Foundation. +// Copyright (c) 2021-2023 Nordix Foundation. // // SPDX-License-Identifier: Apache-2.0 // @@ -25,6 +25,8 @@ import ( "github.com/kelseyhightower/envconfig" "github.com/pkg/errors" + + "github.com/networkservicemesh/sdk/pkg/tools/cidr" ) const ( @@ -42,7 +44,7 @@ type Config struct { ConnectTo url.URL `default:"nsm-registry-svc:5002" desc:"url of registry service to connect to" split_words:"true"` MaxTokenLifetime time.Duration `default:"24h" desc:"maximum lifetime of tokens" split_words:"true"` RegistryClientPolicies []string `default:"etc/nsm/opa/common/.*.rego,etc/nsm/opa/registry/.*.rego,etc/nsm/opa/client/.*.rego" desc:"paths to files and directories that contain registry client policies" split_words:"true"` - CidrPrefix []string `default:"169.254.0.0/16" desc:"CIDR Prefix to assign IPs (IPv4 and/or IPv6) from" split_words:"true"` + CidrPrefix cidr.Groups `default:"169.254.0.0/16" desc:"CIDR Prefix to assign IPs (IPv4 and/or IPv6) from" split_words:"true"` RegisterService bool `default:"true" desc:"if true then registers network service on startup" split_words:"true"` ListenOn url.URL `default:"tcp://:5003" desc:"tcp:// url to be listen on. It will be used as public to register NSM" split_words:"true"` OpenTelemetryEndpoint string `default:"otel-collector.observability.svc.cluster.local:4317" desc:"OpenTelemetry Collector Endpoint"` diff --git a/internal/pkg/imports/imports_linux.go b/internal/pkg/imports/imports_linux.go index c53d0fe..dbd6608 100644 --- a/internal/pkg/imports/imports_linux.go +++ b/internal/pkg/imports/imports_linux.go @@ -17,13 +17,13 @@ import ( _ "github.com/networkservicemesh/sdk/pkg/networkservice/common/mechanisms" _ "github.com/networkservicemesh/sdk/pkg/networkservice/common/mechanisms/recvfd" _ "github.com/networkservicemesh/sdk/pkg/networkservice/common/mechanisms/sendfd" - _ "github.com/networkservicemesh/sdk/pkg/networkservice/core/chain" _ "github.com/networkservicemesh/sdk/pkg/networkservice/core/next" - _ "github.com/networkservicemesh/sdk/pkg/networkservice/ipam/singlepointipam" + _ "github.com/networkservicemesh/sdk/pkg/networkservice/ipam/groupipam" _ "github.com/networkservicemesh/sdk/pkg/registry/chains/client" _ "github.com/networkservicemesh/sdk/pkg/registry/common/authorize" _ "github.com/networkservicemesh/sdk/pkg/registry/common/clientinfo" _ "github.com/networkservicemesh/sdk/pkg/registry/common/sendfd" + _ "github.com/networkservicemesh/sdk/pkg/tools/cidr" _ "github.com/networkservicemesh/sdk/pkg/tools/debug" _ "github.com/networkservicemesh/sdk/pkg/tools/grpcutils" _ "github.com/networkservicemesh/sdk/pkg/tools/listenonurl" diff --git a/main.go b/main.go index 500c4c4..176d2c8 100644 --- a/main.go +++ b/main.go @@ -1,5 +1,5 @@ -// Copyright (c) 2021-2022 Doc.ai and/or its affiliates. -// Copyright (c) 2021-2022 Nordix and/or its affiliates. +// Copyright (c) 2021-2023 Doc.ai and/or its affiliates. +// Copyright (c) 2021-2023 Nordix and/or its affiliates. // // SPDX-License-Identifier: Apache-2.0 // @@ -26,7 +26,6 @@ import ( "net/url" "os" "os/signal" - "strings" "syscall" "time" @@ -48,8 +47,7 @@ import ( "github.com/networkservicemesh/sdk/pkg/networkservice/common/mechanisms" "github.com/networkservicemesh/sdk/pkg/networkservice/common/mechanisms/recvfd" "github.com/networkservicemesh/sdk/pkg/networkservice/common/mechanisms/sendfd" - "github.com/networkservicemesh/sdk/pkg/networkservice/core/chain" - "github.com/networkservicemesh/sdk/pkg/networkservice/ipam/singlepointipam" + "github.com/networkservicemesh/sdk/pkg/networkservice/ipam/groupipam" registryclient "github.com/networkservicemesh/sdk/pkg/registry/chains/client" registryauthorize "github.com/networkservicemesh/sdk/pkg/registry/common/authorize" "github.com/networkservicemesh/sdk/pkg/registry/common/clientinfo" @@ -157,7 +155,7 @@ func main() { log.FromContext(ctx).Infof("executing phase 3: parsing network prefixes for ipam") // ******************************************************************************** - ipamChain := getIPAMChain(ctx, cfg.CidrPrefix) + ipamChain := groupipam.NewServer(cfg.CidrPrefix) log.FromContext(ctx).Infof("network prefixes parsed successfully") @@ -314,16 +312,3 @@ func genPublishableURL(listenOn *url.URL, logger log.Logger) *url.URL { } return listenonurl.GetPublicURL(addrs, listenOn) } - -func getIPAMChain(ctx context.Context, cIDRs []string) networkservice.NetworkServiceServer { - var ipamchain []networkservice.NetworkServiceServer - for _, cidr := range cIDRs { - var parseErr error - _, ipNet, parseErr := net.ParseCIDR(strings.TrimSpace(cidr)) - if parseErr != nil { - log.FromContext(ctx).Fatalf("Could not parse CIDR %s; %+v", cidr, parseErr) - } - ipamchain = append(ipamchain, singlepointipam.NewServer(ipNet)) - } - return chain.NewNetworkServiceServer(ipamchain...) -} From 6e64ee9a2bebb1b3ed14672499bd02e53ebf1a9f Mon Sep 17 00:00:00 2001 From: Ruslan Bayandinov Date: Wed, 11 Jan 2023 12:42:28 +0000 Subject: [PATCH 2/3] fix ipam chain Signed-off-by: Ruslan Bayandinov --- main.go | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/main.go b/main.go index 176d2c8..dbaf786 100644 --- a/main.go +++ b/main.go @@ -48,6 +48,7 @@ import ( "github.com/networkservicemesh/sdk/pkg/networkservice/common/mechanisms/recvfd" "github.com/networkservicemesh/sdk/pkg/networkservice/common/mechanisms/sendfd" "github.com/networkservicemesh/sdk/pkg/networkservice/ipam/groupipam" + "github.com/networkservicemesh/sdk/pkg/networkservice/ipam/singlepointipam" registryclient "github.com/networkservicemesh/sdk/pkg/registry/chains/client" registryauthorize "github.com/networkservicemesh/sdk/pkg/registry/common/authorize" "github.com/networkservicemesh/sdk/pkg/registry/common/clientinfo" @@ -95,10 +96,9 @@ func main() { logger.Infof("the phases include:") logger.Infof("1: get config from environment") logger.Infof("2: retrieve spiffe svid") - logger.Infof("3: parse network prefixes for ipam") - logger.Infof("4: create network service endpoint") - logger.Infof("5: create grpc server and register the server") - logger.Infof("6: register nse with nsm") + logger.Infof("3: create network service endpoint") + logger.Infof("4: create grpc server and register the server") + logger.Infof("5: register nse with nsm") logger.Infof("a final success message with start time duration") starttime := time.Now() @@ -110,6 +110,10 @@ func main() { logrus.Fatal(err.Error()) } + if len(cfg.CidrPrefix) != 1 { + logrus.Fatal("Only one CIDR prefix group expected") + } + l, errLog := logrus.ParseLevel(cfg.LogLevel) if errLog != nil { logrus.Fatalf("invalid log level %s", cfg.LogLevel) @@ -152,22 +156,14 @@ func main() { tlsServerConfig.MinVersion = tls.VersionTLS12 // ******************************************************************************** - log.FromContext(ctx).Infof("executing phase 3: parsing network prefixes for ipam") - // ******************************************************************************** - - ipamChain := groupipam.NewServer(cfg.CidrPrefix) - - log.FromContext(ctx).Infof("network prefixes parsed successfully") - - // ******************************************************************************** - logger.Infof("executing phase 4: create network service endpoint") + logger.Infof("executing phase 3: create network service endpoint") // ******************************************************************************** responderEndpoint := endpoint.NewServer(ctx, spiffejwt.TokenGeneratorFunc(source, cfg.MaxTokenLifetime), endpoint.WithName(cfg.Name), endpoint.WithAuthorizeServer(authorize.NewServer()), endpoint.WithAdditionalFunctionality( - ipamChain, + groupipam.NewServer(cfg.CidrPrefix, groupipam.WithCustomIPAMServer(singlepointipam.NewServer)), recvfd.NewServer(), mechanisms.NewServer(map[string]networkservice.NetworkServiceServer{ vlanmech.MECHANISM: vlanmapserver.NewServer(cfg), @@ -175,7 +171,7 @@ func main() { sendfd.NewServer())) // ******************************************************************************** - logger.Infof("executing phase 5: create grpc server and register the server") + logger.Infof("executing phase 4: create grpc server and register the server") // ******************************************************************************** serverCreds := grpc.Creds( grpcfd.TransportCredentials( @@ -198,7 +194,7 @@ func main() { logger.Infof("grpc server started") // ******************************************************************************** - logger.Infof("executing phase 6: register nse with nsm") + logger.Infof("executing phase 5: register nse with nsm") // ******************************************************************************** clientOptions := append( From d34f7dcac7cde09d7a4e313c5f8cd84e81b5f1fd Mon Sep 17 00:00:00 2001 From: Ruslan Bayandinov Date: Wed, 11 Jan 2023 12:45:26 +0000 Subject: [PATCH 3/3] fix generated imports Signed-off-by: Ruslan Bayandinov --- internal/pkg/imports/imports_linux.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/pkg/imports/imports_linux.go b/internal/pkg/imports/imports_linux.go index dbd6608..b930af6 100644 --- a/internal/pkg/imports/imports_linux.go +++ b/internal/pkg/imports/imports_linux.go @@ -19,6 +19,7 @@ import ( _ "github.com/networkservicemesh/sdk/pkg/networkservice/common/mechanisms/sendfd" _ "github.com/networkservicemesh/sdk/pkg/networkservice/core/next" _ "github.com/networkservicemesh/sdk/pkg/networkservice/ipam/groupipam" + _ "github.com/networkservicemesh/sdk/pkg/networkservice/ipam/singlepointipam" _ "github.com/networkservicemesh/sdk/pkg/registry/chains/client" _ "github.com/networkservicemesh/sdk/pkg/registry/common/authorize" _ "github.com/networkservicemesh/sdk/pkg/registry/common/clientinfo"