Commit Graph

1271 Commits

Author SHA1 Message Date
Hidde Beydals 93d2118f71
controller: enrich "HelmChart not ready" messages
This propagates the reason a HelmChart is (likely) not ready to the
message of the Ready condition.

The goal of this is to make it easier for people to reason about a
potential failure that may be happening while retrieving the chart,
without having to inspect the HelmChart itself.

As at times, they may not have access (due to e.g. not being able to
access the namespace, while the controller is allowed to create the
object there), or are simply not aware of the fact that this object
is created by the controller for them.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-12-07 23:35:44 +01:00
Hidde Beydals ee8177e005
Merge pull request #832 from fluxcd/api-kus-deprecations
api: deprecate stragic merge and JSON 6902 patches
2023-12-07 17:59:24 +01:00
Hidde Beydals 35e914d159
api: deprecate stragic merge and JSON 6902 patches
They have been deprecated for a long time, and should be scheduled for
removal to ensure they can be removed in the final `v2` release.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-12-07 17:37:00 +01:00
Hidde Beydals b10947b269
Merge pull request #829 from fluxcd/remove-stale-testsuccess
reconcile: remove stale `TestSuccess` condition
2023-12-07 17:24:39 +01:00
Hidde Beydals 7ccfc93448
reconcile: remove stale `TestSuccess` condition
When a Helm install or upgrade is performed, to prevent confusion due to
reporting a stale test result.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-12-07 17:10:39 +01:00
Hidde Beydals 66ed0327be
Merge pull request #830 from fluxcd/tweak-chart-events
reconcile: do not emit HelmChartInSync event
2023-12-07 13:08:12 +01:00
Hidde Beydals 47fbb37f2a
reconcile: do not emit HelmChartInSync event
Due to the frequency, this would otherwise suppress other Kubernetes
Events which are more important. Especially when the `.spec.interval`
of the HelmRelease is set to a low value.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-12-07 12:53:13 +01:00
dependabot[bot] 842a9425fa
Merge pull request #827 from fluxcd/dependabot/github_actions/ci-22f61cdbb1 2023-12-04 13:01:30 +00:00
dependabot[bot] 2f9f39dd24
build(deps): bump the ci group with 2 updates
Bumps the ci group with 2 updates: [korthout/backport-action](https://github.com/korthout/backport-action) and [docker/metadata-action](https://github.com/docker/metadata-action).


Updates `korthout/backport-action` from 2.1.1 to 2.2.0
- [Release notes](https://github.com/korthout/backport-action/releases)
- [Commits](08bafb375e...b982d297e3)

Updates `docker/metadata-action` from 5.0.0 to 5.3.0
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](96383f4557...31cebacef4)

---
updated-dependencies:
- dependency-name: korthout/backport-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: ci
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: ci
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-04 12:50:23 +00:00
Hidde Beydals 0bde3275f0
Merge pull request #825 from fluxcd/various-minor-fixes
Various minor fixes
2023-12-04 13:47:18 +01:00
Hidde Beydals 67fd6fb724
reconcile: remove Remediated condition on release
This avoids having a confusing "stale" Remediated condition when a new
release has been attempted.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-12-01 18:49:06 +01:00
Hidde Beydals 05bc368de7
reconcile: add `ProgressingWithRetry` on retry
Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-12-01 17:36:14 +01:00
Hidde Beydals 0919fb4c24
controller: remove deprecated metrics
Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-12-01 17:23:52 +01:00
Hidde Beydals 51563d6012
reconcile: stall without rollback target
This ensures that if there is no target to roll back to due to all of
them being in a failed state, the controller stalls instead of ending up
in a loop of upgrade attempts.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-12-01 17:20:51 +01:00
Hidde Beydals 0a2041c338
controller: ensure object in cache before requeue
Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-12-01 17:20:50 +01:00
Hidde Beydals 48cad68386
controller: unready dep should not bump obs gen
This ensures that any unfulfilled dependencies for which we requeue do
not prematurely bump the observed generation by introducing typed
errors.

These typed errors ensure that the logic to bump the observed generation
can continue to be the same, while ignoring them just in time before
returning the final error.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-12-01 14:14:40 +01:00
Hidde Beydals bc7fb25d27
api: limit maximum number of snapshots in history
This ensures that on repetitive failures, the number of snapshots does
not grow indefinitely due to there not being any in a superseded or
deployed state.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-12-01 11:38:56 +01:00
Hidde Beydals 7f9160c66c
Merge pull request #823 from fluxcd/reset-force-annotations
Introduce `forceAt` and `resetAt` annotations
2023-12-01 11:38:43 +01:00
Hidde Beydals 6b7789aadc
Implement `forceAt` and `resetAt` annotations
This makes the controller actually take the
`reconcile.fluxcd.io/forceAt` and `reconcile.fluxcd.io/resetAt` into
account.

For `reconcile.fluxcd.io/resetAt`, this means that the failure counts on
the `HelmRelease` object are reset when the token value of the
annotation equals `reconcile.fluxcd.io/requestedAt`. Allowing the
controller to start over with attempting to install or upgrade the
release until the retries count has been reached again.

For `reconcile.fluxcd.io/forceAt`, this means that a one-off Helm
install or upgrade is allowed to take place even if the object is out of
retries, in a failed state where it should be remediated, or in-sync.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-30 10:22:49 +01:00
Hidde Beydals 7a15000b4c
api: introduce `forceAt` and `resetAt` annotations
This introduces two new annotations:

- `reconcile.fluxcd.io/resetAt`: to reset the failure counts for a
  `HelmRelease` object.
- `reconcile.fluxcd.io/forceAt`: to allow a one-off Helm install or
  upgrade when the controller would otherwise do nothing (e.g. due to
  being out of retries, in-sync, in a failed state, etc.)

Both annotations require the `reconcile.fluxcd.io/requestedAt`
annotation to be set at the same time, with the same token value.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-30 10:22:48 +01:00
Hidde Beydals d310c8b2de
Merge pull request #822 from fluxcd/correct-drift-apply
Correct cluster drift using patches
2023-11-30 10:21:39 +01:00
Hidde Beydals 0131f2227b
action/diff: include Helm metadata in objects
This ensures that the metadata labels and annotations Helm adds during
the creation of resources are included while diffing them.

As they are not part of the manifest but should be restored in case
they are e.g. removed or modified.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-30 09:41:05 +01:00
Hidde Beydals ccd8f88282
Correct cluster drift using patches
This changes the cluster drift correction behavior from performing a
Helm upgrade to performing create and patch API requests based on the
JSON Patch data.

Doing this is much lighter than performing a full release cycle, and
deals with the issue of Helm being unable to restore state of Custom
Resources without the `--force` flag being set. Which has unwanted
side-effects like forcing objects through a deletion/creation cycle.

After a drift correction attempt a Kubernetes Event is emitted, which
contains a summary of the created and patched resources, and a
collection of any (potential) errors.

As the goal is to restore state as best as we can, the drift correction
will be re-attempted until all resources have been restored to the
desired state.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-29 20:34:45 +01:00
Stefan Prodan 113bf544d3
Merge pull request #821 from fluxcd/deprecate-v2beta1
Add deprecation warning to v2beta1 API
2023-11-27 16:53:35 +02:00
Stefan Prodan 92a535f6cd
Add deprecation warning to v2beta1 API
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2023-11-27 16:41:50 +02:00
Hidde Beydals e0ecb05099
Merge pull request #820 from fluxcd/dependabot/github_actions/ci-9cf97fb57d
build(deps): bump the ci group with 3 updates
2023-11-27 09:52:36 +01:00
dependabot[bot] 4e59953180
build(deps): bump the ci group with 3 updates
Bumps the ci group with 3 updates: [anchore/sbom-action](https://github.com/anchore/sbom-action), [fossa-contrib/fossa-action](https://github.com/fossa-contrib/fossa-action) and [github/codeql-action](https://github.com/github/codeql-action).


Updates `anchore/sbom-action` from 0.14.3 to 0.15.0
- [Release notes](https://github.com/anchore/sbom-action/releases)
- [Commits](78fc58e266...fd74a6fb98)

Updates `fossa-contrib/fossa-action` from 2.0.0 to 3.0.0
- [Release notes](https://github.com/fossa-contrib/fossa-action/releases)
- [Changelog](https://github.com/fossa-contrib/fossa-action/blob/master/CHANGELOG.md)
- [Commits](6728dc6fe9...cdc5065bcd)

Updates `github/codeql-action` from 2.22.7 to 2.22.8
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](66b90a5db1...407ffafae6)

---
updated-dependencies:
- dependency-name: anchore/sbom-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: ci
- dependency-name: fossa-contrib/fossa-action
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: ci
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: ci
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-27 03:28:56 +00:00
Hidde Beydals 6ec21aba4a
Merge pull request #818 from fluxcd/allow-digest-config
Allow configuration of snapshot digest algorithm
2023-11-24 18:33:00 +01:00
Hidde Beydals 7a70bd599f
Allow configuration of digest algorithm
This introduces a `--snapshot-digest-algo` flag to allow configuring a
different algorithm than SHA256.

This allows the user to for example configure `blake3`, which is
potentially faster (and less resource intensive) on modern hardware.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 18:19:53 +01:00
Hidde Beydals f7185d4c62
Merge pull request #819 from fluxcd/tidy-code
Remove obsolete code and tidy things
2023-11-24 18:19:42 +01:00
Hidde Beydals 841fca08fe
features: mark drift related flags as deprecated
Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 18:01:07 +01:00
Hidde Beydals 2d927b9b9e
Miscellaneous tidying of minor things
Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 17:59:45 +01:00
Hidde Beydals 0d30be93ec
Remove various verification functions
These functions are no longer in use by the actual code base, while the
same outcome can be achieved by using `LastRelease` in combination with
`VerifyReleaseObject`.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 17:59:44 +01:00
Hidde Beydals 347cf24482
Remove obsolete `util` package
This code is now available in upstream controller-runtime.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 17:59:42 +01:00
Hidde Beydals be2c47e3b4
Remove obsolete `runner` sub-module
This used to drive the logic behind the `v2beta1` API, but has now
become obsolete with the `action` sub-module as its successor.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 17:59:39 +01:00
Hidde Beydals 85cac772eb
Merge pull request #815 from fluxcd/new-drift-detection
Allow configuration of drift detection on `HelmRelease`
2023-11-24 17:59:34 +01:00
Hidde Beydals 6b1effcd2f
diff: remove `Differ` code
In favor of the new `Diff` action.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 16:41:47 +01:00
Hidde Beydals bb6ad72654
reconcile: determine drift in cluster
This allows `DetermineReleaseState` to determine if the cluster state
has drifted from the manifest defined in the Helm storage. This allows
the atomic reconciler to determine if an upgrade should happen based
on the configuration of the `HelmRelease`.

If drift detection is `enabled` (or set to `warn`), it will report
drift via the controller logs and a Kubernetes Event. In addition, when
correction is enabled, it will instruct to perform a Helm upgrade to
correct the drift.

To summarize the detected drift in a compact message, summarize
utilities have been introduced to the `diff` package.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 16:41:45 +01:00
Hidde Beydals 98c4118818
action: introduce `Diff` action
The `Diff` action can be used to detect changes between the manifest
from a Helm release and the current cluster state.

Compared to the previous diff functionality, it allows for ignoring
specific fields in a resource using the newly introduced ignore rules
in the API.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 13:35:15 +01:00
Hidde Beydals a5db99a88c
api: allow configuration of drift detection
This adds the option to enable drift detection for a specific
`HelmRelease` instance using `.spec.driftDetection.mode`.

Supported configurations are `enabled` (detect and correct), `warn`
(detect) and `disabled`.

In addition to this, it allows defining a set of ignore rules using
`.spec.driftDetection.ignore`. Which can be used to ignore (portions
of) a resource using JSON pointers and target selectors.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 13:33:32 +01:00
Hidde Beydals c3f13a3844
Merge pull request #817 from fluxcd/update-k8s
Update to Kubernetes 1.28.x, Helm v3.13.2 and Kustomize v5.2.1
2023-11-24 13:32:33 +01:00
Hidde Beydals e441c251c3
api: change `yaml` field tag to `json`
Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 13:19:34 +01:00
Hidde Beydals 576c14e272
reconcile: slightly change "unmanaged" log message
Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 12:52:17 +01:00
Hidde Beydals 6654b347fe
release: remove `Labels` field from `Observation`
Helm v3.13.x includes a change which causes labels to be magically
set during writes to the storage, without persisting them to the
release object which is passed to the interface.

Because of this, at the time of observing the initial write to the
storage we would not see them, but once we are verifying them we would.
Causing the calculated digest to always differ, and making the
controller think the storage item had changed.

While I am of opinion it would be better for Helm to set the labels on
the release object as soon as they are persisted to the storage, the
only solution now for us is to ignore them.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 12:47:24 +01:00
Hidde Beydals fb6221c4a3
yaml: adopt for `sigs.k8s.io/yaml` `v1.4.0`
Due to switch to a hard fork of goyaml.

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 12:46:34 +01:00
Hidde Beydals eaa2a8c2fe
Update dependencies
- github.com/fluxcd/cli-utils to v0.36.0-flux.1
- github.com/fluxcd/pkg/apis/event to v0.6.0
- github.com/fluxcd/pkg/apis/kustomize to v1.2.0
- github.com/fluxcd/pkg/apis/meta to v1.2.0
- github.com/fluxcd/pkg/runtime to v0.43.0
- github.com/fluxcd/pkg/ssa to v0.34.0
- github.com/fluxcd/pkg/testserver to v0.5.0
- github.com/go-logr/logr to v1.3.0
- github.com/google/go-cmp to v0.6.0
- github.com/hashicorp/go-retryablehttp to v0.7.5
- github.com/onsi/gomega to v1.30.0
- github.com/opencontainers/go-digest to v1.0.1-0.20231025023718-d50d2fec9c98
- github.com/opencontainers/go-digest/blake3 to v0.0.0-20231025023718-d50d2fec9c98
- golang.org/x/text to v0.14.0
- helm.sh/helm/v3 to v3.13.2
- k8s.io/api to v0.28.4
- k8s.io/apiextensions-apiserver to v0.28.4
- k8s.io/apimachinery to v0.28.4
- k8s.io/cli-runtime to v0.28.4
- k8s.io/client-go to v0.28.4
- k8s.io/kubectl to v0.28.4
- k8s.io/utils to v0.0.0-20231121161247-cf03d44ff3cf
- sigs.k8s.io/controller-runtime to v0.16.3
- sigs.k8s.io/kustomize/api to v0.15.0
- sigs.k8s.io/kustomize/kyaml to v0.15.0
- sigs.k8s.io/yaml to v1.4.0

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 12:43:33 +01:00
Hidde Beydals a97a9ffa69
api: update dependencies
- github.com/fluxcd/pkg/apis/kustomize to v1.2.0
- github.com/fluxcd/pkg/apis/meta to v1.2.0
- k8s.io/apiextensions-apiserver to v0.28.4
- k8s.io/apimachinery to v0.28.4
- sigs.k8s.io/controller-runtime to v0.16.3
- sigs.k8s.io/yaml to v1.4.0

Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 11:21:36 +01:00
Hidde Beydals 3f431e1cc8
Merge pull request #816 from fluxcd/test-suite-fixes
Address minor issues
2023-11-24 11:04:02 +01:00
Hidde Beydals e4d19b8e89
testdata: properly take tag value into account
Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 10:47:02 +01:00
Hidde Beydals 4c439b721a
action/upgrade: use correct CRD policy
Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2023-11-24 10:46:23 +01:00