diff options
author | 2018-11-10 09:56:52 -0800 | |
---|---|---|
committer | 2018-11-20 01:50:58 -0800 | |
commit | 5026d1d89b05eac5e004279b742df6745a73d93a (patch) | |
tree | 8f9aed1e476706e008b746debda6d616bd0ac7a5 /internal/pkg/ovn/common.go | |
parent | 9506ae48eb545d502cc3685a99862740d28e7afb (diff) |
Seed code for the Plugin
The code includes ovn4nfvk8s Plugin & CNI. It implements multiple OVN
interfaces for Pods and assumes Multus (or similar CNI) calls its CNI
not as first CNI.
Change-Id: I524c1d18752eb6dbc8d34addd3b60d5bbaa06ff4
Signed-off-by: Ritu Sood <ritu.sood@intel.com>
Signed-off-by: Victor Morales <victor.morales@intel.com>
Diffstat (limited to 'internal/pkg/ovn/common.go')
-rw-r--r-- | internal/pkg/ovn/common.go | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/internal/pkg/ovn/common.go b/internal/pkg/ovn/common.go new file mode 100644 index 0000000..16923ea --- /dev/null +++ b/internal/pkg/ovn/common.go @@ -0,0 +1,89 @@ +package ovn + +import ( + "encoding/json" + "fmt" + "github.com/sirupsen/logrus" + "strings" +) + +func (oc *Controller) getIPFromOvnAnnotation(ovnAnnotation string) string { + if ovnAnnotation == "" { + return "" + } + + var ovnAnnotationMap map[string]string + err := json.Unmarshal([]byte(ovnAnnotation), &ovnAnnotationMap) + if err != nil { + logrus.Errorf("Error in json unmarshaling ovn annotation "+ + "(%v)", err) + return "" + } + + ipAddressMask := strings.Split(ovnAnnotationMap["ip_address"], "/") + if len(ipAddressMask) != 2 { + logrus.Errorf("Error in splitting ip address") + return "" + } + + return ipAddressMask[0] +} + +func (oc *Controller) getMacFromOvnAnnotation(ovnAnnotation string) string { + if ovnAnnotation == "" { + return "" + } + + var ovnAnnotationMap map[string]string + err := json.Unmarshal([]byte(ovnAnnotation), &ovnAnnotationMap) + if err != nil { + logrus.Errorf("Error in json unmarshaling ovn annotation "+ + "(%v)", err) + return "" + } + + return ovnAnnotationMap["mac_address"] +} + +func stringSliceMembership(slice []string, key string) bool { + for _, val := range slice { + if val == key { + return true + } + } + return false +} + +func (oc *Controller) getNetworkFromOvnAnnotation(ovnAnnotation string) string { + if ovnAnnotation == "" { + logrus.Errorf("getNetworkFromOvnAnnotation ovnAnnotation: %s", ovnAnnotation) + return "" + } + logrus.Infof("getNetworkFromOvnAnnotation ovnAnnotation: %s", ovnAnnotation) + + var ovnAnnotationMap map[string]string + err := json.Unmarshal([]byte(ovnAnnotation), &ovnAnnotationMap) + if err != nil { + logrus.Errorf("Error in json unmarshaling ovn annotation "+ + "(%v)", err) + return "" + } + for key, value := range ovnAnnotationMap { + logrus.Infof("getNetworkFromOvnAnnotation %s: %s", key, value) + } + return ovnAnnotationMap["name"] +} + +func (oc *Controller) parseOvnNetworkObject(ovnnetwork string) ([]map[string]interface{}, error) { + var ovnNet []map[string]interface{} + + if ovnnetwork == "" { + return nil, fmt.Errorf("parseOvnNetworkObject:error") + } + + if err := json.Unmarshal([]byte(ovnnetwork), &ovnNet); err != nil { + return nil, fmt.Errorf("parseOvnNetworkObject: failed to load ovn network err: %v | ovn network: %v", err, ovnnetwork) + } + + return ovnNet, nil +} |