@@ -22,7 +22,9 @@ import (
22
22
"github.com/prometheus/client_golang/prometheus"
23
23
24
24
"google.golang.org/protobuf/proto"
25
+ corev1 "k8s.io/api/core/v1"
25
26
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27
+ "k8s.io/apimachinery/pkg/types"
26
28
"k8s.io/apimachinery/pkg/util/wait"
27
29
"k8s.io/client-go/util/retry"
28
30
ctrl "sigs.k8s.io/controller-runtime"
@@ -55,9 +57,10 @@ type WorkspaceController struct {
55
57
maxConcurrentReconciles int
56
58
operations * WorkspaceOperations
57
59
metrics * workspaceMetrics
60
+ secretNamespace string
58
61
}
59
62
60
- func NewWorkspaceController (c client.Client , nodeName string , maxConcurrentReconciles int , ops * WorkspaceOperations , reg prometheus.Registerer ) (* WorkspaceController , error ) {
63
+ func NewWorkspaceController (c client.Client , nodeName , secretNamespace string , maxConcurrentReconciles int , ops * WorkspaceOperations , reg prometheus.Registerer ) (* WorkspaceController , error ) {
61
64
metrics := newWorkspaceMetrics ()
62
65
reg .Register (metrics )
63
66
@@ -67,6 +70,7 @@ func NewWorkspaceController(c client.Client, nodeName string, maxConcurrentRecon
67
70
maxConcurrentReconciles : maxConcurrentReconciles ,
68
71
operations : ops ,
69
72
metrics : metrics ,
73
+ secretNamespace : secretNamespace ,
70
74
}, nil
71
75
}
72
76
@@ -139,10 +143,8 @@ func (wsc *WorkspaceController) handleWorkspaceInit(ctx context.Context, ws *wor
139
143
defer tracing .FinishSpan (span , & err )
140
144
141
145
if c := wsk8s .GetCondition (ws .Status .Conditions , string (workspacev1 .WorkspaceConditionContentReady )); c == nil {
142
- var init csapi.WorkspaceInitializer
143
- err = proto .Unmarshal (ws .Spec .Initializer , & init )
146
+ init , err := wsc .prepareInitializer (ctx , ws )
144
147
if err != nil {
145
- err = fmt .Errorf ("cannot unmarshal initializer config: %w" , err )
146
148
return ctrl.Result {}, err
147
149
}
148
150
@@ -153,7 +155,7 @@ func (wsc *WorkspaceController) handleWorkspaceInit(ctx context.Context, ws *wor
153
155
WorkspaceId : ws .Spec .Ownership .WorkspaceID ,
154
156
InstanceId : ws .Name ,
155
157
},
156
- Initializer : & init ,
158
+ Initializer : init ,
157
159
Headless : ws .IsHeadless (),
158
160
})
159
161
@@ -300,6 +302,27 @@ func (wsc *WorkspaceController) handleWorkspaceStop(ctx context.Context, ws *wor
300
302
return ctrl.Result {}, err
301
303
}
302
304
305
+ func (wsc * WorkspaceController ) prepareInitializer (ctx context.Context , ws * workspacev1.Workspace ) (* csapi.WorkspaceInitializer , error ) {
306
+ var init csapi.WorkspaceInitializer
307
+ err := proto .Unmarshal (ws .Spec .Initializer , & init )
308
+ if err != nil {
309
+ err = fmt .Errorf ("cannot unmarshal initializer config: %w" , err )
310
+ return nil , err
311
+ }
312
+
313
+ var tokenSecret corev1.Secret
314
+ err = wsc .Get (ctx , types.NamespacedName {Name : fmt .Sprintf ("%s-tokens" , ws .Name ), Namespace : wsc .secretNamespace }, & tokenSecret )
315
+ if err != nil {
316
+ return nil , fmt .Errorf ("could not get token secret for workspace: %w" , err )
317
+ }
318
+
319
+ if err = csapi .InjectSecretsToInitializer (& init , tokenSecret .Data ); err != nil {
320
+ return nil , fmt .Errorf ("failed to inject secrets into initializer: %w" , err )
321
+ }
322
+
323
+ return & init , nil
324
+ }
325
+
303
326
func toWorkspaceGitStatus (status * csapi.GitStatus ) * workspacev1.GitStatus {
304
327
if status == nil {
305
328
return nil
0 commit comments