diff options
Diffstat (limited to 'internal/pkg/nfnNotify/server.go')
-rw-r--r-- | internal/pkg/nfnNotify/server.go | 71 |
1 files changed, 63 insertions, 8 deletions
diff --git a/internal/pkg/nfnNotify/server.go b/internal/pkg/nfnNotify/server.go index 6ec4a98..ac22d68 100644 --- a/internal/pkg/nfnNotify/server.go +++ b/internal/pkg/nfnNotify/server.go @@ -2,17 +2,18 @@ package nfn import ( "fmt" - "google.golang.org/grpc" - "google.golang.org/grpc/reflection" "net" pb "ovn4nfv-k8s-plugin/internal/pkg/nfnNotify/proto" v1alpha1 "ovn4nfv-k8s-plugin/pkg/apis/k8s/v1alpha1" - logf "sigs.k8s.io/controller-runtime/pkg/runtime/log" + clientset "ovn4nfv-k8s-plugin/pkg/generated/clientset/versioned" "strings" + + "google.golang.org/grpc" + "google.golang.org/grpc/reflection" "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" - clientset "ovn4nfv-k8s-plugin/pkg/generated/clientset/versioned" + logf "sigs.k8s.io/controller-runtime/pkg/runtime/log" ) var log = logf.Log.WithName("rpc-server") @@ -90,7 +91,7 @@ func updatePnStatus(pn *v1alpha1.ProviderNetwork, status string) error { return err } -func createMsg(pn *v1alpha1.ProviderNetwork) pb.Notification { +func createVlanMsg(pn *v1alpha1.ProviderNetwork) pb.Notification { msg := pb.Notification{ CniType: "ovn4nfv", Payload: &pb.Notification_ProviderNwCreate{ @@ -107,7 +108,7 @@ func createMsg(pn *v1alpha1.ProviderNetwork) pb.Notification { return msg } -func deleteMsg(pn *v1alpha1.ProviderNetwork) pb.Notification { +func deleteVlanMsg(pn *v1alpha1.ProviderNetwork) pb.Notification { msg := pb.Notification{ CniType: "ovn4nfv", Payload: &pb.Notification_ProviderNwRemove{ @@ -120,6 +121,34 @@ func deleteMsg(pn *v1alpha1.ProviderNetwork) pb.Notification { return msg } +func createDirectMsg(pn *v1alpha1.ProviderNetwork) pb.Notification { + msg := pb.Notification{ + CniType: "ovn4nfv", + Payload: &pb.Notification_ProviderNwCreate{ + ProviderNwCreate: &pb.ProviderNetworkCreate{ + ProviderNwName: pn.Name, + Direct: &pb.DirectInfo{ + ProviderIntf: pn.Spec.Direct.ProviderInterfaceName, + }, + }, + }, + } + return msg +} + +func deleteDirectMsg(pn *v1alpha1.ProviderNetwork) pb.Notification { + msg := pb.Notification{ + CniType: "ovn4nfv", + Payload: &pb.Notification_ProviderNwRemove{ + ProviderNwRemove: &pb.ProviderNetworkRemove{ + ProviderNwName: pn.Name, + DirectProviderIntf: pn.Spec.Direct.ProviderInterfaceName, + }, + }, + } + return msg +} + //SendNotif to client func SendNotif(pn *v1alpha1.ProviderNetwork, msgType string, nodeReq string) error { var msg pb.Notification @@ -130,9 +159,9 @@ func SendNotif(pn *v1alpha1.ProviderNetwork, msgType string, nodeReq string) err switch { case pn.Spec.ProviderNetType == "VLAN": if msgType == "create" { - msg = createMsg(pn) + msg = createVlanMsg(pn) } else if msgType == "delete" { - msg = deleteMsg(pn) + msg = deleteVlanMsg(pn) } if strings.EqualFold(pn.Spec.Vlan.VlanNodeSelector, "SPECIFIC") { for _, label := range pn.Spec.Vlan.NodeLabelList { @@ -154,6 +183,32 @@ func SendNotif(pn *v1alpha1.ProviderNetwork, msgType string, nodeReq string) err } } } + case pn.Spec.ProviderNetType == "DIRECT": + if msgType == "create" { + msg = createDirectMsg(pn) + } else if msgType == "delete" { + msg = deleteDirectMsg(pn) + } + if strings.EqualFold(pn.Spec.Direct.DirectNodeSelector, "SPECIFIC") { + for _, label := range pn.Spec.Direct.NodeLabelList { + l := strings.Split(label, "=") + if len(l) == 0 { + log.Error(fmt.Errorf("Syntax error label: %v", label), "NodeListIterator") + return nil + } + } + labels := strings.Join(pn.Spec.Direct.NodeLabelList[:], ",") + err = sendMsg(msg, labels, "specific", nodeReq) + } else if strings.EqualFold(pn.Spec.Direct.DirectNodeSelector, "ALL") { + err = sendMsg(msg, "", "all", nodeReq) + } else if strings.EqualFold(pn.Spec.Direct.DirectNodeSelector, "ANY") { + if pn.Status.State != v1alpha1.Created { + err = sendMsg(msg, "", "any", nodeReq) + if err == nil { + updatePnStatus(pn, v1alpha1.Created) + } + } + } default: return fmt.Errorf("Unsupported Provider Network type") } |