Skip to content

Commit bb39016

Browse files
committed
[FEATURE] Autogenerate SMTP configuration for Grafana
1 parent 92d0caa commit bb39016

File tree

3 files changed

+116
-3
lines changed

3 files changed

+116
-3
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
* [UPGRADE] Fluent Bit Helm chart upgraded from 0.49.0 to 0.52.0
1111
* [UPGRADE] Elasticsearch Exporer Helm chart upgraded from 6.7.2 to 7.0.0
1212
* [UPGRADE] OpenSearch Data Source Plugin to Grafana upgraded from 2.28.0 to 2.29.1
13+
* **Metrics**
14+
* [FEATURE] Automatically define the SMTP server configuration to permit Grafana to send e-mails.
15+
If enabled (by setting AUTOGENERATE_SMTP to 'true'), this optional feature allows admins to define
16+
email-based contact points for alerts. Users need to provide connection information via the environment
17+
variables: SMTP_SERVER, SMTP_PORT, SMTP_FROM_ADDRESS and SMTP_FROM_NAME. See Autogenerate SMTP Configuration
18+
for more information.
1319

1420

1521
## Version 1.2.41 (19AUG2025)

bin/autogenerate-include.sh

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@ export -f create_ingress_certs
4646

4747
AUTOGENERATE_INGRESS="${AUTOGENERATE_INGRESS:-false}"
4848
AUTOGENERATE_STORAGECLASS="${AUTOGENERATE_STORAGECLASS:-false}"
49+
AUTOGENERATE_SMTP="${AUTOGENERATE_SMTP:-false}"
4950

50-
if [ "$AUTOGENERATE_INGRESS" != "true" ] && [ "$AUTOGENERATE_STORAGECLASS" != "true" ]; then
51+
if [ "$AUTOGENERATE_INGRESS" != "true" ] && [ "$AUTOGENERATE_STORAGECLASS" != "true" ] && [ "$AUTOGENERATE_SMTP" != "true" ]; then
5152
log_debug "No autogeneration of YAML enabled"
5253
export AUTOGENERATE_SOURCED="NotNeeded"
5354
fi
@@ -69,7 +70,6 @@ if [ -z "$AUTOGENERATE_SOURCED" ]; then
6970
exit 1
7071
fi
7172

72-
7373
#validate required inputs
7474
BASE_DOMAIN="${BASE_DOMAIN}"
7575
if [ -z "$BASE_DOMAIN" ]; then
@@ -107,8 +107,66 @@ if [ -z "$AUTOGENERATE_SOURCED" ]; then
107107
fi
108108

109109
if [ "$AUTOGENERATE_STORAGECLASS" == "true" ]; then
110-
111110
log_info "Autogeneration of StorageClass specfication has been enabled"
111+
fi
112+
113+
if [ "$AUTOGENERATE_SMTP" == "true" ]; then
114+
115+
#required
116+
# shellcheck disable=SC2269
117+
SMTP_HOST="${SMTP_HOST}"
118+
# shellcheck disable=SC2269
119+
SMTP_PORT="${SMTP_PORT}"
120+
# shellcheck disable=SC2269
121+
SMTP_FROM_ADDRESS="${SMTP_FROM_ADDRESS}"
122+
# shellcheck disable=SC2269
123+
SMTP_FROM_NAME="${SMTP_FROM_NAME}"
124+
125+
#optional
126+
# shellcheck disable=SC2269
127+
SMTP_USER="${SMTP_USER}"
128+
# shellcheck disable=SC2269
129+
SMTP_PASSWORD="${SMTP_PASSWORD}"
130+
SMTP_USER_SECRET="${SMTP_USER_SECRET:-grafana-smtp-user}"
131+
SMTP_SKIP_VERIFY="${SMTP_SKIP_VERIFY:-false}"
132+
SMTP_TLS_CERT_FILE="${SMTP_TLS_CERT_FILE:-/cert/tls.crt}"
133+
SMTP_TLS_KEY_FILE="${SMTP_TLS_KEY_FILE:-/cert/tls.key}"
134+
135+
log_info "Autogeneration of SMTP Configuration has been enabled"
136+
137+
if [ -z "$SMTP_HOST" ]; then
138+
log_error "Required parameter [SMTP_HOST] not provided"
139+
exit 1
140+
fi
141+
142+
if [ -z "$SMTP_PORT" ]; then
143+
log_error "Required parameter [SMTP_PORT] not provided"
144+
exit 1
145+
fi
146+
147+
if [ -z "$SMTP_FROM_ADDRESS" ]; then
148+
log_error "Required parameter [SMTP_FROM_ADDRESS] not provided"
149+
exit 1
150+
fi
151+
152+
if [ -z "$SMTP_FROM_NAME" ]; then
153+
log_error "Required parameter [SMTP_FROM_NAME] not provided"
154+
exit 1
155+
fi
156+
157+
# Handle SMTP user credentials
158+
if [ -n "$(kubectl get secret -n "$MON_NS" "$SMTP_USER_SECRET" --ignore-not-found -o name 2> /dev/null)" ]; then
159+
log_debug "Secret [$SMTP_USER_SECRET] exists; will use it for SMTP user credentials"
160+
elif [ -z "$SMTP_USER" ] && [ -z "$SMTP_PASSWORD" ]; then
161+
log_debug "Neither SMTP_USER nor SMTP_PASSWORD are set; skipping creation of secret [$SMTP_USER_SECRET]"
162+
elif [ -z "$SMTP_USER" ] || [ -z "$SMTP_PASSWORD" ]; then
163+
log_error "Complete SMTP Credentials NOT provided; MUST provide BOTH [SMTP_USER] and [SMTP_PASSWORD]"
164+
log_info "SMTP_USER is set to [$SMTP_USER] and SMTP_PASSWORD is set to [$SMTP_PASSWORD]"
165+
exit 1
166+
else
167+
log_debug "Creating secret [$MON_NS/$SMTP_USER_SECRET] from supplied user [$SMTP_USER] and password."
168+
kubectl create secret generic "$SMTP_USER_SECRET" -n "$MON_NS" --from-literal=user="$SMTP_USER" --from-literal=password="$SMTP_PASSWORD"
169+
fi
112170

113171
fi
114172

monitoring/bin/deploy_monitoring_cluster.sh

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,55 @@ else
5959
log_debug "Autogeneration of storageClassReferences NOT enabled"
6060
fi
6161

62+
AUTOGENERATE_SMTP="${AUTOGENERATE_SMTP:-false}"
63+
64+
if [ "$AUTOGENERATE_SMTP" == "true" ]; then
65+
66+
if [ ! -f "$autogeneratedYAMLFile" ]; then
67+
log_debug "Creating file [$autogeneratedYAMLFile]"
68+
touch "$autogeneratedYAMLFile"
69+
else
70+
log_debug "File [$autogeneratedYAMLFile] already exists"
71+
fi
72+
73+
smtpHost="${SMTP_HOST}"
74+
smtpPort="${SMTP_PORT}"
75+
smtpFromAddress="${SMTP_FROM_ADDRESS}"
76+
smtpFromName="${SMTP_FROM_NAME}"
77+
smtpUserSecret="${SMTP_USER_SECRET}"
78+
smtpSkipVerify="${SMTP_SKIP_VERIFY:-false}"
79+
smtpTLSCertFile="${SMTP_TLS_CERT_FILE:-/cert/tls.crt}"
80+
smtpTLSKeyFile="${SMTP_TLS_KEY_FILE:-/cert/tls.key}"
81+
###smtpTLSSecret="${SMTP_TLS_REQUIRED}"
82+
83+
yq -i '.grafana."grafana.ini".smtp.enabled=true' "$autogeneratedYAMLFile"
84+
85+
value="$smtpHost:$smtpPort" yq -i '.grafana."grafana.ini".smtp.host=env(value)' "$autogeneratedYAMLFile"
86+
87+
value="$smtpFromAddress" yq -i '.grafana."grafana.ini".smtp.from_address=env(value)' "$autogeneratedYAMLFile"
88+
value="$smtpFromName" yq -i '.grafana."grafana.ini".smtp.from_name=env(value)' "$autogeneratedYAMLFile"
89+
90+
if [ -n "$smtpUserSecret" ]; then
91+
value="$smtpUserSecret" yq -i '.grafana.smtp.existingSecret=env(value)' "$autogeneratedYAMLFile"
92+
fi
93+
94+
value="$smtpSkipVerify" yq -i '.grafana."grafana.ini".smtp.skip_verify=env(value)' "$autogeneratedYAMLFile"
95+
96+
value="$smtpTLSCertFile" yq -i '.grafana."grafana.ini".smtp.cert_file=env(value)' "$autogeneratedYAMLFile"
97+
value="$smtpTLSKeyFile" yq -i '.grafana."grafana.ini".smtp.key_file=env(value)' "$autogeneratedYAMLFile"
98+
99+
# if [ -n "$smtpUser" ]; then
100+
# value="$smtpUser" yq -i '.grafana."grafana.ini".smtp.user=env(value)' "$autogeneratedYAMLFile"
101+
# fi
102+
# if [ -n "$smtpPassword" ]; then
103+
# value="$smtpPassword" yq -i '.grafana."grafana.ini".smtp.password=env(value)' "$autogeneratedYAMLFile"
104+
# fi
105+
106+
else
107+
log_debug "Auto-generation of SMTP not enabled; skipping Grafana SMTP server configuration"
108+
fi
109+
110+
62111
PROM_OPER_USER_YAML="${PROM_OPER_USER_YAML:-$USER_DIR/monitoring/user-values-prom-operator.yaml}"
63112
if [ ! -f "$PROM_OPER_USER_YAML" ]; then
64113
log_debug "[$PROM_OPER_USER_YAML] not found. Using $TMP_DIR/empty.yaml"

0 commit comments

Comments
 (0)