From 08a2623b8e8aee807789a93d8cc85dbf77e8b580 Mon Sep 17 00:00:00 2001 From: maximshd <38096369+maximshd@users.noreply.github.com> Date: Wed, 20 Mar 2019 14:08:48 +0200 Subject: [PATCH] Properly initialize kubeClient in SetNetworkStatus method (#283) * Properly initialize kubeClient in SetNetworkStatus method * Fix typo * Update error message * Extend logging for setNetworkStatus function --- k8sclient/k8sclient.go | 17 +++++++++++++++-- multus/multus.go | 4 ++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/k8sclient/k8sclient.go b/k8sclient/k8sclient.go index 435ce2ce9..69d3218bb 100644 --- a/k8sclient/k8sclient.go +++ b/k8sclient/k8sclient.go @@ -81,9 +81,22 @@ func setKubeClientInfo(c *clientInfo, client KubeClient, k8sArgs *types.K8sArgs) c.Podname = string(k8sArgs.K8S_POD_NAME) } -func SetNetworkStatus(client KubeClient, k8sArgs *types.K8sArgs, netStatus []*types.NetworkStatus) error { +func SetNetworkStatus(client KubeClient, k8sArgs *types.K8sArgs, netStatus []*types.NetworkStatus, conf *types.NetConf) error { + logging.Debugf("SetNetworkStatus: %v, %v, %v, %v", client, k8sArgs, netStatus, conf) + + client, err := GetK8sClient(conf.Kubeconfig, client) + if err != nil { + return logging.Errorf("SetNetworkStatus: %v", err) + } + if client == nil { + if len(conf.Delegates) == 0 { + // No available kube client and no delegates, we can't do anything + return logging.Errorf("must have either Kubernetes config or delegates, refer to Multus documentation for usage instructions") + } + logging.Debugf("SetNetworkStatus: kube client info is not defined, skip network status setup") + return nil + } - logging.Debugf("SetNetworkStatus: %v, %v, %v", client, k8sArgs, netStatus) podName := string(k8sArgs.K8S_POD_NAME) podNamespace := string(k8sArgs.K8S_POD_NAMESPACE) pod, err := client.GetPod(podNamespace, podName) diff --git a/multus/multus.go b/multus/multus.go index 6df458438..b3c4f3484 100644 --- a/multus/multus.go +++ b/multus/multus.go @@ -393,7 +393,7 @@ func cmdAdd(args *skel.CmdArgs, exec invoke.Exec, kubeClient k8s.KubeClient) (cn //set the network status annotation in apiserver, only in case Multus as kubeconfig if n.Kubeconfig != "" && kc != nil { if !types.CheckSystemNamespaces(kc.Podnamespace, n.SystemNamespaces) { - err = k8s.SetNetworkStatus(kubeClient, k8sArgs, netStatus) + err = k8s.SetNetworkStatus(kubeClient, k8sArgs, netStatus, n) if err != nil { return nil, logging.Errorf("Multus: Err set the networks status: %v", err) } @@ -486,7 +486,7 @@ func cmdDel(args *skel.CmdArgs, exec invoke.Exec, kubeClient k8s.KubeClient) err // unset the network status annotation in apiserver, only in case Multus as kubeconfig if in.Kubeconfig != "" { if !types.CheckSystemNamespaces(string(k8sArgs.K8S_POD_NAMESPACE), in.SystemNamespaces) { - err := k8s.SetNetworkStatus(kubeClient, k8sArgs, nil) + err := k8s.SetNetworkStatus(kubeClient, k8sArgs, nil, in) if err != nil { // error happen but continue to delete logging.Errorf("Multus: Err unset the networks status: %v", err)