diff --git a/pkg/k8s/multus.go b/pkg/k8s/multus.go index a22083f..407150c 100644 --- a/pkg/k8s/multus.go +++ b/pkg/k8s/multus.go @@ -31,6 +31,10 @@ import ( type dnsIf interface{} +type networkList struct { + Name string `json:"name"` +} + type networkStatus struct { Name string `json:"name"` Iface string `json:"interface"` @@ -44,6 +48,16 @@ func GetMultusNetworkName(ns, name string) string { return strings.Join([]string{ns, name}, "/") } +func UnmarshalNetworkList(ns string) ([]networkList, error) { + data := []networkList{} + err := json.Unmarshal([]byte(ns), &data) + if err != nil { + return data, err + } + + return data, nil +} + func UnmarshalNetworkStatus(ns string) ([]networkStatus, error) { data := []networkStatus{} err := json.Unmarshal([]byte(ns), &data) @@ -96,6 +110,11 @@ func GetMultusEndpoints(kubeClient clientset.Interface, svc *corev1.Service, net continue } + podNetList, err := UnmarshalNetworkList(multusNetworkListStr) + if err != nil { + podNetList = []networkList{{Name: multusNetworkListStr}} + } + networkStatusListStr, ok := pod.Annotations["k8s.v1.cni.cncf.io/network-status"] if !ok { return epList, errors.New("net found k8s.v1.cni.cncf.io/network-status annotation") @@ -106,13 +125,12 @@ func GetMultusEndpoints(kubeClient clientset.Interface, svc *corev1.Service, net return epList, err } - multusNetworkList := strings.Split(multusNetworkListStr, ",") - for _, mNet := range multusNetworkList { - if !contain(netList, mNet) { + for _, mNet := range podNetList { + if !contain(netList, mNet.Name) { continue } - netName := GetMultusNetworkName(pod.Namespace, mNet) + netName := GetMultusNetworkName(pod.Namespace, mNet.Name) for _, ns := range networkStatusList { if ns.Name == netName { if len(ns.Ips) > 0 {