Commit Graph

805 Commits

Author SHA1 Message Date
Hidde Beydals 7c95db88f7
Merge pull request #413 from fluxcd/helmrepository-reconciler
Rewrite `HelmRepositoryReconciler` to new standards
2021-08-12 14:12:31 +02:00
Hidde Beydals 49639638b9 Rewrite `HelmRepositoryReconciler` to new standards
This commit rewrites the `HelmRepositoryReconciler` to new standards,
while implementing the newly introduced Condition types, and trying to
adhere better to Kubernetes API conventions.

More specifically it introduces:

- Implementation of more explicit Condition types to highlight
  abnormalities.
- Extensive usage of the `conditions` subpackage from `runtime`.
- Better and more conflict-resilient (status)patching of reconciled
  objects using the `patch` subpackage from runtime.
- Proper implementation of kstatus' `Reconciling` and `Stalled`
  conditions.
- Refactoring of some Helm elements to make them easier to use within
  the new reconciler logic.
- Integration tests that solely rely on `testenv` and do not
  use Ginkgo.

There are a couple of TODOs marked in-code, these are suggestions for
the future and should be non-blocking.
In addition to the TODOs, more complex and/or edge-case test scenarios
may be added as well.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-08-12 11:47:56 +02:00
Hidde Beydals 04c125f1da
Merge pull request #426 from fluxcd/acl-api
Add ACL optional field to Source API
2021-08-12 10:21:25 +02:00
Stefan Prodan 525be388ec Add ACL optional field to Source API
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-08-12 10:04:35 +02:00
Hidde Beydals 59806198fd
Merge pull request #427 from fluxcd/cleanup-git-testserver
chore: ensure Git server dir is removed after test
2021-08-12 10:01:50 +02:00
Hidde Beydals a0e4f5036b chore: ensure Git server dir is removed after test
Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-08-11 10:44:02 +02:00
Hidde Beydals 19d7f8308c
Merge pull request #412 from fluxcd/bucket-reconciler 2021-08-11 09:52:17 +02:00
Hidde Beydals 29f207d7c8 Wrap err with context instead of logging twice
This wraps the errors which are returned instead of logging them, as
the returned error is logged at the end of the reconcile run.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-08-11 09:35:35 +02:00
Sunny b49a809c93 BucketReconciler: Add reconcileArtifact tests
Add `BucketReconciler.reconcileArtifact` tests based on
`GitRepositoryReconciler.reconcileArtifact` test cases.

Signed-off-by: Sunny <darkowlzz@protonmail.com>
2021-08-10 22:15:06 +02:00
Hidde Beydals 15bc9e71b1 Consolidate condition types into `FetchFailed`
This commit consolidates the `DownloadFailed` and `CheckoutFailed`
Condition types into a new more generic `FetchFailed` type to simplify
the API and observations by consumers.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-08-10 22:15:06 +02:00
Hidde Beydals 588ccbfe99 Rewrite `BucketReconciler` to new standards
This commit rewrites the `BucketReconciler` to new standards, while
implementing the newly introduced Condition types, and trying to
adhere better to Kubernetes API conventions.

More specifically it introduces:

- Implementation of more explicit Condition types to highlight
  abnormalities.
- Extensive usage of the `conditions` subpackage from `runtime`.
- Better and more conflict-resilient (status)patching of reconciled
  objects using the `patch` subpackage from runtime.
- Proper implementation of kstatus' `Reconciling` and `Stalled`
  conditions.
- Refactor of reconciler logic, including more efficient detection of
  changes to bucket objects by making use of the etag data available,
  and downloading of object files in parallel with a limited number of
  workers (4).
- Integration tests that solely rely on `testenv` and do not
  use Ginkgo.

There are a couple of TODOs marked in-code, these are suggestions for
the future and should be non-blocking.
In addition to the TODOs, more complex and/or edge-case test scenarios
may be added as well.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-08-10 22:11:04 +02:00
Hidde Beydals 5d43bcc054
Merge pull request #423 from fluxcd/storage-sha256-checksum
storage: change Artifact checksum to SHA256
2021-08-10 10:45:12 +02:00
Hidde Beydals e79b5734ad storage: change Artifact checksum to SHA256
This changes the format of the Artifact checksum from SHA1 to SHA256 to
mitigate chosen-prefix and length extension attacks, and ensures it can
be used to secure content against malicious modifications.

Source consumers (including our own {kustomize,helm}-controllers)
should ensure the SHA256 of a downloaded artifact matches the
advertised checksum before making use of it.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-08-10 10:30:06 +02:00
Hidde Beydals f9995ee3ba
Merge pull request #422 from darkowlzz/gitrepo-reconcileartifact-conditions
gitrepo-reconciler: test reconcileArtifact conditions & symlink
2021-08-09 10:47:49 +02:00
Sunny 60771d5b4e
gitrepo: test reconcileArtifact condtns & symlink
Adds test cases for reconcileArtifact to check if old status
conditions are removed after new artifact is created.
Adds a test case to verify that the latest artifact symlink points to
the created artifact.

Signed-off-by: Sunny <darkowlzz@protonmail.com>
2021-08-09 13:32:51 +05:30
Hidde Beydals d6f4413d18
Merge pull request #421 from darkowlzz/conditions-update-ready
gitrepo-reconciler: Add tests for old conditions update
2021-08-09 09:51:01 +02:00
Sunny 43f2811215
gitrepo: Add tests for old conditions update
This tests the status conditions update in the gitrepository reconciler.
Given a mix of old status conditions, on a successful reconciliation,
the status condition is set to Ready=True.

Signed-off-by: Sunny <darkowlzz@protonmail.com>
2021-08-08 04:16:01 +05:30
Hidde Beydals 170ae97358
Merge pull request #419 from darkowlzz/gitrepo-reconcileinclude-test-storage
gitrepo-reconciler: reconcileInclude test assertion fixes
2021-08-06 22:10:58 +02:00
Sunny 47ab15d1c0
gitrepo: reconcileInclude test assertion fixes
Use the created artifact server test storage in reconcileInclude
test's GitRepositoryReconciler and cleanup the created storage.

Fix the test assertions to check the copied artifact directories in
the correct path. Also, update the tests to expect artifacts in the
include `toPath` to exist.

Signed-off-by: Sunny <darkowlzz@protonmail.com>
2021-08-06 19:36:28 +05:30
Hidde Beydals becd5f824c
Merge pull request #411 from fluxcd/gitrepository-reconciler
Rewrite `GitRepositoryReconciler` to new standards
2021-08-03 14:25:49 +02:00
Hidde Beydals f6f18030eb
Merge pull request #414 from darkowlzz/gitrepo-reconciler-artifact-tests
controllers: Add more tests for reconcileArtifact
2021-08-03 14:08:52 +02:00
Hidde Beydals 29442ba9bf Tweak logged messages
- Mention the current revision in the up-to-date log message.
- Ensure any error that is "swallowed" (not returned) is logged to
  ensure they are visible within the logs, and not just by inspecting
  the object.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-08-03 14:01:18 +02:00
Hidde Beydals a1ed1fc4b4 source: `GetRequeueAfter` in place of `GetInterval`
The problem with `GetInterval()` was that the returned type was of
`metav1.Duration`, while almost anywhere it was used, a type of
`time.Duration` was requested. The result of this was that we had to
call `GetInterval().Duration` all the time, which would become a bit
cumbersome after awhile.

To prevent this, we introduce a new `GetRequeueAfter() time.Duration`
method, which both results the right type, and bears a name that is
easier to remember where the value is used most; while setting the
`Result.RequeueAfter` during reconcile operations.

The introduced of this method deprecates `GetInterval()`, which should
be removed in a future MINOR release.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-08-03 13:36:12 +02:00
Hidde Beydals f1de98faf0 Replace %q in messages with '%s'
Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-08-03 12:20:19 +02:00
Sunny be4e85b422
controllers: Add more tests for reconcileArtifact
Fixes error returned from target path validation check and adds more
test cases for TestGitRepositoryReconciler_reconcileArtifact.

Signed-off-by: Sunny <darkowlzz@protonmail.com>
2021-08-02 05:42:32 +05:30
Hidde Beydals e34f79203d storage: strip env specific data during archive
This ensures the checksum is predictable, and not influenced by e.g.
different runtime configuration settings, or FS specific data.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-07-30 19:37:02 +02:00
Hidde Beydals 2ca0b47fea Use same SemVer logic in both Git implementations
Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-07-30 19:36:58 +02:00
Hidde Beydals f28f86a8ee Ensure rel path never traverses outside Storage
Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-07-30 19:36:38 +02:00
Hidde Beydals 08ce0c95fc Rewrite `GitRepositoryReconciler` to new standards
This commit rewrites the `GitRepositoryReconciler` to new standards,
while implementing the newly introduced Condition types, and trying
to adhere better to Kubernetes API conventions.

More specifically it introduces:

- Implementation of more explicit Condition types to highlight
  abnormalities.
- Extensive usage of the `conditions` subpackage from `runtime`.
- Better and more conflict-resilient (status)patching of reconciled
  objects using the `patch` subpackage from runtime.
- Proper implementation of kstatus' `Reconciling` and `Stalled`
  conditions.
- First (integration) tests that solely rely on `testenv` and do not
  use Ginkgo.

There are a couple of TODOs marked in-code, these are suggestions for
the future and should be non-blocking.
In addition to the TODOs, more complex and/or edge-case test scenarios
may be added as well.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-07-30 19:36:32 +02:00
Hidde Beydals 912e59da1f Refactor `hasArtifactUpdated` into `artifactSet`
Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-07-30 12:55:57 +02:00
Hidde Beydals 5e634fcdbb Introduce `fake` Git implementation
At present it only implements a fake commit, which for example can be
used to test commit verification logic.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-07-30 12:47:30 +02:00
Hidde Beydals 82583f2247 Implement new runtime interfaces, prepare testenv
This commit ensures all API objects implement the interfaces used by
the runtime package to work with conditions, etc., and prepares the
test suite to work with the `pkg/runtime/testenv` wrapper.

Changes are made in a backwards compatible way (that being: the
existing code can still be build and works as expected), but without
proper dependency boundaries. The result of this is that the API
package temporary depends on the runtime package, which is resolved
when all reconcilers have been refactored and the API package does
no longer contain condition modifying functions.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-07-30 12:33:18 +02:00
Hidde Beydals 48ebbcd64e Introduce more explicit Condition types
This commit introduces new Condition types to the v1beta1 API,
facilitating easier observation of (potentially) problematic state for
end-users.

- `ArtifactUnavailableCondition`: indicates there is no artifact
  available for the resource. This Condition should be set by the
  reconciler as soon as it observes the absence of an artifact for a
  source.
- `CheckoutFailedCondition`: indicates a transient or persistent
  checkout failure. This Condition should be set by the reconciler as
  soon as it observes a Git checkout failure, including any
  prerequisites like the unavailability of the referenced Secret used
  for authentication. It should be deleted as soon as a successful
  checkout has been observed again.
- `SourceVerifiedCondition`: indicates the integrity of the source has
  been verified. The Condition should be set to True or False by the
  reconciler based on the result of the integrity check.
  If there is no verification mode and/or secret configured, the
  Condition should be removed.
- `IncludeUnavailableCondition`: indicates one of the referenced
  includes is not available. This Condition should for example be set
  by the reconciler when the include does not exist, or does not have
  an artifact. If the includes become available, it should be deleted.
- `ArtifactOutdatedCondition`: indicates the current artifact of the
  source is outdated. This Condition should for example be set by the
  reconciler when it notices there is a newer revision for an artifact,
  or the previously included artifacts differ from the current available
  ones. The Condition should be removed after writing a new artifact
  to the storage.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-07-30 12:20:26 +02:00
Hidde Beydals 273f8b155e
Merge pull request #409 from fluxcd/dep-ioutil 2021-07-29 11:36:46 +02:00
Hidde Beydals c4d7e46b90 Drop deprecated `io/ioutil`
The package has been deprecated since Go 1.16, see:
https://golang.org/doc/go1.16#ioutil

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-07-29 09:58:00 +02:00
Hidde Beydals be5d10eaac
Merge pull request #403 from fluxcd/bucket-revision-path
Take relative paths in account for Bucket revision
2021-07-26 14:01:44 +02:00
Hidde Beydals f5cb441a82 Take relative paths in account for Bucket revision
This commit changes the checksum method which is used to calculate the
revision of a Bucket source, so that the file paths are taken into
account and directory structure changes can be observed.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-07-26 10:54:39 +02:00
Hidde Beydals dbaf8bf458
Merge pull request #405 from darkowlzz/client-objectkeyfromobject
Use ObjectKeyFromObject instead of ObjectKey
2021-07-26 10:48:19 +02:00
Sunny 9825a60b74
Use ObjectKeyFromObject instead of ObjectKey
controller-runtime's client package provides ObjectKeyFromObject() to
extract NamespacedName from a given object. ObjectKey() in
internal/util package is a helper for the same. Replace the internal
helper with controller-runtime's helper for the same.

Signed-off-by: Sunny <darkowlzz@protonmail.com>
2021-07-26 04:35:08 +05:30
Hidde Beydals 40a47670aa
Merge pull request #400 from fluxcd/update-deps
Update Helm to v3.6.3
2021-07-15 11:10:29 +02:00
Hidde Beydals 5e8e0ab65c Update Helm to v3.6.3
Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-07-14 23:24:26 +02:00
Stefan Prodan c6ae5e779a
Merge pull request #396 from fluxcd/debug-e2e
Print pods status on e2e failures
2021-06-29 17:04:00 +03:00
Stefan Prodan 25a2428b80
Print pods status on e2e failures
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-06-29 16:40:15 +03:00
Stefan Prodan 5c170bfdc3
Merge pull request #395 from fluxcd/release-v0.15.3
Release v0.15.3
2021-06-29 13:37:28 +03:00
Stefan Prodan be9f05baf1
Release v0.15.3
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-06-29 12:27:52 +03:00
Stefan Prodan 887d2c5e50
Merge pull request #394 from bburky/libgit2-tag-checkout
Fix tag checkout with libgit2
2021-06-29 11:54:03 +03:00
Blake Burkhart 0df2b0e0f0 Fix tag checkout with libgit2
SetHeadDetached (git_repository_set_head_detached) only changes HEAD,
and does not actually checkout the files on disk. Use CheckoutHead with
the CheckoutForce Strategy to actually check the files out on disk.

Additionally add a test that validates the hash of a checked out file's
contents.

Previously, the hash of the desired tag was being reported as the
checked out revision by the GitRepository. However the wrong files were
checked out and an incorrect revision would be deployed by Flux.

Signed-off-by: Blake Burkhart <blake.burkhart@us.af.mil>
2021-06-28 20:03:11 -05:00
Hidde Beydals 76aa40d290
Merge pull request #392 from fluxcd/release-v0.15.2
Release v0.15.2
2021-06-22 14:22:51 +02:00
Hidde Beydals bec2d83c2b Release v0.15.2
Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-06-22 14:05:36 +02:00
Hidde Beydals 221d0992ff
Merge pull request #391 from fluxcd/libgit2-unstable 2021-06-22 14:04:02 +02:00