Add LastHandledReconcileAt to source statuses

Signed-off-by: Hidde Beydals <hello@hidde.co>
This commit is contained in:
Hidde Beydals 2020-11-19 12:59:13 +01:00
parent 55334695c1
commit 0b4586253c
19 changed files with 147 additions and 7 deletions

View File

@ -95,6 +95,8 @@ type BucketStatus struct {
// Artifact represents the output of the last successful Bucket sync. // Artifact represents the output of the last successful Bucket sync.
// +optional // +optional
Artifact *Artifact `json:"artifact,omitempty"` Artifact *Artifact `json:"artifact,omitempty"`
meta.ReconcileRequestStatus `json:",inline"`
} }
const ( const (

View File

@ -116,6 +116,8 @@ type GitRepositoryStatus struct {
// Artifact represents the output of the last successful repository sync. // Artifact represents the output of the last successful repository sync.
// +optional // +optional
Artifact *Artifact `json:"artifact,omitempty"` Artifact *Artifact `json:"artifact,omitempty"`
meta.ReconcileRequestStatus `json:",inline"`
} }
const ( const (

View File

@ -86,6 +86,8 @@ type HelmChartStatus struct {
// Artifact represents the output of the last successful chart sync. // Artifact represents the output of the last successful chart sync.
// +optional // +optional
Artifact *Artifact `json:"artifact,omitempty"` Artifact *Artifact `json:"artifact,omitempty"`
meta.ReconcileRequestStatus `json:",inline"`
} }
const ( const (

View File

@ -73,6 +73,8 @@ type HelmRepositoryStatus struct {
// Artifact represents the output of the last successful repository sync. // Artifact represents the output of the last successful repository sync.
// +optional // +optional
Artifact *Artifact `json:"artifact,omitempty"` Artifact *Artifact `json:"artifact,omitempty"`
meta.ReconcileRequestStatus `json:",inline"`
} }
const ( const (

View File

@ -147,6 +147,7 @@ func (in *BucketStatus) DeepCopyInto(out *BucketStatus) {
*out = new(Artifact) *out = new(Artifact)
(*in).DeepCopyInto(*out) (*in).DeepCopyInto(*out)
} }
out.ReconcileRequestStatus = in.ReconcileRequestStatus
} }
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BucketStatus. // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BucketStatus.
@ -289,6 +290,7 @@ func (in *GitRepositoryStatus) DeepCopyInto(out *GitRepositoryStatus) {
*out = new(Artifact) *out = new(Artifact)
(*in).DeepCopyInto(*out) (*in).DeepCopyInto(*out)
} }
out.ReconcileRequestStatus = in.ReconcileRequestStatus
} }
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitRepositoryStatus. // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitRepositoryStatus.
@ -408,6 +410,7 @@ func (in *HelmChartStatus) DeepCopyInto(out *HelmChartStatus) {
*out = new(Artifact) *out = new(Artifact)
(*in).DeepCopyInto(*out) (*in).DeepCopyInto(*out)
} }
out.ReconcileRequestStatus = in.ReconcileRequestStatus
} }
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmChartStatus. // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmChartStatus.
@ -520,6 +523,7 @@ func (in *HelmRepositoryStatus) DeepCopyInto(out *HelmRepositoryStatus) {
*out = new(Artifact) *out = new(Artifact)
(*in).DeepCopyInto(*out) (*in).DeepCopyInto(*out)
} }
out.ReconcileRequestStatus = in.ReconcileRequestStatus
} }
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmRepositoryStatus. // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HelmRepositoryStatus.

View File

@ -196,6 +196,10 @@ spec:
- type - type
type: object type: object
type: array type: array
lastHandledReconcileAt:
description: LastHandledReconcileAt holds the value of the most recent
reconcile request value, so a change can be detected.
type: string
observedGeneration: observedGeneration:
description: ObservedGeneration is the last observed generation. description: ObservedGeneration is the last observed generation.
format: int64 format: int64

View File

@ -224,6 +224,10 @@ spec:
- type - type
type: object type: object
type: array type: array
lastHandledReconcileAt:
description: LastHandledReconcileAt holds the value of the most recent
reconcile request value, so a change can be detected.
type: string
observedGeneration: observedGeneration:
description: ObservedGeneration is the last observed generation. description: ObservedGeneration is the last observed generation.
format: int64 format: int64

View File

@ -200,6 +200,10 @@ spec:
- type - type
type: object type: object
type: array type: array
lastHandledReconcileAt:
description: LastHandledReconcileAt holds the value of the most recent
reconcile request value, so a change can be detected.
type: string
observedGeneration: observedGeneration:
description: ObservedGeneration is the last observed generation. description: ObservedGeneration is the last observed generation.
format: int64 format: int64

View File

@ -175,6 +175,10 @@ spec:
- type - type
type: object type: object
type: array type: array
lastHandledReconcileAt:
description: LastHandledReconcileAt holds the value of the most recent
reconcile request value, so a change can be detected.
type: string
observedGeneration: observedGeneration:
description: ObservedGeneration is the last observed generation. description: ObservedGeneration is the last observed generation.
format: int64 format: int64

View File

@ -109,6 +109,13 @@ func (r *BucketReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
r.recordReadiness(bucket) r.recordReadiness(bucket)
} }
// record the value of the reconciliation request, if any
// TODO(hidde): would be better to defer this in combination with
// always patching the status sub-resource after a reconciliation.
if v, ok := meta.ReconcileAnnotationValue(bucket.GetAnnotations()); ok {
bucket.Status.SetLastHandledReconcileRequest(v)
}
// purge old artifacts from storage // purge old artifacts from storage
if err := r.gc(bucket); err != nil { if err := r.gc(bucket); err != nil {
log.Error(err, "unable to purge old artifacts") log.Error(err, "unable to purge old artifacts")

View File

@ -108,6 +108,13 @@ func (r *GitRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, erro
r.recordReadiness(repository) r.recordReadiness(repository)
} }
// record the value of the reconciliation request, if any
// TODO(hidde): would be better to defer this in combination with
// always patching the status sub-resource after a reconciliation.
if v, ok := meta.ReconcileAnnotationValue(repository.GetAnnotations()); ok {
repository.Status.SetLastHandledReconcileRequest(v)
}
// purge old artifacts from storage // purge old artifacts from storage
if err := r.gc(repository); err != nil { if err := r.gc(repository); err != nil {
log.Error(err, "unable to purge old artifacts") log.Error(err, "unable to purge old artifacts")

View File

@ -95,7 +95,7 @@ func (r *HelmChartReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
return r.reconcileDelete(ctx, chart) return r.reconcileDelete(ctx, chart)
} }
// record reconciliation duration // Record reconciliation duration
if r.MetricsRecorder != nil { if r.MetricsRecorder != nil {
objRef, err := reference.GetReference(r.Scheme, &chart) objRef, err := reference.GetReference(r.Scheme, &chart)
if err != nil { if err != nil {
@ -115,6 +115,13 @@ func (r *HelmChartReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
r.recordReadiness(chart) r.recordReadiness(chart)
} }
// Record the value of the reconciliation request, if any
// TODO(hidde): would be better to defer this in combination with
// always patching the status sub-resource after a reconciliation.
if v, ok := meta.ReconcileAnnotationValue(chart.GetAnnotations()); ok {
chart.Status.SetLastHandledReconcileRequest(v)
}
// Purge all but current artifact from storage // Purge all but current artifact from storage
if err := r.gc(chart); err != nil { if err := r.gc(chart); err != nil {
log.Error(err, "unable to purge old artifacts") log.Error(err, "unable to purge old artifacts")

View File

@ -109,6 +109,13 @@ func (r *HelmRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, err
r.recordReadiness(repository) r.recordReadiness(repository)
} }
// record the value of the reconciliation request, if any
// TODO(hidde): would be better to defer this in combination with
// always patching the status sub-resource after a reconciliation.
if v, ok := meta.ReconcileAnnotationValue(repository.GetAnnotations()); ok {
repository.Status.SetLastHandledReconcileRequest(v)
}
// purge old artifacts from storage // purge old artifacts from storage
if err := r.gc(repository); err != nil { if err := r.gc(repository); err != nil {
log.Error(err, "unable to purge old artifacts") log.Error(err, "unable to purge old artifacts")

View File

@ -908,7 +908,7 @@ int64
<td> <td>
<code>conditions</code><br> <code>conditions</code><br>
<em> <em>
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#condition-v1-meta"> <a href="https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Condition">
[]Kubernetes meta/v1.Condition []Kubernetes meta/v1.Condition
</a> </a>
</em> </em>
@ -944,6 +944,21 @@ Artifact
<p>Artifact represents the output of the last successful Bucket sync.</p> <p>Artifact represents the output of the last successful Bucket sync.</p>
</td> </td>
</tr> </tr>
<tr>
<td>
<code>ReconcileRequestStatus</code><br>
<em>
<a href="https://godoc.org/github.com/fluxcd/pkg/apis/meta#ReconcileRequestStatus">
github.com/fluxcd/pkg/apis/meta.ReconcileRequestStatus
</a>
</em>
</td>
<td>
<p>
(Members of <code>ReconcileRequestStatus</code> are embedded into this type.)
</p>
</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>
@ -1170,7 +1185,7 @@ int64
<td> <td>
<code>conditions</code><br> <code>conditions</code><br>
<em> <em>
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#condition-v1-meta"> <a href="https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Condition">
[]Kubernetes meta/v1.Condition []Kubernetes meta/v1.Condition
</a> </a>
</em> </em>
@ -1207,6 +1222,21 @@ Artifact
<p>Artifact represents the output of the last successful repository sync.</p> <p>Artifact represents the output of the last successful repository sync.</p>
</td> </td>
</tr> </tr>
<tr>
<td>
<code>ReconcileRequestStatus</code><br>
<em>
<a href="https://godoc.org/github.com/fluxcd/pkg/apis/meta#ReconcileRequestStatus">
github.com/fluxcd/pkg/apis/meta.ReconcileRequestStatus
</a>
</em>
</td>
<td>
<p>
(Members of <code>ReconcileRequestStatus</code> are embedded into this type.)
</p>
</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>
@ -1373,7 +1403,7 @@ int64
<td> <td>
<code>conditions</code><br> <code>conditions</code><br>
<em> <em>
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#condition-v1-meta"> <a href="https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Condition">
[]Kubernetes meta/v1.Condition []Kubernetes meta/v1.Condition
</a> </a>
</em> </em>
@ -1409,6 +1439,21 @@ Artifact
<p>Artifact represents the output of the last successful chart sync.</p> <p>Artifact represents the output of the last successful chart sync.</p>
</td> </td>
</tr> </tr>
<tr>
<td>
<code>ReconcileRequestStatus</code><br>
<em>
<a href="https://godoc.org/github.com/fluxcd/pkg/apis/meta#ReconcileRequestStatus">
github.com/fluxcd/pkg/apis/meta.ReconcileRequestStatus
</a>
</em>
</td>
<td>
<p>
(Members of <code>ReconcileRequestStatus</code> are embedded into this type.)
</p>
</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>
@ -1524,7 +1569,7 @@ int64
<td> <td>
<code>conditions</code><br> <code>conditions</code><br>
<em> <em>
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#condition-v1-meta"> <a href="https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Condition">
[]Kubernetes meta/v1.Condition []Kubernetes meta/v1.Condition
</a> </a>
</em> </em>
@ -1560,6 +1605,21 @@ Artifact
<p>Artifact represents the output of the last successful repository sync.</p> <p>Artifact represents the output of the last successful repository sync.</p>
</td> </td>
</tr> </tr>
<tr>
<td>
<code>ReconcileRequestStatus</code><br>
<em>
<a href="https://godoc.org/github.com/fluxcd/pkg/apis/meta#ReconcileRequestStatus">
github.com/fluxcd/pkg/apis/meta.ReconcileRequestStatus
</a>
</em>
</td>
<td>
<p>
(Members of <code>ReconcileRequestStatus</code> are embedded into this type.)
</p>
</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>

View File

@ -81,6 +81,11 @@ type BucketStatus struct {
// Artifact represents the output of the last successful Bucket sync. // Artifact represents the output of the last successful Bucket sync.
// +optional // +optional
Artifact *Artifact `json:"artifact,omitempty"` Artifact *Artifact `json:"artifact,omitempty"`
// LastHandledReconcileAt is the last manual reconciliation request (by
// annotating the Bucket) handled by the reconciler.
// +optional
LastHandledReconcileAt string `json:"lastHandledReconcileAt,omitempty"`
} }
``` ```

View File

@ -103,6 +103,11 @@ type GitRepositoryStatus struct {
// Artifact represents the output of the last successful repository sync. // Artifact represents the output of the last successful repository sync.
// +optional // +optional
Artifact *Artifact `json:"artifact,omitempty"` Artifact *Artifact `json:"artifact,omitempty"`
// LastHandledReconcileAt is the last manual reconciliation request (by
// annotating the GitRepository) handled by the reconciler.
// +optional
LastHandledReconcileAt string `json:"lastHandledReconcileAt,omitempty"`
} }
``` ```

View File

@ -77,6 +77,11 @@ type HelmChartStatus struct {
// Artifact represents the output of the last successful chart sync. // Artifact represents the output of the last successful chart sync.
// +optional // +optional
Artifact *Artifact `json:"artifact,omitempty"` Artifact *Artifact `json:"artifact,omitempty"`
// LastHandledReconcileAt is the last manual reconciliation request (by
// annotating the HelmChart) handled by the reconciler.
// +optional
LastHandledReconcileAt string `json:"lastHandledReconcileAt,omitempty"`
} }
``` ```

View File

@ -54,6 +54,11 @@ type HelmRepositoryStatus struct {
// Artifact represents the output of the last successful repository sync. // Artifact represents the output of the last successful repository sync.
// +optional // +optional
Artifact *Artifact `json:"artifact,omitempty"` Artifact *Artifact `json:"artifact,omitempty"`
// LastHandledReconcileAt is the last manual reconciliation request (by
// annotating the HelmRepository) handled by the reconciler.
// +optional
LastHandledReconcileAt string `json:"lastHandledReconcileAt,omitempty"`
} }
``` ```

View File

@ -11,13 +11,17 @@
"typeMatchPrefix": "^k8s\\.io/apimachinery/pkg/apis/meta/v1\\.Duration$", "typeMatchPrefix": "^k8s\\.io/apimachinery/pkg/apis/meta/v1\\.Duration$",
"docsURLTemplate": "https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Duration" "docsURLTemplate": "https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Duration"
}, },
{
"typeMatchPrefix": "^k8s\\.io/apimachinery/pkg/apis/meta/v1\\.Condition$",
"docsURLTemplate": "https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Condition"
},
{ {
"typeMatchPrefix": "^k8s\\.io/(api|apimachinery/pkg/apis)/", "typeMatchPrefix": "^k8s\\.io/(api|apimachinery/pkg/apis)/",
"docsURLTemplate": "https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#{{lower .TypeIdentifier}}-{{arrIndex .PackageSegments -1}}-{{arrIndex .PackageSegments -2}}" "docsURLTemplate": "https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#{{lower .TypeIdentifier}}-{{arrIndex .PackageSegments -1}}-{{arrIndex .PackageSegments -2}}"
}, },
{ {
"typeMatchPrefix": "^k8s\\.io/apimachinery/pkg/apis/meta/v1\\.Condition$", "typeMatchPrefix": "^github.com/fluxcd/pkg/apis/meta",
"docsURLTemplate": "https://godoc.org/k8s.io/apimachinery/pkg/apis/meta/v1#Condition" "docsURLTemplate": "https://godoc.org/github.com/fluxcd/pkg/apis/meta#{{ .TypeIdentifier }}"
} }
], ],
"typeDisplayNamePrefixOverrides": { "typeDisplayNamePrefixOverrides": {