Skip to content

Commit

Permalink
Update predicates to filter events outside of migration namespace (#1226
Browse files Browse the repository at this point in the history
) (#1230)

* update predicates to filter events outside of migration namespace

* update tests to create CRs in migration ns
  • Loading branch information
pranavgaikwad committed Nov 19, 2021
1 parent 6cfae67 commit 8ed2a4f
Show file tree
Hide file tree
Showing 26 changed files with 292 additions and 68 deletions.
20 changes: 14 additions & 6 deletions pkg/apis/migration/v1alpha1/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package v1alpha1

import (
"context"
"strconv"

liberr "github.com/konveyor/controller/pkg/error"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"strconv"

imagev1 "github.com/openshift/api/image/v1"
kapi "k8s.io/api/core/v1"
Expand All @@ -27,8 +28,9 @@ const (
// Returns and empty list when none found.
func ListPlans(client k8sclient.Client) ([]MigPlan, error) {
list := MigPlanList{}
inNamespace := k8sclient.InNamespace(OpenshiftMigrationNamespace)
options := k8sclient.MatchingFields{ClosedIndexField: strconv.FormatBool(false)}
err := client.List(context.TODO(), &list, options)
err := client.List(context.TODO(), &list, inNamespace, options)
if err != nil {
return nil, err
}
Expand All @@ -40,9 +42,11 @@ func ListPlans(client k8sclient.Client) ([]MigPlan, error) {
// Returns and empty list when none found.
func ListPlansWithLabels(client k8sclient.Client, labels map[string]string) ([]MigPlan, error) {
list := MigPlanList{}
inNamespace := k8sclient.InNamespace(OpenshiftMigrationNamespace)
err := client.List(
context.TODO(),
&list,
inNamespace,
&k8sclient.ListOptions{
LabelSelector: k8sLabels.SelectorFromSet(labels),
},
Expand All @@ -54,7 +58,8 @@ func ListPlansWithLabels(client k8sclient.Client, labels map[string]string) ([]M
// Returns and empty list when none found.
func ListClusters(client k8sclient.Client) ([]MigCluster, error) {
list := MigClusterList{}
err := client.List(context.TODO(), &list)
inNamespace := k8sclient.InNamespace(OpenshiftMigrationNamespace)
err := client.List(context.TODO(), &list, inNamespace)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -166,7 +171,8 @@ func GetMigrationForDVM(client k8sclient.Client, owners []metav1.OwnerReference)
// Returns and empty list when none found.
func ListStorage(client k8sclient.Client) ([]MigStorage, error) {
list := MigStorageList{}
err := client.List(context.TODO(), &list)
inNamespace := k8sclient.InNamespace(OpenshiftMigrationNamespace)
err := client.List(context.TODO(), &list, inNamespace)
if err != nil {
return nil, err
}
Expand All @@ -178,7 +184,8 @@ func ListStorage(client k8sclient.Client) ([]MigStorage, error) {
// Returns and empty list when none found.
func ListHook(client k8sclient.Client) ([]MigHook, error) {
list := MigHookList{}
err := client.List(context.TODO(), &list)
inNamespace := k8sclient.InNamespace(OpenshiftMigrationNamespace)
err := client.List(context.TODO(), &list, inNamespace)
if err != nil {
return nil, err
}
Expand All @@ -190,7 +197,8 @@ func ListHook(client k8sclient.Client) ([]MigHook, error) {
// Returns and empty list when none found.
func ListMigrations(client k8sclient.Client) ([]MigMigration, error) {
list := MigMigrationList{}
err := client.List(context.TODO(), &list)
inNamespace := k8sclient.InNamespace(OpenshiftMigrationNamespace)
err := client.List(context.TODO(), &list, inNamespace)
if err != nil {
return nil, err
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,10 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
}

// Watch for changes to DirectImageMigration
err = c.Watch(&source.Kind{Type: &migapi.DirectImageMigration{}}, &handler.EnqueueRequestForObject{})
err = c.Watch(&source.Kind{Type: &migapi.DirectImageMigration{}},
&handler.EnqueueRequestForObject{},
&migref.MigrationNamespacePredicate{Namespace: migapi.OpenshiftMigrationNamespace},
)
if err != nil {
return err
}
Expand All @@ -70,18 +73,20 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
err = c.Watch(
&source.Kind{Type: &migapi.MigCluster{}},
handler.EnqueueRequestsFromMapFunc(func(a client.Object) []reconcile.Request {
return migref.GetRequests(a, migapi.DirectImageMigration{})
return migref.GetRequests(a, migapi.OpenshiftMigrationNamespace, migapi.DirectImageMigration{})
}),
&migref.MigrationNamespacePredicate{Namespace: migapi.OpenshiftMigrationNamespace},
)
if err != nil {
return err
}

// Watch for changes to DirectImageStreamMigrations
err = c.Watch(&source.Kind{Type: &migapi.DirectImageStreamMigration{}}, &handler.EnqueueRequestForOwner{
IsController: true,
OwnerType: &migapi.DirectImageMigration{},
})
err = c.Watch(&source.Kind{Type: &migapi.DirectImageStreamMigration{}},
&handler.EnqueueRequestForOwner{
IsController: true,
OwnerType: &migapi.DirectImageMigration{},
}, &migref.MigrationNamespacePredicate{Namespace: migapi.OpenshiftMigrationNamespace})
if err != nil {
return err
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
migrationv1alpha1 "github.com/konveyor/mig-controller/pkg/apis/migration/v1alpha1"
"github.com/onsi/gomega"
"golang.org/x/net/context"
kapi "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
Expand All @@ -33,13 +34,13 @@ import (

var c client.Client

var expectedRequest = reconcile.Request{NamespacedName: types.NamespacedName{Name: "foo", Namespace: "default"}}
var expectedRequest = reconcile.Request{NamespacedName: types.NamespacedName{Name: "foo", Namespace: migrationv1alpha1.OpenshiftMigrationNamespace}}

const timeout = time.Second * 5

func TestReconcile(t *testing.T) {
g := gomega.NewGomegaWithT(t)
instance := &migrationv1alpha1.DirectImageMigration{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "default"}}
instance := &migrationv1alpha1.DirectImageMigration{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: migrationv1alpha1.OpenshiftMigrationNamespace}}

// Setup the Manager and Controller. Wrap the Controller Reconcile function so it writes each request to a
// channel when it is finished.
Expand All @@ -53,7 +54,15 @@ func TestReconcile(t *testing.T) {
stopFunc := StartTestManager(mgr, g)

defer stopFunc()

err = c.Create(context.TODO(), &kapi.Namespace{
ObjectMeta: metav1.ObjectMeta{
Name: migrationv1alpha1.OpenshiftMigrationNamespace,
},
})
if apierrors.IsInvalid(err) {
t.Logf("failed to create object, got an invalid object error: %v", err)
return
}
// Create the DirectImageMigration object and expect the Reconcile and Deployment to be created
err = c.Create(context.TODO(), instance)
// The instance object may not be a valid object because it might be missing some required fields.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,9 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
}

// Watch for changes to DirectImageStreamMigration
err = c.Watch(&source.Kind{Type: &migapi.DirectImageStreamMigration{}}, &handler.EnqueueRequestForObject{})
err = c.Watch(&source.Kind{Type: &migapi.DirectImageStreamMigration{}},
&handler.EnqueueRequestForObject{},
&migref.MigrationNamespacePredicate{Namespace: migapi.OpenshiftMigrationNamespace})
if err != nil {
return err
}
Expand All @@ -70,8 +72,9 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
err = c.Watch(
&source.Kind{Type: &migapi.MigCluster{}},
handler.EnqueueRequestsFromMapFunc(func(a client.Object) []reconcile.Request {
return migref.GetRequests(a, migapi.DirectImageStreamMigration{})
return migref.GetRequests(a, migapi.OpenshiftMigrationNamespace, migapi.DirectImageStreamMigration{})
}),
&migref.MigrationNamespacePredicate{Namespace: migapi.OpenshiftMigrationNamespace},
)
if err != nil {
return err
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
migrationv1alpha1 "github.com/konveyor/mig-controller/pkg/apis/migration/v1alpha1"
"github.com/onsi/gomega"
"golang.org/x/net/context"
kapi "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
Expand All @@ -33,13 +34,13 @@ import (

var c client.Client

var expectedRequest = reconcile.Request{NamespacedName: types.NamespacedName{Name: "foo", Namespace: "default"}}
var expectedRequest = reconcile.Request{NamespacedName: types.NamespacedName{Name: "foo", Namespace: migrationv1alpha1.OpenshiftMigrationNamespace}}

const timeout = time.Second * 5

func TestReconcile(t *testing.T) {
g := gomega.NewGomegaWithT(t)
instance := &migrationv1alpha1.DirectImageStreamMigration{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "default"}}
instance := &migrationv1alpha1.DirectImageStreamMigration{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: migrationv1alpha1.OpenshiftMigrationNamespace}}

// Setup the Manager and Controller. Wrap the Controller Reconcile function so it writes each request to a
// channel when it is finished.
Expand All @@ -53,7 +54,15 @@ func TestReconcile(t *testing.T) {
stopFunc := StartTestManager(mgr, g)

defer stopFunc()

err = c.Create(context.TODO(), &kapi.Namespace{
ObjectMeta: metav1.ObjectMeta{
Name: migrationv1alpha1.OpenshiftMigrationNamespace,
},
})
if apierrors.IsInvalid(err) {
t.Logf("failed to create object, got an invalid object error: %v", err)
return
}
// Create the DirectImageStreamMigration object and expect the Reconcile and Deployment to be created
err = c.Create(context.TODO(), instance)
// The instance object may not be a valid object because it might be missing some required fields.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (

"github.com/konveyor/controller/pkg/logging"
migapi "github.com/konveyor/mig-controller/pkg/apis/migration/v1alpha1"
migref "github.com/konveyor/mig-controller/pkg/reference"
"github.com/opentracing/opentracing-go"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/runtime"
Expand Down Expand Up @@ -55,7 +56,9 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
}

// Watch for changes to DirectVolumeMigration
err = c.Watch(&source.Kind{Type: &migapi.DirectVolumeMigration{}}, &handler.EnqueueRequestForObject{})
err = c.Watch(&source.Kind{Type: &migapi.DirectVolumeMigration{}},
&handler.EnqueueRequestForObject{},
&migref.MigrationNamespacePredicate{Namespace: migapi.OpenshiftMigrationNamespace})
if err != nil {
return err
}
Expand All @@ -64,7 +67,8 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
&handler.EnqueueRequestForOwner{
IsController: true,
OwnerType: &migapi.DirectVolumeMigration{},
})
},
&migref.MigrationNamespacePredicate{Namespace: migapi.OpenshiftMigrationNamespace})
if err != nil {
return err
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
migrationv1alpha1 "github.com/konveyor/mig-controller/pkg/apis/migration/v1alpha1"
"github.com/onsi/gomega"
"golang.org/x/net/context"
kapi "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
Expand All @@ -33,14 +34,14 @@ import (

var c client.Client

var expectedRequest = reconcile.Request{NamespacedName: types.NamespacedName{Name: "foo", Namespace: "default"}}
var expectedRequest = reconcile.Request{NamespacedName: types.NamespacedName{Name: "foo", Namespace: migrationv1alpha1.OpenshiftMigrationNamespace}}
var depKey = types.NamespacedName{Name: "foo-deployment", Namespace: "default"}

const timeout = time.Second * 5

func TestReconcile(t *testing.T) {
g := gomega.NewGomegaWithT(t)
instance := &migrationv1alpha1.DirectVolumeMigration{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "default"}}
instance := &migrationv1alpha1.DirectVolumeMigration{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: migrationv1alpha1.OpenshiftMigrationNamespace}}

// Setup the Manager and Controller. Wrap the Controller Reconcile function so it writes each request to a
// channel when it is finished.
Expand All @@ -55,6 +56,15 @@ func TestReconcile(t *testing.T) {

defer stopFunc()

err = c.Create(context.TODO(), &kapi.Namespace{
ObjectMeta: metav1.ObjectMeta{
Name: migrationv1alpha1.OpenshiftMigrationNamespace,
},
})
if apierrors.IsInvalid(err) {
t.Logf("failed to create object, got an invalid object error: %v", err)
return
}
// Create the directvolumemigration object and expect the Reconcile and Deployment to be created
err = c.Create(context.TODO(), instance)
// The instance object may not be a valid object because it might be missing some required fields.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (
liberr "github.com/konveyor/controller/pkg/error"
"github.com/konveyor/controller/pkg/logging"
migapi "github.com/konveyor/mig-controller/pkg/apis/migration/v1alpha1"
migref "github.com/konveyor/mig-controller/pkg/reference"
kapi "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/runtime"
Expand Down Expand Up @@ -84,7 +85,9 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
}

// Watch for changes to DirectVolumeMigrationProgress
err = c.Watch(&source.Kind{Type: &migapi.DirectVolumeMigrationProgress{}}, &handler.EnqueueRequestForObject{})
err = c.Watch(&source.Kind{Type: &migapi.DirectVolumeMigrationProgress{}},
&handler.EnqueueRequestForObject{},
&migref.MigrationNamespacePredicate{Namespace: migapi.OpenshiftMigrationNamespace})
if err != nil {
return err
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,15 @@ import (

var c client.Client

var expectedRequest = reconcile.Request{NamespacedName: types.NamespacedName{Name: "foo", Namespace: "default"}}
var expectedRequest = reconcile.Request{NamespacedName: types.NamespacedName{Name: "foo", Namespace: v1alpha1.OpenshiftMigrationNamespace}}

//var depKey = types.NamespacedName{Name: "foo-deployment", Namespace: "default"}

const timeout = time.Second * 5

func TestReconcile(t *testing.T) {
g := gomega.NewGomegaWithT(t)
instance := &migapi.DirectVolumeMigrationProgress{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "default"}}
instance := &migapi.DirectVolumeMigrationProgress{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: v1alpha1.OpenshiftMigrationNamespace}}

// Setup the Manager and Controller. Wrap the Controller Reconcile function so it writes each request to a
// channel when it is finished.
Expand All @@ -66,6 +66,16 @@ func TestReconcile(t *testing.T) {

defer stopFunc()

err = c.Create(context.TODO(), &kapi.Namespace{
ObjectMeta: metav1.ObjectMeta{
Name: v1alpha1.OpenshiftMigrationNamespace,
},
})
if apierrors.IsInvalid(err) {
t.Logf("failed to create object, got an invalid object error: %v", err)
return
}

// Create the DirectVolumeMigrationProgress object and expect the Reconcile
err = c.Create(context.TODO(), instance)
// The instance object may not be a valid object because it might be missing some required fields.
Expand Down
4 changes: 3 additions & 1 deletion pkg/controller/miganalytic/miganalytics_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,9 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
err = c.Watch(
&source.Kind{Type: &migapi.MigAnalytic{}},
&handler.EnqueueRequestForObject{},
&AnalyticPredicate{})
&AnalyticPredicate{
Namespace: migapi.OpenshiftMigrationNamespace,
})
if err != nil {
log.Trace(err)
return err
Expand Down
13 changes: 12 additions & 1 deletion pkg/controller/miganalytic/predicate.go
Original file line number Diff line number Diff line change
@@ -1,21 +1,29 @@
package miganalytic

import (
migapi "github.com/konveyor/mig-controller/pkg/apis/migration/v1alpha1"
"reflect"

migapi "github.com/konveyor/mig-controller/pkg/apis/migration/v1alpha1"
"sigs.k8s.io/controller-runtime/pkg/event"
"sigs.k8s.io/controller-runtime/pkg/predicate"
)

type AnalyticPredicate struct {
predicate.Funcs
Namespace string
}

func (r AnalyticPredicate) Create(e event.CreateEvent) bool {
if r.Namespace != "" && r.Namespace != e.Object.GetNamespace() {
return false
}
return true
}

func (r AnalyticPredicate) Update(e event.UpdateEvent) bool {
if r.Namespace != "" && r.Namespace != e.ObjectNew.GetNamespace() {
return false
}
old, cast := e.ObjectOld.(*migapi.MigAnalytic)
if !cast {
return false
Expand All @@ -29,5 +37,8 @@ func (r AnalyticPredicate) Update(e event.UpdateEvent) bool {
}

func (r AnalyticPredicate) Delete(e event.DeleteEvent) bool {
if r.Namespace != "" && r.Namespace != e.Object.GetNamespace() {
return false
}
return true
}

0 comments on commit 8ed2a4f

Please sign in to comment.