Skip to content

Commit 6921111

Browse files
authored
Merge pull request #183 from arangodb/feature/change-storage-class
Allow changing server group storage class.
2 parents 6cac1c9 + cac9f2a commit 6921111

20 files changed

+275
-35
lines changed

pkg/apis/deployment/v1alpha/plan.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@ const (
5151
ActionTypeRenewTLSCACertificate ActionType = "RenewTLSCACertificate"
5252
)
5353

54+
const (
55+
// MemberIDPreviousAction is used for Action.MemberID when the MemberID
56+
// should be derived from the previous action.
57+
MemberIDPreviousAction = "@previous"
58+
)
59+
5460
// Action represents a single action to be taken to update a deployment.
5561
type Action struct {
5662
// ID of this action (unique for every action)

pkg/apis/deployment/v1alpha/server_group_spec.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,9 +191,5 @@ func (s ServerGroupSpec) ResetImmutableFields(group ServerGroup, fieldPrefix str
191191
resetFields = append(resetFields, fieldPrefix+".count")
192192
}
193193
}
194-
if s.GetStorageClassName() != target.GetStorageClassName() {
195-
target.StorageClassName = util.NewStringOrNil(s.StorageClassName)
196-
resetFields = append(resetFields, fieldPrefix+".storageClassName")
197-
}
198194
return resetFields
199195
}

pkg/deployment/context_impl.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"github.com/arangodb/arangosync/tasks"
3131
driver "github.com/arangodb/go-driver"
3232
"github.com/arangodb/go-driver/agency"
33+
"github.com/rs/zerolog/log"
3334
"k8s.io/api/core/v1"
3435
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3536
"k8s.io/client-go/kubernetes"
@@ -191,23 +192,23 @@ func (d *Deployment) GetSyncServerClient(ctx context.Context, group api.ServerGr
191192

192193
// CreateMember adds a new member to the given group.
193194
// If ID is non-empty, it will be used, otherwise a new ID is created.
194-
func (d *Deployment) CreateMember(group api.ServerGroup, id string) error {
195+
func (d *Deployment) CreateMember(group api.ServerGroup, id string) (string, error) {
195196
log := d.deps.Log
196197
status, lastVersion := d.GetStatus()
197198
id, err := createMember(log, &status, group, id, d.apiObject)
198199
if err != nil {
199200
log.Debug().Err(err).Str("group", group.AsRole()).Msg("Failed to create member")
200-
return maskAny(err)
201+
return "", maskAny(err)
201202
}
202203
// Save added member
203204
if err := d.UpdateStatus(status, lastVersion); err != nil {
204205
log.Debug().Err(err).Msg("Updating CR status failed")
205-
return maskAny(err)
206+
return "", maskAny(err)
206207
}
207208
// Create event about it
208209
d.CreateEvent(k8sutil.NewMemberAddEvent(id, group.AsRole(), d.apiObject))
209210

210-
return nil
211+
return id, nil
211212
}
212213

213214
// DeletePod deletes a pod with given name in the namespace
@@ -304,6 +305,16 @@ func (d *Deployment) GetOwnedPVCs() ([]v1.PersistentVolumeClaim, error) {
304305
return myPVCs, nil
305306
}
306307

308+
// GetPvc gets a PVC by the given name, in the samespace of the deployment.
309+
func (d *Deployment) GetPvc(pvcName string) (*v1.PersistentVolumeClaim, error) {
310+
pvc, err := d.deps.KubeCli.CoreV1().PersistentVolumeClaims(d.apiObject.GetNamespace()).Get(pvcName, metav1.GetOptions{})
311+
if err != nil {
312+
log.Debug().Err(err).Str("pvc-name", pvcName).Msg("Failed to get PVC")
313+
return nil, maskAny(err)
314+
}
315+
return pvc, nil
316+
}
317+
307318
// GetTLSKeyfile returns the keyfile encoded TLS certificate+key for
308319
// the given member.
309320
func (d *Deployment) GetTLSKeyfile(group api.ServerGroup, member api.MemberStatus) (string, error) {

pkg/deployment/reconcile/action.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,6 @@ type Action interface {
3838
CheckProgress(ctx context.Context) (bool, bool, error)
3939
// Timeout returns the amount of time after which this action will timeout.
4040
Timeout() time.Duration
41+
// Return the MemberID used / created in this action
42+
MemberID() string
4143
}

pkg/deployment/reconcile/action_add_member.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,22 @@ func NewAddMemberAction(log zerolog.Logger, action api.Action, actionCtx ActionC
4343

4444
// actionAddMember implements an AddMemberAction.
4545
type actionAddMember struct {
46-
log zerolog.Logger
47-
action api.Action
48-
actionCtx ActionContext
46+
log zerolog.Logger
47+
action api.Action
48+
actionCtx ActionContext
49+
newMemberID string
4950
}
5051

5152
// Start performs the start of the action.
5253
// Returns true if the action is completely finished, false in case
5354
// the start time needs to be recorded and a ready condition needs to be checked.
5455
func (a *actionAddMember) Start(ctx context.Context) (bool, error) {
55-
if err := a.actionCtx.CreateMember(a.action.Group, a.action.MemberID); err != nil {
56+
newID, err := a.actionCtx.CreateMember(a.action.Group, a.action.MemberID)
57+
if err != nil {
5658
log.Debug().Err(err).Msg("Failed to create member")
5759
return false, maskAny(err)
5860
}
61+
a.newMemberID = newID
5962
return true, nil
6063
}
6164

@@ -70,3 +73,8 @@ func (a *actionAddMember) CheckProgress(ctx context.Context) (bool, bool, error)
7073
func (a *actionAddMember) Timeout() time.Duration {
7174
return addMemberTimeout
7275
}
76+
77+
// Return the MemberID used / created in this action
78+
func (a *actionAddMember) MemberID() string {
79+
return a.newMemberID
80+
}

pkg/deployment/reconcile/action_cleanout_member.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,3 +155,8 @@ func (a *actionCleanoutMember) CheckProgress(ctx context.Context) (bool, bool, e
155155
func (a *actionCleanoutMember) Timeout() time.Duration {
156156
return cleanoutMemberTimeout
157157
}
158+
159+
// Return the MemberID used / created in this action
160+
func (a *actionCleanoutMember) MemberID() string {
161+
return a.action.MemberID
162+
}

pkg/deployment/reconcile/action_context.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ type ActionContext interface {
5959
GetMemberStatusByID(id string) (api.MemberStatus, bool)
6060
// CreateMember adds a new member to the given group.
6161
// If ID is non-empty, it will be used, otherwise a new ID is created.
62-
CreateMember(group api.ServerGroup, id string) error
62+
CreateMember(group api.ServerGroup, id string) (string, error)
6363
// UpdateMember updates the deployment status wrt the given member.
6464
UpdateMember(member api.MemberStatus) error
6565
// RemoveMemberByID removes a member with given id.
@@ -157,11 +157,12 @@ func (ac *actionContext) GetMemberStatusByID(id string) (api.MemberStatus, bool)
157157

158158
// CreateMember adds a new member to the given group.
159159
// If ID is non-empty, it will be used, otherwise a new ID is created.
160-
func (ac *actionContext) CreateMember(group api.ServerGroup, id string) error {
161-
if err := ac.context.CreateMember(group, id); err != nil {
162-
return maskAny(err)
160+
func (ac *actionContext) CreateMember(group api.ServerGroup, id string) (string, error) {
161+
result, err := ac.context.CreateMember(group, id)
162+
if err != nil {
163+
return "", maskAny(err)
163164
}
164-
return nil
165+
return result, nil
165166
}
166167

167168
// UpdateMember updates the deployment status wrt the given member.

pkg/deployment/reconcile/action_remove_member.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,8 @@ func (a *actionRemoveMember) CheckProgress(ctx context.Context) (bool, bool, err
105105
func (a *actionRemoveMember) Timeout() time.Duration {
106106
return removeMemberTimeout
107107
}
108+
109+
// Return the MemberID used / created in this action
110+
func (a *actionRemoveMember) MemberID() string {
111+
return a.action.MemberID
112+
}

pkg/deployment/reconcile/action_renew_tls_ca_certificate.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,8 @@ func (a *renewTLSCACertificateAction) CheckProgress(ctx context.Context) (bool,
6969
func (a *renewTLSCACertificateAction) Timeout() time.Duration {
7070
return renewTLSCACertificateTimeout
7171
}
72+
73+
// Return the MemberID used / created in this action
74+
func (a *renewTLSCACertificateAction) MemberID() string {
75+
return a.action.MemberID
76+
}

pkg/deployment/reconcile/action_renew_tls_certificate.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,8 @@ func (a *renewTLSCertificateAction) CheckProgress(ctx context.Context) (bool, bo
7575
func (a *renewTLSCertificateAction) Timeout() time.Duration {
7676
return renewTLSCertificateTimeout
7777
}
78+
79+
// Return the MemberID used / created in this action
80+
func (a *renewTLSCertificateAction) MemberID() string {
81+
return a.action.MemberID
82+
}

0 commit comments

Comments
 (0)