Skip to content

Commit 774fe81

Browse files
committed
fix test
1 parent 2062094 commit 774fe81

File tree

4 files changed

+51
-35
lines changed

4 files changed

+51
-35
lines changed

internal/controller/gateway_controller.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/api7/api7-ingress-controller/internal/controller/config"
99
"github.com/api7/api7-ingress-controller/internal/controlplane"
1010
"github.com/api7/api7-ingress-controller/internal/controlplane/translator"
11+
"github.com/api7/gopkg/pkg/log"
1112
"github.com/go-logr/logr"
1213
corev1 "k8s.io/api/core/v1"
1314
"k8s.io/apimachinery/pkg/runtime"
@@ -214,6 +215,9 @@ func (r *GatewayReconciler) listGatewaysForHTTPRoute(_ context.Context, obj clie
214215
func (r *GatewayReconciler) processListenerConfig(tctx *translator.TranslateContext, listeners []gatewayv1.Listener, ns string) error {
215216
var terror error
216217
for _, listener := range listeners {
218+
if listener.TLS == nil || listener.TLS.CertificateRefs == nil {
219+
continue
220+
}
217221
secret := corev1.Secret{}
218222
for _, ref := range listener.TLS.CertificateRefs {
219223
if ref.Namespace != nil {
@@ -223,9 +227,11 @@ func (r *GatewayReconciler) processListenerConfig(tctx *translator.TranslateCont
223227
Namespace: ns,
224228
Name: string(ref.Name),
225229
}, &secret); err != nil {
230+
log.Error(err, "failed to get secret", "namespace", ns, "name", string(ref.Name))
226231
terror = err
227232
break
228233
}
234+
log.Info("Setting secret for listener", "listener", listener.Name, "secret", secret.Name, " namespace", ns)
229235
tctx.Secrets[types.NamespacedName{Namespace: ns, Name: string(ref.Name)}] = &secret
230236
}
231237
}

internal/controlplane/translator/gateway.go

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
v1 "github.com/api7/api7-ingress-controller/api/dashboard/v1"
77
"github.com/api7/api7-ingress-controller/internal/controlplane/label"
88
"github.com/api7/api7-ingress-controller/pkg/id"
9+
"github.com/api7/gopkg/pkg/log"
910
"github.com/pkg/errors"
1011
corev1 "k8s.io/api/core/v1"
1112
"k8s.io/apimachinery/pkg/types"
@@ -15,36 +16,51 @@ import (
1516
func (t *Translator) TranslateGateway(tctx *TranslateContext, obj *gatewayv1.Gateway) (*TranslateResult, error) {
1617
result := &TranslateResult{}
1718
for _, listener := range obj.Spec.Listeners {
18-
tctx.GatewayTLSConfig = append(tctx.GatewayTLSConfig, *listener.TLS)
19-
ssl, err := t.translateSecret(tctx, listener, obj)
20-
if err != nil {
21-
return nil, fmt.Errorf("failed to translate secret: %w", err)
19+
if listener.TLS != nil {
20+
tctx.GatewayTLSConfig = append(tctx.GatewayTLSConfig, *listener.TLS)
21+
ssl, err := t.translateSecret(tctx, listener, obj)
22+
if err != nil {
23+
return nil, fmt.Errorf("failed to translate secret: %w", err)
24+
}
25+
result.SSL = append(result.SSL, ssl...)
2226
}
23-
result.SSL = append(result.SSL, ssl)
2427
}
2528
return result, nil
2629
}
2730

28-
func (t *Translator) translateSecret(tctx *TranslateContext, listener gatewayv1.Listener, obj *gatewayv1.Gateway) (*v1.Ssl, error) {
31+
func (t *Translator) translateSecret(tctx *TranslateContext, listener gatewayv1.Listener, obj *gatewayv1.Gateway) ([]*v1.Ssl, error) {
2932
if tctx.Secrets == nil {
3033
return nil, nil
3134
}
32-
sslObj := &v1.Ssl{}
33-
ns := obj.GetNamespace()
34-
name := obj.GetName()
35-
sslObj.ID = id.GenID(fmt.Sprintf("%s_%s_%s", ns, name, listener.Name))
36-
if listener.Hostname != nil && *listener.Hostname != "" {
37-
sslObj.Snis = []string{string(*listener.Hostname)}
35+
if listener.TLS.CertificateRefs == nil {
36+
return nil, fmt.Errorf("no certificateRefs found in listener %s", listener.Name)
3837
}
39-
secret := tctx.Secrets[types.NamespacedName{Namespace: ns, Name: name}]
40-
cert, key, err := extractKeyPair(secret, true)
41-
if err != nil {
42-
return nil, err
38+
sslObjs := make([]*v1.Ssl, 0)
39+
ns := obj.GetNamespace()
40+
gatewayName := obj.GetName()
41+
42+
for _, ref := range listener.TLS.CertificateRefs {
43+
sslObj := &v1.Ssl{}
44+
sslObj.ID = id.GenID(fmt.Sprintf("%s_%s_%s", ns, gatewayName, listener.Name))
45+
if listener.Hostname != nil && *listener.Hostname != "" {
46+
sslObj.Snis = []string{string(*listener.Hostname)}
47+
}
48+
name := listener.TLS.CertificateRefs[0].Name
49+
secret := tctx.Secrets[types.NamespacedName{Namespace: ns, Name: string(ref.Name)}]
50+
if secret.Data == nil {
51+
log.Error("secret data is nil", "secret", secret)
52+
return nil, fmt.Errorf("no secret data found for %s/%s", ns, name)
53+
}
54+
cert, key, err := extractKeyPair(secret, true)
55+
if err != nil {
56+
return nil, err
57+
}
58+
sslObj.Cert = string(cert)
59+
sslObj.Key = string(key)
60+
sslObj.Labels = label.GenLabel(obj)
61+
sslObjs = append(sslObjs, sslObj)
4362
}
44-
sslObj.Cert = string(cert)
45-
sslObj.Key = string(key)
46-
sslObj.Labels = label.GenLabel(obj)
47-
return sslObj, nil
63+
return sslObjs, nil
4864
}
4965

5066
func extractKeyPair(s *corev1.Secret, hasPrivateKey bool) ([]byte, []byte, error) {

internal/manager/controllers.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ func setupControllers(ctx context.Context, mgr manager.Manager, cpclient control
2929
Log: ctrl.LoggerFrom(ctx).WithName("controllers").WithName("GatewayClass"),
3030
},
3131
&controller.GatewayReconciler{
32-
Client: mgr.GetClient(),
33-
Scheme: mgr.GetScheme(),
34-
Log: ctrl.LoggerFrom(ctx).WithName("controllers").WithName("Gateway"),
32+
Client: mgr.GetClient(),
33+
ControlPlaneClient: cpclient,
34+
Scheme: mgr.GetScheme(),
35+
Log: ctrl.LoggerFrom(ctx).WithName("controllers").WithName("Gateway"),
3536
},
3637
&controller.HTTPRouteReconciler{
3738
Client: mgr.GetClient(),

pkg/dashboard/ssl.go

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,8 @@ type sslClient struct {
3333
}
3434

3535
func newSSLClient(c *cluster) SSL {
36-
if c.adminVersion == "v3" {
37-
return &sslClient{
38-
url: c.baseURL + "/ssls",
39-
cluster: c,
40-
}
41-
}
42-
4336
return &sslClient{
44-
url: c.baseURL + "/ssl",
37+
url: c.baseURL + "/ssls",
4538
cluster: c,
4639
}
4740
}
@@ -66,7 +59,7 @@ func (s *sslClient) List(ctx context.Context) ([]*v1.Ssl, error) {
6659
zap.String("cluster", s.cluster.name),
6760
)
6861
url := s.url
69-
sslItems, err := s.cluster.listResource(ctx, url, "ssl")
62+
sslItems, err := s.cluster.listResource(ctx, url, "ssls")
7063
if err != nil {
7164
log.Errorf("failed to list ssl: %s", err)
7265
return nil, err
@@ -103,7 +96,7 @@ func (s *sslClient) Create(ctx context.Context, obj *v1.Ssl) (*v1.Ssl, error) {
10396
}
10497
url := s.url + "/" + obj.ID
10598
log.Debugw("creating ssl", zap.ByteString("body", data), zap.String("url", url))
106-
resp, err := s.cluster.createResource(ctx, url, "ssl", data)
99+
resp, err := s.cluster.createResource(ctx, url, "ssls", data)
107100
if err != nil {
108101
log.Errorf("failed to create ssl: %s", err)
109102
return nil, err
@@ -130,7 +123,7 @@ func (s *sslClient) Delete(ctx context.Context, obj *v1.Ssl) error {
130123
return err
131124
}
132125
url := s.url + "/" + obj.ID
133-
if err := s.cluster.deleteResource(ctx, url, "ssl"); err != nil {
126+
if err := s.cluster.deleteResource(ctx, url, "ssls"); err != nil {
134127
return err
135128
}
136129
if err := s.cluster.cache.DeleteSSL(obj); err != nil {
@@ -148,7 +141,7 @@ func (s *sslClient) Update(ctx context.Context, obj *v1.Ssl) (*v1.Ssl, error) {
148141
ctx,
149142
obj,
150143
url,
151-
"ssl",
144+
"ssls",
152145
s.cluster.updateResource,
153146
s.cluster.cache.InsertSSL,
154147
func(resp *getResponse) (*v1.Ssl, error) {

0 commit comments

Comments
 (0)