The GitOps Toolkit source management component
Go to file
pa250194 ed6c6ebc3c Introduce BucketProvider interface
This commit introduces a BucketProvider interface for fetch operations
against object storage provider buckets. Allowing for easier
introduction of new provider implementations.

The algorithm for conditionally downloading object files is the same,
whether you are using GCP storage or an S3/Minio-compatible
bucket. The only thing that differs is how the respective clients
handle enumerating through the objects in the bucket; by implementing
just that in each provider, I can have the select-and-fetch code in
once place.

The client implementations do now include safe-guards to ensure the
fetched object is the same as metadata has been collected for. In
addition, minor changes have been made to the object fetch operation
to take into account that:

- Etags can change between composition of index and actual fetch, in
  which case the etag is now updated.
- Objects can disappear between composition of index and actual fetch,
  in which case the item is removed from the index.

Lastly, the requirement for authentication has been removed (and not
referring to a Secret at all is thus allowed), to provide support
for e.g. public buckets.

Co-authored-by: Hidde Beydals <hello@hidde.co>
Co-authored by: Michael Bridgen <michael@weave.works>
Signed-off-by: pa250194 <pa250194@ncr.com>
2022-03-01 10:15:10 +01:00
.github/workflows Fix make test on arm64 runners 2022-02-16 10:17:33 +00:00
api Implement Size field on archived artifacts 2022-02-28 16:01:34 +01:00
config Implement Size field on archived artifacts 2022-02-28 16:01:34 +01:00
controllers Introduce BucketProvider interface 2022-03-01 10:15:10 +01:00
docs Implement Size field on archived artifacts 2022-02-28 16:01:34 +01:00
hack Introduce v1beta2 API package 2022-02-23 12:34:35 +01:00
internal Introduce BucketProvider interface 2022-03-01 10:15:10 +01:00
pkg Introduce BucketProvider interface 2022-03-01 10:15:10 +01:00
tests/fuzz fuzz: Update to use v1beta2 APIs 2022-02-23 12:37:48 +01: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 Update libgit2 attributions 2022-02-16 10:30:27 +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 Upgrade libgit2 to libgit2-1.3.0-2 2022-02-16 11:39:11 +00:00
LICENSE Initial commit 2020-04-05 11:55:46 +03:00
MAINTAINERS Add pjbgf to Maintainers 2022-02-17 11:24:02 +00:00
Makefile Introduce v1beta2 API package 2022-02-23 12:34:35 +01:00
PROJECT Introduce v1beta2 API package 2022-02-23 12:34:35 +01:00
README.md Update test shield link 2021-11-22 11:40:18 +01:00
go.mod Introduce BucketProvider interface 2022-03-01 10:15:10 +01:00
go.sum Update github.com/sosedoff/gitkit (indirect) to v0.3.0 (CVE fix) 2022-02-25 13:25:03 +00:00
main.go Use field owner in the patch helper 2022-02-23 12:35:30 +01:00

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)