Skip to content
This repository was archived by the owner on Dec 11, 2023. It is now read-only.

Commit a6bb74a

Browse files
author
odacremolbap
committed
kuard handler example
1 parent c38bee1 commit a6bb74a

File tree

6 files changed

+131
-10
lines changed

6 files changed

+131
-10
lines changed

cmd/triggermesh-hook/start/start.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ type Cmd struct {
1313
Path string `help:"Path where hook requests are served." env:"PATH" default:"v1"`
1414
}
1515

16-
func (c *Cmd) Run(globals *commoncmd.Globals) error {
17-
globals.Logger.Debug("Creating TriggerMesh hook server")
16+
func (c *Cmd) Run(g *commoncmd.Globals) error {
17+
g.Logger.Debug("Creating TriggerMesh hook server")
1818

19-
s := server.New(c.Path, c.Address, globals.Logger)
20-
return s.Start(globals.Context)
19+
s := server.New(c.Path, c.Address, g.KubeClient, g.Logger)
20+
return s.Start(g.Context)
2121
}

pkg/common/cmd/globals.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
apierrors "k8s.io/apimachinery/pkg/api/errors"
1515
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1616
"k8s.io/apimachinery/pkg/util/wait"
17+
kdclient "k8s.io/client-go/dynamic"
1718
kclient "k8s.io/client-go/kubernetes"
1819

1920
"github.com/triggermesh/scoby-hook-triggermesh/pkg/config/observability"
@@ -43,6 +44,7 @@ type Globals struct {
4344
Logger *zap.SugaredLogger `kong:"-"`
4445
LogLevel zap.AtomicLevel `kong:"-"`
4546
KubeClient kclient.Interface `kong:"-"`
47+
DynClient kdclient.Interface `kong:"-"`
4648
ConfigMethod ConfigMethod `kong:"-"`
4749
}
4850

@@ -83,11 +85,11 @@ func (g *Globals) Initialize() error {
8385
defaultConfigApplied := false
8486
var err error
8587

86-
kcfg, err := kubernetes.NewClient(g.Kubeconfig)
88+
kc, kdc, err := kubernetes.NewClients(g.Kubeconfig)
8789
if err != nil {
8890
return err
8991
}
90-
g.KubeClient = kcfg
92+
g.KubeClient, g.DynClient = kc, kdc
9193

9294
switch {
9395
case g.ObservabilityConfig != "":

pkg/handlers/handler.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package handlers
2+
3+
import (
4+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
5+
"k8s.io/apimachinery/pkg/runtime/schema"
6+
7+
hookv1 "github.com/triggermesh/scoby/pkg/hook/v1"
8+
)
9+
10+
type HandlerD struct {
11+
GVR schema.GroupVersionResource
12+
Kind string
13+
}
14+
15+
// Handler exposes methods for hook handler registration and reconciling.
16+
type Handler interface {
17+
// GVR for the managed object
18+
GroupVersionResource() *schema.GroupVersionResource
19+
// Kind for the managed object
20+
Kind() string
21+
22+
Reconcile(obj metav1.Object) *hookv1.HookResponse
23+
}
24+
25+
// HandlerFinalizable exposes methods for hook handler finalize operation.
26+
type HandlerFinalizable interface {
27+
Finalize(obj metav1.Object) hookv1.HookResponse
28+
}

pkg/handlers/kuards/kuards.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package myhandler
2+
3+
import (
4+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
5+
"k8s.io/apimachinery/pkg/runtime/schema"
6+
7+
commonv1alpha1 "github.com/triggermesh/scoby/pkg/apis/common/v1alpha1"
8+
hookv1 "github.com/triggermesh/scoby/pkg/hook/v1"
9+
corev1 "k8s.io/api/core/v1"
10+
11+
"github.com/triggermesh/scoby-hook-triggermesh/pkg/handlers"
12+
)
13+
14+
type KuardHandler struct {
15+
gvr schema.GroupVersionResource
16+
kind string
17+
}
18+
19+
var _ handlers.Handler = (*KuardHandler)(nil)
20+
21+
func New() *KuardHandler {
22+
return &KuardHandler{
23+
gvr: schema.GroupVersionResource{
24+
Group: "extensions.triggermesh.io",
25+
Version: "v1",
26+
Resource: "kuards",
27+
},
28+
kind: "Kuard",
29+
}
30+
}
31+
32+
func (h *KuardHandler) GroupVersionResource() *schema.GroupVersionResource {
33+
return &h.gvr
34+
}
35+
36+
// Kind for the managed object
37+
func (h *KuardHandler) Kind() string {
38+
return h.kind
39+
}
40+
41+
func (h *KuardHandler) Reconcile(obj metav1.Object) *hookv1.HookResponse {
42+
return &hookv1.HookResponse{
43+
Status: &hookv1.HookStatus{
44+
Conditions: commonv1alpha1.Conditions{
45+
{
46+
Type: "HookReportedStatus",
47+
Status: metav1.ConditionTrue,
48+
Reason: "HOOKREPORTSOK",
49+
},
50+
},
51+
Annotations: map[string]string{
52+
"io.triggermesh.hook/my-annotation": "annotation from hook",
53+
},
54+
},
55+
EnvVars: []corev1.EnvVar{
56+
{
57+
Name: "FROM_HOOK_NAME",
58+
Value: obj.GetName(),
59+
},
60+
{
61+
Name: "FROM_HOOK_NAMESPACE",
62+
Value: obj.GetNamespace(),
63+
},
64+
},
65+
}
66+
}

pkg/kubernetes/client.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"os"
55
"path/filepath"
66

7+
kdclient "k8s.io/client-go/dynamic"
78
kclient "k8s.io/client-go/kubernetes"
89
restclient "k8s.io/client-go/rest"
910
"k8s.io/client-go/tools/clientcmd"
@@ -32,11 +33,21 @@ func NewConfig(path string) (*restclient.Config, error) {
3233
return restclient.InClusterConfig()
3334
}
3435

35-
func NewClient(path string) (kclient.Interface, error) {
36+
func NewClients(path string) (kclient.Interface, kdclient.Interface, error) {
3637
cfg, err := NewConfig(path)
3738
if err != nil {
38-
return nil, err
39+
return nil, nil, err
3940
}
4041

41-
return kclient.NewForConfig(cfg)
42+
kc, err := kclient.NewForConfig(cfg)
43+
if err != nil {
44+
return nil, nil, err
45+
}
46+
47+
kdc, err := kdclient.NewForConfig(cfg)
48+
if err != nil {
49+
return nil, nil, err
50+
}
51+
52+
return kc, kdc, err
4253
}

pkg/server/server.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import (
1212

1313
corev1 "k8s.io/api/core/v1"
1414
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15+
kdclient "k8s.io/client-go/dynamic"
16+
kclient "k8s.io/client-go/kubernetes"
1517

1618
commonv1alpha1 "github.com/triggermesh/scoby/pkg/apis/common/v1alpha1"
1719
hookv1 "github.com/triggermesh/scoby/pkg/hook/v1"
@@ -20,15 +22,18 @@ import (
2022
type Server struct {
2123
path string
2224
address string
25+
client kclient.Interface
26+
dyn kdclient.Interface
2327

2428
logger *zap.SugaredLogger `kong:"-"`
2529
handlers map[string]interface{}
2630
}
2731

28-
func New(path, address string, logger *zap.SugaredLogger) *Server {
32+
func New(path, address string, client kclient.Interface, logger *zap.SugaredLogger) *Server {
2933
return &Server{
3034
path: path,
3135
address: address,
36+
client: client,
3237

3338
logger: logger,
3439
}
@@ -53,6 +58,15 @@ func (s *Server) Start(ctx context.Context) error {
5358
close(errCh)
5459
}()
5560

61+
pods, err := s.client.CoreV1().Pods("default").List(ctx, metav1.ListOptions{})
62+
if err != nil {
63+
return err
64+
}
65+
66+
for _, p := range pods.Items {
67+
s.logger.Infow("pod", zap.String("name", p.Name))
68+
}
69+
5670
select {
5771
case err := <-errCh:
5872
return err

0 commit comments

Comments
 (0)