This is an automated email from the ASF dual-hosted git repository.

bzp2010 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git


The following commit(s) were added to refs/heads/master by this push:
     new 8157735a feat: prepare isolate bad resource (#2880)
8157735a is described below

commit 8157735abd3fbfeb7488c0110c43af0b83859f93
Author: Zeping Bai <[email protected]>
AuthorDate: Thu Sep 17 13:45:26 2026 +0800

    feat: prepare isolate bad resource (#2880)
---
 .github/workflows/apisix-e2e-test.yml    |  2 +-
 Makefile                                 |  2 +-
 api/adc/types.go                         | 12 +++++++++++
 config/manager/kustomization.yaml        |  2 +-
 internal/adc/translator/consumer.go      |  3 +++
 internal/adc/translator/consumer_test.go | 34 ++++++++++++++++++++++++++++++++
 internal/adc/translator/gateway.go       |  2 +-
 7 files changed, 53 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/apisix-e2e-test.yml 
b/.github/workflows/apisix-e2e-test.yml
index 1a00f63b..ea669f54 100644
--- a/.github/workflows/apisix-e2e-test.yml
+++ b/.github/workflows/apisix-e2e-test.yml
@@ -30,7 +30,7 @@ concurrency:
   cancel-in-progress: true
 
 env:
-  ADC_RUST_VERSION: "0.30.3"
+  ADC_RUST_VERSION: "0.30.5"
 
 jobs:
   e2e-test:
diff --git a/Makefile b/Makefile
index a224f6b5..2736bee9 100644
--- a/Makefile
+++ b/Makefile
@@ -29,7 +29,7 @@ KIND_NAME ?= apisix-ingress-cluster
 CLOUD_PROVIDER_KIND_VERSION ?= v0.6.0
 CLOUD_PROVIDER_KIND_PID ?= /tmp/cloud-provider-kind.pid
 
-ADC_VERSION ?= 0.29.0
+ADC_VERSION ?= 0.30.5
 
 DIR := $(shell pwd)
 
diff --git a/api/adc/types.go b/api/adc/types.go
index 38fb3983..cbda8c66 100644
--- a/api/adc/types.go
+++ b/api/adc/types.go
@@ -36,6 +36,12 @@ const (
        TypeSSL            = "ssl"
        TypeGlobalRule     = "global_rule"
        TypePluginMetadata = "plugin_metadata"
+       // TypeStreamRoute, TypeUpstream and TypeConsumerCredential only ever 
name a nested
+       // entity in an ADC event: a stream route or named upstream inside a 
service, a
+       // credential inside a consumer.
+       TypeStreamRoute        = "stream_route"
+       TypeUpstream           = "upstream"
+       TypeConsumerCredential = "consumer_credential"
 )
 
 type Object interface {
@@ -541,6 +547,12 @@ func ComposeStreamRouteName(namespace, name string, rule 
string, typ string) str
        return buf.String()
 }
 
+// ComposeGatewayListenerSSLName composes the name a Gateway listener's 
certificateRef at
+// refIndex is identified by; its SSL id is generated from it.
+func ComposeGatewayListenerSSLName(kind, namespace, name, listener string, 
refIndex int) string {
+       return fmt.Sprintf("%s_%s_%d", ComposeSSLName(kind, namespace, name), 
listener, refIndex)
+}
+
 func ComposeServiceNameWithRule(namespace, name string, rule string) string {
        // FIXME Use sync.Pool to reuse this buffer if the upstream
        // name composing code path is hot.
diff --git a/config/manager/kustomization.yaml 
b/config/manager/kustomization.yaml
index 7410dcd1..a55e9a6b 100644
--- a/config/manager/kustomization.yaml
+++ b/config/manager/kustomization.yaml
@@ -17,4 +17,4 @@ images:
   newTag: dev
 - name: sidecar
   newName: ghcr.io/api7/adc
-  newTag: 0.30.3
+  newTag: 0.30.5
diff --git a/internal/adc/translator/consumer.go 
b/internal/adc/translator/consumer.go
index d7e638be..2f75dd86 100644
--- a/internal/adc/translator/consumer.go
+++ b/internal/adc/translator/consumer.go
@@ -19,12 +19,14 @@ package translator
 
 import (
        "encoding/json"
+       "fmt"
 
        "k8s.io/apimachinery/pkg/types"
 
        adctypes "github.com/apache/apisix-ingress-controller/api/adc"
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        "github.com/apache/apisix-ingress-controller/internal/controller/label"
+       "github.com/apache/apisix-ingress-controller/internal/id"
        "github.com/apache/apisix-ingress-controller/internal/provider"
 )
 
@@ -42,6 +44,7 @@ func (t *Translator) TranslateConsumerV1alpha1(tctx 
*provider.TranslateContext,
        for _, credentialSpec := range consumerV.Spec.Credentials {
                credential := adctypes.Credential{}
                credential.Name = credentialSpec.Name
+               credential.ID = id.GenID(fmt.Sprintf("%s/credentials/%s", 
username, credentialSpec.Name))
                credential.Type = credentialSpec.Type
                if credentialSpec.SecretRef != nil {
                        ns := consumerV.Namespace
diff --git a/internal/adc/translator/consumer_test.go 
b/internal/adc/translator/consumer_test.go
index 6e8af842..8a07d152 100644
--- a/internal/adc/translator/consumer_test.go
+++ b/internal/adc/translator/consumer_test.go
@@ -23,6 +23,7 @@ import (
 
        "github.com/go-logr/logr"
        "github.com/stretchr/testify/require"
+       apiextensionsv1 
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
@@ -59,3 +60,36 @@ func 
TestTranslateConsumerV1alpha1_UsesMetadataLabelsWithoutOverwritingControlle
        require.Equal(t, consumer.Name, translated.Labels[label.LabelName])
        require.Equal(t, "apisix-ingress-controller", 
translated.Labels[label.LabelManagedBy])
 }
+
+// TestTranslateConsumerV1alpha1_GivesEveryCredentialAStableID covers the id a 
rejected
+// credential is reported under: without one of our own, ADC derives an id AIC 
cannot
+// match back to the credential.
+func TestTranslateConsumerV1alpha1_GivesEveryCredentialAStableID(t *testing.T) 
{
+       translator := NewTranslator(logr.Discard(), "")
+       consumer := &v1alpha1.Consumer{
+               ObjectMeta: metav1.ObjectMeta{Name: "demo", Namespace: 
"default"},
+               Spec: v1alpha1.ConsumerSpec{
+                       Credentials: []v1alpha1.Credential{
+                               {Name: "key", Type: "key-auth", Config: 
apiextensionsv1.JSON{Raw: []byte(`{"key":"k"}`)}},
+                               {Name: "basic", Type: "basic-auth", Config: 
apiextensionsv1.JSON{Raw: []byte(`{"username":"u","password":"p"}`)}},
+                       },
+               },
+       }
+
+       translate := func() []string {
+               result, err := 
translator.TranslateConsumerV1alpha1(provider.NewDefaultTranslateContext(context.Background()),
 consumer)
+               require.NoError(t, err)
+               require.Len(t, result.Consumers, 1)
+               var ids []string
+               for _, credential := range result.Consumers[0].Credentials {
+                       require.NotEmpty(t, credential.ID)
+                       ids = append(ids, credential.ID)
+               }
+               return ids
+       }
+
+       ids := translate()
+       require.Len(t, ids, 2)
+       require.NotEqual(t, ids[0], ids[1])
+       require.Equal(t, ids, translate())
+}
diff --git a/internal/adc/translator/gateway.go 
b/internal/adc/translator/gateway.go
index e4288c79..9f942faa 100644
--- a/internal/adc/translator/gateway.go
+++ b/internal/adc/translator/gateway.go
@@ -148,7 +148,7 @@ func (t *Translator) translateSecret(tctx 
*provider.TranslateContext, listener g
                                }
                                sslObj.Snis = 
sslutils.NormalizeHosts(sslObj.Snis)
                                sslObj.Client = client
-                               sslObj.ID = id.GenID(fmt.Sprintf("%s_%s_%d", 
adctypes.ComposeSSLName(internaltypes.KindGateway, obj.Namespace, obj.Name), 
listener.Name, refIndex))
+                               sslObj.ID = 
id.GenID(adctypes.ComposeGatewayListenerSSLName(internaltypes.KindGateway, 
obj.Namespace, obj.Name, string(listener.Name), refIndex))
                                t.Log.V(1).Info("generated ssl id", "ssl id", 
sslObj.ID, "secret", secretNN.String())
                                sslObj.Labels = label.GenLabel(obj)
                                sslObjs = append(sslObjs, sslObj)

Reply via email to