Add initial controller boilerplate and example controller

Signed-off-by: Monis Khan <mok@vmware.com>
This commit is contained in:
Monis Khan
2020-07-20 19:52:20 -04:00
parent 31c4e6560d
commit d4eeb74641
18 changed files with 1460 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
/*
Copyright 2020 VMware, Inc.
SPDX-License-Identifier: Apache-2.0
*/
package starter
import (
"context"
"fmt"
"time"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/events"
"github.com/suzerain-io/placeholder-name/internal/controller"
examplecontroller "github.com/suzerain-io/placeholder-name/test/integration/examplecontroller/controller"
)
func StartExampleController(ctx context.Context, config *rest.Config, secretData string) error {
kubeClient, err := kubernetes.NewForConfig(config)
if err != nil {
return fmt.Errorf("failed to build client: %w", err)
}
kubeInformers := informers.NewSharedInformerFactory(kubeClient, 20*time.Minute)
recorder := events.NewEventBroadcasterAdapter(kubeClient).NewRecorder("example-controller")
manager := controller.NewManager().
WithController(
examplecontroller.NewExampleCreatingController(
kubeInformers.Core().V1().Services(),
kubeInformers.Core().V1().Secrets(),
kubeClient.CoreV1(),
recorder,
secretData,
), 5,
).
WithController(
examplecontroller.NewExampleUpdatingController(
kubeInformers.Core().V1().Services(),
kubeInformers.Core().V1().Secrets(),
kubeClient.CoreV1(),
recorder,
secretData,
), 5,
)
kubeInformers.Start(ctx.Done())
go manager.Start(ctx)
return nil
}