diff --git a/core/src/sealos/resolver.go b/core/src/sealos/resolver.go index 17980b511..ed0576265 100644 --- a/core/src/sealos/resolver.go +++ b/core/src/sealos/resolver.go @@ -331,7 +331,7 @@ func (r *resolver) resolveConnectionData( ) (*connectionData, error) { switch spec.EngineType { case string(engine.DatabaseType_Redis): - return r.resolveRedisConnectionData(ctx, namespace, resourceName) + return r.resolveRedisConnectionData(ctx, spec, namespace, resourceName) case string(engine.DatabaseType_MongoDB): return r.resolveMongoDBConnectionData(ctx, spec, namespace, resourceName) case string(engine.DatabaseType_ClickHouse): @@ -398,12 +398,20 @@ func (r *resolver) resolveMongoDBConnectionData( func (r *resolver) resolveRedisConnectionData( ctx context.Context, + spec dbTypeSpec, namespace string, resourceName string, ) (*connectionData, error) { secretName := resourceName + "-redis-account-default" accountSecret, err := r.clientset.CoreV1().Secrets(namespace).Get(ctx, secretName, metav1.GetOptions{}) if err != nil { + if apierrors.IsNotFound(err) { + secretData, fallbackErr := r.readConnCredentialSecret(ctx, namespace, resourceName) + if fallbackErr != nil { + return nil, fallbackErr + } + return genericResolveFromSecret(spec, secretData, namespace), nil + } return nil, fmt.Errorf("read redis account secret: %w", err) } diff --git a/core/src/sealos/resolver_test.go b/core/src/sealos/resolver_test.go index 1c3ee666b..28726aec6 100644 --- a/core/src/sealos/resolver_test.go +++ b/core/src/sealos/resolver_test.go @@ -113,6 +113,42 @@ func TestResolveBootstrapForRedisUsesAccountSecretAndService(t *testing.T) { } } +func TestResolveBootstrapForRedisFallsBackToConnCredential(t *testing.T) { + clientset := fake.NewSimpleClientset( + &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-db-redis-conn-credential", + Namespace: "ns-q4jurwf5", + }, + Data: map[string][]byte{ + "username": []byte("default"), + "password": []byte("redis-password"), + "host": []byte("test-db-redis-redis"), + "port": []byte("6379"), + }, + }, + ) + + resolver := &resolver{ + kubeconfig: testKubeconfig("ns-q4jurwf5"), + clientset: clientset, + } + + result, err := resolver.ResolveBootstrap(context.Background(), BootstrapInput{ + DBType: "redis", + ResourceName: "test-db-redis", + }) + if err != nil { + t.Fatalf("expected redis generic conn-credential bootstrap to succeed, got %v", err) + } + if result.Host != "test-db-redis-redis.ns-q4jurwf5.svc" || result.Port != "6379" { + t.Fatalf("expected redis host/port from conn-credential, got %q:%q", result.Host, result.Port) + } + if result.Credentials.Username != "default" || result.Credentials.Password != "redis-password" { + t.Fatalf("expected redis credentials from conn-credential, got %#v", result.Credentials) + } +} + func TestResolveBootstrapForMongoDBUsesAccountSecretAndService(t *testing.T) { clientset := fake.NewSimpleClientset( &corev1.Secret{