add operator
This commit is contained in:
18
pkg/apis/v1/groupversion_info.go
Normal file
18
pkg/apis/v1/groupversion_info.go
Normal file
@@ -0,0 +1,18 @@
|
||||
// +kubebuilder:object:generate=true
|
||||
// +groupName=demo.io
|
||||
package v1
|
||||
|
||||
import (
|
||||
ctrl "sigs.k8s.io/controller-runtime"
|
||||
)
|
||||
|
||||
var (
|
||||
// GroupVersion is group version used to register these objects
|
||||
GroupVersion = ctrl.GroupVersion{Group: "demo.io", Version: "v1"}
|
||||
|
||||
// SchemeBuilder is used to add go types to the GroupVersionKind scheme
|
||||
SchemeBuilder = &ctrl.SchemeBuilder{GroupVersion: GroupVersion}
|
||||
|
||||
// AddToScheme adds the types in this group-version to the given scheme.
|
||||
AddToScheme = SchemeBuilder.AddToScheme
|
||||
)
|
||||
56
pkg/controllers/services.go
Normal file
56
pkg/controllers/services.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
ctrl "sigs.k8s.io/controller-runtime"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"sigs.k8s.io/controller-runtime/pkg/controller"
|
||||
"sigs.k8s.io/controller-runtime/pkg/handler"
|
||||
"sigs.k8s.io/controller-runtime/pkg/source"
|
||||
)
|
||||
|
||||
// ServiceReconciler reconciles Service
|
||||
type ServiceReconciler struct {
|
||||
client client.Client
|
||||
}
|
||||
|
||||
//+kubebuilder:rbac:groups="",resources=services,verbs=get;list;watch;
|
||||
|
||||
func (r *ServiceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
|
||||
l := ctrl.LoggerFrom(ctx)
|
||||
|
||||
var svc corev1.Service
|
||||
err := r.client.Get(ctx, req.NamespacedName, &svc)
|
||||
if errors.IsNotFound(err) {
|
||||
return ctrl.Result{}, nil
|
||||
}
|
||||
|
||||
l.Info("got svc")
|
||||
return ctrl.Result{}, nil
|
||||
}
|
||||
|
||||
func (r *ServiceReconciler) InjectClient(c client.Client) error {
|
||||
r.client = c
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewService(mgr ctrl.Manager) error {
|
||||
r := &ServiceReconciler{}
|
||||
|
||||
c, err := controller.NewUnmanaged("Services", mgr, controller.Options{
|
||||
Reconciler: r, RecoverPanic: true,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = c.Watch(&source.Kind{Type: &corev1.Service{}},
|
||||
&handler.EnqueueRequestForObject{}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return mgr.Add(c)
|
||||
}
|
||||
68
pkg/k8s/k8s.go
Normal file
68
pkg/k8s/k8s.go
Normal file
@@ -0,0 +1,68 @@
|
||||
package k8s
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
v1 "monitor/pkg/apis/v1"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
ctrl "sigs.k8s.io/controller-runtime"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client/config"
|
||||
"sigs.k8s.io/controller-runtime/pkg/healthz"
|
||||
"sigs.k8s.io/controller-runtime/pkg/manager"
|
||||
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
ctrl.Options
|
||||
}
|
||||
|
||||
type Manager struct {
|
||||
mgr ctrl.Manager
|
||||
}
|
||||
|
||||
func NewManager(conf Config) (*Manager, error) {
|
||||
restConfig, err := config.GetConfig()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
mgr, err := ctrl.NewManager(restConfig, conf.Options)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not create manager %w", err)
|
||||
}
|
||||
|
||||
if err = corev1.AddToScheme(mgr.GetScheme()); err != nil {
|
||||
return nil, fmt.Errorf("unable to add scheme %w", err)
|
||||
}
|
||||
|
||||
if err = v1.AddToScheme(mgr.GetScheme()); err != nil {
|
||||
return nil, fmt.Errorf("unable to add scheme %w", err)
|
||||
}
|
||||
|
||||
return &Manager{mgr: mgr}, nil
|
||||
}
|
||||
|
||||
func (s *Manager) Add(r manager.Runnable) error {
|
||||
return s.mgr.Add(r)
|
||||
}
|
||||
|
||||
func (s *Manager) Setup(f func(manager.Manager) error) error {
|
||||
return f(s.mgr)
|
||||
}
|
||||
|
||||
func (s *Manager) WebHook(obj runtime.Object) error {
|
||||
return ctrl.NewWebhookManagedBy(s.mgr).For(obj).Complete()
|
||||
}
|
||||
|
||||
func (s *Manager) Start() error {
|
||||
if err := s.mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {
|
||||
return fmt.Errorf("unable to set up health check %w", err)
|
||||
}
|
||||
if err := s.mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil {
|
||||
return fmt.Errorf("unable to set up ready check %w", err)
|
||||
}
|
||||
|
||||
return s.mgr.Start(signals.SetupSignalHandler())
|
||||
}
|
||||
Reference in New Issue
Block a user