Skip to content

Commit bbec220

Browse files
authored
Merge pull request #34 from syscode-labs/fix/grafana-bitwarden-secrets
Fix Grafana telemetry credential delivery
2 parents 5012f5d + e42bd02 commit bbec220

5 files changed

Lines changed: 131 additions & 81 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Bitwarden Secrets Manager supplies Grafana Cloud credentials to Alloy without
2+
# storing credential values in Git.
3+
apiVersion: argoproj.io/v1alpha1
4+
kind: Application
5+
metadata:
6+
name: grafana-cloud-secrets
7+
namespace: argocd
8+
spec:
9+
project: default
10+
source:
11+
repoURL: https://github.com/syscode-labs/syscode-homelab-gitops-apps.git
12+
targetRevision: HEAD
13+
path: clusters/unraid-lab/apps/grafana-cloud-secrets/manifests
14+
destination:
15+
server: https://kubernetes.default.svc
16+
namespace: monitoring
17+
syncPolicy:
18+
automated:
19+
prune: true
20+
selfHeal: true
21+
syncOptions:
22+
- CreateNamespace=true
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
apiVersion: k8s.bitwarden.com/v1
2+
kind: BitwardenSecret
3+
metadata:
4+
name: grafana-cloud
5+
namespace: monitoring
6+
spec:
7+
organizationId: "28d10c96-b6fb-4e33-b486-b1f700017837"
8+
projectId: "8e33ca9c-37d5-4437-a977-b4a101001e2f"
9+
secretName: grafana-cloud
10+
authToken:
11+
secretName: bw-auth-token
12+
secretKey: token
13+
map:
14+
- bwSecretId: "586aca5a-53d4-486f-9215-b4a3012b4d6e" # gitleaks:allow -- Bitwarden secret UUID, not a credential
15+
secretKeyName: metrics-username
16+
- bwSecretId: "0167adff-e881-4263-a8a6-b4a3012b4dac" # gitleaks:allow -- Bitwarden secret UUID, not a credential
17+
secretKeyName: metrics-password
18+
- bwSecretId: "1e7d563b-3318-4702-b5a3-b4a3012b4dea" # gitleaks:allow -- Bitwarden secret UUID, not a credential
19+
secretKeyName: logs-username
20+
- bwSecretId: "a690572b-f1c1-4b3b-ae2e-b4a3012b4e2e" # gitleaks:allow -- Bitwarden secret UUID, not a credential
21+
secretKeyName: logs-password
22+
- bwSecretId: "7d06095d-73a5-4ead-909b-b4a3012b4e63" # gitleaks:allow -- Bitwarden secret UUID, not a credential
23+
secretKeyName: otlp-username
24+
- bwSecretId: "fb9fd11c-d1b5-4359-9928-b4a3012b6c7c" # gitleaks:allow -- Bitwarden secret UUID, not a credential
25+
secretKeyName: otlp-password
26+
- bwSecretId: "b39c9e04-299d-43e6-b675-b4a3012b4ecc" # gitleaks:allow -- Bitwarden secret UUID, not a credential
27+
secretKeyName: fleet-username
28+
- bwSecretId: "2994fb3e-8eb0-4f30-b287-b4a3012b4f07" # gitleaks:allow -- Bitwarden secret UUID, not a credential
29+
secretKeyName: fleet-password
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
apiVersion: kustomize.config.k8s.io/v1beta1
2+
kind: Kustomization
3+
4+
resources:
5+
- bitwardensecret.yaml
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#!/usr/bin/env bash
2+
# Bootstrap the Bitwarden operator's machine token through Omni, never Git.
3+
set -euo pipefail
4+
5+
CLUSTER="unraid-lab"
6+
BWS_ACCESS_TOKEN="${BWS_ACCESS_TOKEN:-$(security find-generic-password -w -a "$USER" -s BWS_ACCESS_TOKEN)}"
7+
8+
temporary="$(mktemp -d)"
9+
trap 'rm -rf "$temporary"' EXIT
10+
11+
cat >"$temporary/manifests.yaml" <<YAML
12+
apiVersion: v1
13+
kind: Namespace
14+
metadata:
15+
name: monitoring
16+
---
17+
apiVersion: v1
18+
kind: Secret
19+
metadata:
20+
name: bw-auth-token
21+
namespace: monitoring
22+
type: Opaque
23+
stringData:
24+
token: "${BWS_ACCESS_TOKEN}"
25+
YAML
26+
27+
python3 - "$temporary/manifests.yaml" "$temporary/configpatch.yaml" "$CLUSTER" <<'PY'
28+
import sys
29+
from pathlib import Path
30+
31+
import yaml
32+
33+
34+
class Literal(str):
35+
pass
36+
37+
38+
def represent_literal(dumper, data):
39+
return dumper.represent_scalar("tag:yaml.org,2002:str", data, style="|")
40+
41+
42+
yaml.SafeDumper.add_representer(Literal, represent_literal)
43+
44+
manifests_path = Path(sys.argv[1])
45+
configpatch_path = Path(sys.argv[2])
46+
cluster = sys.argv[3]
47+
manifests = manifests_path.read_text()
48+
list(yaml.safe_load_all(manifests))
49+
50+
patch = {
51+
"cluster": {
52+
"inlineManifests": [
53+
{"name": "bitwarden-auth-token", "contents": Literal(manifests)}
54+
]
55+
}
56+
}
57+
configpatch = {
58+
"metadata": {
59+
"namespace": "default",
60+
"type": "ConfigPatches.omni.sidero.dev",
61+
"id": f"510-cluster-{cluster}-bitwarden-auth-token",
62+
"labels": {"omni.sidero.dev/cluster": cluster},
63+
},
64+
"spec": {"data": Literal(yaml.safe_dump(patch, sort_keys=False))},
65+
}
66+
configpatch_path.write_text(yaml.safe_dump(configpatch, sort_keys=False))
67+
print("manifests: valid")
68+
PY
69+
70+
if [[ "${1:-}" == "--apply" ]]; then
71+
omnictl apply -f "$temporary/configpatch.yaml"
72+
printf 'Bitwarden auth-token ConfigPatch applied to Omni.\n'
73+
else
74+
printf 'Bitwarden auth-token ConfigPatch rendered and validated; re-run with --apply to push to Omni.\n'
75+
fi

‎omni/scripts/inject-grafana-cloud-secret.sh‎

Lines changed: 0 additions & 81 deletions
This file was deleted.

0 commit comments

Comments
 (0)