diff options
Diffstat (limited to 'internal/pkg/ovn/common.go')
-rw-r--r-- | internal/pkg/ovn/common.go | 65 |
1 files changed, 39 insertions, 26 deletions
diff --git a/internal/pkg/ovn/common.go b/internal/pkg/ovn/common.go index b504440..60cd202 100644 --- a/internal/pkg/ovn/common.go +++ b/internal/pkg/ovn/common.go @@ -3,69 +3,82 @@ package ovn import ( "encoding/json" "fmt" - "github.com/sirupsen/logrus" "math/big" "math/rand" "net" + logf "sigs.k8s.io/controller-runtime/pkg/runtime/log" + "strings" "time" ) -func SetupDistributedRouter(name string) error { +var log = logf.Log.WithName("ovn") - // Make sure br-int is created. - stdout, stderr, err := RunOVSVsctlUnix("--", "--may-exist", "add-br", "br-int") - if err != nil { - logrus.Errorf("Failed to create br-int, stdout: %q, stderr: %q, error: %v", stdout, stderr, err) - return err +func 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 +} + +func setupDistributedRouter(name string) error { + // Create a single common distributed router for the cluster. - stdout, stderr, err = RunOVNNbctlUnix("--", "--may-exist", "lr-add", name, "--", "set", "logical_router", name, "external_ids:ovn4nfv-cluster-router=yes") + stdout, stderr, err := RunOVNNbctl("--", "--may-exist", "lr-add", name, "--", "set", "logical_router", name, "external_ids:ovn4nfv-cluster-router=yes") if err != nil { - logrus.Errorf("Failed to create a single common distributed router for the cluster, stdout: %q, stderr: %q, error: %v", stdout, stderr, err) + log.Error(err, "Failed to create a single common distributed router for the cluster", "stdout", stdout, "stderr", stderr) return err } // Create a logical switch called "ovn4nfv-join" that will be used to connect gateway routers to the distributed router. // The "ovn4nfv-join" will be allocated IP addresses in the range 100.64.1.0/24. - stdout, stderr, err = RunOVNNbctlUnix("--may-exist", "ls-add", "ovn4nfv-join") + stdout, stderr, err = RunOVNNbctl("--may-exist", "ls-add", "ovn4nfv-join") if err != nil { - logrus.Errorf("Failed to create logical switch called \"ovn4nfv-join\", stdout: %q, stderr: %q, error: %v", stdout, stderr, err) + log.Error(err, "Failed to create logical switch called \"ovn4nfv-join\"", "stdout", stdout, "stderr", stderr) return err } // Connect the distributed router to "ovn4nfv-join". - routerMac, stderr, err := RunOVNNbctlUnix("--if-exist", "get", "logical_router_port", "rtoj-"+name, "mac") + routerMac, stderr, err := RunOVNNbctl("--if-exist", "get", "logical_router_port", "rtoj-"+name, "mac") if err != nil { - logrus.Errorf("Failed to get logical router port rtoj-%v, stderr: %q, error: %v", name, stderr, err) + log.Error(err, "Failed to get logical router port rtoj-", "name", name, "stdout", stdout, "stderr", stderr) return err } if routerMac == "" { routerMac = generateMac() - stdout, stderr, err = RunOVNNbctlUnix("--", "--may-exist", "lrp-add", name, "rtoj-"+name, routerMac, "100.64.1.1/24", "--", "set", "logical_router_port", "rtoj-"+name, "external_ids:connect_to_ovn4nfvjoin=yes") + stdout, stderr, err = RunOVNNbctl("--", "--may-exist", "lrp-add", name, "rtoj-"+name, routerMac, "100.64.1.1/24", "--", "set", "logical_router_port", "rtoj-"+name, "external_ids:connect_to_ovn4nfvjoin=yes") if err != nil { - logrus.Errorf("Failed to add logical router port rtoj-%v, stdout: %q, stderr: %q, error: %v", name, stdout, stderr, err) + log.Error(err, "Failed to add logical router port rtoj", "name", name, "stdout", stdout, "stderr", stderr) return err } } // Connect the switch "ovn4nfv-join" to the router. - stdout, stderr, err = RunOVNNbctlUnix("--", "--may-exist", "lsp-add", "ovn4nfv-join", "jtor-"+name, "--", "set", "logical_switch_port", "jtor-"+name, "type=router", "options:router-port=rtoj-"+name, "addresses="+"\""+routerMac+"\"") + stdout, stderr, err = RunOVNNbctl("--", "--may-exist", "lsp-add", "ovn4nfv-join", "jtor-"+name, "--", "set", "logical_switch_port", "jtor-"+name, "type=router", "options:router-port=rtoj-"+name, "addresses="+"\""+routerMac+"\"") if err != nil { - logrus.Errorf("Failed to add logical switch port to logical router, stdout: %q, stderr: %q, error: %v", stdout, stderr, err) + log.Error(err, "Failed to add logical switch port to logical router", "stdout", stdout, "stderr", stderr) return err } return nil } -func parseOvnNetworkObject(ovnnetwork string) ([]map[string]interface{}, error) { - var ovnNet []map[string]interface{} - - if ovnnetwork == "" { - return nil, fmt.Errorf("parseOvnNetworkObject:error") +// Find if switch exists +func findLogicalSwitch(name string) bool { + // get logical switch from OVN + output, stderr, err := RunOVNNbctl("--data=bare", "--no-heading", + "--columns=name", "find", "logical_switch", "name="+name) + if err != nil { + log.Error(err, "Error in obtaining list of logical switch", "stderr", stderr) + return false } - 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) + if strings.Compare(name, output) == 0 { + return true } - - return ovnNet, nil + return false } // generateMac generates mac address. |