Skip to content

Commit

Permalink
fix read-only pointer in vlan and provider-network
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangzujian committed Nov 3, 2021
1 parent 01e30a4 commit 7231a6f
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 29 deletions.
17 changes: 9 additions & 8 deletions pkg/controller/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -505,19 +505,20 @@ func (c *Controller) initSyncCrdVlans() error {

for _, vlan := range vlans {
var needUpdate bool
if vlan.Spec.VlanId != 0 && vlan.Spec.ID == 0 {
vlan.Spec.ID = vlan.Spec.VlanId
vlan.Spec.VlanId = 0
newVlan := vlan.DeepCopy()
if newVlan.Spec.VlanId != 0 && newVlan.Spec.ID == 0 {
newVlan.Spec.ID = newVlan.Spec.VlanId
newVlan.Spec.VlanId = 0
needUpdate = true
}
if vlan.Spec.ProviderInterfaceName != "" && vlan.Spec.Provider == "" {
vlan.Spec.Provider = vlan.Spec.ProviderInterfaceName
vlan.Spec.ProviderInterfaceName = ""
if newVlan.Spec.ProviderInterfaceName != "" && newVlan.Spec.Provider == "" {
newVlan.Spec.Provider = newVlan.Spec.ProviderInterfaceName
newVlan.Spec.ProviderInterfaceName = ""
needUpdate = true
}
if needUpdate {
if _, err = c.config.KubeOvnClient.KubeovnV1().Vlans().Update(context.Background(), vlan, metav1.UpdateOptions{}); err != nil {
klog.Errorf("failed to update spec of vlan %s: %v", vlan.Name, err)
if _, err = c.config.KubeOvnClient.KubeovnV1().Vlans().Update(context.Background(), newVlan, metav1.UpdateOptions{}); err != nil {
klog.Errorf("failed to update spec of vlan %s: %v", newVlan.Name, err)
return err
}
}
Expand Down
20 changes: 11 additions & 9 deletions pkg/controller/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -222,8 +222,9 @@ func (c *Controller) handleAddNode(key string) error {
}
for _, pn := range providerNetworks {
if !util.ContainsString(pn.Spec.ExcludeNodes, node.Name) {
if pn.Status.EnsureNodeStandardConditions(key) {
bytes, err := pn.Status.Bytes()
status := pn.Status.DeepCopy()
if status.EnsureNodeStandardConditions(key) {
bytes, err := status.Bytes()
if err != nil {
klog.Error(err)
return err
Expand Down Expand Up @@ -376,17 +377,18 @@ func (c *Controller) handleDeleteNode(key string) error {
}

func (c *Controller) updateProviderNetworkStatusForNodeDeletion(pn *kubeovnv1.ProviderNetwork, node string) error {
if util.ContainsString(pn.Status.ReadyNodes, node) {
pn.Status.ReadyNodes = util.RemoveString(pn.Status.ReadyNodes, node)
if len(pn.Status.ReadyNodes) == 0 {
status := pn.Status.DeepCopy()
if util.ContainsString(status.ReadyNodes, node) {
status.ReadyNodes = util.RemoveString(status.ReadyNodes, node)
if len(status.ReadyNodes) == 0 {
bytes := []byte(`[{ "op": "remove", "path": "/status/readyNodes"}]`)
_, err := c.config.KubeOvnClient.KubeovnV1().ProviderNetworks().Patch(context.Background(), pn.Name, types.JSONPatchType, bytes, metav1.PatchOptions{})
if err != nil {
klog.Errorf("failed to patch provider network %s: %v", pn.Name, err)
return err
}
} else {
bytes, err := pn.Status.Bytes()
bytes, err := status.Bytes()
if err != nil {
klog.Error(err)
return err
Expand All @@ -398,16 +400,16 @@ func (c *Controller) updateProviderNetworkStatusForNodeDeletion(pn *kubeovnv1.Pr
}
}
}
if pn.Status.RemoveNodeConditions(node) {
if len(pn.Status.Conditions) == 0 {
if status.RemoveNodeConditions(node) {
if len(status.Conditions) == 0 {
bytes := []byte(`[{ "op": "remove", "path": "/status/conditions"}]`)
_, err := c.config.KubeOvnClient.KubeovnV1().ProviderNetworks().Patch(context.Background(), pn.Name, types.JSONPatchType, bytes, metav1.PatchOptions{})
if err != nil {
klog.Errorf("failed to patch provider network %s: %v", pn.Name, err)
return err
}
} else {
bytes, err := pn.Status.Bytes()
bytes, err := status.Bytes()
if err != nil {
klog.Error(err)
return err
Expand Down
12 changes: 7 additions & 5 deletions pkg/controller/subnet.go
Original file line number Diff line number Diff line change
Expand Up @@ -733,16 +733,17 @@ func (c *Controller) handleDeleteSubnet(subnet *kubeovnv1.Subnet) error {

func (c *Controller) updateVlanStatusForSubnetDeletion(vlan *kubeovnv1.Vlan, subnet string) error {
if util.ContainsString(vlan.Status.Subnets, subnet) {
vlan.Status.Subnets = util.RemoveString(vlan.Status.Subnets, subnet)
if len(vlan.Status.Subnets) == 0 {
status := vlan.Status.DeepCopy()
status.Subnets = util.RemoveString(status.Subnets, subnet)
if len(status.Subnets) == 0 {
bytes := []byte(`[{ "op": "remove", "path": "/status/subnets"}]`)
_, err := c.config.KubeOvnClient.KubeovnV1().Vlans().Patch(context.Background(), vlan.Name, types.JSONPatchType, bytes, metav1.PatchOptions{})
if err != nil {
klog.Errorf("failed to patch vlan %s: %v", vlan.Name, err)
return err
}
} else {
bytes, err := vlan.Status.Bytes()
bytes, err := status.Bytes()
if err != nil {
klog.Error(err)
return err
Expand Down Expand Up @@ -1015,8 +1016,9 @@ func (c *Controller) reconcileVlan(subnet *kubeovnv1.Subnet) error {
}

if !util.ContainsString(vlan.Status.Subnets, subnet.Name) {
vlan.Status.Subnets = append(vlan.Status.Subnets, subnet.Name)
bytes, err := vlan.Status.Bytes()
status := vlan.Status.DeepCopy()
status.Subnets = append(status.Subnets, subnet.Name)
bytes, err := status.Bytes()
if err != nil {
klog.Error(err)
return err
Expand Down
14 changes: 7 additions & 7 deletions pkg/controller/vlan.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,9 +230,9 @@ func (c *Controller) handleAddVlan(key string) error {
}

if !util.ContainsString(pn.Status.Vlans, vlan.Name) {
newPn := pn.DeepCopy()
newPn.Status.Vlans = append(pn.Status.Vlans, vlan.Name)
bytes, err := newPn.Status.Bytes()
status := pn.Status.DeepCopy()
status.Vlans = append(status.Vlans, vlan.Name)
bytes, err := status.Bytes()
if err != nil {
klog.Error(err)
return err
Expand Down Expand Up @@ -315,17 +315,17 @@ func (c *Controller) updateProviderNetworkStatusForVlanDeletion(pn *kubeovnv1.Pr
return nil
}

newPn := pn.DeepCopy()
newPn.Status.Vlans = util.RemoveString(newPn.Status.Vlans, vlan)
if len(newPn.Status.Vlans) == 0 {
status := pn.Status.DeepCopy()
status.Vlans = util.RemoveString(status.Vlans, vlan)
if len(status.Vlans) == 0 {
bytes := []byte(`[{ "op": "remove", "path": "/status/vlans"}]`)
_, err := c.config.KubeOvnClient.KubeovnV1().ProviderNetworks().Patch(context.Background(), pn.Name, types.JSONPatchType, bytes, metav1.PatchOptions{})
if err != nil {
klog.Errorf("failed to patch provider network %s: %v", pn.Name, err)
return err
}
} else {
bytes, err := newPn.Status.Bytes()
bytes, err := status.Bytes()
if err != nil {
klog.Error(err)
return err
Expand Down

0 comments on commit 7231a6f

Please sign in to comment.