The GitOps Toolkit source management component
Go to file
Hidde Beydals e26a0c3b6a 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>
2022-02-15 15:55:44 +05:30
.github/workflows Validate LIBGIT2 args are set correctly 2022-02-09 15:52:46 +00:00
api Rewrite `BucketReconciler` to new standards 2022-02-15 15:55:44 +05:30
config Implement new runtime interfaces, prepare testenv 2022-02-15 15:40:57 +05:30
controllers Rewrite `BucketReconciler` to new standards 2022-02-15 15:55:44 +05:30
docs Implement new runtime interfaces, prepare testenv 2022-02-15 15:40:57 +05:30
hack Upgrade to libgit2-1.1.1-6 2022-02-08 10:51:20 +00:00
internal internal/util: introduce temp dir/path helpers 2022-02-15 15:40:58 +05:30
pkg Fixes to gitrepo reconciler tests 2022-02-15 15:42:18 +05:30
tests/fuzz Download libgit2 libraries for fuzzing 2022-02-11 12:30:46 +00:00
.dockerignore Download libgit2 libraries for fuzzing 2022-02-11 12:30:46 +00:00
.gitignore Update libgit2 to 1.1.1-6 2022-02-07 13:00:57 +00:00
.goreleaser.yaml Publish SBOM and sign release artifacts 2022-01-20 13:49:36 +02:00
ATTRIBUTIONS.md Validate LIBGIT2 args are set correctly 2022-02-09 15:52:46 +00:00
CHANGELOG.md Release v0.21.2 2022-02-07 11:50:32 +02:00
CODE_OF_CONDUCT.md Add governance files like DCO, MAINTAINERS, CoC 2020-04-12 23:54:35 +02:00
DCO Add governance files like DCO, MAINTAINERS, CoC 2020-04-12 23:54:35 +02:00
DEVELOPMENT.md Update dev docs 2022-01-25 15:09:47 +00:00
Dockerfile Download libgit2 libraries for fuzzing 2022-02-11 12:30:46 +00:00
LICENSE Initial commit 2020-04-05 11:55:46 +03:00
MAINTAINERS Share maintainers from fluxcd/flux2 2020-12-01 12:20:27 +00:00
Makefile Introduce v1beta2 API package 2022-02-15 15:40:57 +05:30
PROJECT Introduce v1beta2 API package 2022-02-15 15:40:57 +05:30
README.md Update test shield link 2021-11-22 11:40:18 +01:00
go.mod gitrepo: Add more reconciler design improvements 2022-02-15 15:55:38 +05:30
go.sum gitrepo: Add more reconciler design improvements 2022-02-15 15:55:38 +05:30
main.go Rewrite `BucketReconciler` to new standards 2022-02-15 15:55:44 +05:30

README.md

Source controller

CII Best Practices e2e report license release

The source-controller is a Kubernetes operator, specialised in artifacts acquisition from external sources such as Git, Helm repositories and S3 buckets. The source-controller implements the source.toolkit.fluxcd.io API and is a core component of the GitOps toolkit.

overview

Features:

  • authenticates to sources (SSH, user/password, API token)
  • validates source authenticity (PGP)
  • detects source changes based on update policies (semver)
  • fetches resources on-demand and on-a-schedule
  • packages the fetched resources into a well-known format (tar.gz, yaml)
  • makes the artifacts addressable by their source identifier (sha, version, ts)
  • makes the artifacts available in-cluster to interested 3rd parties
  • notifies interested 3rd parties of source changes and availability (status conditions, events, hooks)
  • reacts to Git push and Helm chart upload events (via notification-controller)