@@ -39,7 +39,9 @@ import (
3939// upgradeDecision is the result of an upgrade check.
4040type upgradeDecision struct {
4141 FromVersion driver.Version
42+ FromLicense upgraderules.License
4243 ToVersion driver.Version
44+ ToLicense upgraderules.License
4345 UpgradeNeeded bool // If set, the image version has changed
4446 UpgradeAllowed bool // If set, it is an allowed version change
4547 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,
156158 // is needed. If an upgrade is needed but not allowed, the second return value
157159 // will be true.
158160 // 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 ) {
160162 var newPlan api.Plan
161163 upgradeNotAllowed := false
162164 var fromVersion , toVersion driver.Version
165+ var fromLicense , toLicense upgraderules.License
163166 status .Members .ForeachServerGroup (func (group api.ServerGroup , members api.MemberStatusList ) error {
164167 for _ , m := range members {
165168 if m .Phase != api .MemberPhaseCreated {
@@ -174,7 +177,9 @@ func createPlan(log zerolog.Logger, apiObject k8sutil.APIObject,
174177 // Oops, upgrade is not allowed
175178 upgradeNotAllowed = true
176179 fromVersion = decision .FromVersion
180+ fromLicense = decision .FromLicense
177181 toVersion = decision .ToVersion
182+ toLicense = decision .ToLicense
178183 return nil
179184 } else if len (newPlan ) == 0 {
180185 // Only rotate/upgrade 1 pod at a time
@@ -193,11 +198,11 @@ func createPlan(log zerolog.Logger, apiObject k8sutil.APIObject,
193198 }
194199 return nil
195200 })
196- return newPlan , upgradeNotAllowed , fromVersion , toVersion
201+ return newPlan , upgradeNotAllowed , fromVersion , toVersion , fromLicense , toLicense
197202 }
198- if newPlan , upgradeNotAllowed , fromVersion , toVersion := createRotateOrUpgradePlan (); upgradeNotAllowed {
203+ if newPlan , upgradeNotAllowed , fromVersion , toVersion , fromLicense , toLicense := createRotateOrUpgradePlan (); upgradeNotAllowed {
199204 // Upgrade is needed, but not allowed
200- context .CreateEvent (k8sutil .NewUpgradeNotAllowedEvent (apiObject , fromVersion , toVersion ))
205+ context .CreateEvent (k8sutil .NewUpgradeNotAllowedEvent (apiObject , fromVersion , toVersion , fromLicense , toLicense ))
201206 } else {
202207 // Use the new plan
203208 plan = newPlan
@@ -242,11 +247,21 @@ func podNeedsUpgrading(p v1.Pod, spec api.DeploymentSpec, images api.ImageInfoLi
242247 // Image changed, check if change is allowed
243248 specVersion := specImageInfo .ArangoDBVersion
244249 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 {
246259 // E.g. 3.x -> 4.x, we cannot allow automatically
247260 return upgradeDecision {
248261 FromVersion : podVersion ,
262+ FromLicense : podLicense ,
249263 ToVersion : specVersion ,
264+ ToLicense : specLicense ,
250265 UpgradeNeeded : true ,
251266 UpgradeAllowed : false ,
252267 }
@@ -255,7 +270,9 @@ func podNeedsUpgrading(p v1.Pod, spec api.DeploymentSpec, images api.ImageInfoLi
255270 // Is allowed, with `--database.auto-upgrade`
256271 return upgradeDecision {
257272 FromVersion : podVersion ,
273+ FromLicense : podLicense ,
258274 ToVersion : specVersion ,
275+ ToLicense : specLicense ,
259276 UpgradeNeeded : true ,
260277 UpgradeAllowed : true ,
261278 AutoUpgradeNeeded : true ,
@@ -264,7 +281,9 @@ func podNeedsUpgrading(p v1.Pod, spec api.DeploymentSpec, images api.ImageInfoLi
264281 // Patch version change, rotate only
265282 return upgradeDecision {
266283 FromVersion : podVersion ,
284+ FromLicense : podLicense ,
267285 ToVersion : specVersion ,
286+ ToLicense : specLicense ,
268287 UpgradeNeeded : true ,
269288 UpgradeAllowed : true ,
270289 AutoUpgradeNeeded : false ,
0 commit comments