Skip to content

Commit 64e70f4

Browse files
authored
Merge pull request #3 from gianlucam76/documentation
Enhance README
2 parents a5b4011 + 613dd1d commit 64e70f4

File tree

6 files changed

+120
-10
lines changed

6 files changed

+120
-10
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
*.so
99
*.dylib
1010

11+
bin/
12+
1113
# Test binary, built with `go test -c`
1214
*.test
1315

@@ -25,3 +27,5 @@ hack/tools/bin/
2527

2628
# Go workspace file
2729
go.work
30+
31+
.gitconfig

README.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,64 @@ metadata:
5555
namespace: default
5656
```
5757
58+
The content of the ConfigMap can be either JSON or YAML. Same ConfigMap using YAML
59+
60+
```yaml
61+
apiVersion: v1
62+
data:
63+
config.yaml: |
64+
resources:
65+
- group: ""
66+
version: v"
67+
kind: Secret
68+
- group: apps
69+
version: v1
70+
kind: Deployment
71+
logs:
72+
- namespace: kube-system
73+
sinceSeconds:600
74+
kind: ConfigMap
75+
metadata:
76+
name: k8s-collector
77+
namespace: default
78+
```
79+
80+
When collecting resources, specify the group/version/kind. That is mandatory. Anything can be passed, including CustomResourceDefinitions.
81+
You can filter resources by namespace and/or labels.
82+
For instance to collect all Secret instances but *only* Deployment instances:
83+
84+
- in the __nginx__ namespace and
85+
- with labels app:nginx and version:latest
86+
87+
use the following ConfigMap
88+
89+
```yaml
90+
apiVersion: v1
91+
data:
92+
config.yaml: |
93+
resources:
94+
- group: ""
95+
version: v"
96+
kind: Secret
97+
- group: apps
98+
version: v1
99+
kind: Deployment
100+
namespace: nginx
101+
labelFilters:
102+
- key: app
103+
operation: Equal
104+
value: nginx
105+
- key: version
106+
operation: Equal
107+
value: latest
108+
kind: ConfigMap
109+
metadata:
110+
name: k8s-collector
111+
namespace: default
112+
```
113+
114+
When collecting logs, you can select a subset of Pods by specifying the namespace and the label filters (same as for resources).
115+
58116
### Collection folders
59117
k8s-collector will create two folders:
60118

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ module github.com/gianlucam76/k8s_collector
33
go 1.20
44

55
require (
6-
github.com/gdexlab/go-render v1.0.1
76
github.com/go-logr/logr v1.3.0
87
github.com/onsi/ginkgo/v2 v2.13.0
98
github.com/onsi/gomega v1.29.0
@@ -69,6 +68,7 @@ require (
6968
gopkg.in/yaml.v3 v3.0.1 // indirect
7069
k8s.io/apiextensions-apiserver v0.28.3 // indirect
7170
k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect
71+
k8s.io/kubectl v0.28.2 // indirect
7272
k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
7373
sigs.k8s.io/cluster-api v1.5.3 // indirect
7474
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect

go.sum

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJ
2121
github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4=
2222
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
2323
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
24-
github.com/gdexlab/go-render v1.0.1 h1:rxqB3vo5s4n1kF0ySmoNeSPRYkEsyHgln4jFIQY7v0U=
25-
github.com/gdexlab/go-render v1.0.1/go.mod h1:wRi5nW2qfjiGj4mPukH4UV0IknS1cHD4VgFTmJX5JzM=
2624
github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
2725
github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
2826
github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo=
@@ -35,6 +33,7 @@ github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogB
3533
github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
3634
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
3735
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
36+
github.com/gobuffalo/flect v1.0.2 h1:eqjPGSo2WmjgY2XlpGwo2NXgL3RucAKo4k4qQMNA5sA=
3837
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
3938
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
4039
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
@@ -206,6 +205,8 @@ k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0=
206205
k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo=
207206
k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ=
208207
k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM=
208+
k8s.io/kubectl v0.28.2 h1:fOWOtU6S0smdNjG1PB9WFbqEIMlkzU5ahyHkc7ESHgM=
209+
k8s.io/kubectl v0.28.2/go.mod h1:6EQWTPySF1fn7yKoQZHYf9TPwIl2AygHEcJoxFekr64=
209210
k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI=
210211
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
211212
sigs.k8s.io/cluster-api v1.5.3 h1:TtxneDCps14sZ9bNr515ivBRMj9OwUE6mRUr6l7fSBA=

pkg/utils/collect.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424

2525
"github.com/go-logr/logr"
2626
"github.com/pkg/errors"
27+
"gopkg.in/yaml.v2"
2728
corev1 "k8s.io/api/core/v1"
2829
"k8s.io/apimachinery/pkg/types"
2930
)
@@ -65,14 +66,19 @@ func (a *Collector) loadConfiguration(ctx context.Context, logger logr.Logger) (
6566

6667
for k := range configMap.Data {
6768
var currentConfiguration Configuration
69+
70+
err = yaml.Unmarshal([]byte(configMap.Data[k]), &currentConfiguration)
71+
if err == nil {
72+
return &currentConfiguration, nil
73+
}
74+
6875
err = json.Unmarshal([]byte(configMap.Data[k]), &currentConfiguration)
69-
if err != nil {
70-
logger.Info(fmt.Sprintf("content %q", configMap.Data[k]))
71-
logger.Info(fmt.Sprintf("configMap key: %q does not contain a valid configuration instance: %v", k, err))
72-
continue
76+
if err == nil {
77+
return &currentConfiguration, nil
7378
}
7479

75-
return &currentConfiguration, nil
80+
logger.Info(fmt.Sprintf("content %q", configMap.Data[k]))
81+
logger.Info(fmt.Sprintf("configMap key: %q does not contain a valid configuration instance: %v", k, err))
7682
}
7783

7884
return nil, nil

pkg/utils/collect_test.go

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
. "github.com/onsi/ginkgo/v2"
99
. "github.com/onsi/gomega"
10+
"gopkg.in/yaml.v2"
1011

1112
corev1 "k8s.io/api/core/v1"
1213
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -16,7 +17,7 @@ import (
1617
)
1718

1819
var _ = Describe("Collect", func() {
19-
It("loadConfiguration loads configuration from ConfigMap", func() {
20+
It("loadConfiguration loads configuration from ConfigMap (YAML)", func() {
2021
sinceSecond := int64(600)
2122
collectorConfig := &utils.Configuration{
2223
Logs: []utils.Log{
@@ -28,7 +29,7 @@ var _ = Describe("Collect", func() {
2829
},
2930
}
3031

31-
jsonBytes, err := json.Marshal(collectorConfig)
32+
jsonBytes, err := yaml.Marshal(collectorConfig)
3233
Expect(err).To(BeNil())
3334

3435
configMap := &corev1.ConfigMap{
@@ -54,4 +55,44 @@ var _ = Describe("Collect", func() {
5455
Expect(err).To(BeNil())
5556
Expect(collectorConfig).ToNot(BeNil())
5657
})
58+
59+
It("loadConfiguration loads configuration from ConfigMap (JSON)", func() {
60+
sinceSecond := int64(600)
61+
collectorConfig := &utils.Configuration{
62+
Logs: []utils.Log{
63+
{Namespace: "kube-system", SinceSeconds: &sinceSecond},
64+
},
65+
Resources: []utils.Resource{
66+
{Group: "", Version: "v1", Kind: "Service"},
67+
{Group: "", Version: "v1", Kind: "Pod"},
68+
{Group: "apps", Version: "v1", Kind: "Deployment"},
69+
},
70+
}
71+
72+
jsonBytes, err := json.Marshal(collectorConfig)
73+
Expect(err).To(BeNil())
74+
75+
configMap := &corev1.ConfigMap{
76+
ObjectMeta: metav1.ObjectMeta{
77+
Namespace: "default",
78+
Name: "bar",
79+
},
80+
Data: map[string]string{
81+
"config": string(jsonBytes),
82+
},
83+
}
84+
85+
collector, err := utils.GetCollectorInstance(scheme, env.Config, "", configMap.Name)
86+
Expect(err).To(BeNil())
87+
Expect(k8sClient.Create(context.TODO(), configMap)).To(Succeed())
88+
89+
waitForObject(context.TODO(), k8sClient, configMap)
90+
91+
os.Setenv("COLLECTOR_NAMESPACE", configMap.Namespace)
92+
config := textlogger.NewConfig(textlogger.Verbosity(1))
93+
logger := textlogger.NewLogger(config)
94+
collectorConfig, err = utils.LoadConfiguration(collector, context.TODO(), logger)
95+
Expect(err).To(BeNil())
96+
Expect(collectorConfig).ToNot(BeNil())
97+
})
5798
})

0 commit comments

Comments
 (0)