mirror of
https://github.com/dokku/dokku.git
synced 2025-12-29 00:25:08 +01:00
Merge pull request #7878 from dokku/7758-base64-encoded-vector-values
Allow specifying base64-encoded values in vector-sink DSN urls
This commit is contained in:
@@ -234,6 +234,19 @@ For some sinks - such as the `http` sink - it may be useful to use special chara
|
||||
dokku logs:set test vector-sink "http://?uri=https%3A//loggerservice.com%3A1234/%3Ftoken%3Dabc1234%26type%3Dvector"
|
||||
```
|
||||
|
||||
For kubernetes, it may be necessary to use template syntax - `{{ .parent.child }}` - in the sink configuration. Naively using brackets will fail due to the Helm chart install process assuming that the template should be interpreted at Helm install time vs by Vector itself. To avoid this, use `base64enc:` values (available only for top-level properties at this time). The following example shows how to use `{{ pod }}` as a value.
|
||||
|
||||
```shell
|
||||
# encode the value with a Helm `print` statement wrapper
|
||||
encoded="$(echo '{{ print "{{ pod }}" }}' | base64)"
|
||||
# the value of encoded should be: e3sgcHJpbnQgInt7IHBvZCB9fSIgfX0K
|
||||
|
||||
# set the value
|
||||
dokku logs:set test vector-sink "http://?process=base64enc%3A${encoded}"
|
||||
```
|
||||
|
||||
This will transform the value to it's encoded form when configuring Vector sinks for Kubernetes.
|
||||
|
||||
Please read the [sink documentation](https://vector.dev/docs/reference/configuration/sinks/) for your sink of choice to configure the sink as desired.
|
||||
|
||||
##### Configuring the app label
|
||||
|
||||
@@ -611,6 +611,7 @@ Next, run the `scheduler-k3s:ensure-charts` command with the `vector` chart to f
|
||||
```shell
|
||||
dokku scheduler-k3s:ensure-charts --charts vector
|
||||
```
|
||||
Please see the [vector logs documentation](/docs/deployment/logs.md#configuring-a-log-sink) for more information on specifying vector sinks.
|
||||
|
||||
### Supported Resource Management Properties
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package logs
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
@@ -102,5 +103,21 @@ func SinkValueToConfig(appName string, sinkValue string) (VectorSink, error) {
|
||||
data["inputs"] = []string{"docker-null-source"}
|
||||
}
|
||||
|
||||
// add special support for `base64enc:VAL` fields
|
||||
for key, value := range data {
|
||||
valueString, ok := value.(string)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
if encodedValue, found := strings.CutPrefix(valueString, "base64enc:"); found {
|
||||
decodedValue, err := base64.StdEncoding.DecodeString(encodedValue)
|
||||
if err != nil {
|
||||
return data, fmt.Errorf("Error decoding base64: %w", err)
|
||||
}
|
||||
data[key] = strings.TrimSpace(string(decodedValue))
|
||||
}
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
@@ -1577,7 +1577,7 @@ func installHelmCharts(ctx context.Context, clientset KubernetesClient, shouldIn
|
||||
}
|
||||
}
|
||||
|
||||
if chart.ReleaseName == "vector" {
|
||||
if chart.ReleaseName == "vector" && chart.Namespace == "vector" {
|
||||
values = updateVectorValues(values)
|
||||
}
|
||||
|
||||
|
||||
@@ -52,6 +52,32 @@ teardown_() {
|
||||
assert_output "2"
|
||||
}
|
||||
|
||||
@test "(scheduler-k3s) deploy kustomize with vector sink" {
|
||||
if [[ -z "$DOCKERHUB_USERNAME" ]] || [[ -z "$DOCKERHUB_TOKEN" ]]; then
|
||||
skip "skipping due to missing docker.io credentials DOCKERHUB_USERNAME:DOCKERHUB_TOKEN"
|
||||
fi
|
||||
|
||||
encoded="$(echo '{{ print "{{ pod }}" }}' | base64)"
|
||||
run /bin/bash -c "echo $encoded"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
assert_output "e3sgcHJpbnQgInt7IHBvZCB9fSIgfX0K"
|
||||
|
||||
run /bin/bash -c "dokku logs:set --global vector-sink 'http://?process=base64enc%3A${encoded}'"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
INGRESS_CLASS=nginx install_k3s
|
||||
|
||||
run /bin/bash -c "kubectl get cm -n vector vector -o yaml"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
assert_output_contains "process: '{{ pod }}'"
|
||||
}
|
||||
|
||||
inject_kustomization_yaml() {
|
||||
local APP="$1"
|
||||
local APP_REPO_DIR="$2"
|
||||
|
||||
Reference in New Issue
Block a user