Merge pull request #141 from fluxcd/status-artifact-reset

This commit is contained in:
Hidde Beydals 2020-09-11 10:25:37 +02:00 committed by GitHub
commit fa37eea123
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 55 additions and 15 deletions

View File

@ -14,7 +14,8 @@ all: manager
# Run tests # Run tests
test: generate fmt vet manifests api-docs test: generate fmt vet manifests api-docs
find . -maxdepth 2 -type f -name 'go.mod' -execdir go test ./... -coverprofile cover.out \; go test ./... -coverprofile cover.out
cd api; go test ./... -coverprofile cover.out
# Build manager binary # Build manager binary
manager: generate fmt vet manager: generate fmt vet
@ -55,11 +56,13 @@ api-docs: gen-crd-api-reference-docs
# Run go fmt against code # Run go fmt against code
fmt: fmt:
find . -maxdepth 2 -type f -name 'go.mod' -execdir go fmt ./... \; go fmt ./...
cd api; go fmt ./...
# Run go vet against code # Run go vet against code
vet: vet:
find . -maxdepth 2 -type f -name 'go.mod' -execdir go vet ./... \; go vet ./...
cd api; go vet ./...
# Generate code # Generate code
generate: controller-gen generate: controller-gen

View File

@ -133,7 +133,6 @@ const (
func GitRepositoryProgressing(repository GitRepository) GitRepository { func GitRepositoryProgressing(repository GitRepository) GitRepository {
repository.Status.ObservedGeneration = repository.Generation repository.Status.ObservedGeneration = repository.Generation
repository.Status.URL = "" repository.Status.URL = ""
repository.Status.Artifact = nil
repository.Status.Conditions = []SourceCondition{} repository.Status.Conditions = []SourceCondition{}
SetGitRepositoryCondition(&repository, ReadyCondition, corev1.ConditionUnknown, ProgressingReason, "reconciliation in progress") SetGitRepositoryCondition(&repository, ReadyCondition, corev1.ConditionUnknown, ProgressingReason, "reconciliation in progress")
return repository return repository

View File

@ -102,7 +102,6 @@ const (
func HelmChartProgressing(chart HelmChart) HelmChart { func HelmChartProgressing(chart HelmChart) HelmChart {
chart.Status.ObservedGeneration = chart.Generation chart.Status.ObservedGeneration = chart.Generation
chart.Status.URL = "" chart.Status.URL = ""
chart.Status.Artifact = nil
chart.Status.Conditions = []SourceCondition{} chart.Status.Conditions = []SourceCondition{}
SetHelmChartCondition(&chart, ReadyCondition, corev1.ConditionUnknown, ProgressingReason, "reconciliation in progress") SetHelmChartCondition(&chart, ReadyCondition, corev1.ConditionUnknown, ProgressingReason, "reconciliation in progress")
return chart return chart

View File

@ -87,7 +87,6 @@ const (
func HelmRepositoryProgressing(repository HelmRepository) HelmRepository { func HelmRepositoryProgressing(repository HelmRepository) HelmRepository {
repository.Status.ObservedGeneration = repository.Generation repository.Status.ObservedGeneration = repository.Generation
repository.Status.URL = "" repository.Status.URL = ""
repository.Status.Artifact = nil
repository.Status.Conditions = []SourceCondition{} repository.Status.Conditions = []SourceCondition{}
SetHelmRepositoryCondition(&repository, ReadyCondition, corev1.ConditionUnknown, ProgressingReason, "reconciliation in progress") SetHelmRepositoryCondition(&repository, ReadyCondition, corev1.ConditionUnknown, ProgressingReason, "reconciliation in progress")
return repository return repository

View File

@ -100,9 +100,8 @@ func (r *GitRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, erro
} }
// set initial status // set initial status
if repository.Generation != repository.Status.ObservedGeneration || if resetRepository, ok := r.resetStatus(repository); ok {
repository.GetArtifact() != nil && !r.Storage.ArtifactExist(*repository.GetArtifact()) { repository = resetRepository
repository = sourcev1.GitRepositoryProgressing(repository)
if err := r.Status().Update(ctx, &repository); err != nil { if err := r.Status().Update(ctx, &repository); err != nil {
log.Error(err, "unable to update status") log.Error(err, "unable to update status")
return ctrl.Result{Requeue: true}, err return ctrl.Result{Requeue: true}, err
@ -274,6 +273,20 @@ func (r *GitRepositoryReconciler) verify(ctx context.Context, publicKeySecret ty
return nil return nil
} }
// resetStatus returns a modified v1alpha1.GitRepository and a boolean indicating
// if the status field has been reset.
func (r *GitRepositoryReconciler) resetStatus(repository sourcev1.GitRepository) (sourcev1.GitRepository, bool) {
if repository.GetArtifact() != nil && !r.Storage.ArtifactExist(*repository.GetArtifact()) {
repository = sourcev1.GitRepositoryProgressing(repository)
repository.Status.Artifact = nil
return repository, true
}
if repository.Generation != repository.Status.ObservedGeneration {
return sourcev1.GitRepositoryProgressing(repository), true
}
return repository, false
}
// gc performs a garbage collection on all but current artifacts of // gc performs a garbage collection on all but current artifacts of
// the given repository. // the given repository.
func (r *GitRepositoryReconciler) gc(repository sourcev1.GitRepository, all bool) error { func (r *GitRepositoryReconciler) gc(repository sourcev1.GitRepository, all bool) error {

View File

@ -105,9 +105,8 @@ func (r *HelmChartReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
} }
// set initial status // set initial status
if chart.Generation != chart.Status.ObservedGeneration || if resetChart, ok := r.resetStatus(chart); ok {
chart.GetArtifact() != nil && !r.Storage.ArtifactExist(*chart.GetArtifact()) { chart = resetChart
chart = sourcev1.HelmChartProgressing(chart)
if err := r.Status().Update(ctx, &chart); err != nil { if err := r.Status().Update(ctx, &chart); err != nil {
log.Error(err, "unable to update status") log.Error(err, "unable to update status")
return ctrl.Result{Requeue: true}, err return ctrl.Result{Requeue: true}, err
@ -447,6 +446,20 @@ func (r *HelmChartReconciler) getGitRepositoryWithArtifact(ctx context.Context,
return repository, err return repository, err
} }
// resetStatus returns a modified v1alpha1.HelmChart and a boolean indicating
// if the status field has been reset.
func (r *HelmChartReconciler) resetStatus(chart sourcev1.HelmChart) (sourcev1.HelmChart, bool) {
if chart.GetArtifact() != nil && !r.Storage.ArtifactExist(*chart.GetArtifact()) {
chart = sourcev1.HelmChartProgressing(chart)
chart.Status.Artifact = nil
return chart, true
}
if chart.Generation != chart.Status.ObservedGeneration {
return sourcev1.HelmChartProgressing(chart), true
}
return chart, false
}
// gc performs a garbage collection on all but current artifacts of // gc performs a garbage collection on all but current artifacts of
// the given chart. // the given chart.
func (r *HelmChartReconciler) gc(chart sourcev1.HelmChart, all bool) error { func (r *HelmChartReconciler) gc(chart sourcev1.HelmChart, all bool) error {

View File

@ -260,6 +260,7 @@ var _ = Describe("HelmChartReconciler", func() {
} }
return false return false
}, timeout, interval).Should(BeTrue()) }, timeout, interval).Should(BeTrue())
Expect(chart.GetArtifact()).NotTo(BeNil())
Expect(chart.Status.Artifact.Revision).Should(Equal("0.1.1")) Expect(chart.Status.Artifact.Revision).Should(Equal("0.1.1"))
}) })

View File

@ -105,9 +105,8 @@ func (r *HelmRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, err
} }
// set initial status // set initial status
if repository.Generation != repository.Status.ObservedGeneration || if resetRepository, ok := r.resetStatus(repository); ok {
repository.GetArtifact() != nil && !r.Storage.ArtifactExist(*repository.GetArtifact()) { repository = resetRepository
repository = sourcev1.HelmRepositoryProgressing(repository)
if err := r.Status().Update(ctx, &repository); err != nil { if err := r.Status().Update(ctx, &repository); err != nil {
log.Error(err, "unable to update status") log.Error(err, "unable to update status")
return ctrl.Result{Requeue: true}, err return ctrl.Result{Requeue: true}, err
@ -266,6 +265,20 @@ func (r *HelmRepositoryReconciler) reconcile(ctx context.Context, repository sou
return sourcev1.HelmRepositoryReady(repository, artifact, indexURL, sourcev1.IndexationSucceededReason, message), nil return sourcev1.HelmRepositoryReady(repository, artifact, indexURL, sourcev1.IndexationSucceededReason, message), nil
} }
// resetStatus returns a modified v1alpha1.HelmRepository and a boolean indicating
// if the status field has been reset.
func (r *HelmRepositoryReconciler) resetStatus(repository sourcev1.HelmRepository) (sourcev1.HelmRepository, bool) {
if repository.GetArtifact() != nil && !r.Storage.ArtifactExist(*repository.GetArtifact()) {
repository = sourcev1.HelmRepositoryProgressing(repository)
repository.Status.Artifact = nil
return repository, true
}
if repository.Generation != repository.Status.ObservedGeneration {
return sourcev1.HelmRepositoryProgressing(repository), true
}
return repository, false
}
// gc performs a garbage collection on all but current artifacts of // gc performs a garbage collection on all but current artifacts of
// the given repository. // the given repository.
func (r *HelmRepositoryReconciler) gc(repository sourcev1.HelmRepository, all bool) error { func (r *HelmRepositoryReconciler) gc(repository sourcev1.HelmRepository, all bool) error {