|
1 |
| -#! /bin/bash |
| 1 | +#!/bin/bash |
2 | 2 |
|
3 | 3 | # Copyright © 2020, SAS Institute Inc., Cary, NC, USA. All Rights Reserved.
|
4 | 4 | # SPDX-License-Identifier: Apache-2.0
|
5 | 5 |
|
6 |
| -cd "$(dirname $BASH_SOURCE)/../.." |
| 6 | +cd "$(dirname "$BASH_SOURCE")/../.." || exit 1 |
7 | 7 | source logging/bin/common.sh
|
8 | 8 |
|
9 |
| -this_script=`basename "$0"` |
| 9 | +this_script=$(basename "$0") |
10 | 10 |
|
11 | 11 | log_debug "Script [$this_script] has started [$(date)]"
|
12 | 12 |
|
13 | 13 | # Enable Fluent Bit?
|
14 | 14 | FLUENT_BIT_ENABLED=${FLUENT_BIT_ENABLED:-true}
|
15 | 15 |
|
16 | 16 | if [ "$FLUENT_BIT_ENABLED" != "true" ]; then
|
17 |
| - log_info "Environment variable [FLUENT_BIT_ENABLED] is not set to 'true'; existing WITHOUT deploying Fluent Bit" |
18 |
| - exit |
| 17 | + log_info "Environment variable [FLUENT_BIT_ENABLED] is not set to 'true'; existing WITHOUT deploying Fluent Bit" |
| 18 | + exit 0 |
19 | 19 | fi
|
20 | 20 |
|
21 |
| - |
22 | 21 | set -e
|
23 | 22 |
|
24 | 23 | HELM_DEBUG="${HELM_DEBUG:-false}"
|
| 24 | +helmDebug="" |
25 | 25 | if [ "$HELM_DEBUG" == "true" ]; then
|
26 |
| - helmDebug="--debug" |
| 26 | + helmDebug="--debug" |
27 | 27 | fi
|
28 | 28 |
|
29 |
| -helm2ReleaseCheck fb-$LOG_NS |
| 29 | +helm2ReleaseCheck "fb-$LOG_NS" |
30 | 30 |
|
31 | 31 | helmRepoAdd fluent https://fluent.github.io/helm-charts
|
32 | 32 |
|
33 | 33 | # Confirm namespace exists
|
34 |
| -if [ "$(kubectl get ns $LOG_NS -o name 2>/dev/null)" == "" ]; then |
35 |
| - log_error "The specified namespace [$LOG_NS] does not exist." |
36 |
| - exit 1 |
| 34 | +if [ "$(kubectl get ns "$LOG_NS" -o name 2> /dev/null)" == "" ]; then |
| 35 | + log_error "The specified namespace [$LOG_NS] does not exist." |
| 36 | + exit 1 |
37 | 37 | fi
|
38 | 38 |
|
39 | 39 | log_info "Deploying Fluent Bit (Azure Monitor)"
|
40 | 40 |
|
41 |
| -#Generate yaml file with all container-related keys#Generate yaml file with all container-related keys |
42 |
| -generateImageKeysFile "$FB_FULL_IMAGE" "logging/fb/fb_container_image.template" |
43 |
| -#Copy imageKeysFile since next call will replace existing one |
| 41 | +# Generate yaml file with all container-related keys |
| 42 | +generateImageKeysFile "$FB_FULL_IMAGE" "logging/fb/fb_container_image.template" |
| 43 | +# Copy imageKeysFile since next call will replace existing one |
| 44 | +#shellcheck disable=SC2154 |
44 | 45 | cp "$imageKeysFile" "$TMP_DIR/fb_imagekeysfile.yaml"
|
45 | 46 |
|
46 | 47 | generateImageKeysFile "$FB_INITCONTAINER_FULL_IMAGE" "logging/fb/fb_initcontainer_image.template" "" "true"
|
47 | 48 |
|
48 | 49 | # Fluent Bit user customizations
|
49 | 50 | FB_AZMONITOR_USER_YAML="${FB_AZMONITOR_USER_YAML:-$USER_DIR/logging/user-values-fluent-bit-azmonitor.yaml}"
|
50 | 51 | if [ ! -f "$FB_AZMONITOR_USER_YAML" ]; then
|
51 |
| - log_debug "[$FB_AZMONITOR_USER_YAML] not found. Using $TMP_DIR/empty.yaml" |
52 |
| - FB_AZMONITOR_USER_YAML=$TMP_DIR/empty.yaml |
| 52 | + log_debug "[$FB_AZMONITOR_USER_YAML] not found. Using $TMP_DIR/empty.yaml" |
| 53 | + FB_AZMONITOR_USER_YAML="$TMP_DIR/empty.yaml" |
53 | 54 | fi
|
54 | 55 |
|
55 | 56 | if [ -f "$USER_DIR/logging/fluent-bit_config.configmap_azmonitor.yaml" ]; then
|
56 |
| - # use copy in USER_DIR |
57 |
| - FB_CONFIGMAP="$USER_DIR/logging/fluent-bit_config.configmap_azmonitor.yaml" |
| 57 | + # use copy in USER_DIR |
| 58 | + FB_CONFIGMAP="$USER_DIR/logging/fluent-bit_config.configmap_azmonitor.yaml" |
58 | 59 | else
|
59 |
| - # use copy in repo |
60 |
| - FB_CONFIGMAP="logging/fb/fluent-bit_config.configmap_azmonitor.yaml" |
| 60 | + # use copy in repo |
| 61 | + FB_CONFIGMAP="logging/fb/fluent-bit_config.configmap_azmonitor.yaml" |
61 | 62 | fi
|
62 |
| -log_info "Using FB ConfigMap:" $FB_CONFIGMAP |
63 |
| - |
| 63 | +log_info "Using FB ConfigMap: $FB_CONFIGMAP" |
64 | 64 |
|
65 | 65 | # Check/Create Connection Info Secret
|
66 |
| -if [ "$(kubectl -n $LOG_NS get secret connection-info-azmonitor -o name 2>/dev/null)" == "" ]; then |
67 |
| - |
68 |
| - export AZMONITOR_CUSTOMER_ID="${AZMONITOR_CUSTOMER_ID:-NotProvided}" |
69 |
| - export AZMONITOR_SHARED_KEY="${AZMONITOR_SHARED_KEY:-NotProvided}" |
70 |
| - |
71 |
| - if [ "$AZMONITOR_CUSTOMER_ID" != "NotProvided" ] && [ "$AZMONITOR_SHARED_KEY" != "NotProvided" ]; then |
72 |
| - log_info "Creating secret [connection-info-azmonitor] in [$LOG_NS] namespace to hold Azure connection information." |
73 |
| - kubectl -n "$LOG_NS" create secret generic connection-info-azmonitor --from-literal=customer_id="$AZMONITOR_CUSTOMER_ID" --from-literal=shared_key="$AZMONITOR_SHARED_KEY" |
74 |
| - else |
75 |
| - log_error "Unable to create secret [$LOG_NS/connection-info-azmonitor] because missing required information: [AZMONITOR_CUSTOMER_ID: $AZMONITOR_CUSTOMER_ID ; AZMONITOR_SHARED_KEY: $AZMONITOR_SHARED_KEY]." |
76 |
| - log_error "You must provide this information via environment variables or create the secret [connection-info-azmonitor] before running this script." |
77 |
| - exit 1 |
78 |
| - fi |
| 66 | +if [ "$(kubectl -n "$LOG_NS" get secret connection-info-azmonitor -o name 2> /dev/null)" == "" ]; then |
| 67 | + |
| 68 | + export AZMONITOR_CUSTOMER_ID="${AZMONITOR_CUSTOMER_ID:-NotProvided}" |
| 69 | + export AZMONITOR_SHARED_KEY="${AZMONITOR_SHARED_KEY:-NotProvided}" |
| 70 | + |
| 71 | + if [ "$AZMONITOR_CUSTOMER_ID" != "NotProvided" ] && [ "$AZMONITOR_SHARED_KEY" != "NotProvided" ]; then |
| 72 | + log_info "Creating secret [connection-info-azmonitor] in [$LOG_NS] namespace to hold Azure connection information." |
| 73 | + kubectl -n "$LOG_NS" create secret generic connection-info-azmonitor --from-literal=customer_id="$AZMONITOR_CUSTOMER_ID" --from-literal=shared_key="$AZMONITOR_SHARED_KEY" |
| 74 | + else |
| 75 | + log_error "Unable to create secret [$LOG_NS/connection-info-azmonitor] because missing required information: [AZMONITOR_CUSTOMER_ID: $AZMONITOR_CUSTOMER_ID ; AZMONITOR_SHARED_KEY: $AZMONITOR_SHARED_KEY]." |
| 76 | + log_error "You must provide this information via environment variables or create the secret [connection-info-azmonitor] before running this script." |
| 77 | + exit 1 |
| 78 | + fi |
79 | 79 | else
|
80 |
| - log_info "Obtaining connection information from existing secret [$LOG_NS/connection-info-azmonitor]" |
81 |
| - export AZMONITOR_CUSTOMER_ID=$(kubectl -n "$LOG_NS" get secret connection-info-azmonitor -o=jsonpath="{.data.customer_id}" |base64 --decode) |
82 |
| - export AZMONITOR_SHARED_KEY=$(kubectl -n "$LOG_NS" get secret connection-info-azmonitor -o=jsonpath="{.data.shared_key}" |base64 --decode) |
| 80 | + log_info "Obtaining connection information from existing secret [$LOG_NS/connection-info-azmonitor]" |
| 81 | + AZMONITOR_CUSTOMER_ID=$(kubectl -n "$LOG_NS" get secret connection-info-azmonitor -o=jsonpath="{.data.customer_id}" | base64 --decode) |
| 82 | + export AZMONITOR_CUSTOMER_ID |
| 83 | + AZMONITOR_SHARED_KEY=$(kubectl -n "$LOG_NS" get secret connection-info-azmonitor -o=jsonpath="{.data.shared_key}" | base64 --decode) |
| 84 | + export AZMONITOR_SHARED_KEY |
83 | 85 | fi
|
84 | 86 |
|
85 | 87 | # Check for an existing Helm release of stable/fluent-bit
|
86 |
| -if helm3ReleaseExists fbaz $LOG_NS; then |
87 |
| - log_info "Removing an existing release of deprecated stable/fluent-bit Helm chart from from the [$LOG_NS] namespace [$(date)]" |
88 |
| - helm $helmDebug delete -n "$LOG_NS" fbaz |
89 |
| - |
90 |
| - if [ $(kubectl get servicemonitors -A |grep fluent-bit-v2 -c) -ge 1 ]; then |
91 |
| - log_debug "Updated serviceMonitor [fluent-bit-v2] appears to be deployed." |
92 |
| - elif [ $(kubectl get servicemonitors -A |grep fluent-bit -c) -ge 1 ]; then |
93 |
| - log_warn "You appear to have an obsolete service monitor in place for monitoring Fluent Bit." |
94 |
| - log_warn "Run monitoring/bin/deploy_monitoring_cluster.sh to deploy the current set of service monitors." |
95 |
| - fi |
| 88 | +if helm3ReleaseExists fbaz "$LOG_NS"; then |
| 89 | + log_info "Removing an existing release of deprecated stable/fluent-bit Helm chart from from the [$LOG_NS] namespace [$(date)]" |
| 90 | + helm "$helmDebug" delete -n "$LOG_NS" fbaz |
| 91 | + |
| 92 | + num_service_monitors_v2=$(kubectl get servicemonitors -A | grep -c fluent-bit-v2 || true) |
| 93 | + if [ "$num_service_monitors_v2" -ge 1 ]; then |
| 94 | + log_debug "Updated serviceMonitor [fluent-bit-v2] appears to be deployed." |
| 95 | + else |
| 96 | + num_service_monitors=$(kubectl get servicemonitors -A | grep -c fluent-bit || true) |
| 97 | + if [ "$num_service_monitors" -ge 1 ]; then |
| 98 | + log_warn "You appear to have an obsolete service monitor in place for monitoring Fluent Bit." |
| 99 | + log_warn "Run monitoring/bin/deploy_monitoring_cluster.sh to deploy the current set of service monitors." |
| 100 | + fi |
| 101 | + fi |
96 | 102 | else
|
97 |
| - log_debug "No existing release of the deprecated stable/fluent-bit Helm chart was found" |
| 103 | + log_debug "No existing release of the deprecated stable/fluent-bit Helm chart was found" |
98 | 104 | fi
|
99 | 105 |
|
100 | 106 | # Multiline parser setup
|
101 | 107 | LOG_MULTILINE_ENABLED="${LOG_MULTILINE_ENABLED:-true}"
|
102 | 108 | if [ "$LOG_MULTILINE_ENABLED" == "true" ]; then
|
103 |
| - LOG_MULTILINE_PARSER="docker, cri" |
| 109 | + LOG_MULTILINE_PARSER="docker, cri" |
104 | 110 | else
|
105 |
| - LOG_MULTILINE_PARSER="" |
| 111 | + LOG_MULTILINE_PARSER="" |
106 | 112 | fi
|
107 | 113 |
|
108 | 114 | # Create ConfigMap containing Fluent Bit configuration
|
109 |
| -kubectl -n "$LOG_NS" apply -f $FB_CONFIGMAP |
| 115 | +kubectl -n "$LOG_NS" apply -f "$FB_CONFIGMAP" |
110 | 116 |
|
111 | 117 | # Create ConfigMap containing Viya-customized parsers (delete it first)
|
112 | 118 | kubectl -n "$LOG_NS" delete configmap fbaz-viya-parsers --ignore-not-found
|
113 |
| -kubectl -n "$LOG_NS" create configmap fbaz-viya-parsers --from-file=logging/fb/viya-parsers.conf |
| 119 | +kubectl -n "$LOG_NS" create configmap fbaz-viya-parsers --from-file=logging/fb/viya-parsers.conf |
114 | 120 |
|
115 | 121 | TRACING_ENABLE="${TRACING_ENABLE:-false}"
|
| 122 | +tracingValuesFile="" |
116 | 123 | if [ "$TRACING_ENABLE" == "true" ]; then
|
117 |
| - # Create ConfigMap containing tracing config |
118 |
| - kubectl -n "$LOG_NS" delete configmap fbaz-viya-tracing --ignore-not-found |
119 |
| - kubectl -n "$LOG_NS" create configmap fbaz-viya-tracing --from-file=logging/fb/viya-tracing.conf |
| 124 | + # Create ConfigMap containing tracing config |
| 125 | + kubectl -n "$LOG_NS" delete configmap fbaz-viya-tracing --ignore-not-found |
| 126 | + kubectl -n "$LOG_NS" create configmap fbaz-viya-tracing --from-file=logging/fb/viya-tracing.conf |
120 | 127 |
|
121 |
| - tracingValuesFile="logging/fb/fluent-bit_helm_values_tracing.yaml" |
122 |
| -else |
123 |
| - # Create empty ConfigMap for tracing since it is expected to exist in main config |
124 |
| - kubectl -n "$LOG_NS" delete configmap fbaz-viya-tracing --ignore-not-found |
125 |
| - kubectl -n "$LOG_NS" create configmap fbaz-viya-tracing --from-file="$TMP_DIR"/empty.yaml |
| 128 | + tracingValuesFile="logging/fb/fluent-bit_helm_values_tracing.yaml" |
| 129 | +else |
| 130 | + # Create empty ConfigMap for tracing since it is expected to exist in main config |
| 131 | + kubectl -n "$LOG_NS" delete configmap fbaz-viya-tracing --ignore-not-found |
| 132 | + kubectl -n "$LOG_NS" create configmap fbaz-viya-tracing --from-file="$TMP_DIR"/empty.yaml |
126 | 133 |
|
127 |
| - tracingValuesFile=$TMP_DIR/empty.yaml |
| 134 | + tracingValuesFile="$TMP_DIR/empty.yaml" |
128 | 135 | fi
|
129 | 136 |
|
130 | 137 | # Check for Kubernetes container runtime log format info
|
131 |
| -KUBERNETES_RUNTIME_LOGFMT="${KUBERNETES_RUNTIME_LOGFMT}" |
| 138 | +KUBERNETES_RUNTIME_LOGFMT="${KUBERNETES_RUNTIME_LOGFMT:-}" |
132 | 139 | if [ -z "$KUBERNETES_RUNTIME_LOGFMT" ]; then
|
133 |
| - somenode=$(kubectl get nodes | awk 'NR==2 { print $1 }') |
134 |
| - runtime=$(kubectl get node $somenode -o jsonpath={.status.nodeInfo.containerRuntimeVersion} | awk -F: '{print $1}') |
135 |
| - log_debug "Kubernetes container runtime [$runtime] found on node [$somenode]" |
136 |
| - case $runtime in |
| 140 | + somenode=$(kubectl get nodes | awk 'NR==2 { print $1 }') |
| 141 | + runtime=$(kubectl get node "$somenode" -o "jsonpath={.status.nodeInfo.containerRuntimeVersion}" | awk -F: '{print $1}') |
| 142 | + log_debug "Kubernetes container runtime [$runtime] found on node [$somenode]" |
| 143 | + case $runtime in |
137 | 144 | docker)
|
138 |
| - KUBERNETES_RUNTIME_LOGFMT="docker" |
139 |
| - ;; |
140 |
| - containerd|cri-o) |
141 |
| - KUBERNETES_RUNTIME_LOGFMT="criwithlog" |
142 |
| - ;; |
| 145 | + KUBERNETES_RUNTIME_LOGFMT="docker" |
| 146 | + ;; |
| 147 | + containerd | cri-o) |
| 148 | + KUBERNETES_RUNTIME_LOGFMT="criwithlog" |
| 149 | + ;; |
143 | 150 | *)
|
144 |
| - log_warn "Unrecognized Kubernetes container runtime [$runtime]; using default parser" |
145 |
| - KUBERNETES_RUNTIME_LOGFMT="docker" |
146 |
| - ;; |
147 |
| - esac |
| 151 | + log_warn "Unrecognized Kubernetes container runtime [$runtime]; using default parser" |
| 152 | + KUBERNETES_RUNTIME_LOGFMT="docker" |
| 153 | + ;; |
| 154 | + esac |
148 | 155 | fi
|
149 | 156 |
|
150 | 157 | MON_NS="${MON_NS:-monitoring}"
|
151 | 158 |
|
152 | 159 | # Create ConfigMap containing Kubernetes container runtime log format
|
153 | 160 | kubectl -n "$LOG_NS" delete configmap fbaz-env-vars --ignore-not-found
|
154 | 161 | kubectl -n "$LOG_NS" create configmap fbaz-env-vars \
|
155 |
| - --from-literal=KUBERNETES_RUNTIME_LOGFMT=$KUBERNETES_RUNTIME_LOGFMT \ |
156 |
| - --from-literal=LOG_MULTILINE_PARSER="${LOG_MULTILINE_PARSER}" \ |
157 |
| - --from-literal=MON_NS="${MON_NS}" |
| 162 | + --from-literal=KUBERNETES_RUNTIME_LOGFMT="$KUBERNETES_RUNTIME_LOGFMT" \ |
| 163 | + --from-literal=LOG_MULTILINE_PARSER="${LOG_MULTILINE_PARSER}" \ |
| 164 | + --from-literal=MON_NS="${MON_NS}" |
158 | 165 |
|
159 |
| -kubectl -n "$LOG_NS" label configmap fbaz-env-vars managed-by=v4m-es-script |
| 166 | +kubectl -n "$LOG_NS" label configmap fbaz-env-vars managed-by=v4m-es-script |
160 | 167 |
|
161 | 168 | # Check to see if we are upgrading from earlier version requiring root access
|
162 |
| -if [ "$( kubectl -n $LOG_NS get configmap fbaz-dbmigrate-script -o name --ignore-not-found)" != "configmap/fbaz-dbmigrate-script" ]; then |
163 |
| - log_debug "Removing FB pods (if they exist) to allow migration." |
164 |
| - kubectl -n "$LOG_NS" delete daemonset v4m-fbaz --ignore-not-found |
| 169 | +if [ "$(kubectl -n "$LOG_NS" get configmap fbaz-dbmigrate-script -o name --ignore-not-found)" != "configmap/fbaz-dbmigrate-script" ]; then |
| 170 | + log_debug "Removing FB pods (if they exist) to allow migration." |
| 171 | + kubectl -n "$LOG_NS" delete daemonset v4m-fbaz --ignore-not-found |
165 | 172 | fi
|
166 | 173 |
|
167 | 174 | # Create ConfigMap containing Fluent Bit database migration script
|
168 | 175 | kubectl -n "$LOG_NS" delete configmap fbaz-dbmigrate-script --ignore-not-found
|
169 |
| -kubectl -n "$LOG_NS" create configmap fbaz-dbmigrate-script --from-file logging/fb/migrate_fbstate_db.sh |
170 |
| -kubectl -n "$LOG_NS" label configmap fbaz-dbmigrate-script managed-by=v4m-es-script |
| 176 | +kubectl -n "$LOG_NS" create configmap fbaz-dbmigrate-script --from-file=logging/fb/migrate_fbstate_db.sh |
| 177 | +kubectl -n "$LOG_NS" label configmap fbaz-dbmigrate-script managed-by=v4m-es-script |
171 | 178 |
|
| 179 | +## Get Helm Chart Name |
| 180 | +log_debug "Fluent Bit Helm Chart: repo [$FLUENTBIT_HELM_CHART_REPO] name [$FLUENTBIT_HELM_CHART_NAME] version [$FLUENTBIT_HELM_CHART_VERSION]" |
| 181 | +chart2install="$(get_helmchart_reference "$FLUENTBIT_HELM_CHART_REPO" "$FLUENTBIT_HELM_CHART_NAME" "$FLUENTBIT_HELM_CHART_VERSION")" |
| 182 | +versionstring="$(get_helm_versionstring "$FLUENTBIT_HELM_CHART_VERSION")" |
172 | 183 |
|
173 |
| - ## Get Helm Chart Name |
174 |
| - log_debug "Fluent Bit Helm Chart: repo [$FLUENTBIT_HELM_CHART_REPO] name [$FLUENTBIT_HELM_CHART_NAME] version [$FLUENTBIT_HELM_CHART_VERSION]" |
175 |
| - chart2install="$(get_helmchart_reference $FLUENTBIT_HELM_CHART_REPO $FLUENTBIT_HELM_CHART_NAME $FLUENTBIT_HELM_CHART_VERSION)" |
176 |
| - versionstring="$(get_helm_versionstring $FLUENTBIT_HELM_CHART_VERSION)" |
177 |
| - log_debug "Installing Helm chart from artifact [$chart2install]" |
| 184 | +log_debug "Installing Helm chart from artifact [$chart2install]" |
178 | 185 |
|
179 | 186 | # Deploy Fluent Bit via Helm chart
|
180 |
| -helm $helmDebug upgrade --install v4m-fbaz --namespace $LOG_NS \ |
181 |
| - $versionstring \ |
182 |
| - --values $TMP_DIR/fb_imagekeysfile.yaml \ |
183 |
| - --values $imageKeysFile \ |
184 |
| - --values logging/fb/fluent-bit_helm_values_azmonitor.yaml \ |
185 |
| - --values $FB_AZMONITOR_USER_YAML \ |
186 |
| - --values $tracingValuesFile \ |
187 |
| - --set fullnameOverride=v4m-fbaz \ |
188 |
| - $chart2install |
189 |
| - |
190 |
| -#pause to allow migration script to complete (if necessary) |
| 187 | +# shellcheck disable=SC2086 |
| 188 | +helm $helmDebug upgrade --install v4m-fbaz --namespace "$LOG_NS" \ |
| 189 | + $versionstring \ |
| 190 | + --values "$TMP_DIR/fb_imagekeysfile.yaml" \ |
| 191 | + --values "$imageKeysFile" \ |
| 192 | + --values logging/fb/fluent-bit_helm_values_azmonitor.yaml \ |
| 193 | + --values "$FB_AZMONITOR_USER_YAML" \ |
| 194 | + --values "$tracingValuesFile" \ |
| 195 | + --set fullnameOverride=v4m-fbaz \ |
| 196 | + "$chart2install" |
| 197 | +# pause to allow migration script to complete (if necessary) |
191 | 198 | sleep 20
|
192 | 199 |
|
193 |
| -#Container Security: Disable Token Automounting at ServiceAccount; enable for Pod |
194 |
| -disable_sa_token_automount $LOG_NS v4m-fbaz |
| 200 | +# Container Security: Disable Token Automounting at ServiceAccount; enable for Pod |
| 201 | +disable_sa_token_automount "$LOG_NS" v4m-fbaz |
195 | 202 | # FB pods will restart after following call if automount is not already enabled
|
196 |
| -enable_pod_token_automount $LOG_NS daemonset v4m-fbaz |
| 203 | +enable_pod_token_automount "$LOG_NS" daemonset v4m-fbaz |
197 | 204 |
|
198 | 205 | # Force restart of daemonset to ensure we pick up latest config changes
|
199 | 206 | # since Helm won't notice if the only changes are in the configMap
|
|
0 commit comments