Merge pull request #1150 from fluxcd/dev-guide-update

Update dev guide to controller-runtime v0.8
pull/1156/head
Stefan Prodan 4 years ago committed by GitHub
commit 16fa9b2753
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -40,7 +40,10 @@ flux check --pre
Install source-controller on the dev cluster: Install source-controller on the dev cluster:
```sh ```sh
flux install flux install \
--namespace=flux-system \
--network-policy=false \
--components=source-controller
``` ```
## Clone the sample controller ## Clone the sample controller
@ -127,17 +130,13 @@ controller does the following:
// GitRepositoryWatcher watches GitRepository objects for revision changes // GitRepositoryWatcher watches GitRepository objects for revision changes
type GitRepositoryWatcher struct { type GitRepositoryWatcher struct {
client.Client client.Client
Log logr.Logger
Scheme *runtime.Scheme Scheme *runtime.Scheme
} }
// +kubebuilder:rbac:groups=source.toolkit.fluxcd.io,resources=gitrepositories,verbs=get;list;watch // +kubebuilder:rbac:groups=source.toolkit.fluxcd.io,resources=gitrepositories,verbs=get;list;watch
// +kubebuilder:rbac:groups=source.toolkit.fluxcd.io,resources=gitrepositories/status,verbs=get // +kubebuilder:rbac:groups=source.toolkit.fluxcd.io,resources=gitrepositories/status,verbs=get
func (r *GitRepositoryWatcher) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
func (r *GitRepositoryWatcher) Reconcile(req ctrl.Request) (ctrl.Result, error) { log := logr.FromContext(ctx)
// set timeout for the reconciliation
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
defer cancel()
// get source object // get source object
var repository sourcev1.GitRepository var repository sourcev1.GitRepository
@ -145,27 +144,27 @@ func (r *GitRepositoryWatcher) Reconcile(req ctrl.Request) (ctrl.Result, error)
return ctrl.Result{}, client.IgnoreNotFound(err) return ctrl.Result{}, client.IgnoreNotFound(err)
} }
log := r.Log.WithValues(strings.ToLower(repository.Kind), req.NamespacedName)
log.Info("New revision detected", "revision", repository.Status.Artifact.Revision) log.Info("New revision detected", "revision", repository.Status.Artifact.Revision)
// create tmp dir // create tmp dir
tmpDir, err := ioutil.TempDir("", repository.Name) tmpDir, err := ioutil.TempDir("", repository.Name)
if err != nil { if err != nil {
return ctrl.Result{}, fmt.Errorf("unable to create temp dir, error: %w", err) return ctrl.Result{}, fmt.Errorf("failed to create temp dir, error: %w", err)
} }
defer os.RemoveAll(tmpDir) defer os.RemoveAll(tmpDir)
// download and extract artifact // download and extract artifact
summary, err := r.fetchArtifact(ctx, repository, tmpDir) summary, err := r.fetchArtifact(ctx, repository, tmpDir)
if err != nil { if err != nil {
return ctrl.Result{}, fmt.Errorf("unable to fetch artifact, error: %w", err) log.Error(err, "unable to fetch artifact")
return ctrl.Result{}, err
} }
log.Info(summary) log.Info(summary)
// list artifact content // list artifact content
files, err := ioutil.ReadDir(tmpDir) files, err := ioutil.ReadDir(tmpDir)
if err != nil { if err != nil {
return ctrl.Result{}, fmt.Errorf("unable to list files, error: %w", err) return ctrl.Result{}, fmt.Errorf("failed to list files, error: %w", err)
} }
// do something with the artifact content // do something with the artifact content
@ -178,8 +177,7 @@ func (r *GitRepositoryWatcher) Reconcile(req ctrl.Request) (ctrl.Result, error)
func (r *GitRepositoryWatcher) SetupWithManager(mgr ctrl.Manager) error { func (r *GitRepositoryWatcher) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr). return ctrl.NewControllerManagedBy(mgr).
For(&sourcev1.GitRepository{}). For(&sourcev1.GitRepository{}, builder.WithPredicates(GitRepositoryRevisionChangePredicate{})).
WithEventFilter(GitRepositoryRevisionChangePredicate{}).
Complete(r) Complete(r)
} }
``` ```
@ -209,7 +207,6 @@ func main() {
if err = (&controllers.GitRepositoryWatcher{ if err = (&controllers.GitRepositoryWatcher{
Client: mgr.GetClient(), Client: mgr.GetClient(),
Log: ctrl.Log.WithName("controllers").WithName("GitRepositoryWatcher"),
Scheme: mgr.GetScheme(), Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil { }).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "GitRepositoryWatcher") setupLog.Error(err, "unable to create controller", "controller", "GitRepositoryWatcher")
@ -219,14 +216,14 @@ func main() {
} }
``` ```
Note that the watcher controller depends on Kubernetes client-go >= 1.18. Note that the watcher controller depends on Kubernetes client-go >= 1.20.
Your `go.mod` should require controller-runtime v0.6 or newer: Your `go.mod` should require controller-runtime v0.8 or newer:
```go ```go
require ( require (
k8s.io/apimachinery v0.19.4 k8s.io/apimachinery v0.20.2
k8s.io/client-go v0.19.4 k8s.io/client-go v0.20.2
sigs.k8s.io/controller-runtime v0.6.4 sigs.k8s.io/controller-runtime v0.8.3
) )
``` ```

Loading…
Cancel
Save