Skip to content

Commit 94d7da7

Browse files
committed
add secret test
1 parent 151f42d commit 94d7da7

File tree

10 files changed

+287
-244
lines changed

10 files changed

+287
-244
lines changed

internal/controller/apisixconsumer_controller.go

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ import (
3232

3333
"github.com/apache/apisix-ingress-controller/api/v1alpha1"
3434
apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
35+
v2 "github.com/apache/apisix-ingress-controller/api/v2"
36+
"github.com/apache/apisix-ingress-controller/internal/controller/indexer"
3537
"github.com/apache/apisix-ingress-controller/internal/controller/status"
3638
"github.com/apache/apisix-ingress-controller/internal/provider"
3739
"github.com/apache/apisix-ingress-controller/internal/utils"
@@ -70,30 +72,34 @@ func (r *ApisixConsumerReconciler) Reconcile(ctx context.Context, req ctrl.Reque
7072
}
7173

7274
var (
73-
tctx = provider.NewDefaultTranslateContext(ctx)
74-
err error
75+
tctx = provider.NewDefaultTranslateContext(ctx)
76+
reasonErr error
7577
)
7678
defer func() {
77-
r.updateStatus(ac, err)
79+
r.updateStatus(ac, reasonErr)
7880
}()
7981

8082
ingressClass, err := GetIngressClass(tctx, r.Client, r.Log, ac.Spec.IngressClassName)
8183
if err != nil {
8284
r.Log.Error(err, "failed to get IngressClass")
85+
reasonErr = err
8386
return ctrl.Result{}, err
8487
}
8588

8689
if err := ProcessIngressClassParameters(tctx, r.Client, r.Log, ac, ingressClass); err != nil {
8790
r.Log.Error(err, "failed to process IngressClass parameters", "ingressClass", ingressClass.Name)
91+
reasonErr = err
8892
return ctrl.Result{}, err
8993
}
9094

9195
if err := r.processSpec(ctx, tctx, ac); err != nil {
96+
reasonErr = err
9297
return ctrl.Result{}, err
9398
}
9499

95100
if err := r.Provider.Update(ctx, tctx, ac); err != nil {
96101
r.Log.Error(err, "failed to update provider", "ApisixConsumer", ac)
102+
reasonErr = err
97103
return ctrl.Result{}, err
98104
}
99105
return ctrl.Result{}, nil
@@ -122,6 +128,9 @@ func (r *ApisixConsumerReconciler) SetupWithManager(mgr ctrl.Manager) error {
122128
Watches(&v1alpha1.GatewayProxy{},
123129
handler.EnqueueRequestsFromMapFunc(r.listApisixConsumerForGatewayProxy),
124130
).
131+
Watches(&corev1.Secret{},
132+
handler.EnqueueRequestsFromMapFunc(r.listApisixConsumerForSecret),
133+
).
125134
Named("apisixconsumer").
126135
Complete(r)
127136
}
@@ -161,6 +170,23 @@ func (r *ApisixConsumerReconciler) listApisixConsumerForIngressClass(ctx context
161170
)
162171
}
163172

173+
func (r *ApisixConsumerReconciler) listApisixConsumerForSecret(ctx context.Context, obj client.Object) []reconcile.Request {
174+
secret, ok := obj.(*corev1.Secret)
175+
if !ok {
176+
r.Log.Error(nil, "failed to convert to Secret", "object", obj)
177+
return nil
178+
}
179+
return ListRequests(
180+
ctx,
181+
r.Client,
182+
r.Log,
183+
&v2.ApisixConsumerList{},
184+
client.MatchingFields{
185+
indexer.SecretIndexRef: indexer.GenIndexKey(secret.GetNamespace(), secret.GetName()),
186+
},
187+
)
188+
}
189+
164190
func (r *ApisixConsumerReconciler) processSpec(ctx context.Context, tctx *provider.TranslateContext, ac *apiv2.ApisixConsumer) error {
165191
var secretRef *corev1.LocalObjectReference
166192
if ac.Spec.AuthParameter.KeyAuth != nil {
@@ -205,11 +231,7 @@ func (r *ApisixConsumerReconciler) updateStatus(consumer *apiv2.ApisixConsumer,
205231
NamespacedName: utils.NamespacedName(consumer),
206232
Resource: &apiv2.ApisixConsumer{},
207233
Mutator: status.MutatorFunc(func(obj client.Object) client.Object {
208-
ac, ok := obj.(*apiv2.ApisixConsumer)
209-
if !ok {
210-
err := fmt.Errorf("unsupported object type %T", obj)
211-
panic(err)
212-
}
234+
ac := obj.(*apiv2.ApisixConsumer)
213235
acCopy := ac.DeepCopy()
214236
acCopy.Status = consumer.Status
215237
return acCopy

internal/controller/apisixroute_controller.go

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import (
3535

3636
"github.com/apache/apisix-ingress-controller/api/v1alpha1"
3737
apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
38-
"github.com/apache/apisix-ingress-controller/internal/controller/config"
3938
"github.com/apache/apisix-ingress-controller/internal/controller/indexer"
4039
"github.com/apache/apisix-ingress-controller/internal/controller/status"
4140
"github.com/apache/apisix-ingress-controller/internal/provider"
@@ -511,45 +510,6 @@ func (r *ApisixRouteReconciler) listApisixRouteForApisixUpstream(ctx context.Con
511510
return pkgutils.DedupComparable(requests)
512511
}
513512

514-
func (r *ApisixRouteReconciler) matchesIngressController(obj client.Object) bool {
515-
ingressClass, ok := obj.(*networkingv1.IngressClass)
516-
if !ok {
517-
return false
518-
}
519-
return matchesController(ingressClass.Spec.Controller)
520-
}
521-
522-
func (r *ApisixRouteReconciler) getIngressClass(ar *apiv2.ApisixRoute) (*networkingv1.IngressClass, error) {
523-
if ar.Spec.IngressClassName == "" {
524-
return r.getDefaultIngressClass()
525-
}
526-
527-
var ic networkingv1.IngressClass
528-
if err := r.Get(context.Background(), client.ObjectKey{Name: ar.Spec.IngressClassName}, &ic); err != nil {
529-
return nil, err
530-
}
531-
return &ic, nil
532-
}
533-
534-
func (r *ApisixRouteReconciler) getDefaultIngressClass() (*networkingv1.IngressClass, error) {
535-
var icList networkingv1.IngressClassList
536-
if err := r.List(context.Background(), &icList, client.MatchingFields{
537-
indexer.IngressClass: config.GetControllerName(),
538-
}); err != nil {
539-
r.Log.Error(err, "failed to list ingress classes")
540-
return nil, err
541-
}
542-
for _, ic := range icList.Items {
543-
if IsDefaultIngressClass(&ic) && matchesController(ic.Spec.Controller) {
544-
return &ic, nil
545-
}
546-
}
547-
return nil, ReasonError{
548-
Reason: string(metav1.StatusReasonNotFound),
549-
Message: "default ingress class not found or dose not match the controller",
550-
}
551-
}
552-
553513
func (r *ApisixRouteReconciler) updateStatus(ar *apiv2.ApisixRoute, err error) {
554514
SetApisixCRDConditionAccepted(&ar.Status, ar.GetGeneration(), err)
555515
r.Updater.Update(status.Update{

internal/controller/consumer_controller.go

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -100,23 +100,15 @@ func (r *ConsumerReconciler) listConsumersForSecret(ctx context.Context, obj cli
100100
r.Log.Error(nil, "failed to convert to Secret", "object", obj)
101101
return nil
102102
}
103-
consumerList := &v1alpha1.ConsumerList{}
104-
if err := r.List(ctx, consumerList, client.MatchingFields{
105-
indexer.SecretIndexRef: indexer.GenIndexKey(secret.GetNamespace(), secret.GetName()),
106-
}); err != nil {
107-
r.Log.Error(err, "failed to list consumers")
108-
return nil
109-
}
110-
requests := make([]reconcile.Request, 0, len(consumerList.Items))
111-
for _, consumer := range consumerList.Items {
112-
requests = append(requests, reconcile.Request{
113-
NamespacedName: client.ObjectKey{
114-
Name: consumer.Name,
115-
Namespace: consumer.Namespace,
116-
},
117-
})
118-
}
119-
return requests
103+
return ListRequests(
104+
ctx,
105+
r.Client,
106+
r.Log,
107+
&v1alpha1.ConsumerList{},
108+
client.MatchingFields{
109+
indexer.SecretIndexRef: indexer.GenIndexKey(secret.GetNamespace(), secret.GetName()),
110+
},
111+
)
120112
}
121113

122114
func (r *ConsumerReconciler) listConsumersForGateway(ctx context.Context, obj client.Object) []reconcile.Request {

internal/controller/httproutepolicy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ func (r *IngressReconciler) updateHTTPRoutePolicyStatusOnDeleting(ctx context.Co
202202
if err := r.Get(ctx, namespacedName, &ingress); err != nil {
203203
continue
204204
}
205-
ingressClass, err := r.getIngressClass(&ingress)
205+
ingressClass, err := r.getIngressClass(ctx, &ingress)
206206
if err != nil {
207207
continue
208208
}

internal/controller/indexer/indexer.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"cmp"
1717
"context"
1818

19+
corev1 "k8s.io/api/core/v1"
1920
networkingv1 "k8s.io/api/networking/v1"
2021
"k8s.io/apimachinery/pkg/runtime/schema"
2122
"k8s.io/apimachinery/pkg/types"
@@ -56,6 +57,7 @@ func SetupIndexer(mgr ctrl.Manager) error {
5657
setupGatewayClassIndexer,
5758
setupApisixRouteIndexer,
5859
setupApisixPluginConfigIndexer,
60+
setupApisixConsumerIndexer,
5961
} {
6062
if err := setup(mgr); err != nil {
6163
return err
@@ -124,6 +126,18 @@ func setupApisixPluginConfigIndexer(mgr ctrl.Manager) error {
124126
return nil
125127
}
126128

129+
func setupApisixConsumerIndexer(mgr ctrl.Manager) error {
130+
if err := mgr.GetFieldIndexer().IndexField(
131+
context.Background(),
132+
&apiv2.ApisixConsumer{},
133+
SecretIndexRef,
134+
ApisixConsumerSecretIndexFunc,
135+
); err != nil {
136+
return err
137+
}
138+
return nil
139+
}
140+
127141
func ConsumerSecretIndexFunc(rawObj client.Object) []string {
128142
consumer := rawObj.(*v1alpha1.Consumer)
129143
secretKeys := make([]string, 0)
@@ -638,3 +652,25 @@ func ApisixPluginConfigSecretIndexFunc(obj client.Object) (keys []string) {
638652
}
639653
return
640654
}
655+
656+
func ApisixConsumerSecretIndexFunc(rawObj client.Object) (keys []string) {
657+
ac := rawObj.(*apiv2.ApisixConsumer)
658+
var secretRef *corev1.LocalObjectReference
659+
if ac.Spec.AuthParameter.KeyAuth != nil {
660+
secretRef = ac.Spec.AuthParameter.KeyAuth.SecretRef
661+
} else if ac.Spec.AuthParameter.BasicAuth != nil {
662+
secretRef = ac.Spec.AuthParameter.BasicAuth.SecretRef
663+
} else if ac.Spec.AuthParameter.JwtAuth != nil {
664+
secretRef = ac.Spec.AuthParameter.JwtAuth.SecretRef
665+
} else if ac.Spec.AuthParameter.WolfRBAC != nil {
666+
secretRef = ac.Spec.AuthParameter.WolfRBAC.SecretRef
667+
} else if ac.Spec.AuthParameter.HMACAuth != nil {
668+
secretRef = ac.Spec.AuthParameter.HMACAuth.SecretRef
669+
} else if ac.Spec.AuthParameter.LDAPAuth != nil {
670+
secretRef = ac.Spec.AuthParameter.LDAPAuth.SecretRef
671+
}
672+
if secretRef != nil {
673+
keys = append(keys, GenIndexKey(ac.GetNamespace(), secretRef.Name))
674+
}
675+
return
676+
}

0 commit comments

Comments
 (0)