@@ -23,13 +23,13 @@ package reconcile
2323import (
2424 "context"
2525
26- "github.com/arangodb/go-driver"
2726 "github.com/arangodb/kube-arangodb/pkg/deployment/rotation"
2827
2928 "github.com/arangodb/kube-arangodb/pkg/deployment/features"
3029
3130 "github.com/arangodb/kube-arangodb/pkg/deployment/resources"
3231
32+ "github.com/arangodb/go-driver"
3333 upgraderules "github.com/arangodb/go-upgrade-rules"
3434 "github.com/arangodb/kube-arangodb/pkg/apis/deployment"
3535 api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
@@ -119,6 +119,26 @@ func createRotateOrUpgradePlanInternal(log zerolog.Logger, apiObject k8sutil.API
119119 decision := createRotateOrUpgradeDecision (log , spec , status , context )
120120
121121 if decision .IsUpgrade () {
122+
123+ for _ , m := range status .Members .AsList () {
124+ // Pre-check
125+ d := decision [m .Member .ID ]
126+ if ! d .upgrade {
127+ continue
128+ }
129+
130+ // We have member to upgrade
131+ if d .upgradeDecision .Hold {
132+ // Holding upgrade
133+ continue
134+ }
135+
136+ if ! d .upgradeDecision .UpgradeAllowed {
137+ context .CreateEvent (k8sutil .NewUpgradeNotAllowedEvent (apiObject , d .upgradeDecision .FromVersion , d .upgradeDecision .ToVersion , d .upgradeDecision .FromLicense , d .upgradeDecision .ToLicense ))
138+ return nil , false
139+ }
140+ }
141+
122142 // Upgrade phase
123143 // During upgrade always get first member which needs to be upgraded
124144 for _ , m := range status .Members .AsList () {
@@ -175,7 +195,7 @@ func createRotateOrUpgradePlanInternal(log zerolog.Logger, apiObject k8sutil.API
175195 }
176196
177197 if m .Member .Conditions .IsTrue (api .ConditionTypeRestart ) {
178- return createRotateMemberPlan (log , m .Member , m .Group , "Restart flag present" ), false
198+ return createRotateMemberPlan (log , m .Member , m .Group , spec , "Restart flag present" ), false
179199 }
180200 arangoMember , ok := cachedStatus .ArangoMember (m .Member .ArangoMemberName (apiObject .GetName (), m .Group ))
181201 if ! ok {
@@ -402,18 +422,15 @@ func createUpgradeMemberPlan(log zerolog.Logger, member api.MemberStatus,
402422 Str ("reason" , reason ).
403423 Str ("action" , string (upgradeAction )).
404424 Msg ("Creating upgrade plan" )
405- var plan = api.Plan {
406- api .NewAction (api .ActionTypeCleanTLSKeyfileCertificate , group , member .ID , "Remove server keyfile and enforce renewal/recreation" ),
425+
426+ plan := createRotateMemberPlanWithAction (member , group , upgradeAction , spec , reason )
427+
428+ if member .Image == nil || member .Image .Image != spec .GetImage () {
429+ plan = plan .Before (api .NewAction (api .ActionTypeSetMemberCurrentImage , group , member .ID , reason ).SetImage (spec .GetImage ()))
407430 }
408431 if status .CurrentImage == nil || status .CurrentImage .Image != spec .GetImage () {
409- plan = plan .After (api .NewAction (api .ActionTypeSetCurrentImage , group , "" , reason ).SetImage (spec .GetImage ()))
432+ plan = plan .Before (api .NewAction (api .ActionTypeSetCurrentImage , group , "" , reason ).SetImage (spec .GetImage ()))
410433 }
411- if member .Image == nil || member .Image .Image != spec .GetImage () {
412- plan = plan .After (api .NewAction (api .ActionTypeSetMemberCurrentImage , group , member .ID , reason ).SetImage (spec .GetImage ()))
413- }
414-
415- plan = plan .After (api .NewAction (upgradeAction , group , member .ID , reason ),
416- api .NewAction (api .ActionTypeWaitForMemberUp , group , member .ID ))
417434
418435 return withSecureWrap (member , group , spec , plan ... )
419436}
0 commit comments