Skip to content

Commit 842e672

Browse files
authored
Merge pull request #12 from kube-logging/subscription-labels
add e2e tests: label based routing works
2 parents 5a48603 + 6595583 commit 842e672

File tree

5 files changed

+87
-18
lines changed

5 files changed

+87
-18
lines changed

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,3 +186,7 @@ run-delve: generate fmt vet manifests
186186
.PHONY: tidy
187187
tidy: ## Tidy Go modules
188188
find . -iname "go.mod" -not -path "./.devcontainer/*" | xargs -L1 sh -c 'cd $$(dirname $$0); go mod tidy'
189+
190+
.PHONY: e2e-test
191+
e2e-test: ## Run e2e tests, make sure subscription operator is running somewhere
192+
cd e2e && timeout --foreground 15m ./e2e_test.sh || (echo "E2E test failed"; exit 1)

docs/examples/one_tenant_two_subscriptions.yaml renamed to docs/examples/simple-demo/one_tenant_two_subscriptions.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ spec:
3737
apiVersion: telemetry.kube-logging.dev/v1alpha1
3838
kind: Subscription
3939
metadata:
40-
name: subscription-sample
40+
name: subscription-sample-1
4141
namespace: example-tenant-ns
4242
spec:
4343
ottl: 'route()'
@@ -48,7 +48,7 @@ spec:
4848
apiVersion: telemetry.kube-logging.dev/v1alpha1
4949
kind: Subscription
5050
metadata:
51-
name: another-subscription-sample
51+
name: subscription-sample-2
5252
namespace: example-tenant-ns
5353
spec:
5454
ottl: 'route()'
File renamed without changes.

e2e/e2e_test.sh

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#!/bin/env bash
2+
3+
set -eou pipefail
4+
5+
create_if_does_not_exist() {
6+
local resource_type=$1
7+
local resource_name=$2
8+
kubectl create "${resource_type}" "${resource_name}" --dry-run=client -o yaml | kubectl apply -f-
9+
}
10+
11+
KIND_CLUSTER_NAME=${KIND_CLUSTER_NAME_E2E:-so-e2e}
12+
# Backup current kubernetes context
13+
CURRENT_K8S_CTX=$(kubectl config view | grep "current" | cut -f 2 -d : | xargs)
14+
15+
# Prepare env
16+
kind create cluster --name "${KIND_CLUSTER_NAME}" --wait 5m
17+
kubectl config set-context kind-"${KIND_CLUSTER_NAME}"
18+
19+
# Install prerequisites
20+
21+
helm upgrade \
22+
--install \
23+
--repo https://charts.jetstack.io \
24+
cert-manager cert-manager \
25+
--namespace cert-manager \
26+
--create-namespace \
27+
--version v1.13.3 \
28+
--set installCRDs=true \
29+
--wait
30+
31+
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml --wait
32+
echo "Wait until otel operator pod is in ready state..."
33+
kubectl wait --namespace opentelemetry-operator-system --for=condition=available deployment/opentelemetry-operator-controller-manager --timeout=300s
34+
35+
# Create subscription operator resources
36+
(cd .. && make manifests generate install)
37+
38+
# Use example
39+
kubectl apply -f ../docs/examples/simple-demo
40+
41+
42+
(cd .. && timeout 5m make run &)
43+
44+
# Create log-generator
45+
helm install --wait --create-namespace --namespace example-tenant-ns --generate-name oci://ghcr.io/kube-logging/helm-charts/log-generator
46+
47+
48+
# Check for received messages - subscription-sample
49+
while
50+
echo "Checking for subscription-sample-1 in deployments/receiver-collector logs"
51+
kubectl logs --namespace example-tenant-ns deployments/receiver-collector | grep -q "subscription-sample-1"
52+
53+
[[ $? -ne 0 ]]
54+
do true; done
55+
56+
# Check for received messages - subscription-sample-2
57+
while
58+
echo "Checking for subscription-sample-2 in deployments/receiver-collector logs"
59+
kubectl logs --namespace example-tenant-ns deployments/receiver-collector | grep -q "subscription-sample-2"
60+
61+
[[ $? -ne 0 ]]
62+
do true; done
63+
64+
echo "E2E test: PASSED"
65+
66+
67+
# Check if cluster should be removed, ctx restored
68+
if [[ -z "${NO_KIND_CLEANUP}" ]]; then
69+
kind delete cluster --name "${KIND_CLUSTER_NAME}"
70+
fi
71+
72+
if [[ "${CURRENT_K8S_CTX}" != "" ]]; then
73+
kubectl config get-contexts -o name | grep -q "${CURRENT_K8S_CTX}" && kubectl config set-context "${CURRENT_K8S_CTX}"
74+
fi

internal/controller/telemetry/otel_conf_gen.go

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ type RoutingConnectorTableItem struct {
4141

4242
type RoutingConnector struct {
4343
Name string `yaml:"-"`
44-
DefaultPipelines []string `yaml:"default_pipelines,flow"`
44+
DefaultPipelines []string `yaml:"default_pipelines,flow,omitempty"`
4545
Table []RoutingConnectorTableItem `yaml:"table"`
4646
}
4747

@@ -84,6 +84,9 @@ type OtelColConfigIR struct {
8484

8585
func (cfgInput *OtelColConfigInput) generateExporters() map[string]any {
8686
exporters := cfgInput.generateOTLPExporters()
87+
exporters["logging/debug"] = map[string]any{
88+
"verbosity": "detailed",
89+
}
8790
return exporters
8891
}
8992

@@ -353,6 +356,7 @@ func (cfgInput *OtelColConfigInput) generateDefaultKubernetesProcessor() map[str
353356

354357
func (cfgInput *OtelColConfigInput) generateDefaultKubernetesReceiver() map[string]any {
355358

359+
// TODO: fix parser-crio
356360
operators := []map[string]any{
357361
{
358362
"type": "router",
@@ -362,27 +366,12 @@ func (cfgInput *OtelColConfigInput) generateDefaultKubernetesReceiver() map[stri
362366
"output": "parser-docker",
363367
"expr": `body matches "^\\{"`,
364368
},
365-
{
366-
"output": "parser-crio",
367-
"expr": `body matches "^[^ Z]+ "`,
368-
},
369369
{
370370
"output": "parser-containerd",
371371
"expr": `body matches "^[^ Z]+Z"`,
372372
},
373373
},
374374
},
375-
{
376-
"type": "regex_parser",
377-
"id": "parser-crio",
378-
"regex": `'^(?P<time>[^ Z]+) (?P<stream>stdout|stderr) (?P<logtag>[^ ]*) ?(?P<log>.*)$'`,
379-
"output": "extract_metadata_from_filepath",
380-
"timestamp": map[string]string{
381-
"parse_from": "attributes.time",
382-
"layout_type": "gotime",
383-
"layout": "2006-01-02T15:04:05.999999999Z07:00",
384-
},
385-
},
386375
{
387376
"type": "regex_parser",
388377
"id": "parser-containerd",
@@ -479,6 +468,8 @@ func (cfgInput *OtelColConfigInput) ToIntermediateRepresentation() *OtelColConfi
479468

480469
result.Services.Pipelines.NamedPipelines = cfgInput.generateNamedPipelines()
481470

471+
result.Services.Telemetry = make(map[string]any)
472+
482473
return &result
483474
}
484475

0 commit comments

Comments
 (0)