Skip to content

Commit

Permalink
refactor informers (#2690)
Browse files Browse the repository at this point in the history
  • Loading branch information
lavanya-f5 authored Dec 30, 2022
1 parent 3c9df35 commit f8befe3
Show file tree
Hide file tree
Showing 18 changed files with 474 additions and 402 deletions.
62 changes: 4 additions & 58 deletions cmd/k8s-bigip-ctlr/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,7 @@ import (

"github.com/F5Networks/k8s-bigip-ctlr/v2/pkg/controller"
"github.com/F5Networks/k8s-bigip-ctlr/v2/pkg/health"
"github.com/F5Networks/k8s-bigip-ctlr/v2/pkg/pollers"
bigIPPrometheus "github.com/F5Networks/k8s-bigip-ctlr/v2/pkg/prometheus"
"github.com/F5Networks/k8s-bigip-ctlr/v2/pkg/vxlan"
"github.com/F5Networks/k8s-bigip-ctlr/v2/pkg/writer"
"github.com/prometheus/client_golang/prometheus/promhttp"

Expand Down Expand Up @@ -676,52 +674,6 @@ func getGTMCredentials() {
}
}

func setupNodePolling(
appMgr *appmanager.Manager,
np pollers.Poller,
eventChanl <-chan interface{},
kubeClient kubernetes.Interface,
) error {
// Register appMgr to watch for node updates to keep track of watched nodes
err := np.RegisterListener(appMgr.ProcessNodeUpdate)
if nil != err {
return fmt.Errorf("error registering node update listener: %v",
err)
}

if 0 != len(vxlanMode) {
// If partition is part of vxlanName, extract just the tunnel name
tunnelName := vxlanName
cleanPath := strings.TrimLeft(vxlanName, "/")
slashPos := strings.Index(cleanPath, "/")
if slashPos != -1 {
tunnelName = cleanPath[slashPos+1:]
}
vxMgr, err := vxlan.NewVxlanMgr(
vxlanMode,
tunnelName,
appMgr.UseNodeInternal(),
getConfigWriter(),
eventChanl,
)
if nil != err {
return fmt.Errorf("error creating vxlan manager: %v", err)
}

// Register vxMgr to watch for node updates to process fdb records
err = np.RegisterListener(vxMgr.ProcessNodeUpdate)
if nil != err {
return fmt.Errorf("error registering node update listener for vxlan mode: %v",
err)
}
if eventChanl != nil {
vxMgr.ProcessAppmanagerEvents(kubeClient)
}
}

return nil
}

func createLabel(label string) (labels.Selector, error) {
var l labels.Selector
var err error
Expand Down Expand Up @@ -1101,16 +1053,6 @@ func main() {
}
appMgr.TeemData = td
GetNamespaces(appMgr)
intervalFactor := time.Duration(*nodePollInterval)
np := pollers.NewNodePoller(appMgrParms.KubeClient, intervalFactor*time.Second, *nodeLabelSelector)
err = setupNodePolling(appMgr, np, eventChan, appMgrParms.KubeClient)
if nil != err {
log.Fatalf("Required polling utility for node updates failed setup: %v",
err)
}

np.Run()
defer np.Stop()

setupWatchers(appMgr, time.Duration(*syncInterval)*time.Second)
// Expose Prometheus metrics
Expand Down Expand Up @@ -1183,6 +1125,10 @@ func getAppManagerParams() appmanager.Params {
DefaultRouteDomain: *defaultRouteDomain,
PoolMemberType: *poolMemberType,
Agent: *agent,
VXLANMode: vxlanMode,
VXLANName: vxlanName,
EventChan: eventChan,
ConfigWriter: getConfigWriter(),
}
}

Expand Down
103 changes: 0 additions & 103 deletions cmd/k8s-bigip-ctlr/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -429,109 +429,6 @@ var _ = Describe("Main Tests", func() {

})

It("sets up the node poller", func() {
defer _init()
os.Args = []string{
"./bin/k8s-bigip-ctlr",
"--namespace=testing",
"--bigip-partition=velcro1",
"--bigip-partition=velcro2",
"--bigip-password=admin",
"--bigip-url=bigip.example.com",
"--bigip-username=admin",
"--pool-member-type=nodeport",
}

flags.Parse(os.Args)
err := verifyArgs()
Expect(err).To(BeNil())

fake := fake.NewSimpleClientset()
Expect(fake).ToNot(BeNil(), "Mock client cannot be nil.")

configWriter := &test.MockWriter{
FailStyle: test.Success,
Sections: make(map[string]interface{}),
}
Expect(configWriter).ToNot(BeNil(), "Mock writer cannot be nil.")

nodePoller := &test.MockPoller{
FailStyle: test.Success,
}
Expect(nodePoller).ToNot(BeNil(), "Mock poller cannot be nil.")

vsm := appmanager.NewManager(&appmanager.Params{
KubeClient: fake,
IsNodePort: true,
})
err = setupNodePolling(vsm, nodePoller, nil, nil)
Expect(err).To(BeNil())

nodePoller = &test.MockPoller{
FailStyle: test.ImmediateFail,
}
Expect(nodePoller).ToNot(BeNil(), "Mock poller cannot be nil.")

err = setupNodePolling(vsm, nodePoller, nil, nil)
Expect(err).ToNot(BeNil())
})

It("sets up node poller - Cluster", func() {
defer _init()
os.Args = []string{
"./bin/k8s-bigip-ctlr",
"--namespace=testing",
"--bigip-partition=velcro1",
"--bigip-partition=velcro2",
"--bigip-password=admin",
"--bigip-url=bigip.example.com",
"--bigip-username=admin",
"--pool-member-type=cluster",
"--openshift-sdn-name=vxlan500",
}

flags.Parse(os.Args)
err := verifyArgs()
Expect(err).To(BeNil())

fakeClient := fake.NewSimpleClientset()
Expect(fakeClient).ToNot(BeNil(), "Mock client cannot be nil.")

configWriter := &test.MockWriter{
FailStyle: test.Success,
Sections: make(map[string]interface{}),
}
Expect(configWriter).ToNot(BeNil(), "Mock writer cannot be nil.")
// Success case
nodePoller := &test.MockPoller{
FailStyle: test.Success,
}
Expect(nodePoller).ToNot(BeNil(), "Mock poller cannot be nil.")

vsm := appmanager.NewManager(&appmanager.Params{
KubeClient: fakeClient,
})
err = setupNodePolling(vsm, nodePoller, nil, nil)
Expect(err).To(BeNil())
//Fail case from config writer
nodePoller = &test.MockPoller{
FailStyle: test.ImmediateFail,
}
Expect(nodePoller).ToNot(BeNil(), "Mock poller cannot be nil.")

err = setupNodePolling(vsm, nodePoller, nil, nil)
Expect(err).ToNot(BeNil())
// Fail case from NewOpenshiftSDNMgr
vxlanName = ""
nodePoller = &test.MockPoller{
FailStyle: test.Success,
}
Expect(nodePoller).ToNot(BeNil(), "Mock poller cannot be nil.")

err = setupNodePolling(vsm, nodePoller, nil, nil)
Expect(err).ToNot(BeNil())
})

It("handles vxlan flags", func() {
defer _init()
os.Args = []string{
Expand Down
Loading

0 comments on commit f8befe3

Please sign in to comment.