Skip to content

Commit 51bc5ef

Browse files
committed
Fix policy synchronization in HA mode (#45)
1 parent 2cda933 commit 51bc5ef

12 files changed

Lines changed: 56 additions & 79 deletions

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
VERSION_MAJOR ?= 0
22
VERSION_MINOR ?= 7
3-
VERSION_BUILD ?= 0
3+
VERSION_BUILD ?= 1
44
VERSION ?= v$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD)
55

66
GOOS ?= $(shell go env GOOS)

deploy/deployment.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ spec:
2424
serviceAccountName: pa-controller
2525
containers:
2626
- name: pa-controller
27-
image: inwinstack/pa-controller:v0.7.0
27+
image: inwinstack/pa-controller:v0.7.1
2828
args:
2929
- --logtostderr=true
3030
- --v=2

pkg/ha/ha.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ func (i *Inspector) getStatus() error {
6565
}
6666

6767
if status.Enable == "yes" {
68-
switch status.Group.Local.State {
69-
case "active":
68+
switch {
69+
case status.Group.Local.State == "active" && status.Group.Local.StateSync == "Complete":
7070
i.callbacks.OnActive()
7171
default:
7272
i.callbacks.OnPassive()

pkg/operator/pan/nat/controller.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,13 @@ func (c *Controller) reconcile(key string) error {
186186
if err := c.createOrUpdate(nat); err != nil {
187187
return c.makeFailed(nat, err)
188188
}
189+
return nil
190+
}
191+
192+
if nat.Status.Phase == blendedv1.NATActive && !c.isExistingNatPolicy(nat) {
193+
if err := c.createOrUpdate(nat); err != nil {
194+
return c.makeFailed(nat, err)
195+
}
189196
}
190197
return nil
191198
}

pkg/operator/pan/nat/controller_test.go

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package nat
1818

1919
import (
2020
"context"
21-
"reflect"
2221
"testing"
2322
"time"
2423

@@ -107,28 +106,6 @@ func TestNATController(t *testing.T) {
107106
}
108107
}
109108
assert.Equal(t, false, failed, "The nat policy hasn't created.")
110-
111-
gnat, err := blendedset.InwinstackV1().NATs(namespace).Get(nat.Name, metav1.GetOptions{})
112-
assert.Nil(t, err)
113-
114-
mc.Reset()
115-
mc.AddResp("")
116-
gnat.Spec.DestinationAddresses = []string{"140.23.110.10", "140.23.110.11"}
117-
unat, err := blendedset.InwinstackV1().NATs(namespace).Update(gnat)
118-
assert.Nil(t, err)
119-
120-
failed = true
121-
for start := time.Now(); time.Since(start) < timeout; {
122-
mc.AddResp(mc.Elm)
123-
enrty, err := fwNat.Get(cfg.Vsys, unat.Name)
124-
assert.Nil(t, err)
125-
if reflect.DeepEqual(unat.Spec.DestinationAddresses, enrty.DestinationAddresses) {
126-
failed = false
127-
break
128-
}
129-
}
130-
assert.Equal(t, false, failed, "The nat policy hasn't synced.")
131-
132109
assert.Nil(t, blendedset.InwinstackV1().NATs(namespace).Delete(nat.Name, nil))
133110
natList, err := blendedset.InwinstackV1().NATs(namespace).List(metav1.ListOptions{})
134111
assert.Nil(t, err)

pkg/operator/pan/nat/nat.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,15 @@ func (c *Controller) newNatPolicy(n *blendedv1.NAT) *nat.Entry {
5757
return entry
5858
}
5959

60+
func (c *Controller) isExistingNatPolicy(nat *blendedv1.NAT) bool {
61+
if entry, err := c.fwNat.Get(c.cfg.Vsys, nat.Name); err == nil {
62+
if len(entry.Name) != 0 {
63+
return true
64+
}
65+
}
66+
return false
67+
}
68+
6069
func (c *Controller) updateNatPolicy(nat *blendedv1.NAT) error {
6170
entry := c.newNatPolicy(nat)
6271
if err := c.fwNat.Edit(c.cfg.Vsys, *entry); err != nil {
@@ -67,8 +76,7 @@ func (c *Controller) updateNatPolicy(nat *blendedv1.NAT) error {
6776
}
6877

6978
func (c *Controller) deleteNatPolicy(nat *blendedv1.NAT) error {
70-
enrty, err := c.fwNat.Get(c.cfg.Vsys, nat.Name)
71-
if len(enrty.Name) == 0 && err != nil {
79+
if !c.isExistingNatPolicy(nat) {
7280
return nil
7381
}
7482

pkg/operator/pan/security/controller.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,13 @@ func (c *Controller) reconcile(key string) error {
185185
if err := c.createOrUpdate(security); err != nil {
186186
return c.makeFailed(security, err)
187187
}
188+
return nil
189+
}
190+
191+
if security.Status.Phase == blendedv1.SecurityActive && !c.isExistingSecurityPolicy(security) {
192+
if err := c.createOrUpdate(security); err != nil {
193+
return c.makeFailed(security, err)
194+
}
188195
}
189196
return nil
190197
}

pkg/operator/pan/security/controller_test.go

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package security
1818

1919
import (
2020
"context"
21-
"reflect"
2221
"testing"
2322
"time"
2423

@@ -109,28 +108,6 @@ func TestSecurityController(t *testing.T) {
109108
}
110109
}
111110
assert.Equal(t, false, failed, "The security policy hasn't created.")
112-
113-
gsec2, err := blendedset.InwinstackV1().Securities(namespace).Get(sec.Name, metav1.GetOptions{})
114-
assert.Nil(t, err)
115-
116-
mc.Reset()
117-
mc.AddResp("")
118-
gsec2.Spec.DestinationAddresses = []string{"140.23.110.12"}
119-
usec, err := blendedset.InwinstackV1().Securities(namespace).Update(gsec2)
120-
assert.Nil(t, err)
121-
122-
failed = true
123-
for start := time.Now(); time.Since(start) < timeout; {
124-
mc.AddResp(mc.Elm)
125-
enrty, err := fwSec.Get(cfg.Vsys, usec.Name)
126-
assert.Nil(t, err)
127-
if reflect.DeepEqual(usec.Spec.DestinationAddresses, enrty.DestinationAddresses) {
128-
failed = false
129-
break
130-
}
131-
}
132-
assert.Equal(t, false, failed, "The security policy hasn't synced.")
133-
134111
assert.Nil(t, blendedset.InwinstackV1().Securities(namespace).Delete(sec.Name, nil))
135112
secList, err := blendedset.InwinstackV1().Securities(namespace).List(metav1.ListOptions{})
136113
assert.Nil(t, err)

pkg/operator/pan/security/security.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,15 @@ func (c *Controller) newSecurityPolicy(sec *blendedv1.Security) *security.Entry
6161
return entry
6262
}
6363

64+
func (c *Controller) isExistingSecurityPolicy(sec *blendedv1.Security) bool {
65+
if entry, err := c.fwSec.Get(c.cfg.Vsys, sec.Name); err == nil {
66+
if len(entry.Name) != 0 {
67+
return true
68+
}
69+
}
70+
return false
71+
}
72+
6473
func (c *Controller) updateSecurityPolicy(sec *blendedv1.Security) error {
6574
entry := c.newSecurityPolicy(sec)
6675
if err := c.fwSec.Edit(c.cfg.Vsys, *entry); err != nil {
@@ -75,8 +84,7 @@ func (c *Controller) updateSecurityPolicy(sec *blendedv1.Security) error {
7584
}
7685

7786
func (c *Controller) deleteSecurityPolicy(sec *blendedv1.Security) error {
78-
enrty, err := c.fwSec.Get(c.cfg.Vsys, sec.Name)
79-
if len(enrty.Name) == 0 && err != nil {
87+
if !c.isExistingSecurityPolicy(sec) {
8088
return nil
8189
}
8290

pkg/operator/pan/service/controller.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,13 @@ func (c *Controller) reconcile(key string) error {
186186
if err := c.createOrUpdate(service); err != nil {
187187
return c.makeFailed(service, err)
188188
}
189+
return nil
190+
}
191+
192+
if service.Status.Phase == blendedv1.ServiceActive && !c.isExistingServiceObject(service) {
193+
if err := c.createOrUpdate(service); err != nil {
194+
return c.makeFailed(service, err)
195+
}
189196
}
190197
return nil
191198
}

0 commit comments

Comments
 (0)