@@ -39,7 +39,9 @@ import (
3939// upgradeDecision is the result of an upgrade check.
4040type upgradeDecision struct {
4141FromVersion driver.Version
42+ FromLicense upgraderules.License
4243ToVersion driver.Version
44+ ToLicense upgraderules.License
4345UpgradeNeeded bool // If set, the image version has changed
4446UpgradeAllowed bool // If set, it is an allowed version change
4547AutoUpgradeNeeded 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 ) {
160162var newPlan api.Plan
161163upgradeNotAllowed := false
162164var fromVersion , toVersion driver.Version
165+ var fromLicense , toLicense upgraderules.License
163166status .Members .ForeachServerGroup (func (group api.ServerGroup , members api.MemberStatusList ) error {
164167for _ , m := range members {
165168if m .Phase != api .MemberPhaseCreated {
@@ -174,7 +177,9 @@ func createPlan(log zerolog.Logger, apiObject k8sutil.APIObject,
174177// Oops, upgrade is not allowed
175178upgradeNotAllowed = true
176179fromVersion = decision .FromVersion
180+ fromLicense = decision .FromLicense
177181toVersion = decision .ToVersion
182+ toLicense = decision .ToLicense
178183return 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}
194199return 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
203208plan = newPlan
@@ -242,11 +247,21 @@ func podNeedsUpgrading(p v1.Pod, spec api.DeploymentSpec, images api.ImageInfoLi
242247// Image changed, check if change is allowed
243248specVersion := specImageInfo .ArangoDBVersion
244249podVersion := 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
247260return upgradeDecision {
248261FromVersion : podVersion ,
262+ FromLicense : podLicense ,
249263ToVersion : specVersion ,
264+ ToLicense : specLicense ,
250265UpgradeNeeded : true ,
251266UpgradeAllowed : false ,
252267}
@@ -255,7 +270,9 @@ func podNeedsUpgrading(p v1.Pod, spec api.DeploymentSpec, images api.ImageInfoLi
255270// Is allowed, with `--database.auto-upgrade`
256271return upgradeDecision {
257272FromVersion : podVersion ,
273+ FromLicense : podLicense ,
258274ToVersion : specVersion ,
275+ ToLicense : specLicense ,
259276UpgradeNeeded : true ,
260277UpgradeAllowed : true ,
261278AutoUpgradeNeeded : true ,
@@ -264,7 +281,9 @@ func podNeedsUpgrading(p v1.Pod, spec api.DeploymentSpec, images api.ImageInfoLi
264281// Patch version change, rotate only
265282return upgradeDecision {
266283FromVersion : podVersion ,
284+ FromLicense : podLicense ,
267285ToVersion : specVersion ,
286+ ToLicense : specLicense ,
268287UpgradeNeeded : true ,
269288UpgradeAllowed : true ,
270289AutoUpgradeNeeded : false ,
0 commit comments