Skip to content

Commit 9fdbec6

Browse files
committed
Report namespace info with billing event
Signed-off-by: Tamal Saha <tamal@appscode.com>
1 parent e7e8424 commit 9fdbec6

File tree

22 files changed

+233
-25
lines changed

22 files changed

+233
-25
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ require (
1515
k8s.io/apimachinery v0.30.2
1616
k8s.io/client-go v0.30.2
1717
k8s.io/klog/v2 v2.130.1
18-
kmodules.xyz/client-go v0.30.44
19-
kmodules.xyz/resource-metadata v0.24.3
18+
kmodules.xyz/client-go v0.30.45
19+
kmodules.xyz/resource-metadata v0.25.1-0.20250213135618-f09b6b6bc2b1
2020
sigs.k8s.io/controller-runtime v0.18.4
2121
)
2222

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -328,14 +328,14 @@ k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 h1:jgGTlFYnhF1PM1Ax/lAlxUPE+KfCI
328328
k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
329329
kmodules.xyz/apiversion v0.2.0 h1:vAQYqZFm4xu4pbB1cAdHbFEPES6EQkcR4wc06xdTOWk=
330330
kmodules.xyz/apiversion v0.2.0/go.mod h1:oPX8g8LvlPdPX3Yc5YvCzJHQnw3YF/X4/jdW0b1am80=
331-
kmodules.xyz/client-go v0.30.44 h1:mLOBXQhvCIhdega9WoN4Px/usqobuKTT2vOPQcbGhXQ=
332-
kmodules.xyz/client-go v0.30.44/go.mod h1:T9Kiu20wXEn65dLBQeegf4+y7oahJBR9ZJO2zGEVLIY=
331+
kmodules.xyz/client-go v0.30.45 h1:hSjNlJoPQ86CKS8BiEbSmBkF2+yWsFjjMFISOCVJ6aA=
332+
kmodules.xyz/client-go v0.30.45/go.mod h1:T9Kiu20wXEn65dLBQeegf4+y7oahJBR9ZJO2zGEVLIY=
333333
kmodules.xyz/go-containerregistry v0.0.12 h1:Tl32QGmSqRVm9PUEb/f3dgDeu9zW5fVzt3qmAFIE37I=
334334
kmodules.xyz/go-containerregistry v0.0.12/go.mod h1:KgeNg0hDsgeda+qc0NzWk0iVRdF0+ZIg/oRzGoYh78I=
335335
kmodules.xyz/offshoot-api v0.30.1 h1:TrulAYO+oBsXe9sZZGTmNWIuI8qD2izMpgcTSPvgAmI=
336336
kmodules.xyz/offshoot-api v0.30.1/go.mod h1:T3mpjR6fui0QzOcmQvIuANytW48fe9ytmy/1cgx6D4g=
337-
kmodules.xyz/resource-metadata v0.24.3 h1:yGXm6G1YIXru3mgDqDWsCPhGfotT3xBTKy+jd0bpF+E=
338-
kmodules.xyz/resource-metadata v0.24.3/go.mod h1:rPUZSMR0e1Vi+gONQ2ZhOFW+GvUeK+1AI7h9fzTZoKI=
337+
kmodules.xyz/resource-metadata v0.25.1-0.20250213135618-f09b6b6bc2b1 h1:3kYTSwNRp8uV+qBwhxw75VGMwJesyDW7pdfPlIB/uHQ=
338+
kmodules.xyz/resource-metadata v0.25.1-0.20250213135618-f09b6b6bc2b1/go.mod h1:CkIm4CFaYubdvYQeF6xmIVCm2bCYFyvgcXrwcOEWf/o=
339339
kmodules.xyz/resource-metrics v0.30.5 h1:ZhpGeR9DCz1HTrKUg/mWhr95wlFzCPRdgVAqwaggy1o=
340340
kmodules.xyz/resource-metrics v0.30.5/go.mod h1:w9+rz7/s/kGP1GWzYSuRdCn+l7EwpesmESSEHkLBnIQ=
341341
moul.io/http2curl/v2 v2.3.1-0.20221024080105-10c404f653f7 h1:NykkTlRB+X40z86cLHdEmuoTxhNKhQebLT379b1EumA=

lib/billing_event.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package lib
1818

1919
import (
2020
"context"
21+
"strings"
2122

2223
api "go.bytebuilders.dev/audit/api/v1"
2324

@@ -32,6 +33,7 @@ type BillingEventCreator struct {
3233
Mapper discovery.ResourceMapper
3334
ClusterMetadata *kmapi.ClusterMetadata
3435
ClientBilling bool
36+
NamespaceLister client.Reader
3537
PodLister client.Reader
3638
PVCLister client.Reader
3739
}
@@ -47,6 +49,30 @@ func (p *BillingEventCreator) CreateEvent(obj client.Object) (*api.Event, error)
4749
return nil, err
4850
}
4951

52+
if p.NamespaceLister != nil {
53+
var ns core.Namespace
54+
err = p.NamespaceLister.Get(context.TODO(), client.ObjectKey{Name: obj.GetNamespace()}, &ns)
55+
if err != nil {
56+
return nil, err
57+
}
58+
res.Spec.Namespace = &corev1alpha1.NamespaceInfo{
59+
UID: ns.UID,
60+
Name: ns.Name,
61+
CreationTimestamp: ns.CreationTimestamp,
62+
}
63+
if ns.Labels[kmapi.ClientOrgKey] == "true" {
64+
res.Spec.Namespace.AceOrgID = ns.Annotations[kmapi.AceOrgIDKey]
65+
66+
orgMetadata := map[string]string{}
67+
for k, v := range ns.Annotations {
68+
if after, found := strings.CutPrefix(k, kmapi.ClientKeyPrefix); found {
69+
orgMetadata[after] = v
70+
}
71+
}
72+
res.Spec.Namespace.AceOrgMetadata = orgMetadata
73+
}
74+
}
75+
5076
if p.ClientBilling {
5177
if r, ok := obj.(Resource); ok {
5278
var podList core.PodList

lib/lister.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,56 @@ import (
2626
"sigs.k8s.io/controller-runtime/pkg/client"
2727
)
2828

29+
type NamespaceReader struct {
30+
delegate corelisters.NamespaceLister
31+
}
32+
33+
var _ client.Reader = &NamespaceReader{}
34+
35+
func NewNamespaceReader(delegate corelisters.NamespaceLister) NamespaceReader {
36+
return NamespaceReader{delegate: delegate}
37+
}
38+
39+
func (r NamespaceReader) Get(ctx context.Context, key client.ObjectKey, obj client.Object, _ ...client.GetOption) error {
40+
ns, err := r.delegate.Get(key.Name)
41+
if err != nil {
42+
return err
43+
}
44+
assign(obj, ns)
45+
return nil
46+
}
47+
48+
func (r NamespaceReader) List(ctx context.Context, list client.ObjectList, opts ...client.ListOption) error {
49+
var o client.ListOptions
50+
o.ApplyOptions(opts)
51+
52+
var ls labels.Selector
53+
if o.LabelSelector != nil {
54+
ls = o.LabelSelector
55+
} else if o.Raw != nil && o.Raw.LabelSelector != "" {
56+
var err error
57+
ls, err = labels.Parse(o.Raw.LabelSelector)
58+
if err != nil {
59+
return err
60+
}
61+
}
62+
63+
namespaces, err := r.delegate.List(ls)
64+
if err != nil {
65+
return err
66+
}
67+
68+
nsList := core.NamespaceList{
69+
Items: make([]core.Namespace, 0, len(namespaces)),
70+
}
71+
for _, pod := range namespaces {
72+
nsList.Items = append(nsList.Items, *pod)
73+
}
74+
assign(list, nsList)
75+
76+
return nil
77+
}
78+
2979
type PodReader struct {
3080
delegate corelisters.PodLister
3181
}

vendor/kmodules.xyz/client-go/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ lint: $(BUILD_DIRS)
261261
--env GO111MODULE=on \
262262
--env GOFLAGS="-mod=vendor" \
263263
$(BUILD_IMAGE) \
264-
golangci-lint run --enable $(ADDTL_LINTERS) --timeout=10m --skip-files="generated.*\.go$\" --skip-dirs-use-default
264+
golangci-lint run --enable $(ADDTL_LINTERS) --timeout=10m --exclude-files="generated.*\.go$\" --exclude-dirs-use-default
265265

266266
$(BUILD_DIRS):
267267
@mkdir -p $@

vendor/kmodules.xyz/client-go/apiextensions/v1/crd.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@ func TryUpdateCustomResourceDefinition(
115115
klog.Errorf("Attempt %d failed to update CustomResourceDefinition %s due to %v.", attempt, cur.Name, e2)
116116
return false, nil
117117
})
118-
119118
if err != nil {
120119
err = errors.Errorf("failed to update CustomResourceDefinition %s after %d attempts due to %v", name, attempt, err)
121120
}

vendor/kmodules.xyz/client-go/cluster/ocm.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,16 @@ package cluster
1818

1919
import (
2020
"context"
21+
"fmt"
22+
"strings"
2123

24+
kmapi "kmodules.xyz/client-go/api/v1"
25+
26+
core "k8s.io/api/core/v1"
2227
"k8s.io/apimachinery/pkg/api/meta"
2328
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2429
"k8s.io/apimachinery/pkg/runtime/schema"
30+
"k8s.io/apiserver/pkg/authentication/user"
2531
"sigs.k8s.io/controller-runtime/pkg/client"
2632
)
2733

@@ -53,3 +59,42 @@ func IsOpenClusterMulticlusterControlplane(mapper meta.RESTMapper) bool {
5359
}
5460
return IsOpenClusterHub(mapper) && missingDeployment
5561
}
62+
63+
type ClientOrgResult struct {
64+
IsClientOrg bool
65+
OrgID string
66+
Namespace core.Namespace
67+
}
68+
69+
func IsClientOrgMember(kc client.Client, user user.Info) (*ClientOrgResult, error) {
70+
orgs, exists := user.GetExtra()[kmapi.AceOrgIDKey]
71+
if !exists || len(orgs) == 0 {
72+
return &ClientOrgResult{}, nil
73+
}
74+
if len(orgs) > 1 {
75+
return nil, fmt.Errorf("user %s associated with multiple orgs %v", user.GetName(), orgs)
76+
}
77+
78+
var list core.NamespaceList
79+
if err := kc.List(context.TODO(), &list, client.MatchingLabels{
80+
kmapi.ClientOrgKey: "true",
81+
}); err != nil {
82+
return nil, err
83+
}
84+
85+
for _, ns := range list.Items {
86+
if ns.Annotations[kmapi.AceOrgIDKey] == orgs[0] {
87+
return &ClientOrgResult{
88+
IsClientOrg: true,
89+
OrgID: orgs[0],
90+
Namespace: ns,
91+
}, nil
92+
}
93+
}
94+
return &ClientOrgResult{}, nil
95+
}
96+
97+
func ClientDashboardTitle(title string) string {
98+
title = strings.TrimPrefix(title, "KubeDB /")
99+
return strings.TrimSpace(title)
100+
}

vendor/kmodules.xyz/client-go/core/v1/configmap.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ func TryUpdateConfigMap(ctx context.Context, c kubernetes.Interface, meta metav1
9393
klog.Errorf("Attempt %d failed to update ConfigMap %s/%s due to %v.", attempt, cur.Namespace, cur.Name, e2)
9494
return false, nil
9595
})
96-
9796
if err != nil {
9897
err = errors.Errorf("failed to update ConfigMap %s/%s after %d attempts due to %v", meta.Namespace, meta.Name, attempt, err)
9998
}

vendor/kmodules.xyz/client-go/core/v1/events.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ func TryUpdateEvent(ctx context.Context, c kubernetes.Interface, meta metav1.Obj
9393
klog.Errorf("Attempt %d failed to update Event %s/%s due to %v.", attempt, cur.Namespace, cur.Name, e2)
9494
return false, nil
9595
})
96-
9796
if err != nil {
9897
err = errors.Errorf("failed to update Event %s/%s after %d attempts due to %v", meta.Namespace, meta.Name, attempt, err)
9998
}

vendor/kmodules.xyz/client-go/core/v1/node.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ func TryUpdateNode(ctx context.Context, c kubernetes.Interface, meta metav1.Obje
101101
klog.Errorf("Attempt %d failed to update Node %s due to %v.", attempt, cur.Name, e2)
102102
return false, nil
103103
})
104-
105104
if err != nil {
106105
err = errors.Errorf("failed to update Node %s after %d attempts due to %v", meta.Name, attempt, err)
107106
}

0 commit comments

Comments
 (0)