Skip to content

Commit

Permalink
fix: delete chassis from sb when delete node
Browse files Browse the repository at this point in the history
  • Loading branch information
oilbeater committed Mar 9, 2020
1 parent 4a30980 commit 7d22430
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 8 deletions.
6 changes: 5 additions & 1 deletion dist/images/start-controller.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
#!/usr/bin/env bash
set -euo pipefail
export OVN_NB_DAEMON=$(ovn-nbctl --db=tcp:["${OVN_NB_SERVICE_HOST}"]:"${OVN_NB_SERVICE_PORT}" --pidfile --detach --overwrite-pidfile)
exec ./kube-ovn-controller --ovn-nb-host="${OVN_NB_SERVICE_HOST}" --ovn-nb-port="${OVN_NB_SERVICE_PORT}" $@
exec ./kube-ovn-controller --ovn-nb-host="${OVN_NB_SERVICE_HOST}" \
--ovn-nb-port="${OVN_NB_SERVICE_PORT}" \
--ovn-sb-host="${OVN_SB_SERVICE_HOST}" \
--ovn-sb-port="${OVN_SB_SERVICE_PORT}" \
$@
12 changes: 9 additions & 3 deletions pkg/controller/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ type Configuration struct {
OvnNbSocket string
OvnNbHost string
OvnNbPort int
OvnNbTimeout int
OvnSbHost string
OvnSbPort int
OvnTimeout int
KubeConfigFile string
KubeClient kubernetes.Interface
KubeOvnClient clientset.Interface
Expand Down Expand Up @@ -51,7 +53,9 @@ func ParseFlags() (*Configuration, error) {
argOvnNbSocket = pflag.String("ovn-nb-socket", "", "The ovn-nb socket file. (If not set use ovn-nb-address)")
argOvnNbHost = pflag.String("ovn-nb-host", "0.0.0.0", "The ovn-nb host address. (If not set use ovn-nb-socket)")
argOvnNbPort = pflag.Int("ovn-nb-port", 6641, "")
argOvnNbTimeout = pflag.Int("ovn-nb-timeout", 30, "")
argOvnSbHost = pflag.String("ovn-sb-host", "0.0.0.0", "The ovn-sb host address.")
argOvnSbPort = pflag.Int("ovn-sb-port", 6642, "")
argOvnTimeout = pflag.Int("ovn-timeout", 30, "")
argKubeConfigFile = pflag.String("kubeconfig", "", "Path to kubeconfig file with authorization and master location information. If not set use the inCluster token.")

argDefaultLogicalSwitch = pflag.String("default-ls", "ovn-default", "The default logical switch name, default: ovn-default")
Expand Down Expand Up @@ -93,7 +97,9 @@ func ParseFlags() (*Configuration, error) {
OvnNbSocket: *argOvnNbSocket,
OvnNbHost: *argOvnNbHost,
OvnNbPort: *argOvnNbPort,
OvnNbTimeout: *argOvnNbTimeout,
OvnSbHost: *argOvnSbHost,
OvnSbPort: *argOvnSbPort,
OvnTimeout: *argOvnTimeout,
KubeConfigFile: *argKubeConfigFile,
DefaultLogicalSwitch: *argDefaultLogicalSwitch,
DefaultCIDR: *argDefaultCIDR,
Expand Down
2 changes: 1 addition & 1 deletion pkg/controller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ func NewController(config *Configuration) *Controller {

controller := &Controller{
config: config,
ovnClient: ovs.NewClient(config.OvnNbHost, config.OvnNbPort, config.OvnNbTimeout, "", 0, config.ClusterRouter, config.ClusterTcpLoadBalancer, config.ClusterUdpLoadBalancer, config.NodeSwitch, config.NodeSwitchCIDR),
ovnClient: ovs.NewClient(config.OvnNbHost, config.OvnNbPort, config.OvnTimeout, config.OvnSbHost, config.OvnSbPort, config.ClusterRouter, config.ClusterTcpLoadBalancer, config.ClusterUdpLoadBalancer, config.NodeSwitch, config.NodeSwitchCIDR),
ipam: ovnipam.NewIPAM(),

subnetsLister: subnetInformer.Lister(),
Expand Down
4 changes: 4 additions & 0 deletions pkg/controller/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,10 @@ func (c *Controller) handleDeleteNode(key string) error {
klog.Errorf("failed to delete node switch port node-%s %v", key, err)
return err
}
if err := c.ovnClient.DeleteChassis(key); err != nil {
klog.Errorf("failed to delete chassis for node %s %v", key, err)
return err
}

if err := c.config.KubeOvnClient.KubeovnV1().IPs().Delete(portName, &metav1.DeleteOptions{}); err != nil && !k8serrors.IsNotFound(err) {
return err
Expand Down
2 changes: 1 addition & 1 deletion pkg/ovs/ovn-nbctl.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import (

func (c Client) ovnNbCommand(cmdArgs ...string) (string, error) {
start := time.Now()
cmdArgs = append([]string{fmt.Sprintf("--timeout=%d", c.OvnNbTimeout)}, cmdArgs...)
cmdArgs = append([]string{fmt.Sprintf("--timeout=%d", c.OvnTimeout)}, cmdArgs...)
raw, err := exec.Command(OvnNbCtl, cmdArgs...).CombinedOutput()
elapsed := float64((time.Since(start)) / time.Millisecond)
klog.Infof("%s command %s in %vms", OvnNbCtl, strings.Join(cmdArgs, " "), elapsed)
Expand Down
38 changes: 38 additions & 0 deletions pkg/ovs/ovn-sbctl.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package ovs

import (
"fmt"
"os/exec"
"strings"
"time"

"k8s.io/klog"
)

func (c Client) ovnSbCommand(cmdArgs ...string) (string, error) {
start := time.Now()
cmdArgs = append([]string{fmt.Sprintf("--timeout=%d", c.OvnTimeout), fmt.Sprintf("--db=%s", c.OvnSbAddress)}, cmdArgs...)
raw, err := exec.Command(OvnSbCtl, cmdArgs...).CombinedOutput()
elapsed := float64((time.Since(start)) / time.Millisecond)
klog.Infof("%s command %s in %vms", OvnSbCtl, strings.Join(cmdArgs, " "), elapsed)
if err != nil {
return "", fmt.Errorf("%s, %q", raw, err)
}
return trimCommandOutput(raw), nil
}

func (c Client) DeleteChassis(node string) error {
output, err := c.ovnSbCommand("--format=csv", "--no-heading", "--data=bare", "--columns=name", "find", "chassis", fmt.Sprintf("hostname=%s", node))
if err != nil {
return fmt.Errorf("failed to find node chassis %s, %v", node, err)
}
for _, chassis := range strings.Split(output, "\n") {
chassis = strings.TrimSpace(chassis)
if len(chassis) > 0 {
if _, err := c.ovnSbCommand("chassis-del", strings.TrimSpace(chassis)); err != nil {
return err
}
}
}
return nil
}
5 changes: 3 additions & 2 deletions pkg/ovs/ovn.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ var (
// Client is the ovn client
type Client struct {
OvnNbAddress string
OvnNbTimeout int
OvnTimeout int
OvnSbAddress string
ClusterRouter string
ClusterTcpLoadBalancer string
Expand All @@ -24,6 +24,7 @@ type Client struct {

const (
OvnNbCtl = "ovn-nbctl"
OvnSbCtl = "ovn-sbctl"
MayExist = "--may-exist"
IfExists = "--if-exists"
Policy = "--policy"
Expand All @@ -36,7 +37,7 @@ func NewClient(ovnNbHost string, ovnNbPort int, ovnNbTimeout int, ovnSbHost stri
return &Client{
OvnNbAddress: fmt.Sprintf("tcp:%s:%d", ovnNbHost, ovnNbPort),
OvnSbAddress: fmt.Sprintf("tcp:%s:%d", ovnSbHost, ovnSbPort),
OvnNbTimeout: ovnNbTimeout,
OvnTimeout: ovnNbTimeout,
ClusterRouter: clusterRouter,
ClusterTcpLoadBalancer: clusterTcpLoadBalancer,
ClusterUdpLoadBalancer: clusterUdpLoadBalancer,
Expand Down

0 comments on commit 7d22430

Please sign in to comment.