Skip to content

Commit

Permalink
fix missing condition when subnet is private
Browse files Browse the repository at this point in the history
  • Loading branch information
halfcrazy committed Aug 16, 2019
1 parent 7d6b950 commit 0f8f2aa
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 23 deletions.
3 changes: 3 additions & 0 deletions pkg/apis/kubeovn/v1/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package v1
import (
"encoding/json"
"fmt"

"k8s.io/klog"
)

func (ss *SubnetStatus) Bytes() ([]byte, error) {
Expand All @@ -12,5 +14,6 @@ func (ss *SubnetStatus) Bytes() ([]byte, error) {
return nil, err
}
newStr := fmt.Sprintf(`{"status": %s}`, string(bytes))
klog.V(5).Info("status body", newStr)
return []byte(newStr), nil
}
103 changes: 80 additions & 23 deletions pkg/controller/subnet.go
Original file line number Diff line number Diff line change
Expand Up @@ -283,15 +283,25 @@ func (c *Controller) handleAddSubnet(key string) error {
subnet.TypeMeta.APIVersion = "kubeovn.io/v1"
c.recorder.Eventf(subnet, v1.EventTypeWarning, "ValidateLogicalSwitchFailed", err.Error())
subnet.Status.NotValidated("ValidateLogicalSwitchFailed", err.Error())
bytes, err := subnet.Status.Bytes()
if err != nil {
klog.Error(err)
bytes, err1 := subnet.Status.Bytes()
if err1 != nil {
klog.Error(err1)
} else {
if _, err := c.config.KubeOvnClient.KubeovnV1().Subnets().Patch(subnet.Name, types.MergePatchType, bytes, "status"); err != nil {
klog.Error("patch subnet status failed", err)
}
}
return err
} else {
subnet.Status.Validated("ValidateLogicalSwitchSuccess", "")
bytes, err1 := subnet.Status.Bytes()
if err1 != nil {
klog.Error(err1)
} else {
if _, err := c.config.KubeOvnClient.KubeovnV1().Subnets().Patch(subnet.Name, types.MergePatchType, bytes, "status"); err != nil {
klog.Error("patch subnet status failed", err)
}
}
}
subnetList, err := c.subnetsLister.List(labels.Everything())
if err != nil {
Expand Down Expand Up @@ -339,19 +349,38 @@ func (c *Controller) handleAddSubnet(key string) error {
}

if subnet.Spec.Private {
return c.ovnClient.SetPrivateLogicalSwitch(subnet.Name, subnet.Spec.Protocol, subnet.Spec.CIDRBlock, subnet.Spec.AllowSubnets)
err = c.ovnClient.SetPrivateLogicalSwitch(subnet.Name, subnet.Spec.Protocol, subnet.Spec.CIDRBlock, subnet.Spec.AllowSubnets)
if err != nil {
subnet.Status.SetError("SetPrivateLogicalSwitchFailed", err.Error())
} else {
subnet.Status.Ready("SetPrivateLogicalSwitchSuccess", "")
}
bytes, err1 := subnet.Status.Bytes()
if err1 != nil {
klog.Error(err1)
} else {
if _, err := c.config.KubeOvnClient.KubeovnV1().Subnets().Patch(subnet.Name, types.MergePatchType, bytes, "status"); err != nil {
klog.Error("patch subnet status failed", err)
}
}
return err
}

subnet.Status.Ready("LogicalSwitchCreateSuccess", "")
bytes, err := subnet.Status.Bytes()
err = c.ovnClient.CleanLogicalSwitchAcl(subnet.Name)
if err != nil {
klog.Error(err)
subnet.Status.SetError("CleanLogicalSwitchAclFailed", err.Error())
} else {
subnet.Status.Ready("CleanLogicalSwitchAclSuccess", "")
}
bytes, err1 := subnet.Status.Bytes()
if err1 != nil {
klog.Error(err1)
} else {
if _, err := c.config.KubeOvnClient.KubeovnV1().Subnets().Patch(subnet.Name, types.MergePatchType, bytes, "status"); err != nil {
klog.Error("patch subnet status failed", err)
}
}
return c.ovnClient.CleanLogicalSwitchAcl(subnet.Name)
return err
}

func (c *Controller) handleUpdateSubnet(key string) error {
Expand All @@ -371,9 +400,9 @@ func (c *Controller) handleUpdateSubnet(key string) error {
if err != nil {
klog.Errorf("failed to list logical switch, %v", err)
subnet.Status.SetError("ListLogicalSwitchFailed", err.Error())
bytes, err := subnet.Status.Bytes()
if err != nil {
klog.Error(err)
bytes, err1 := subnet.Status.Bytes()
if err1 != nil {
klog.Error(err1)
} else {
if _, err := c.config.KubeOvnClient.KubeovnV1().Subnets().Patch(subnet.Name, types.MergePatchType, bytes, "status"); err != nil {
klog.Error("patch subnet status failed", err)
Expand All @@ -394,23 +423,33 @@ func (c *Controller) handleUpdateSubnet(key string) error {
subnet.TypeMeta.APIVersion = "kubeovn.io/v1"
c.recorder.Eventf(subnet, v1.EventTypeWarning, "ValidateLogicalSwitchFailed", err.Error())
subnet.Status.NotValidated("ValidateLogicalSwitchFailed", err.Error())
bytes, err := subnet.Status.Bytes()
if err != nil {
klog.Error(err)
bytes, err1 := subnet.Status.Bytes()
if err1 != nil {
klog.Error(err1)
} else {
if _, err := c.config.KubeOvnClient.KubeovnV1().Subnets().Patch(subnet.Name, types.MergePatchType, bytes, "status"); err != nil {
klog.Error("patch subnet status failed", err)
}
}
return err
} else {
subnet.Status.Validated("ValidateLogicalSwitchSuccess", "")
bytes, err1 := subnet.Status.Bytes()
if err1 != nil {
klog.Error(err1)
} else {
if _, err := c.config.KubeOvnClient.KubeovnV1().Subnets().Patch(subnet.Name, types.MergePatchType, bytes, "status"); err != nil {
klog.Error("patch subnet status failed", err)
}
}
}

if err := c.reconcileSubnet(subnet); err != nil {
klog.Errorf("failed to reconcile subnet %s, %v", subnet.Name, err)
subnet.Status.SetError("ReconcileSubnetFailed", err.Error())
bytes, err := subnet.Status.Bytes()
if err != nil {
klog.Error(err)
bytes, err1 := subnet.Status.Bytes()
if err1 != nil {
klog.Error(err1)
} else {
if _, err := c.config.KubeOvnClient.KubeovnV1().Subnets().Patch(subnet.Name, types.MergePatchType, bytes, "status"); err != nil {
klog.Error("patch subnet status failed", err)
Expand All @@ -420,18 +459,37 @@ func (c *Controller) handleUpdateSubnet(key string) error {
}

if subnet.Spec.Private {
return c.ovnClient.SetPrivateLogicalSwitch(subnet.Name, subnet.Spec.Protocol, subnet.Spec.CIDRBlock, subnet.Spec.AllowSubnets)
err = c.ovnClient.SetPrivateLogicalSwitch(subnet.Name, subnet.Spec.Protocol, subnet.Spec.CIDRBlock, subnet.Spec.AllowSubnets)
if err != nil {
subnet.Status.SetError("SetPrivateLogicalSwitchFailed", err.Error())
} else {
subnet.Status.Ready("SetPrivateLogicalSwitchSuccess", "")
}
bytes, err1 := subnet.Status.Bytes()
if err1 != nil {
klog.Error(err1)
} else {
if _, err := c.config.KubeOvnClient.KubeovnV1().Subnets().Patch(subnet.Name, types.MergePatchType, bytes, "status"); err != nil {
klog.Error("patch subnet status failed", err)
}
}
return err
}
subnet.Status.Ready("LogicalSwitchUpdateSuccess", "")
bytes, err := subnet.Status.Bytes()
err = c.ovnClient.CleanLogicalSwitchAcl(subnet.Name)
if err != nil {
klog.Error(err)
subnet.Status.SetError("CleanLogicalSwitchAclFailed", err.Error())
} else {
subnet.Status.Ready("CleanLogicalSwitchAclSuccess", "")
}
bytes, err1 := subnet.Status.Bytes()
if err1 != nil {
klog.Error(err1)
} else {
if _, err := c.config.KubeOvnClient.KubeovnV1().Subnets().Patch(subnet.Name, types.MergePatchType, bytes, "status"); err != nil {
klog.Error("patch subnet status failed", err)
}
}
return c.ovnClient.CleanLogicalSwitchAcl(subnet.Name)
return err
}

func (c *Controller) handleUpdateSubnetStatus(key string) error {
Expand Down Expand Up @@ -546,7 +604,6 @@ func calcSubnetStatusIP(subnet *kubeovnv1.Subnet, c *Controller) error {
usingIPs := uint64(len(podUsedIPs.Items))
subnet.Status.AvailableIPs = availableIPs
subnet.Status.UsingIPs = usingIPs
klog.Infof("calculate subnet %s, availableIPs %d, usingIPs: %d", subnet.Name, availableIPs, usingIPs)
bytes, err := subnet.Status.Bytes()
if err != nil {
return err
Expand Down

0 comments on commit 0f8f2aa

Please sign in to comment.