Skip to content

Commit c936eb7

Browse files
committed
Merge branch 'release-v2-dev' into chore/add-consumer-plugins-test
2 parents ed38b59 + 414af9d commit c936eb7

File tree

6 files changed

+143
-5
lines changed

6 files changed

+143
-5
lines changed

internal/controller/consumer_controller.go

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,37 @@ func (r *ConsumerReconciler) SetupWithManager(mgr ctrl.Manager) error {
5959
},
6060
),
6161
).
62+
Watches(&corev1.Secret{},
63+
handler.EnqueueRequestsFromMapFunc(r.listConsumersForSecret),
64+
).
6265
Complete(r)
6366
}
6467

68+
func (r *ConsumerReconciler) listConsumersForSecret(ctx context.Context, obj client.Object) []reconcile.Request {
69+
secret, ok := obj.(*corev1.Secret)
70+
if !ok {
71+
r.Log.Error(nil, "failed to convert to Secret", "object", obj)
72+
return nil
73+
}
74+
consumerList := &v1alpha1.ConsumerList{}
75+
if err := r.List(ctx, consumerList, client.MatchingFields{
76+
indexer.SecretIndexRef: indexer.GenIndexKey(secret.GetNamespace(), secret.GetName()),
77+
}); err != nil {
78+
r.Log.Error(err, "failed to list consumers")
79+
return nil
80+
}
81+
requests := make([]reconcile.Request, 0, len(consumerList.Items))
82+
for _, consumer := range consumerList.Items {
83+
requests = append(requests, reconcile.Request{
84+
NamespacedName: client.ObjectKey{
85+
Name: consumer.Name,
86+
Namespace: consumer.Namespace,
87+
},
88+
})
89+
}
90+
return requests
91+
}
92+
6593
func (r *ConsumerReconciler) listConsumersForGateway(ctx context.Context, obj client.Object) []reconcile.Request {
6694
gateway, ok := obj.(*gatewayv1.Gateway)
6795
if !ok {
@@ -70,7 +98,7 @@ func (r *ConsumerReconciler) listConsumersForGateway(ctx context.Context, obj cl
7098
}
7199
consumerList := &v1alpha1.ConsumerList{}
72100
if err := r.List(ctx, consumerList, client.MatchingFields{
73-
indexer.ConsumerGatewayRef: indexer.GenIndexKey(gateway.Name, gateway.GetNamespace()),
101+
indexer.ConsumerGatewayRef: indexer.GenIndexKey(gateway.GetNamespace(), gateway.GetName()),
74102
}); err != nil {
75103
r.Log.Error(err, "failed to list consumers")
76104
return nil

internal/controller/gateway_controller.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ func (r *GatewayReconciler) SetupWithManager(mgr ctrl.Manager) error {
4242
predicate.NewPredicateFuncs(r.checkGatewayClass),
4343
),
4444
).
45-
WithEventFilter(predicate.GenerationChangedPredicate{}).
45+
WithEventFilter(predicate.Or(
46+
predicate.GenerationChangedPredicate{},
47+
predicate.AnnotationChangedPredicate{},
48+
)).
4649
Watches(
4750
&gatewayv1.GatewayClass{},
4851
handler.EnqueueRequestsFromMapFunc(r.listGatewayForGatewayClass),

internal/controller/indexer/indexer.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,35 @@ func setupConsumerIndexer(mgr ctrl.Manager) error {
5858
); err != nil {
5959
return err
6060
}
61+
if err := mgr.GetFieldIndexer().IndexField(
62+
context.Background(),
63+
&v1alpha1.Consumer{},
64+
SecretIndexRef,
65+
ConsumerSecretIndexFunc,
66+
); err != nil {
67+
return err
68+
}
6169
return nil
6270
}
71+
72+
func ConsumerSecretIndexFunc(rawObj client.Object) []string {
73+
consumer := rawObj.(*v1alpha1.Consumer)
74+
secretKeys := make([]string, 0)
75+
76+
for _, credential := range consumer.Spec.Credentials {
77+
if credential.SecretRef == nil {
78+
continue
79+
}
80+
ns := consumer.GetNamespace()
81+
if credential.SecretRef.Namespace != nil {
82+
ns = *credential.SecretRef.Namespace
83+
}
84+
key := GenIndexKey(ns, credential.SecretRef.Name)
85+
secretKeys = append(secretKeys, key)
86+
}
87+
return secretKeys
88+
}
89+
6390
func ConsumerGatewayRefIndexFunc(rawObj client.Object) []string {
6491
consumer := rawObj.(*v1alpha1.Consumer)
6592

internal/provider/adc/translator/consumer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func (t *Translator) TranslateConsumerV1alpha1(tctx *provider.TranslateContext,
3939
}
4040
authConfig := make(map[string]any)
4141
for k, v := range secret.Data {
42-
authConfig[k] = v
42+
authConfig[k] = string(v)
4343
}
4444
credential.Config = authConfig
4545
} else {

test/e2e/crds/consumer.go

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,87 @@ spec:
298298
})
299299
})
300300

301-
PContext("SecretRef", func() {
301+
Context("SecretRef", func() {
302+
var keyAuthSecret = `
303+
apiVersion: v1
304+
kind: Secret
305+
metadata:
306+
name: key-auth-secret
307+
data:
308+
key: c2FtcGxlLWtleQ==
309+
`
310+
var basicAuthSecret = `
311+
apiVersion: v1
312+
kind: Secret
313+
metadata:
314+
name: basic-auth-secret
315+
data:
316+
username: c2FtcGxlLXVzZXI=
317+
password: c2FtcGxlLXBhc3N3b3Jk
318+
`
319+
var defaultConsumer = `
320+
apiVersion: gateway.apisix.io/v1alpha1
321+
kind: Consumer
322+
metadata:
323+
name: consumer-sample
324+
spec:
325+
gatewayRef:
326+
name: api7ee
327+
credentials:
328+
- type: basic-auth
329+
name: basic-auth-sample
330+
secretRef:
331+
name: basic-auth-secret
332+
- type: key-auth
333+
name: key-auth-sample
334+
secretRef:
335+
name: key-auth-secret
336+
- type: key-auth
337+
name: key-auth-sample2
338+
config:
339+
key: sample-key2
340+
`
341+
BeforeEach(beforeEachHTTP)
342+
343+
It("Create/Update/Delete", func() {
344+
err := s.CreateResourceFromString(keyAuthSecret)
345+
Expect(err).NotTo(HaveOccurred(), "creating key-auth secret")
346+
err = s.CreateResourceFromString(basicAuthSecret)
347+
Expect(err).NotTo(HaveOccurred(), "creating basic-auth secret")
348+
s.ResourceApplied("Consumer", "consumer-sample", defaultConsumer, 1)
349+
350+
s.NewAPISIXClient().
351+
GET("/get").
352+
WithHeader("apikey", "sample-key").
353+
WithHost("httpbin.org").
354+
Expect().
355+
Status(200)
356+
357+
s.NewAPISIXClient().
358+
GET("/get").
359+
WithBasicAuth("sample-user", "sample-password").
360+
WithHost("httpbin.org").
361+
Expect().
362+
Status(200)
363+
364+
By("delete consumer")
365+
err = s.DeleteResourceFromString(defaultConsumer)
366+
Expect(err).NotTo(HaveOccurred(), "deleting consumer")
367+
time.Sleep(5 * time.Second)
368+
369+
s.NewAPISIXClient().
370+
GET("/get").
371+
WithHeader("apikey", "sample-key").
372+
WithHost("httpbin.org").
373+
Expect().
374+
Status(401)
375+
376+
s.NewAPISIXClient().
377+
GET("/get").
378+
WithBasicAuth("sample-user", "sample-password").
379+
WithHost("httpbin.org").
380+
Expect().
381+
Status(401)
382+
})
302383
})
303384
})

test/e2e/scaffold/scaffold.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,6 @@ func (s *Scaffold) GetDeploymentLogs(name string) string {
512512
Resource("pods").
513513
Namespace(s.namespace).
514514
Name(pod.Name).SubResource("log").
515-
Param("container", name).
516515
Do(context.TODO()).
517516
Raw()
518517
if err == nil {

0 commit comments

Comments
 (0)