Skip to content

Commit 67b2b7a

Browse files
authored
Merge pull request #237 from arangodb/feature/check-license-in-upgrade
Include license in upgrade check
2 parents 0165f98 + 670c74b commit 67b2b7a

File tree

2 files changed

+44
-8
lines changed

2 files changed

+44
-8
lines changed

pkg/deployment/reconcile/plan_builder.go

+24-5
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ import (
3939
// upgradeDecision is the result of an upgrade check.
4040
type 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,

pkg/util/k8sutil/events.go

+20-3
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"strings"
2828

2929
driver "github.com/arangodb/go-driver"
30+
upgraderules "github.com/arangodb/go-upgrade-rules"
3031
"k8s.io/api/core/v1"
3132
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3233
"k8s.io/apimachinery/pkg/runtime"
@@ -193,15 +194,31 @@ func NewDowntimeNotAllowedEvent(apiObject APIObject, operation string) *Event {
193194
}
194195

195196
// NewUpgradeNotAllowedEvent creates an event indicating that an upgrade (or downgrade) is not allowed.
196-
func NewUpgradeNotAllowedEvent(apiObject APIObject, fromVersion, toVersion driver.Version) *Event {
197+
func NewUpgradeNotAllowedEvent(apiObject APIObject,
198+
fromVersion, toVersion driver.Version,
199+
fromLicense, toLicense upgraderules.License) *Event {
197200
event := newDeploymentEvent(apiObject)
198201
event.Type = v1.EventTypeNormal
202+
formatLicense := func(l upgraderules.License) string {
203+
if l == upgraderules.LicenseCommunity {
204+
return "Community Edition"
205+
}
206+
return "Enterprise Edition"
207+
}
208+
var verb string
199209
if fromVersion.CompareTo(toVersion) < 0 {
200210
event.Reason = "Upgrade not allowed"
201-
event.Message = fmt.Sprintf("Upgrading ArangoDB from version %s to %s is not allowed", fromVersion, toVersion)
211+
verb = "Upgrading"
202212
} else {
203213
event.Reason = "Downgrade not allowed"
204-
event.Message = fmt.Sprintf("Downgrading ArangoDB from version %s to %s is not allowed", fromVersion, toVersion)
214+
verb = "Downgrading"
215+
}
216+
if fromLicense == toLicense {
217+
event.Message = fmt.Sprintf("%s ArangoDB %s from version %s to version %s is not allowed",
218+
verb, formatLicense(fromLicense), fromVersion, toVersion)
219+
} else {
220+
event.Message = fmt.Sprintf("%s ArangoDB from %s version %s to %s version %s is not allowed",
221+
verb, formatLicense(fromLicense), fromVersion, formatLicense(toLicense), toVersion)
205222
}
206223
return event
207224
}

0 commit comments

Comments
 (0)