2323package reconcile
2424
2525import (
26- "bytes"
2726 "context"
2827 "crypto/tls"
2928 "crypto/x509"
30- "encoding/pem"
3129 "fmt"
3230 "net/http"
3331 "net/url"
@@ -37,129 +35,16 @@ import (
3735 "github.com/arangodb/kube-arangodb/pkg/deployment/client"
3836 "github.com/arangodb/kube-arangodb/pkg/util/constants"
3937
40- "github.com/arangodb-helper/go-certificates "
38+ api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1 "
4139 "github.com/arangodb/kube-arangodb/pkg/deployment/resources"
4240 "github.com/arangodb/kube-arangodb/pkg/deployment/resources/inspector"
4341 "github.com/arangodb/kube-arangodb/pkg/util"
44- "github.com/pkg/errors"
45- core "k8s.io/api/core/v1"
46-
47- api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
4842 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
4943 "github.com/rs/zerolog"
5044)
5145
5246const CertificateRenewalMargin = 7 * 24 * time .Hour
5347
54- type Certificates []* x509.Certificate
55-
56- func (c Certificates ) Contains (cert * x509.Certificate ) bool {
57- for _ , localCert := range c {
58- if ! localCert .Equal (cert ) {
59- return false
60- }
61- }
62-
63- return true
64- }
65-
66- func (c Certificates ) ContainsAll (certs Certificates ) bool {
67- if len (certs ) == 0 {
68- return true
69- }
70-
71- for _ , cert := range certs {
72- if ! c .Contains (cert ) {
73- return false
74- }
75- }
76-
77- return true
78- }
79-
80- func (c Certificates ) ToPem () ([]byte , error ) {
81- bytes := bytes .NewBuffer ([]byte {})
82-
83- for _ , cert := range c {
84- if err := pem .Encode (bytes , & pem.Block {Type : "CERTIFICATE" , Bytes : cert .Raw }); err != nil {
85- return nil , err
86- }
87- }
88-
89- return bytes .Bytes (), nil
90- }
91-
92- func (c Certificates ) AsCertPool () * x509.CertPool {
93- cp := x509 .NewCertPool ()
94-
95- for _ , cert := range c {
96- cp .AddCert (cert )
97- }
98-
99- return cp
100- }
101-
102- func getCertsFromData (log zerolog.Logger , caPem []byte ) Certificates {
103- certs := make ([]* x509.Certificate , 0 , 2 )
104-
105- for {
106- pem , rest := pem .Decode (caPem )
107- if pem == nil {
108- break
109- }
110-
111- caPem = rest
112-
113- cert , err := x509 .ParseCertificate (pem .Bytes )
114- if err != nil {
115- // This error should be ignored
116- log .Error ().Err (err ).Msg ("Unable to parse certificate" )
117- continue
118- }
119-
120- certs = append (certs , cert )
121- }
122-
123- return certs
124- }
125-
126- func getCertsFromSecret (log zerolog.Logger , secret * core.Secret ) Certificates {
127- caPem , exists := secret .Data [core .ServiceAccountRootCAKey ]
128- if ! exists {
129- return nil
130- }
131-
132- return getCertsFromData (log , caPem )
133- }
134-
135- func getKeyCertFromCache (log zerolog.Logger , cachedStatus inspector.Inspector , spec api.DeploymentSpec , certName , keyName string ) (Certificates , interface {}, error ) {
136- caSecret , exists := cachedStatus .Secret (spec .TLS .GetCASecretName ())
137- if ! exists {
138- return nil , nil , errors .Errorf ("CA Secret does not exists" )
139- }
140-
141- return getKeyCertFromSecret (log , caSecret , keyName , certName )
142- }
143-
144- func getKeyCertFromSecret (log zerolog.Logger , secret * core.Secret , certName , keyName string ) (Certificates , interface {}, error ) {
145- ca , exists := secret .Data [certName ]
146- if ! exists {
147- return nil , nil , errors .Errorf ("Key %s missing in secret" , certName )
148- }
149-
150- key , exists := secret .Data [keyName ]
151- if ! exists {
152- return nil , nil , errors .Errorf ("Key %s missing in secret" , keyName )
153- }
154-
155- cert , keys , err := certificates .LoadFromPEM (string (ca ), string (key ))
156- if err != nil {
157- return nil , nil , err
158- }
159-
160- return cert , keys , nil
161- }
162-
16348// createTLSStatusUpdate creates plan to update ca info
16449func createTLSStatusUpdate (ctx context.Context ,
16550 log zerolog.Logger , apiObject k8sutil.APIObject ,
@@ -228,7 +113,7 @@ func createCAAppendPlan(ctx context.Context,
228113 return nil
229114 }
230115
231- ca , _ , err := getKeyCertFromSecret (log , caSecret , resources .CACertName , resources .CAKeyName )
116+ ca , _ , err := resources . GetKeyCertFromSecret (log , caSecret , resources .CACertName , resources .CAKeyName )
232117 if err != nil {
233118 log .Warn ().Err (err ).Str ("secret" , spec .TLS .GetCASecretName ()).Msg ("CA Secret does not contains Cert" )
234119 return nil
@@ -281,7 +166,7 @@ func createCARenewalPlan(ctx context.Context,
281166 return nil
282167 }
283168
284- cas , _ , err := getKeyCertFromSecret (log , caSecret , resources .CACertName , resources .CAKeyName )
169+ cas , _ , err := resources . GetKeyCertFromSecret (log , caSecret , resources .CACertName , resources .CAKeyName )
285170 if err != nil {
286171 log .Warn ().Err (err ).Str ("secret" , spec .TLS .GetCASecretName ()).Msg ("CA Secret does not contains Cert" )
287172 return nil
@@ -312,7 +197,7 @@ func createCACleanPlan(ctx context.Context,
312197 return nil
313198 }
314199
315- ca , _ , err := getKeyCertFromSecret (log , caSecret , resources .CACertName , resources .CAKeyName )
200+ ca , _ , err := resources . GetKeyCertFromSecret (log , caSecret , resources .CACertName , resources .CAKeyName )
316201 if err != nil {
317202 log .Warn ().Err (err ).Str ("secret" , spec .TLS .GetCASecretName ()).Msg ("CA Secret does not contains Cert" )
318203 return nil
@@ -461,7 +346,7 @@ func createKeyfileRenewalPlanMode(
461346 return mode
462347}
463348
464- func checkServerValidCertRequest (ctx context.Context , apiObject k8sutil.APIObject , group api.ServerGroup , member api.MemberStatus , ca Certificates ) (* tls.ConnectionState , error ) {
349+ func checkServerValidCertRequest (ctx context.Context , apiObject k8sutil.APIObject , group api.ServerGroup , member api.MemberStatus , ca resources. Certificates ) (* tls.ConnectionState , error ) {
465350 endpoint := fmt .Sprintf ("https://%s:%d" , k8sutil .CreatePodDNSName (apiObject , group .AsRole (), member .ID ), k8sutil .ArangoPort )
466351
467352 tlsConfig := & tls.Config {
@@ -493,7 +378,7 @@ func keyfileRenewalRequired(ctx context.Context,
493378 return false , false
494379 }
495380
496- ca , _ , err := getKeyCertFromSecret (log , caSecret , resources .CACertName , resources .CAKeyName )
381+ ca , _ , err := resources . GetKeyCertFromSecret (log , caSecret , resources .CACertName , resources .CAKeyName )
497382 if err != nil {
498383 log .Warn ().Err (err ).Str ("secret" , spec .TLS .GetCASecretName ()).Msg ("CA Secret does not contains Cert" )
499384 return false , false
0 commit comments