From 589999d42c8862bb970337068f3d5a6c424e4598 Mon Sep 17 00:00:00 2001 From: lamai93 Date: Mon, 11 Feb 2019 14:10:44 +0100 Subject: [PATCH 1/3] =?UTF-8?q?Added=20secret=20force-status-reload=20stat?= =?UTF-8?q?us=20field.=20=E2=9C=8C=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/apis/deployment/v1alpha/deployment_status.go | 10 ++++++++++ pkg/apis/deployment/v1alpha/zz_generated.deepcopy.go | 5 +++++ pkg/deployment/deployment.go | 11 ++++++++++- pkg/deployment/reconcile/action_remove_member.go | 2 ++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/pkg/apis/deployment/v1alpha/deployment_status.go b/pkg/apis/deployment/v1alpha/deployment_status.go index ad175eab4..ae7213c83 100644 --- a/pkg/apis/deployment/v1alpha/deployment_status.go +++ b/pkg/apis/deployment/v1alpha/deployment_status.go @@ -22,6 +22,8 @@ package v1alpha +import "github.com/arangodb/kube-arangodb/pkg/util" + // DeploymentStatus contains the status part of a Cluster resource. type DeploymentStatus struct { // Phase holds the current lifetime phase of the deployment @@ -56,6 +58,9 @@ type DeploymentStatus struct { // SecretHashes keeps a sha256 hash of secret values, so we can // detect changes in secret values. SecretHashes *SecretHashes `json:"secret-hashes,omitempty"` + + // ForceStatusReload if set to true forces a reload of the status from the CR. + ForceStatusReload *bool `json:"force-status-reload,omitempty"` } // Equal checks for equality @@ -72,3 +77,8 @@ func (ds *DeploymentStatus) Equal(other DeploymentStatus) bool { ds.AcceptedSpec.Equal(other.AcceptedSpec) && ds.SecretHashes.Equal(other.SecretHashes) } + +// IsForceReload returns true if ForceStatusReload is set to true +func (ds *DeploymentStatus) IsForceReload() bool { + return util.BoolOrDefault(ds.ForceStatusReload, false) +} diff --git a/pkg/apis/deployment/v1alpha/zz_generated.deepcopy.go b/pkg/apis/deployment/v1alpha/zz_generated.deepcopy.go index 7b7ef7234..6e1f42609 100644 --- a/pkg/apis/deployment/v1alpha/zz_generated.deepcopy.go +++ b/pkg/apis/deployment/v1alpha/zz_generated.deepcopy.go @@ -308,6 +308,11 @@ func (in *DeploymentStatus) DeepCopyInto(out *DeploymentStatus) { *out = new(SecretHashes) **out = **in } + if in.ForceStatusReload != nil { + in, out := &in.ForceStatusReload, &out.ForceStatusReload + *out = new(bool) + **out = **in + } return } diff --git a/pkg/deployment/deployment.go b/pkg/deployment/deployment.go index 20329edba..aa42e6cff 100644 --- a/pkg/deployment/deployment.go +++ b/pkg/deployment/deployment.go @@ -287,9 +287,15 @@ func (d *Deployment) handleArangoDeploymentUpdatedEvent() error { specBefore = *status.AcceptedSpec.DeepCopy() } newAPIObject := current.DeepCopy() + wasForceReload := false + if newAPIObject.Status.IsForceReload() { + newAPIObject.Status.ForceStatusReload = nil + wasForceReload = true + log.Warn().Msg("Forced status reload!") + } newAPIObject.Spec.SetDefaultsFrom(specBefore) newAPIObject.Spec.SetDefaults(d.apiObject.GetName()) - newAPIObject.Status = status + resetFields := specBefore.ResetImmutableFields(&newAPIObject.Spec) if len(resetFields) > 0 { log.Debug().Strs("fields", resetFields).Msg("Found modified immutable fields") @@ -318,6 +324,9 @@ func (d *Deployment) handleArangoDeploymentUpdatedEvent() error { // Save updated accepted spec { status, lastVersion := d.GetStatus() + if wasForceReload { + status = newAPIObject.Status + } status.AcceptedSpec = newAPIObject.Spec.DeepCopy() if err := d.UpdateStatus(status, lastVersion); err != nil { return maskAny(fmt.Errorf("failed to update ArangoDeployment status: %v", err)) diff --git a/pkg/deployment/reconcile/action_remove_member.go b/pkg/deployment/reconcile/action_remove_member.go index 8824d373c..613bc4fbe 100644 --- a/pkg/deployment/reconcile/action_remove_member.go +++ b/pkg/deployment/reconcile/action_remove_member.go @@ -70,6 +70,8 @@ func (a *actionRemoveMember) Start(ctx context.Context) (bool, error) { if err := arangod.RemoveServerFromCluster(ctx, client.Connection(), driver.ServerID(m.ID)); err != nil { if !driver.IsNotFound(err) && !driver.IsPreconditionFailed(err) { return false, maskAny(errors.Wrapf(err, "Failed to remove server from cluster: %#v", err)) + } else { + a.log.Warn().Msgf("ignoring error: %s", err.Error()) } } } From af5cc1b923a7515b218f076abb58888c52b176bb Mon Sep 17 00:00:00 2001 From: lamai93 Date: Tue, 12 Feb 2019 12:06:58 +0100 Subject: [PATCH 2/3] Simplify logic. --- pkg/deployment/deployment.go | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/pkg/deployment/deployment.go b/pkg/deployment/deployment.go index aa42e6cff..a01866ed1 100644 --- a/pkg/deployment/deployment.go +++ b/pkg/deployment/deployment.go @@ -287,12 +287,6 @@ func (d *Deployment) handleArangoDeploymentUpdatedEvent() error { specBefore = *status.AcceptedSpec.DeepCopy() } newAPIObject := current.DeepCopy() - wasForceReload := false - if newAPIObject.Status.IsForceReload() { - newAPIObject.Status.ForceStatusReload = nil - wasForceReload = true - log.Warn().Msg("Forced status reload!") - } newAPIObject.Spec.SetDefaultsFrom(specBefore) newAPIObject.Spec.SetDefaults(d.apiObject.GetName()) @@ -324,8 +318,10 @@ func (d *Deployment) handleArangoDeploymentUpdatedEvent() error { // Save updated accepted spec { status, lastVersion := d.GetStatus() - if wasForceReload { + if newAPIObject.Status.IsForceReload() { + log.Warn().Msg("Forced status reload!") status = newAPIObject.Status + status.ForceStatusReload = nil } status.AcceptedSpec = newAPIObject.Spec.DeepCopy() if err := d.UpdateStatus(status, lastVersion); err != nil { From 71ba8b04e7ab0922742065fc6dadc4d50931ef82 Mon Sep 17 00:00:00 2001 From: lamai93 Date: Tue, 12 Feb 2019 13:14:05 +0100 Subject: [PATCH 3/3] Small changes. --- pkg/apis/deployment/v1alpha/deployment_status.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/apis/deployment/v1alpha/deployment_status.go b/pkg/apis/deployment/v1alpha/deployment_status.go index ae7213c83..632a41658 100644 --- a/pkg/apis/deployment/v1alpha/deployment_status.go +++ b/pkg/apis/deployment/v1alpha/deployment_status.go @@ -59,7 +59,7 @@ type DeploymentStatus struct { // detect changes in secret values. SecretHashes *SecretHashes `json:"secret-hashes,omitempty"` - // ForceStatusReload if set to true forces a reload of the status from the CR. + // ForceStatusReload if set to true forces a reload of the status from the custom resource. ForceStatusReload *bool `json:"force-status-reload,omitempty"` }