Skip to content

Commit

Permalink
Add helper function to create and query UUID of new LSP.
Browse files Browse the repository at this point in the history
Signed-off-by: Dumitru Ceara <dceara@redhat.com>
  • Loading branch information
dceara committed Dec 21, 2020
1 parent c97eff0 commit c21cce7
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 25 deletions.
49 changes: 28 additions & 21 deletions go-controller/pkg/ovn/master.go
Expand Up @@ -471,6 +471,31 @@ func (oc *Controller) SetupMaster(masterNodeName string) error {
return nil
}

func addNodeLogicalSwitchPort(logicalSwitch, portName, portType, addresses, options string) (string, error) {
stdout, stderr, err := util.RunOVNNbctl("--", "--may-exist", "lsp-add", logicalSwitch, portName,
"--", "lsp-set-type", portName, portType,
"--", "lsp-set-options", portName, options,
"--", "lsp-set-addresses", portName, addresses)
if err != nil {
klog.Errorf("Failed to add logical port %s to switch %s, stdout: %q, stderr: %q, error: %v", portName, logicalSwitch, stdout, stderr, err)
return "", err
}

// UUID must be retrieved separately from the lsp-add transaction since
// (as of OVN 2.12) a bogus UUID is returned if they are part of the same
// transaction.
uuid, stderr, err := util.RunOVNNbctl("get", "logical_switch_port", portName, "_uuid")
if err != nil {
klog.Errorf("Error getting UUID for logical port %s "+
"stdout: %q, stderr: %q (%v)", portName, uuid, stderr, err)
return "", err
}
if uuid == "" {
return uuid, fmt.Errorf("invalid logical port %s uuid", portName)
}
return uuid, nil
}

func (oc *Controller) syncNodeManagementPort(node *kapi.Node, hostSubnets []*net.IPNet) error {
macAddress, err := util.ParseNodeManagementPortMACAddress(node)
if err != nil {
Expand Down Expand Up @@ -512,27 +537,10 @@ func (oc *Controller) syncNodeManagementPort(node *kapi.Node, hostSubnets []*net

// Create this node's management logical port on the node switch
portName := types.K8sPrefix + node.Name
stdout, stderr, err := util.RunOVNNbctl(
"--", "--may-exist", "lsp-add", node.Name, portName,
"--", "lsp-set-addresses", portName, addresses)
if err != nil {
klog.Errorf("Failed to add logical port to switch, stdout: %q, stderr: %q, error: %v",
stdout, stderr, err)
return err
}

// UUID must be retrieved separately from the lsp-add transaction since
// (as of OVN 2.12) a bogus UUID is returned if they are part of the same
// transaction.
uuid, stderr, err := util.RunOVNNbctl("get", "logical_switch_port", portName, "_uuid")
uuid, err := addNodeLogicalSwitchPort(node.Name, portName, "", addresses, "")
if err != nil {
klog.Errorf("Error getting UUID for logical port %s "+
"stdout: %q, stderr: %q (%v)", portName, uuid, stderr, err)
return err
}
if uuid == "" {
return fmt.Errorf("invalid logical port %s uuid %q", portName, uuid)
}

if err := addToPortGroup(clusterPortGroupName, &lpInfo{
uuid: uuid,
Expand Down Expand Up @@ -715,9 +723,8 @@ func (oc *Controller) ensureNodeLogicalNetwork(nodeName string, hostSubnets []*n
}

// Connect the switch to the router.
stdout, stderr, err = util.RunOVNNbctl("--", "--may-exist", "lsp-add", nodeName, types.SwitchToRouterPrefix+nodeName,
"--", "set", "logical_switch_port", types.SwitchToRouterPrefix+nodeName, "type=router",
"options:router-port="+types.RouterToSwitchPrefix+nodeName, "addresses="+"\""+nodeLRPMAC.String()+"\"")
_, err = addNodeLogicalSwitchPort(nodeName, types.SwitchToRouterPrefix+nodeName,
"router", nodeLRPMAC.String(), "router-port="+types.RouterToSwitchPrefix+nodeName)
if err != nil {
klog.Errorf("Failed to add logical port to switch, stdout: %q, stderr: %q, error: %v", stdout, stderr, err)
return err
Expand Down
23 changes: 19 additions & 4 deletions go-controller/pkg/ovn/master_test.go
Expand Up @@ -204,7 +204,14 @@ func defaultFakeExec(nodeSubnet, nodeName string, sctpSupport bool) (*ovntest.Fa
"ovn-nbctl --timeout=15 --may-exist ls-add " + nodeName + " -- set logical_switch " + nodeName + " other-config:subnet=" + nodeSubnet + " other-config:exclude_ips=" + nodeMgmtPortIP.String() + ".." + hybridOverlayIP.String(),
"ovn-nbctl --timeout=15 set logical_switch " + nodeName + " other-config:mcast_snoop=\"true\"",
"ovn-nbctl --timeout=15 set logical_switch " + nodeName + " other-config:mcast_querier=\"true\" other-config:mcast_eth_src=\"" + lrpMAC + "\" other-config:mcast_ip4_src=\"" + gwIP + "\"",
"ovn-nbctl --timeout=15 -- --may-exist lsp-add " + nodeName + " " + types.SwitchToRouterPrefix + nodeName + " -- set logical_switch_port " + types.SwitchToRouterPrefix + nodeName + " type=router options:router-port=" + types.RouterToSwitchPrefix + nodeName + " addresses=\"" + lrpMAC + "\"",
"ovn-nbctl --timeout=15 -- --may-exist lsp-add " + nodeName + " " + types.SwitchToRouterPrefix + nodeName + " -- lsp-set-type " + types.SwitchToRouterPrefix + nodeName + " router -- lsp-set-options " + types.SwitchToRouterPrefix + nodeName + " router-port=" + types.RouterToSwitchPrefix + nodeName + " -- lsp-set-addresses " + types.SwitchToRouterPrefix + nodeName + " " + lrpMAC,
})
fexec.AddFakeCmd(&ovntest.ExpectedCmd{
Cmd: "ovn-nbctl --timeout=15 get logical_switch_port " + types.SwitchToRouterPrefix + nodeName + " _uuid",
Output: fakeUUID + "\n",
})

fexec.AddFakeCmdsNoOutputNoError([]string{
"ovn-nbctl --timeout=15 set logical_switch " + nodeName + " load_balancer=" + tcpLBUUID,
"ovn-nbctl --timeout=15 add logical_switch " + nodeName + " load_balancer " + udpLBUUID,
})
Expand All @@ -215,7 +222,7 @@ func defaultFakeExec(nodeSubnet, nodeName string, sctpSupport bool) (*ovntest.Fa
}
fexec.AddFakeCmdsNoOutputNoError([]string{
"ovn-nbctl --timeout=15 --may-exist acl-add " + nodeName + " to-lport 1001 ip4.src==" + nodeMgmtPortIP.String() + " allow-related",
"ovn-nbctl --timeout=15 -- --may-exist lsp-add " + nodeName + " " + types.K8sPrefix + nodeName + " -- lsp-set-addresses " + types.K8sPrefix + nodeName + " " + mgmtMAC + " " + nodeMgmtPortIP.String(),
"ovn-nbctl --timeout=15 -- --may-exist lsp-add " + nodeName + " " + types.K8sPrefix + nodeName + " -- lsp-set-type " + types.K8sPrefix + nodeName + " -- lsp-set-options " + types.K8sPrefix + nodeName + " -- lsp-set-addresses " + types.K8sPrefix + nodeName + " " + mgmtMAC + " " + nodeMgmtPortIP.String(),
})
fexec.AddFakeCmd(&ovntest.ExpectedCmd{
Cmd: "ovn-nbctl --timeout=15 get logical_switch_port " + types.K8sPrefix + nodeName + " _uuid",
Expand Down Expand Up @@ -1087,12 +1094,20 @@ var _ = Describe("Gateway Init Operations", func() {
fexec.AddFakeCmdsNoOutputNoError([]string{
"ovn-nbctl --timeout=15 --if-exists lrp-del " + types.RouterToSwitchPrefix + nodeName + " -- lrp-add ovn_cluster_router " + types.RouterToSwitchPrefix + nodeName + " " + nodeLRPMAC + " " + nodeGWIP,
"ovn-nbctl --timeout=15 --may-exist ls-add " + nodeName + " -- set logical_switch " + nodeName + " other-config:subnet=" + nodeSubnet + " other-config:exclude_ips=" + nodeMgmtPortIP,
"ovn-nbctl --timeout=15 -- --may-exist lsp-add " + nodeName + " " + types.SwitchToRouterPrefix + nodeName + " -- set logical_switch_port " + types.SwitchToRouterPrefix + nodeName + " type=router options:router-port=" + types.RouterToSwitchPrefix + nodeName + " addresses=\"" + nodeLRPMAC + "\"",
"ovn-nbctl --timeout=15 -- --may-exist lsp-add " + nodeName + " " + types.SwitchToRouterPrefix + nodeName + " -- lsp-set-type " + types.SwitchToRouterPrefix + nodeName + " router -- lsp-set-options " + types.SwitchToRouterPrefix + nodeName + " router-port=" + types.RouterToSwitchPrefix + nodeName + " -- lsp-set-addresses " + types.SwitchToRouterPrefix + nodeName + " " + nodeLRPMAC,
})

fexec.AddFakeCmd(&ovntest.ExpectedCmd{
Cmd: "ovn-nbctl --timeout=15 get logical_switch_port " + types.SwitchToRouterPrefix + nodeName + " _uuid",
Output: fakeUUID + "\n",
})

fexec.AddFakeCmdsNoOutputNoError([]string{
"ovn-nbctl --timeout=15 set logical_switch " + nodeName + " load_balancer=" + tcpLBUUID,
"ovn-nbctl --timeout=15 add logical_switch " + nodeName + " load_balancer " + udpLBUUID,
"ovn-nbctl --timeout=15 add logical_switch " + nodeName + " load_balancer " + sctpLBUUID,
"ovn-nbctl --timeout=15 --may-exist acl-add " + nodeName + " to-lport 1001 ip4.src==" + nodeMgmtPortIP + " allow-related",
"ovn-nbctl --timeout=15 -- --may-exist lsp-add " + nodeName + " " + types.K8sPrefix + nodeName + " -- lsp-set-addresses " + types.K8sPrefix + nodeName + " " + nodeMgmtPortMAC + " " + nodeMgmtPortIP,
"ovn-nbctl --timeout=15 -- --may-exist lsp-add " + nodeName + " " + types.K8sPrefix + nodeName + " -- lsp-set-type " + types.K8sPrefix + nodeName + " -- lsp-set-options " + types.K8sPrefix + nodeName + " -- lsp-set-addresses " + types.K8sPrefix + nodeName + " " + nodeMgmtPortMAC + " " + nodeMgmtPortIP,
})
fexec.AddFakeCmd(&ovntest.ExpectedCmd{
Cmd: "ovn-nbctl --timeout=15 get logical_switch_port " + types.K8sPrefix + nodeName + " _uuid",
Expand Down

0 comments on commit c21cce7

Please sign in to comment.