@@ -5,22 +5,23 @@ import (
5
5
"fmt"
6
6
7
7
"github.com/borchero/switchboard/internal/k8s"
8
+ "github.com/imdario/mergo"
8
9
certmanager "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1"
9
- cmmeta "github.com/jetstack/cert-manager/pkg/apis/meta /v1"
10
+ v1 "github.com/jetstack/cert-manager/pkg/apis/certmanager /v1"
10
11
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11
12
"sigs.k8s.io/controller-runtime/pkg/client"
12
13
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
13
14
)
14
15
15
16
type certManager struct {
16
- client client.Client
17
- issuer cmmeta. ObjectReference
17
+ client client.Client
18
+ template v1. Certificate
18
19
}
19
20
20
21
// NewCertManager initializes a new cert-manager integration which creates certificates which use
21
22
// the provided issuer.
22
- func NewCertManager (client client.Client , issuer cmmeta. ObjectReference ) Integration {
23
- return & certManager {client , issuer }
23
+ func NewCertManager (client client.Client , template v1. Certificate ) Integration {
24
+ return & certManager {client , template }
24
25
}
25
26
26
27
func (* certManager ) Name () string {
@@ -52,14 +53,19 @@ func (c *certManager) UpdateResource(
52
53
resource := certmanager.Certificate {ObjectMeta : c .objectMeta (owner )}
53
54
if _ , err := controllerutil .CreateOrPatch (ctx , c .client , & resource , func () error {
54
55
// Meta
55
- if err := reconcileMetadata (owner , & resource , c .client .Scheme ()); err != nil {
56
- return err
56
+ if err := reconcileMetadata (
57
+ owner , & resource , c .client .Scheme (), & c .template .ObjectMeta ,
58
+ ); err != nil {
59
+ return fmt .Errorf ("failed to reconcile metadata: %s" , err )
57
60
}
61
+
58
62
// Spec
59
- resource .Spec .SecretName = * info .TLSSecretName
60
- resource .Spec .DNSNames = info .Hosts
61
- resource .Spec .IssuerRef .Kind = c .issuer .Kind
62
- resource .Spec .IssuerRef .Name = c .issuer .Name
63
+ template := c .template .Spec .DeepCopy ()
64
+ template .SecretName = * info .TLSSecretName
65
+ template .DNSNames = info .Hosts
66
+ if err := mergo .Merge (& resource .Spec , template , mergo .WithOverride ); err != nil {
67
+ return fmt .Errorf ("failed to reconcile specification: %s" , err )
68
+ }
63
69
return nil
64
70
}); err != nil {
65
71
return fmt .Errorf ("failed to upsert TLS certificate: %w" , err )
0 commit comments