Skip to content

Commit c58bda6

Browse files
committed
Merge branch 'master' into bugfix/tls-and-sync-fixes
2 parents 1233ce6 + 97a46a6 commit c58bda6

30 files changed

+332
-118
lines changed

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ import (
3939
"k8s.io/api/core/v1"
4040
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4141
"k8s.io/client-go/kubernetes"
42-
"k8s.io/client-go/kubernetes/scheme"
4342
v1core "k8s.io/client-go/kubernetes/typed/core/v1"
4443
"k8s.io/client-go/tools/record"
4544

4645
"github.com/arangodb/kube-arangodb/pkg/client"
46+
scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme"
4747
"github.com/arangodb/kube-arangodb/pkg/logging"
4848
"github.com/arangodb/kube-arangodb/pkg/operator"
4949
"github.com/arangodb/kube-arangodb/pkg/server"

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
@@ -32,6 +32,7 @@ import (
3232
"github.com/arangodb/arangosync/tasks"
3333
driver "github.com/arangodb/go-driver"
3434
"github.com/arangodb/go-driver/agency"
35+
"github.com/rs/zerolog/log"
3536
"k8s.io/api/core/v1"
3637
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3738
"k8s.io/client-go/kubernetes"
@@ -197,23 +198,23 @@ func (d *Deployment) GetSyncServerClient(ctx context.Context, group api.ServerGr
197198

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

216-
return nil
217+
return id, nil
217218
}
218219

219220
// DeletePod deletes a pod with given name in the namespace
@@ -310,6 +311,16 @@ func (d *Deployment) GetOwnedPVCs() ([]v1.PersistentVolumeClaim, error) {
310311
return myPVCs, nil
311312
}
312313

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

pkg/deployment/deployment.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,9 @@ import (
3232
"github.com/arangodb/arangosync/client"
3333
"github.com/rs/zerolog"
3434
"github.com/rs/zerolog/log"
35-
"k8s.io/api/core/v1"
3635
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3736
"k8s.io/client-go/kubernetes"
38-
corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
37+
"k8s.io/client-go/tools/record"
3938

4039
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1alpha"
4140
"github.com/arangodb/kube-arangodb/pkg/deployment/chaos"
@@ -60,6 +59,7 @@ type Dependencies struct {
6059
Log zerolog.Logger
6160
KubeCli kubernetes.Interface
6261
DatabaseCRCli versioned.Interface
62+
EventRecorder record.EventRecorder
6363
}
6464

6565
// deploymentEventType strongly typed type of event
@@ -96,8 +96,6 @@ type Deployment struct {
9696
stopCh chan struct{}
9797
stopped int32
9898

99-
eventsCli corev1.EventInterface
100-
10199
inspectTrigger trigger.Trigger
102100
updateDeploymentTrigger trigger.Trigger
103101
clientCache *clientCache
@@ -121,7 +119,6 @@ func New(config Config, deps Dependencies, apiObject *api.ArangoDeployment) (*De
121119
deps: deps,
122120
eventCh: make(chan *deploymentEvent, deploymentEventQueueSize),
123121
stopCh: make(chan struct{}),
124-
eventsCli: deps.KubeCli.Core().Events(apiObject.GetNamespace()),
125122
clientCache: newClientCache(deps.KubeCli, apiObject),
126123
}
127124
d.status.last = *(apiObject.Status.DeepCopy())
@@ -337,11 +334,8 @@ func (d *Deployment) handleArangoDeploymentUpdatedEvent() error {
337334

338335
// CreateEvent creates a given event.
339336
// On error, the error is logged.
340-
func (d *Deployment) CreateEvent(evt *v1.Event) {
341-
_, err := d.eventsCli.Create(evt)
342-
if err != nil {
343-
d.deps.Log.Error().Err(err).Interface("event", *evt).Msg("Failed to record event")
344-
}
337+
func (d *Deployment) CreateEvent(evt *k8sutil.Event) {
338+
d.deps.EventRecorder.Event(evt.InvolvedObject, evt.Type, evt.Reason, evt.Message)
345339
}
346340

347341
// Update the status of the API object from the internal status

pkg/deployment/members.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import (
2828

2929
"github.com/dchest/uniuri"
3030
"github.com/rs/zerolog"
31-
"k8s.io/api/core/v1"
3231
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3332

3433
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1alpha"
@@ -42,7 +41,7 @@ func (d *Deployment) createInitialMembers(apiObject *api.ArangoDeployment) error
4241
log.Debug().Msg("creating initial members...")
4342

4443
// Go over all groups and create members
45-
var events []*v1.Event
44+
var events []*k8sutil.Event
4645
status, lastVersion := d.GetStatus()
4746
if err := apiObject.ForeachServerGroup(func(group api.ServerGroup, spec api.ServerGroupSpec, members *api.MemberStatusList) error {
4847
for len(*members) < spec.GetCount() {

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.

0 commit comments

Comments
 (0)