Commit Graph

72 Commits

Author SHA1 Message Date
Hidde Beydals bf8c2deeb7 Make the API package a dedicated module
This includes changes to:

* Bump the Kubernetes dependencies to v1.19.3 to align
  with the other toolkit controllers.
* Update controller-runtime dependency to v0.6.3 to align
  with the other toolkit controllers.
* Update the source-controller dependency to the most recent
  v0.2.2 version to include the v1beta1 API.
* Add the `pkg/gittestserver` dependency for the Git tests,
  as this package was removed in a newer source-controller version.
* Bump the Go version to v1.15.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2020-11-19 12:16:17 +01:00
Hidde Beydals 29c60ecc6e Change copyright to Flux authors
Signed-off-by: Hidde Beydals <hello@hidde.co>
2020-10-27 17:57:31 +01:00
Michael Bridgen da2f23caf1 Remove proof-of-concept update mode
The initial implementation of image updates required a single image
policy, and updated every image field that used the image, in the git
repo. This mode has limited practical value, and rather than
elaborating on it, it would be better to concentrate on making the
more carefully thought-through "setters" mode.
2020-10-22 14:53:41 +01:00
Michael Bridgen 4006b6d5c4 Use UpdateWithSetters in controller
(and update the test to suit)
2020-10-13 21:00:13 +01:00
Michael Bridgen e176c22fa9 Add stub method and test for update by setters
This rearranges the test file a little, so that the different
strategies can share some setup.
2020-09-28 12:35:58 +01:00
Michael Bridgen ab4a963d50 Change package name and fixup imports and paths 2020-08-10 18:09:57 +01:00
Michael Bridgen 48aac78343 Reassign copyright to Flux project 2020-08-10 17:48:24 +01:00
Michael Bridgen ccee0af7f0 Rename .ImagePolicy -> .ImagePolicyRef
.. to be in line with gitops-toolkit convention.
2020-08-05 19:09:52 +01:00
Michael Bridgen 140360f327 Move GitRepository -> Checkout.GitRepositoryRef
This moves the specificiation for the checkout of the git repo to a
struct `GitCheckoutSpec`; and, renames the field that's a reference to
a GitRepository so it has the suffix `Ref` per gitops-toolkit
convention.
2020-08-05 19:09:09 +01:00
Michael Bridgen d7bf21cef4 Avoid reconcile tight loop
A resource will be queued whenever it changes, so if you change each
resource every time you see it, you will spin through all of them
continually.

To avoid that situation, this commit changes the reconcile logic so
that the resource status is updated only

 - if it actually make a commit; or,
 - if `interval` has passed since it last updated the status

In a steady state, this means it'll run twice (once for whatever
triggered it, and once because it updated itself) then be requeued
`interval` later.
2020-08-03 21:43:28 +01:00
Michael Bridgen 6dea89456b Use a specific git branch to sidestep assumptions
When I set my default branch for `git init` in ~/.gitconfig, tests
start failing. This is because go-git assumes a default of `master`
when e.g., pulling commits, but exec'ing git (as the test server does,
via gitkit) will get you a different branch.

The answer is to be explicit about the branch created in tests, and in
all operations like cloning. The natural end point is that the
automation object specifies a branch to use (or an empty value,
meaning let it default).
2020-08-03 13:34:14 +01:00
Michael Bridgen 6d656d108c Run on a schedule
This uses the pattern of recording when last run, then requeuing for
an interval.
2020-08-02 21:30:22 +01:00
Michael Bridgen db373c5b22 Add runInterval and lastAutomationRunTime fields
The runInterval spec field gives a period for scheduled automation
runs, so it'll get done regularly whether or not the dependencies
appear to have changed.

The lastAutomationRunTime status field records the last time the
particular automation completed a run, whether or not it made
changes. This is informational, and will help with scheduling periodic
automations.
2020-08-02 21:29:25 +01:00
Michael Bridgen a5f891c919 Watch gitrepositories and imagepolicies
An ImageUpdateAutomation refers to a git repository and may refer to
an image policy. Watch both of these kinds, and react to either
changing by queueing any automations that refer to them.
2020-08-02 21:27:09 +01:00
Hidde Beydals 8dc836e604 Change CRDs domain to 'image.toolkit.fluxcd.io'
This includes changes to the `README.md`, and a bump of the
`source-controller` dependency.
2020-07-31 17:05:56 +02:00
Michael Bridgen 97393366da Test controller to the point of committing changes
This adds a test for the controller, checking that it will commit and
push a change, with the given commit message. I think checking it made
the right change will need a bit of rejigging tests elsewhere, so I
can compare directory contents (as with pkg/update tests).
2020-07-23 18:20:35 +01:00
Michael Bridgen 71cf370dc8 Commit and push changes after running update
This makes the controller commit changes and push to the origin, when
it's run the update. There's some new fields in the
ImageUpdateAutomation type for specifying the commit message and
author.
2020-07-23 18:20:35 +01:00
Michael Bridgen bae999a03b Use the git package from source-controller
It's now exported, so I can use that instead of copypesto.
2020-07-23 18:20:35 +01:00
Michael Bridgen 739f3c1770 Add update strategy that uses image policy
Just to get points on the board, this gives ImageUpdateAutomation an
`update` field into which you can plug the name of an ImagePolicy
resource (from the image reflector controller). The idea is that the
automation will then replace the image in the policy, anywhere it's
used, with its latest version.
2020-07-23 18:20:35 +01:00
Michael Bridgen c5ae8f8812 Implement controller up to cloning the git repo
This is enough to clone the repo that's referenced in the
ImageUpdateAutomation resource. It reproduces a bunch of code from the
source-controller which is internal there, to avoid writing it from
scratch.
2020-07-23 18:20:35 +01:00
Michael Bridgen 166ad7e3aa Refer to a git repository in ImageUpdateAutomation
This adds the field GitRepository in the ImageUpdateAutomation, for
referring to the git repository in which to make updates.
2020-07-23 18:14:28 +01:00
Michael Bridgen a048169819 Add ImageUpdateAutomation type and controller
kubebuilder create api --group image --version v1alpha1 \
      --kind ImageUpdateAutomation
2020-07-23 18:14:28 +01:00