@@ -46,12 +46,17 @@ func cleanKey(key string, prefix string) string {
46
46
47
47
// SecretStorage facilitates storing certificates retrieved by certmagic in kubernetes secrets.
48
48
type SecretStorage struct {
49
- Namespace string
50
- KubeClient * kubernetes.Clientset
51
- LeaseId string
49
+ Namespace string
50
+ LeaseId string
51
+
52
+ kubeClient * kubernetes.Clientset
52
53
logger * zap.Logger
53
54
}
54
55
56
+ func init () {
57
+ caddy .RegisterModule (SecretStorage {})
58
+ }
59
+
55
60
func (SecretStorage ) CaddyModule () caddy.ModuleInfo {
56
61
return caddy.ModuleInfo {
57
62
ID : "caddy.storage.secret_store" ,
@@ -66,7 +71,7 @@ func (s *SecretStorage) Provision(ctx caddy.Context) error {
66
71
clientset , _ := kubernetes .NewForConfig (config )
67
72
68
73
s .logger = ctx .Logger (s )
69
- s .KubeClient = clientset
74
+ s .kubeClient = clientset
70
75
if s .LeaseId == "" {
71
76
s .LeaseId = uuid .New ().String ()
72
77
}
@@ -81,7 +86,7 @@ func (s *SecretStorage) CertMagicStorage() (certmagic.Storage, error) {
81
86
// Exists returns true if key exists in fs.
82
87
func (s * SecretStorage ) Exists (ctx context.Context , key string ) bool {
83
88
s .logger .Debug ("finding secret" , zap .String ("name" , key ))
84
- secrets , err := s .KubeClient .CoreV1 ().Secrets (s .Namespace ).List (context .TODO (), metav1.ListOptions {
89
+ secrets , err := s .kubeClient .CoreV1 ().Secrets (s .Namespace ).List (context .TODO (), metav1.ListOptions {
85
90
FieldSelector : fmt .Sprintf ("metadata.name=%v" , cleanKey (key , keyPrefix )),
86
91
})
87
92
@@ -115,10 +120,10 @@ func (s *SecretStorage) Store(ctx context.Context, key string, value []byte) err
115
120
var err error
116
121
if s .Exists (ctx , key ) {
117
122
s .logger .Debug ("creating secret" , zap .String ("name" , key ))
118
- _ , err = s .KubeClient .CoreV1 ().Secrets (s .Namespace ).Update (context .TODO (), & se , metav1.UpdateOptions {})
123
+ _ , err = s .kubeClient .CoreV1 ().Secrets (s .Namespace ).Update (context .TODO (), & se , metav1.UpdateOptions {})
119
124
} else {
120
125
s .logger .Debug ("updating secret" , zap .String ("name" , key ))
121
- _ , err = s .KubeClient .CoreV1 ().Secrets (s .Namespace ).Create (context .TODO (), & se , metav1.CreateOptions {})
126
+ _ , err = s .kubeClient .CoreV1 ().Secrets (s .Namespace ).Create (context .TODO (), & se , metav1.CreateOptions {})
122
127
}
123
128
124
129
if err != nil {
@@ -130,7 +135,7 @@ func (s *SecretStorage) Store(ctx context.Context, key string, value []byte) err
130
135
131
136
// Load retrieves the value at the given key.
132
137
func (s * SecretStorage ) Load (ctx context.Context , key string ) ([]byte , error ) {
133
- secret , err := s .KubeClient .CoreV1 ().Secrets (s .Namespace ).Get (context .TODO (), cleanKey (key , keyPrefix ), metav1.GetOptions {})
138
+ secret , err := s .kubeClient .CoreV1 ().Secrets (s .Namespace ).Get (context .TODO (), cleanKey (key , keyPrefix ), metav1.GetOptions {})
134
139
if err != nil {
135
140
if errors .IsNotFound (err ) {
136
141
return nil , fs .ErrNotExist
@@ -144,7 +149,7 @@ func (s *SecretStorage) Load(ctx context.Context, key string) ([]byte, error) {
144
149
145
150
// Delete deletes the value at the given key.
146
151
func (s * SecretStorage ) Delete (ctx context.Context , key string ) error {
147
- err := s .KubeClient .CoreV1 ().Secrets (s .Namespace ).Delete (context .TODO (), cleanKey (key , keyPrefix ), metav1.DeleteOptions {})
152
+ err := s .kubeClient .CoreV1 ().Secrets (s .Namespace ).Delete (context .TODO (), cleanKey (key , keyPrefix ), metav1.DeleteOptions {})
148
153
if err != nil {
149
154
return err
150
155
}
@@ -158,7 +163,7 @@ func (s *SecretStorage) List(ctx context.Context, prefix string, recursive bool)
158
163
var keys []string
159
164
160
165
s .logger .Debug ("listing secrets" , zap .String ("name" , prefix ))
161
- secrets , err := s .KubeClient .CoreV1 ().Secrets (s .Namespace ).List (context .TODO (), metav1.ListOptions {
166
+ secrets , err := s .kubeClient .CoreV1 ().Secrets (s .Namespace ).List (context .TODO (), metav1.ListOptions {
162
167
LabelSelector : labels .SelectorFromSet (matchLabels ).String (),
163
168
})
164
169
if err != nil {
@@ -178,7 +183,7 @@ func (s *SecretStorage) List(ctx context.Context, prefix string, recursive bool)
178
183
179
184
// Stat returns information about key.
180
185
func (s * SecretStorage ) Stat (ctx context.Context , key string ) (certmagic.KeyInfo , error ) {
181
- secret , err := s .KubeClient .CoreV1 ().Secrets (s .Namespace ).Get (context .TODO (), cleanKey (key , keyPrefix ), metav1.GetOptions {})
186
+ secret , err := s .kubeClient .CoreV1 ().Secrets (s .Namespace ).Get (context .TODO (), cleanKey (key , keyPrefix ), metav1.GetOptions {})
182
187
if err != nil {
183
188
return certmagic.KeyInfo {}, err
184
189
}
@@ -229,7 +234,7 @@ func (s *SecretStorage) tryAcquireOrRenew(ctx context.Context, key string, shoul
229
234
Name : key ,
230
235
Namespace : s .Namespace ,
231
236
},
232
- Client : s .KubeClient .CoordinationV1 (),
237
+ Client : s .kubeClient .CoordinationV1 (),
233
238
LockConfig : resourcelock.ResourceLockConfig {
234
239
Identity : s .LeaseId ,
235
240
},
@@ -280,6 +285,6 @@ func (s *SecretStorage) tryAcquireOrRenew(ctx context.Context, key string, shoul
280
285
}
281
286
282
287
func (s * SecretStorage ) Unlock (ctx context.Context , key string ) error {
283
- err := s .KubeClient .CoordinationV1 ().Leases (s .Namespace ).Delete (context .TODO (), cleanKey (key , leasePrefix ), metav1.DeleteOptions {})
288
+ err := s .kubeClient .CoordinationV1 ().Leases (s .Namespace ).Delete (context .TODO (), cleanKey (key , leasePrefix ), metav1.DeleteOptions {})
284
289
return err
285
290
}
0 commit comments