@@ -17,6 +17,7 @@ import (
17
17
storageconfig "github.com/gitpod-io/gitpod/content-service/api/config"
18
18
"github.com/gitpod-io/gitpod/installer/pkg/common"
19
19
configv1 "github.com/gitpod-io/gitpod/installer/pkg/config/v1"
20
+ "github.com/gitpod-io/gitpod/installer/pkg/config/v1/experimental"
20
21
"github.com/gitpod-io/gitpod/ws-manager/api/config"
21
22
22
23
corev1 "k8s.io/api/core/v1"
@@ -25,7 +26,11 @@ import (
25
26
)
26
27
27
28
func configmap (ctx * common.RenderContext ) ([]runtime.Object , error ) {
28
- templatesCfg , tpls , err := buildWorkspaceTemplates (ctx )
29
+ cfgTpls := ctx .Config .Workspace .Templates
30
+ if cfgTpls == nil {
31
+ cfgTpls = & configv1.WorkspaceTemplates {}
32
+ }
33
+ templatesCfg , tpls , err := buildWorkspaceTemplates (ctx , cfgTpls , "" )
29
34
if err != nil {
30
35
return nil , err
31
36
}
@@ -43,6 +48,60 @@ func configmap(ctx *common.RenderContext) ([]runtime.Object, error) {
43
48
timeoutAfterClose = * ctx .Config .Workspace .TimeoutAfterClose
44
49
}
45
50
51
+ classes := map [string ]* config.WorkspaceClass {
52
+ "" : {
53
+ Container : config.ContainerConfiguration {
54
+ Requests : & config.ResourceConfiguration {
55
+ CPU : quantityString (ctx .Config .Workspace .Resources .Requests , corev1 .ResourceCPU ),
56
+ Memory : quantityString (ctx .Config .Workspace .Resources .Requests , corev1 .ResourceMemory ),
57
+ EphemeralStorage : quantityString (ctx .Config .Workspace .Resources .Requests , corev1 .ResourceEphemeralStorage ),
58
+ },
59
+ Limits : & config.ResourceConfiguration {
60
+ CPU : quantityString (ctx .Config .Workspace .Resources .Limits , corev1 .ResourceCPU ),
61
+ Memory : quantityString (ctx .Config .Workspace .Resources .Limits , corev1 .ResourceMemory ),
62
+ EphemeralStorage : quantityString (ctx .Config .Workspace .Resources .Limits , corev1 .ResourceEphemeralStorage ),
63
+ },
64
+ },
65
+ Templates : templatesCfg ,
66
+ },
67
+ }
68
+ err = ctx .WithExperimental (func (ucfg * experimental.Config ) error {
69
+ if ucfg .Workspace == nil {
70
+ return nil
71
+ }
72
+ for k , c := range ucfg .Workspace .WorkspaceClasses {
73
+ tplsCfg , ctpls , err := buildWorkspaceTemplates (ctx , & configv1.WorkspaceTemplates {
74
+ Default : c .Templates .Default ,
75
+ Prebuild : c .Templates .Prebuild ,
76
+ ImageBuild : c .Templates .ImageBuild ,
77
+ Regular : c .Templates .Regular ,
78
+ }, k )
79
+ if err != nil {
80
+ return err
81
+ }
82
+ classes [k ] = & config.WorkspaceClass {
83
+ Container : config.ContainerConfiguration {
84
+ Requests : & config.ResourceConfiguration {
85
+ CPU : quantityString (c .Resources .Requests , corev1 .ResourceCPU ),
86
+ Memory : quantityString (c .Resources .Requests , corev1 .ResourceMemory ),
87
+ EphemeralStorage : quantityString (c .Resources .Requests , corev1 .ResourceEphemeralStorage ),
88
+ },
89
+ Limits : & config.ResourceConfiguration {
90
+ CPU : quantityString (c .Resources .Limits , corev1 .ResourceCPU ),
91
+ Memory : quantityString (c .Resources .Limits , corev1 .ResourceMemory ),
92
+ EphemeralStorage : quantityString (c .Resources .Limits , corev1 .ResourceEphemeralStorage ),
93
+ },
94
+ },
95
+ Templates : tplsCfg ,
96
+ }
97
+ tpls = append (tpls , ctpls ... )
98
+ }
99
+ return nil
100
+ })
101
+ if err != nil {
102
+ return nil , err
103
+ }
104
+
46
105
wsmcfg := config.ServiceConfiguration {
47
106
Manager : config.Configuration {
48
107
Namespace : ctx .Namespace ,
@@ -60,21 +119,7 @@ func configmap(ctx *common.RenderContext) ([]runtime.Object, error) {
60
119
PrivateKey : "/ws-daemon-tls-certs/tls.key" ,
61
120
},
62
121
},
63
- Container : config.AllContainerConfiguration {
64
- Workspace : config.ContainerConfiguration {
65
- Requests : config.ResourceConfiguration {
66
- CPU : quantityString (ctx .Config .Workspace .Resources .Requests , corev1 .ResourceCPU ),
67
- Memory : quantityString (ctx .Config .Workspace .Resources .Requests , corev1 .ResourceMemory ),
68
- EphemeralStorage : quantityString (ctx .Config .Workspace .Resources .Requests , corev1 .ResourceEphemeralStorage ),
69
- },
70
- Limits : config.ResourceConfiguration {
71
- CPU : quantityString (ctx .Config .Workspace .Resources .Limits , corev1 .ResourceCPU ),
72
- Memory : quantityString (ctx .Config .Workspace .Resources .Limits , corev1 .ResourceMemory ),
73
- EphemeralStorage : quantityString (ctx .Config .Workspace .Resources .Requests , corev1 .ResourceEphemeralStorage ),
74
- },
75
- Image : "OVERWRITTEN-IN-REQUEST" ,
76
- },
77
- },
122
+ WorkspaceClasses : classes ,
78
123
HeartbeatInterval : util .Duration (30 * time .Second ),
79
124
GitpodHostURL : "https://" + ctx .Config .Domain ,
80
125
WorkspaceClusterHost : fmt .Sprintf ("ws.%s" , ctx .Config .Domain ),
@@ -84,7 +129,6 @@ func configmap(ctx *common.RenderContext) ([]runtime.Object, error) {
84
129
WorkspaceURLTemplate : fmt .Sprintf ("https://{{ .Prefix }}.ws.%s" , ctx .Config .Domain ),
85
130
WorkspacePortURLTemplate : fmt .Sprintf ("https://{{ .WorkspacePort }}-{{ .Prefix }}.ws.%s" , ctx .Config .Domain ),
86
131
WorkspaceHostPath : wsdaemon .HostWorkingArea ,
87
- WorkspacePodTemplate : templatesCfg ,
88
132
Timeouts : config.WorkspaceTimeoutConfiguration {
89
133
AfterClose : timeoutAfterClose ,
90
134
HeadlessWorkspace : util .Duration (1 * time .Hour ),
@@ -154,15 +198,11 @@ func configmap(ctx *common.RenderContext) ([]runtime.Object, error) {
154
198
return res , nil
155
199
}
156
200
157
- func buildWorkspaceTemplates (ctx * common.RenderContext ) (config.WorkspacePodTemplateConfiguration , []runtime.Object , error ) {
201
+ func buildWorkspaceTemplates (ctx * common.RenderContext , cfgTpls * configv1. WorkspaceTemplates , className string ) (config.WorkspacePodTemplateConfiguration , []runtime.Object , error ) {
158
202
var (
159
203
cfg config.WorkspacePodTemplateConfiguration
160
204
tpls = make (map [string ]string )
161
205
)
162
- cfgTpls := ctx .Config .Workspace .Templates
163
- if cfgTpls == nil {
164
- cfgTpls = & configv1.WorkspaceTemplates {}
165
- }
166
206
167
207
ops := []struct {
168
208
Name string
@@ -173,7 +213,6 @@ func buildWorkspaceTemplates(ctx *common.RenderContext) (config.WorkspacePodTemp
173
213
{Name : "imagebuild" , Path : & cfg .ImagebuildPath , Tpl : cfgTpls .ImageBuild },
174
214
{Name : "prebuild" , Path : & cfg .PrebuildPath , Tpl : cfgTpls .Prebuild },
175
215
{Name : "regular" , Path : & cfg .RegularPath , Tpl : cfgTpls .Regular },
176
- {Name : "probe" , Path : & cfg .ProbePath , Tpl : cfgTpls .Probe },
177
216
}
178
217
for _ , op := range ops {
179
218
if op .Tpl == nil {
@@ -183,7 +222,7 @@ func buildWorkspaceTemplates(ctx *common.RenderContext) (config.WorkspacePodTemp
183
222
if err != nil {
184
223
return cfg , nil , fmt .Errorf ("unable to marshal %s workspace template: %w" , op .Name , err )
185
224
}
186
- fn := op .Name + ".yaml"
225
+ fn := filepath . Join ( className , op .Name + ".yaml" )
187
226
* op .Path = filepath .Join (WorkspaceTemplatePath , fn )
188
227
tpls [fn ] = string (fc )
189
228
}
0 commit comments