|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# We switched to the standard labels recommend in Helm's "Best Practices" doc. |
| 4 | +# https://helm.sh/docs/chart_best_practices/labels/#standard-labels |
| 5 | +# |
| 6 | +# This script adds those labels to all the resources in an existing release, |
| 7 | +# so that helm upgrade will not create duplicate resources. The new label |
| 8 | +# selectors do not match the old labels, so this script adds the new labels |
| 9 | +# to the old resources. Thus, the new selectors will update them. |
| 10 | + |
| 11 | +# These env vars need to be set to use this script: |
| 12 | +# RELEASE_NAME (same as .Release.Name) |
| 13 | +# NAMESPACE (same as .Release.Namespace) |
| 14 | +# |
| 15 | +# For example: |
| 16 | +# RELEASE_NAME=st2 NAMESPACE=st2 migrations/standardize-labels.sh |
| 17 | + |
| 18 | +RELEASE_NAME=${RELEASE_NAME:-st2} |
| 19 | +NAMESPACE=${NAMESPACE:-default} |
| 20 | +CHART_NAME=${CHART_NAME:-stackstorm-ha} # see Chart.yaml |
| 21 | + |
| 22 | + |
| 23 | +function klabel_app_instance() { |
| 24 | + kind=${1} |
| 25 | + kubectl label "${kind}" \ |
| 26 | + -n "${NAMESPACE}" \ |
| 27 | + -l "vendor=stackstorm" \ |
| 28 | + -l "release=${RELEASE_NAME}" \ |
| 29 | + "app.kubernetes.io/instance=${RELEASE_NAME}" |
| 30 | +} |
| 31 | + |
| 32 | +function klabel_app_name() { |
| 33 | + kind=${1} |
| 34 | + app=${2} |
| 35 | + kubectl label "${kind}" \ |
| 36 | + -n "${NAMESPACE}" \ |
| 37 | + -l "vendor=stackstorm" \ |
| 38 | + -l "release=${RELEASE_NAME}" \ |
| 39 | + -l "app=${app}" \ |
| 40 | + "app.kubernetes.io/name=${app}" |
| 41 | +} |
| 42 | + |
| 43 | +function k_get_app_names() { |
| 44 | + kind=${1} |
| 45 | + app=${2} |
| 46 | + kubectl get "${kind}" \ |
| 47 | + -n "${NAMESPACE}" \ |
| 48 | + -l "vendor=stackstorm" \ |
| 49 | + -l "release=${RELEASE_NAME}" \ |
| 50 | + -o json \ |
| 51 | + | jq -r '.items[] | select(.metadata.name | test("'"${app}"'")).metadata.labels.app' |
| 52 | +} |
| 53 | + |
| 54 | +echo "Adding label app.kubernetes.io/instance=${RELEASE_NAME} (which will replace release=${RELEASE_NAME}) ..." |
| 55 | + |
| 56 | +for kind in ConfigMap Secret Ingress Service ServiceAccount Deployment ReplicaSet Pod Job; do |
| 57 | + klabel_app_instance ${kind} |
| 58 | +done |
| 59 | + |
| 60 | +echo |
| 61 | +echo "Adding label app.kubernetes.io/name=<app> (which will replace app=<app>) ..." |
| 62 | + |
| 63 | +klabel_app_name ConfigMap st2 |
| 64 | +klabel_app_name Secret st2 |
| 65 | +klabel_app_name Secret st2chatops |
| 66 | +klabel_app_name ServiceAccount ${CHART_NAME} |
| 67 | +klabel_app_name Ingress ingress |
| 68 | + |
| 69 | +deployment_apps=( |
| 70 | + st2actionrunner |
| 71 | + st2api |
| 72 | + st2auth |
| 73 | + st2chatops |
| 74 | + st2client |
| 75 | + st2garbagecollector |
| 76 | + st2notifier |
| 77 | + st2rulesengine |
| 78 | + st2scheduler |
| 79 | + $(k_get_app_names Deployment st2sensorcontainer) |
| 80 | + st2stream |
| 81 | + st2timersengine |
| 82 | + st2web |
| 83 | + st2workflowengine |
| 84 | +) |
| 85 | +for app in "${deployment_apps[@]}"; do |
| 86 | + echo "Deployment app=${app} ..." |
| 87 | + klabel_app_name Deployment ${app} |
| 88 | + klabel_app_name ReplicaSet ${app} |
| 89 | + klabel_app_name Pod ${app} |
| 90 | +done |
| 91 | + |
| 92 | +service_apps=( |
| 93 | + st2api |
| 94 | + st2auth |
| 95 | + st2chatops |
| 96 | + st2stream |
| 97 | + st2web |
| 98 | +) |
| 99 | +for app in "${service_apps[@]}"; do |
| 100 | + echo "Service app=${app} ..." |
| 101 | + klabel_app_name Service ${app} |
| 102 | +done |
| 103 | + |
| 104 | +job_apps=( |
| 105 | + st2 |
| 106 | + st2-apply-rbac-definitions |
| 107 | + st2-register-content |
| 108 | + $(k_get_app_names Job extra-helm-hook) |
| 109 | +) |
| 110 | +for app in "${job_apps[@]}"; do |
| 111 | + echo "Job app=${app} ..." |
| 112 | + klabel_app_name Job ${app} |
| 113 | + klabel_app_name Pod ${app} |
| 114 | +done |
| 115 | + |
| 116 | +klabel_app_name ConfigMap st2tests |
| 117 | +klabel_app_name Pod st2tests |
0 commit comments