Skip to content

Commit

Permalink
fix: check if provider network exists
Browse files Browse the repository at this point in the history
  • Loading branch information
oilbeater committed May 14, 2021
1 parent ced920a commit 33e0ec2
Showing 1 changed file with 24 additions and 1 deletion.
25 changes: 24 additions & 1 deletion pkg/daemon/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package daemon
import (
"context"
"fmt"
"k8s.io/apimachinery/pkg/labels"
"net/http"
"strings"
"time"
Expand Down Expand Up @@ -33,6 +34,19 @@ func createCniServerHandler(config *Configuration, controller *Controller) *cniS
return csh
}

func (csh cniServerHandler) providerExists(provider string) bool {
if provider == "" || strings.HasSuffix(provider, util.OvnProvider) {
return true
}
subnets, _ := csh.Controller.subnetsLister.List(labels.Everything())
for _, subnet := range subnets {
if subnet.Spec.Provider == provider {
return true
}
}
return false
}

func (csh cniServerHandler) handleAdd(req *restful.Request, resp *restful.Response) {
podRequest := request.CniRequest{}
if err := req.ReadEntity(&podRequest); err != nil {
Expand All @@ -44,6 +58,15 @@ func (csh cniServerHandler) handleAdd(req *restful.Request, resp *restful.Respon
return
}

if exist := csh.providerExists(podRequest.Provider); !exist {
errMsg := fmt.Errorf("provider %s not bind to any subnet", podRequest.Provider)
klog.Error(errMsg)
if err := resp.WriteHeaderAndEntity(http.StatusBadRequest, request.CniResponse{Err: errMsg.Error()}); err != nil {
klog.Errorf("failed to write response, %v", err)
}
return
}

klog.Infof("add port request %v", podRequest)
var macAddr, ip, ipAddr, cidr, gw, subnet, ingress, egress, vlanID, ifName string
var pod *v1.Pod
Expand Down Expand Up @@ -105,7 +128,7 @@ func (csh cniServerHandler) handleAdd(req *restful.Request, resp *restful.Respon
return
}

if strings.Contains(podRequest.Provider, util.OvnProvider) && subnet != "" {
if strings.HasSuffix(podRequest.Provider, util.OvnProvider) && subnet != "" {
klog.Infof("create container interface %s mac %s, ip %s, cidr %s, gw %s", ifName, macAddr, ipAddr, cidr, gw)
err := csh.configureNic(podRequest.PodName, podRequest.PodNamespace, podRequest.Provider, podRequest.NetNs, podRequest.ContainerID, ifName, macAddr, ipAddr, gw, ingress, egress, vlanID, podRequest.DeviceID)
if err != nil {
Expand Down

0 comments on commit 33e0ec2

Please sign in to comment.