@@ -39,7 +39,9 @@ import (
39
39
// upgradeDecision is the result of an upgrade check.
40
40
type upgradeDecision struct {
41
41
FromVersion driver.Version
42
+ FromLicense upgraderules.License
42
43
ToVersion driver.Version
44
+ ToLicense upgraderules.License
43
45
UpgradeNeeded bool // If set, the image version has changed
44
46
UpgradeAllowed bool // If set, it is an allowed version change
45
47
AutoUpgradeNeeded bool // If set, the database must be started with `--database.auto-upgrade` once
@@ -156,10 +158,11 @@ func createPlan(log zerolog.Logger, apiObject k8sutil.APIObject,
156
158
// is needed. If an upgrade is needed but not allowed, the second return value
157
159
// will be true.
158
160
// Returns: (newPlan, upgradeNotAllowed)
159
- createRotateOrUpgradePlan := func () (api.Plan , bool , driver.Version , driver.Version ) {
161
+ createRotateOrUpgradePlan := func () (api.Plan , bool , driver.Version , driver.Version , upgraderules. License , upgraderules. License ) {
160
162
var newPlan api.Plan
161
163
upgradeNotAllowed := false
162
164
var fromVersion , toVersion driver.Version
165
+ var fromLicense , toLicense upgraderules.License
163
166
status .Members .ForeachServerGroup (func (group api.ServerGroup , members api.MemberStatusList ) error {
164
167
for _ , m := range members {
165
168
if m .Phase != api .MemberPhaseCreated {
@@ -174,7 +177,9 @@ func createPlan(log zerolog.Logger, apiObject k8sutil.APIObject,
174
177
// Oops, upgrade is not allowed
175
178
upgradeNotAllowed = true
176
179
fromVersion = decision .FromVersion
180
+ fromLicense = decision .FromLicense
177
181
toVersion = decision .ToVersion
182
+ toLicense = decision .ToLicense
178
183
return nil
179
184
} else if len (newPlan ) == 0 {
180
185
// Only rotate/upgrade 1 pod at a time
@@ -193,11 +198,11 @@ func createPlan(log zerolog.Logger, apiObject k8sutil.APIObject,
193
198
}
194
199
return nil
195
200
})
196
- return newPlan , upgradeNotAllowed , fromVersion , toVersion
201
+ return newPlan , upgradeNotAllowed , fromVersion , toVersion , fromLicense , toLicense
197
202
}
198
- if newPlan , upgradeNotAllowed , fromVersion , toVersion := createRotateOrUpgradePlan (); upgradeNotAllowed {
203
+ if newPlan , upgradeNotAllowed , fromVersion , toVersion , fromLicense , toLicense := createRotateOrUpgradePlan (); upgradeNotAllowed {
199
204
// Upgrade is needed, but not allowed
200
- context .CreateEvent (k8sutil .NewUpgradeNotAllowedEvent (apiObject , fromVersion , toVersion ))
205
+ context .CreateEvent (k8sutil .NewUpgradeNotAllowedEvent (apiObject , fromVersion , toVersion , fromLicense , toLicense ))
201
206
} else {
202
207
// Use the new plan
203
208
plan = newPlan
@@ -242,11 +247,21 @@ func podNeedsUpgrading(p v1.Pod, spec api.DeploymentSpec, images api.ImageInfoLi
242
247
// Image changed, check if change is allowed
243
248
specVersion := specImageInfo .ArangoDBVersion
244
249
podVersion := podImageInfo .ArangoDBVersion
245
- if err := upgraderules .CheckUpgradeRules (podVersion , specVersion ); err != nil {
250
+ asLicense := func (info api.ImageInfo ) upgraderules.License {
251
+ if info .Enterprise {
252
+ return upgraderules .LicenseEnterprise
253
+ }
254
+ return upgraderules .LicenseCommunity
255
+ }
256
+ specLicense := asLicense (specImageInfo )
257
+ podLicense := asLicense (podImageInfo )
258
+ if err := upgraderules .CheckUpgradeRulesWithLicense (podVersion , specVersion , podLicense , specLicense ); err != nil {
246
259
// E.g. 3.x -> 4.x, we cannot allow automatically
247
260
return upgradeDecision {
248
261
FromVersion : podVersion ,
262
+ FromLicense : podLicense ,
249
263
ToVersion : specVersion ,
264
+ ToLicense : specLicense ,
250
265
UpgradeNeeded : true ,
251
266
UpgradeAllowed : false ,
252
267
}
@@ -255,7 +270,9 @@ func podNeedsUpgrading(p v1.Pod, spec api.DeploymentSpec, images api.ImageInfoLi
255
270
// Is allowed, with `--database.auto-upgrade`
256
271
return upgradeDecision {
257
272
FromVersion : podVersion ,
273
+ FromLicense : podLicense ,
258
274
ToVersion : specVersion ,
275
+ ToLicense : specLicense ,
259
276
UpgradeNeeded : true ,
260
277
UpgradeAllowed : true ,
261
278
AutoUpgradeNeeded : true ,
@@ -264,7 +281,9 @@ func podNeedsUpgrading(p v1.Pod, spec api.DeploymentSpec, images api.ImageInfoLi
264
281
// Patch version change, rotate only
265
282
return upgradeDecision {
266
283
FromVersion : podVersion ,
284
+ FromLicense : podLicense ,
267
285
ToVersion : specVersion ,
286
+ ToLicense : specLicense ,
268
287
UpgradeNeeded : true ,
269
288
UpgradeAllowed : true ,
270
289
AutoUpgradeNeeded : false ,
0 commit comments