@leverege/build-tools 2.81.1 → 2.82.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leverege/build-tools",
3
- "version": "2.81.1",
3
+ "version": "2.82.0",
4
4
  "description": "A collection of build / support tools for Leverege developers",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -65,7 +65,7 @@
65
65
  "license": "SEE LICENSE IN LICENSE.md",
66
66
  "dependencies": {
67
67
  "@leverege/jsdoc-template": "^1.0.1",
68
- "chalk": "^5.4.1",
68
+ "chalk": "^5.5.0",
69
69
  "command-line-args": "^6.0.1",
70
70
  "command-line-usage": "^7.0.3",
71
71
  "commander": "^14.0.0",
@@ -79,7 +79,7 @@
79
79
  "js-yaml": "^4.1.0",
80
80
  "jsdoc": "^4.0.4",
81
81
  "ms": "^2.1.3",
82
- "npm-registry-fetch": "^18.0.2",
82
+ "npm-registry-fetch": "^19.0.0",
83
83
  "ora": "^8.2.0",
84
84
  "p-limit": "^6.2.0",
85
85
  "package-up": "^5.0.0",
@@ -89,10 +89,10 @@
89
89
  "simple-git": "^3.28.0",
90
90
  "sloc": "^0.3.2",
91
91
  "toml": "^3.0.0",
92
- "zx": "^8.7.2"
92
+ "zx": "^8.8.0"
93
93
  },
94
94
  "devDependencies": {
95
95
  "@leverege/eslint-config-leverege": "^5.0.1",
96
- "npm": "^11.5.1"
96
+ "npm": "^11.5.2"
97
97
  }
98
98
  }
package/src/bash-funcs CHANGED
@@ -149,6 +149,27 @@ REPOADD
149
149
  helm repo update &> $DEVNULL
150
150
  }
151
151
 
152
+ # *** DEPRECATED *** REMOVE AFTER BITNAMI ERADICATED ***
153
+ # *** DEPRECATED *** REMOVE AFTER BITNAMI ERADICATED ***
154
+ # *** DEPRECATED *** REMOVE AFTER BITNAMI ERADICATED ***
155
+ #
156
+ function addBitnamiRepo() {
157
+ if [ ! -z "$BITNAMI_LATEST" ] || [ "$1" == "latest" ];
158
+ then
159
+ BITNAMI_URL="https://charts.bitnami.com/bitnami"
160
+ else
161
+ cat<<CATNAMI
162
+ Using the pre 2022 legacy charts from bitnami. To use latest run:
163
+
164
+ `color y "BITNAMI_LATEST=1 $HELMUP_ARGS"`
165
+
166
+ CATNAMI
167
+ BITNAMI_URL="https://raw.githubusercontent.com/bitnami/charts/eb5f9a9513d987b519f0ecd732e7031241c50328/bitnami"
168
+ fi
169
+
170
+ addHelmRepo bitnami $BITNAMI_URL
171
+ }
172
+
152
173
  function removeHelmRepo(){
153
174
  [ ! -z "$SKIP_RM_HELM_REPO" ] && return
154
175
  helm repo remove $1 &> $DEVNULL
@@ -0,0 +1,169 @@
1
+ #!/usr/bin/env node
2
+ //
3
+ // This script is used to scan all of the projects in the auditProject array
4
+ // to look for any deployments that are still using the bitnami images. The
5
+ // output from this script can then be imported / upload / replace existing in
6
+ // the BitnamiImageRegistry gsheet to show progess on the migration effort.
7
+ //
8
+ import fs from 'node:fs'
9
+ import chalk from 'chalk'
10
+ import semver from 'semver'
11
+
12
+ import {
13
+ debug,
14
+ log,
15
+ shellCmd,
16
+ } from './Utils.mjs'
17
+
18
+ const auditProjects = [
19
+ 'dev-controltek',
20
+ 'dev-cox-health',
21
+ 'dev-pitcrew',
22
+ 'xxx-bogus', // expect warning
23
+ 'dev-recovr-auto',
24
+ 'dev-schnucks',
25
+ 'dev-tpi',
26
+ 'discount-tire-prd',
27
+ 'discount-tire-stg',
28
+ 'leverege-cnpg-20240729',
29
+ 'leverege-ops-20250730',
30
+ 'leverege-demo', // expect warning
31
+ 'leverege-elastic',
32
+ 'leverege-onboarding',
33
+ 'leverege-sandbox',
34
+ 'nimbelink-demo',
35
+ 'prd-controltek',
36
+ 'prd-cox-health',
37
+ 'prd-generic-kudelski',
38
+ 'prd-les-schwab',
39
+ 'prd-recovr-auto',
40
+ 'prd-skymirr',
41
+ 'prd-tpi',
42
+ 'prd-valvoline',
43
+ 'qa-cox-health', // expect warning
44
+ 'siren-marine-dev',
45
+ 'siren-marine-prd',
46
+ 'siren-marine-staging',
47
+ 'siren-marine-test',
48
+ 'stg-cox-health',
49
+ 'stg-generic-kudelski',
50
+ 'stg-recovr-auto',
51
+ 'stg-recovr-perf',
52
+ ]
53
+
54
+ const gitCheckoutCleanBranch = async ( branch = 'bootstrap-k8s' ) => {
55
+ // find and remove cruft, like generated values.yaml files
56
+ await shellCmd( 'find . -not \\( -path \\*junk -prune -o -path \\*helm-elasticsearch -prune \\) -name values.yaml -exec rm {} \\;' )
57
+
58
+ // start with a clean baseline
59
+ await shellCmd( 'git checkout bootstrap-k8s' )
60
+ await shellCmd( 'git clean -d --force' )
61
+
62
+ // checkout the target branch
63
+ await shellCmd( `git checkout ${branch}` )
64
+ }
65
+
66
+ const setK8sContext = async ( project ) => {
67
+ await shellCmd( 'overwhelm --fetchctx' )
68
+ await shellCmd( 'overwhelm --matchk8s' )
69
+ }
70
+
71
+ const prepareContext = async ( project ) => {
72
+ await gitCheckoutCleanBranch( project )
73
+ await setK8sContext( project )
74
+ }
75
+
76
+ const filterBitnamiImages = ( project, imagesJSON ) => {
77
+ const data = JSON.parse( imagesJSON )
78
+ const seen = new Set()
79
+
80
+ for ( const item of data.items ) {
81
+ const ns = item.metadata.namespace
82
+ let service = item.metadata.name
83
+
84
+ // Collapse services
85
+ service = service.replace( /elasticsearch8-(coordinating|data|master|ingest)/, 'elasticsearch' )
86
+ service = service.replace( /redis-(master|replicas)/, 'redis' )
87
+ service = service.replace( /valkey-(primary|replicas)/, 'valkey' )
88
+
89
+ const containers = item.spec?.template?.spec?.containers || []
90
+ for ( const c of containers ) {
91
+ let img = c.image
92
+
93
+ // Only keep bitnami images
94
+ if ( !/bitnami/.test( img ) ) continue
95
+
96
+ // Registry decluttering
97
+ img = img.replace( /^docker\.io\/bitnami/, 'bitnami' )
98
+ img = img.replace( /^us-docker\.pkg\.dev\/leverege-registry\/bitnami-mirror\/images/, 'leverege' )
99
+ img = img.replace( /^us-docker\.pkg\.dev\/leverege-registry\/system\/images/, 'leverege/system' )
100
+
101
+ const [ image, fullVersion = 'latest' ] = img.split( ':' )
102
+ const displayVersion = fullVersion.replace( /-debian-.*$/, '' )
103
+
104
+ const row = [ project, ns, service, image, displayVersion, fullVersion ].join( ',' )
105
+ if ( !seen.has( row ) ) {
106
+ debug( row )
107
+ seen.add( row )
108
+ }
109
+ }
110
+ }
111
+ return seen
112
+ }
113
+
114
+ const imageSummary = new Map()
115
+
116
+ const runner = async ( projects ) => {
117
+ const CSV_FILE = '../BitnamiImageRegistry.csv'
118
+ const fd = fs.openSync( CSV_FILE, 'w' )
119
+ fs.writeSync( fd, 'Project,Namespace,Service,Image,Version,Tag\n' )
120
+
121
+ for ( const project of projects ) {
122
+ log( `Project [${project}]` )
123
+ try {
124
+ await prepareContext( project ) // eslint-disable-line no-await-in-loop
125
+ } catch ( error ) {
126
+ log( `Project or context is invalid, skipping [${chalk.redBright( project )}]` )
127
+ continue
128
+ }
129
+
130
+ // eslint-disable-next-line no-await-in-loop
131
+ const k8sImageDump = await shellCmd( 'kubectl get deploy,statefulset -A -o json' )
132
+ const bitnamiImages = filterBitnamiImages( project, k8sImageDump )
133
+
134
+ for ( const line of bitnamiImages ) {
135
+ fs.writeSync( fd, `${line}\n` )
136
+
137
+ const [ , , , image, version, tag ] = line.split( ',' )
138
+ if ( /^leverege/.test( image ) ) continue // we don't need leverege in the summary
139
+
140
+ if ( !imageSummary.has( image ) ) {
141
+ imageSummary.set( image, { version : new Set(), tag : new Set() } )
142
+ }
143
+ imageSummary.get( image ).version.add( version )
144
+ imageSummary.get( image ).tag.add( tag )
145
+ }
146
+ }
147
+ fs.closeSync( fd )
148
+
149
+ log( '\n==== Bitnami Image Summary ====\n' )
150
+
151
+ log( 'IMAGES=(' )
152
+
153
+ for ( const [ image, { tag, version } ] of imageSummary.entries() ) {
154
+ const sortedTags = Array.from( tag ).sort( semver.rcompare )
155
+ for ( const t of sortedTags.slice( 0, 15 ) ) {
156
+ log( ` "${image}:${t}"` )
157
+ }
158
+
159
+ // Optional: also log a human-friendly display version list
160
+ const sortedVersions = Array.from( version ).sort( semver.rcompare )
161
+ log( ` # Display versions: ${sortedVersions.join( ', ' )}` )
162
+ }
163
+
164
+ log( ')' )
165
+
166
+ gitCheckoutCleanBranch() // back to clean bootstrap-k8s
167
+ }
168
+
169
+ await runner( auditProjects )
@@ -0,0 +1,75 @@
1
+ #!/bin/bash
2
+
3
+ BITNAMI_CTX=(
4
+ dev-controltek
5
+ dev-cox-health
6
+ dev-pitcrew
7
+ dev-recovr-auto
8
+ dev-schnucks
9
+ dev-tpi
10
+ discount-tire-prd
11
+ discount-tire-stg
12
+ leverege-cnpg-20240729
13
+ leverege-ops-20250730
14
+ leverege-demo
15
+ leverege-elastic
16
+ leverege-onboarding
17
+ leverege-sandbox
18
+ nimbelink-demo
19
+ prd-controltek
20
+ prd-cox-health
21
+ prd-generic-kudelski
22
+ prd-les-schwab
23
+ prd-recovr-auto
24
+ prd-skymirr
25
+ prd-tpi
26
+ prd-valvoline
27
+ qa-cox-health
28
+ siren-marine-dev
29
+ siren-marine-prd
30
+ siren-marine-staging
31
+ siren-marine-test
32
+ stg-cox-health
33
+ stg-generic-kudelski
34
+ stg-recovr-auto
35
+ stg-recovr-perf
36
+ )
37
+
38
+ function gitCheckoutCleanBranch() {
39
+ # find the cruft, namely any values.yaml files which tend to block the
40
+ # cleaning of subdirs that contain them (values.yaml aren't tracked in git)
41
+ find . -not \( -path \*junk -prune -o -path \*helm-elasticsearch -prune \) -name values.yaml -exec rm {} \;
42
+ git ko bootstrap-k8s &> /dev/null
43
+ git clean -d --force &> /dev/null
44
+
45
+ local branch=${1:bootstrap-k8s}
46
+ git ko "$branch" &> /dev/null
47
+ }
48
+
49
+ # create a clean sheet with headers
50
+ CSV_FILE="../BitnamiImageRegistry.csv"
51
+ rm -f $CSV_FILE
52
+ echo 'project,namespace,service,image,version' > $CSV_FILE
53
+
54
+ gitCheckoutCleanBranch # start clean
55
+
56
+ for CTX in "${BITNAMI_CTX[@]}";
57
+ do
58
+ gitCheckoutCleanBranch $CTX
59
+
60
+ if [[ $? -eq 0 ]];
61
+ then
62
+ overwhelm -f
63
+ overwhelm -m
64
+ if [[ $? -ne 0 ]];
65
+ then
66
+ echo "Project [${CTX}] is valid, but the k8s context is not - skipping..."
67
+ continue
68
+ fi
69
+ echo "Context GOOD [$CTX]"
70
+ kubectl get deploy,statefulset -A -o json | bitnami-k8s-parse $CTX >> $CSV_FILE
71
+ fi
72
+ find . -not \( -path \*junk -prune -o -path \*helm-elasticsearch -prune \) -name values.yaml -exec rm {} \;
73
+ done
74
+
75
+ gitCheckoutCleanBranch # end clean
@@ -0,0 +1,140 @@
1
+ #!/bin/bash
2
+ #
3
+ # This script was used to bootstrap the leverege-registry bitnmai-mirror
4
+ # folder with initial images and charts needed for the migration away from
5
+ # bitnami. I left it here as an artifact and can be deleted once the entire
6
+ # migration is complete.
7
+ #
8
+ # CONFIGURATION
9
+ PROJECT_ID="leverege-registry"
10
+ REGION="us" # adjust if needed
11
+ MIRROR_ROOT="${REGION}-docker.pkg.dev/${PROJECT_ID}/bitnami-mirror"
12
+ DOCKER_PREFIX="${MIRROR_ROOT}/images"
13
+ CHARTS_PREFIX="oci://${MIRROR_ROOT}/charts"
14
+
15
+ # Images to mirror
16
+ IMAGES=(
17
+ "bitnami/postgresql:11.14.0-debian-10-r28"
18
+ "bitnami/postgresql:11.7.0-debian-10-r99"
19
+ # Display versions: 11.14.0, 11.7.0
20
+ "bitnami/postgres-exporter:0.10.0-debian-10-r172"
21
+ "bitnami/postgres-exporter:0.8.0-debian-10-r106"
22
+ # Display versions: 0.10.0, 0.8.0
23
+ "bitnami/redis:7.4.3-debian-12-r0"
24
+ "bitnami/redis:7.4.2-debian-12-r2"
25
+ "bitnami/redis:7.4.1-debian-12-r0"
26
+ "bitnami/redis:7.2.5-debian-12-r2"
27
+ "bitnami/redis:7.2.5-debian-12-r0"
28
+ "bitnami/redis:7.2.4-debian-12-r12"
29
+ "bitnami/redis:7.2.3-debian-11-r1"
30
+ "bitnami/redis:7.0.12-debian-11-r34"
31
+ "bitnami/redis:7.0.11-debian-11-r12"
32
+ "bitnami/redis:7.0.8-debian-11-r0"
33
+ "bitnami/redis:6.2.1-debian-10-r36"
34
+ "bitnami/redis:6.0.3-debian-10-r2"
35
+ # Display versions: 7.4.3, 7.4.2, 7.4.1, 7.2.5, 7.2.4, 7.2.3, 7.0.12, 7.0.11, 7.0.8, 6.2.1, 6.0.3
36
+ "bitnami/redis-exporter:1.70.0-debian-12-r2"
37
+ "bitnami/redis-exporter:1.67.0-debian-12-r7"
38
+ "bitnami/redis-exporter:1.63.0-debian-12-r1"
39
+ "bitnami/redis-exporter:1.61.0-debian-12-r2"
40
+ "bitnami/redis-exporter:1.61.0-debian-12-r0"
41
+ "bitnami/redis-exporter:1.58.0-debian-12-r7"
42
+ "bitnami/redis-exporter:1.55.0-debian-11-r2"
43
+ "bitnami/redis-exporter:1.52.0-debian-11-r25"
44
+ "bitnami/redis-exporter:1.50.0-debian-11-r13"
45
+ "bitnami/redis-exporter:1.45.0-debian-11-r26"
46
+ "bitnami/redis-exporter:1.20.0-debian-10-r16"
47
+ "bitnami/redis-exporter:1.6.1-debian-10-r7"
48
+ # Display versions: 1.70.0, 1.67.0, 1.63.0, 1.61.0, 1.58.0, 1.55.0, 1.52.0, 1.50.0, 1.45.0, 1.20.0, 1.6.1
49
+ "bitnami/elasticsearch:8.18.0-debian-12-r2"
50
+ "bitnami/elasticsearch:8.17.3-debian-12-r0"
51
+ "bitnami/elasticsearch:8.16.1-debian-12-r0"
52
+ "bitnami/elasticsearch:8.15.2-debian-12-r2"
53
+ "bitnami/elasticsearch:8.12.2-debian-12-r0"
54
+ "bitnami/elasticsearch:8.12.1-debian-11-r2"
55
+ "bitnami/elasticsearch:8.12.1-debian-11-r1"
56
+ "bitnami/elasticsearch:8.12.0-debian-11-r1"
57
+ "bitnami/elasticsearch:8.11.1-debian-11-r0"
58
+ "bitnami/elasticsearch:8.10.3-debian-11-r1"
59
+ "bitnami/elasticsearch:8.9.1-debian-11-r2"
60
+ # Display versions: 8.18.0, 8.17.3, 8.16.1, 8.15.2, 8.12.2, 8.12.1, 8.12.0, 8.11.1, 8.10.3, 8.9.1
61
+ "bitnami/sealed-secrets-controller:0.29.0-debian-12-r1"
62
+ "bitnami/valkey:8.1.3-debian-12-r1"
63
+ # Display versions: 8.1.30
64
+ )
65
+
66
+ # Charts to mirror (chart:version)
67
+ CHARTS=(
68
+ "bitnamicharts/elasticsearch:22.1.0"
69
+ "bitnamicharts/elasticsearch:21.6.3"
70
+ "bitnamicharts/elasticsearch:21.3.20"
71
+ "bitnamicharts/elasticsearch:19.17.6"
72
+ # "bitnamicharts/postgresql:10.16.2" # pulled manually from ancient bitnami source
73
+ "bitnamicharts/redis:20.13.4"
74
+ "bitnamicharts/valkey:3.0.22"
75
+ )
76
+
77
+ echo "🔑 Authenticating to Artifact Registry..."
78
+ gcloud auth configure-docker ${REGION}-docker.pkg.dev -q &> /dev/null
79
+ gcloud auth application-default print-access-token | helm registry login \
80
+ -u oauth2accesstoken --password-stdin ${REGION}-docker.pkg.dev
81
+
82
+ echo "📦 Ensuring Artifact Registry repos exist..."
83
+ gcloud artifacts repositories create bitnami-mirror \
84
+ --repository-format=docker \
85
+ --location=${REGION} \
86
+ --project=${PROJECT_ID} \
87
+ --description="Mirror of Bitnami images/charts" &> /dev/null \
88
+ || echo "✅ Docker repo already exists."
89
+
90
+ # Check if crane is available (brew install crane)
91
+ if command -v crane &>/dev/null;
92
+ then
93
+ echo "🚀 Using crane for image copies (fast + multi-arch safe)"
94
+ USE_CRANE=true
95
+ else
96
+ echo "🐳 crane not found, falling back to Docker CLI"
97
+ USE_CRANE=false
98
+ fi
99
+
100
+ echo "⬇️ Pulling & pushing container images..."
101
+ for IMAGE in "${IMAGES[@]}"; do
102
+ SRC_IMAGE="docker.io/${IMAGE}"
103
+ NAME=$(echo "${IMAGE}" | cut -d: -f1 | awk -F/ '{print $NF}')
104
+ TAG=$(echo "${IMAGE}" | cut -d: -f2)
105
+ DEST_IMAGE="${DOCKER_PREFIX}/${NAME}:${TAG}"
106
+
107
+ echo "Mirroring ${SRC_IMAGE} → ${DEST_IMAGE}"
108
+
109
+ if [ "$USE_CRANE" = true ];
110
+ then
111
+ # crane copies the whole manifest list (multi-arch safe)
112
+ cat<<CRANE_CAT
113
+ crane copy "${SRC_IMAGE}" "${DEST_IMAGE}"
114
+ CRANE_CAT
115
+ crane copy "${SRC_IMAGE}" "${DEST_IMAGE}"
116
+ else
117
+ docker pull --platform linux/amd64 "${SRC_IMAGE}"
118
+ docker tag "${SRC_IMAGE}" "${DEST_IMAGE}"
119
+ docker push "${DEST_IMAGE}"
120
+
121
+ # clean up local docker - the || true ensures the script won’t fail if the
122
+ # image was already removed or the tag isn’t present
123
+ docker rmi -f "${SRC_IMAGE}" "${DEST_IMAGE}" || true
124
+ fi
125
+ done
126
+
127
+ echo "⬇️ Pulling & pushing Helm charts..."
128
+ for ENTRY in "${CHARTS[@]}"; do
129
+ CHART=$(echo $ENTRY | cut -d: -f1)
130
+ VERSION=$(echo $ENTRY | cut -d: -f2)
131
+ echo "Mirroring chart ${CHART}:${VERSION}"
132
+ #cat<<CHART_MOVER
133
+ helm pull oci://registry-1.docker.io/${CHART} --version ${VERSION}
134
+ CHART_TARBALL=$(basename ${CHART})-${VERSION}.tgz
135
+ helm push "${CHART_TARBALL}" ${CHARTS_PREFIX}
136
+ rm -f "${CHART_TARBALL}"
137
+ #CHART_MOVER
138
+ done
139
+
140
+ echo "✅ Mirror complete."
@@ -2,6 +2,8 @@
2
2
  import path from 'node:path'
3
3
  import { $, fs, chalk, argv } from 'zx'
4
4
 
5
+ import { log } from './Utils.mjs'
6
+
5
7
  const srcOnly = argv.srcOnly
6
8
 
7
9
  const $$ = $( {
@@ -21,10 +23,10 @@ if ( !hasWorkspace ) {
21
23
  for ( let i = 0; i < dirs.length; i++ ) {
22
24
  const dir = dirs[i]
23
25
 
24
- await getLinesOfCodeForDirectory( path.join( rootDir, 'packages', dir ) )
26
+ await getLinesOfCodeForDirectory( path.join( rootDir, 'packages', dir ) ) // eslint-disable-line no-await-in-loop
25
27
  }
26
28
  } else {
27
- console.log( chalk.redBright( 'No workspace directories for which to count code' ) )
29
+ log( chalk.redBright( 'No workspace directories for which to count code' ) )
28
30
  }
29
31
  }
30
32
 
@@ -33,13 +35,13 @@ async function getLinesOfCodeForDirectory( directory ) {
33
35
  const hasSrc = await fs.exists( srcDir )
34
36
 
35
37
  if ( hasSrc ) {
36
- console.log( `${chalk.greenBright( srcOnly ? srcDir : directory )}:` )
38
+ log( `${chalk.greenBright( srcOnly ? srcDir : directory )}:` )
37
39
  if ( srcOnly ) {
38
40
  await $$`sloc ${srcDir} --format cli-table`
39
41
  } else {
40
42
  await $$`sloc ${directory} --format cli-table -i '^(src|test)/.*' -e node_modules`
41
43
  }
42
44
  } else {
43
- console.log( chalk.redBright( `No src directory at ${directory}` ) )
45
+ log( chalk.redBright( `No src directory at ${directory}` ) )
44
46
  }
45
47
  }
@@ -0,0 +1,11 @@
1
+ #!/bin/bash
2
+ #
3
+ # just a simple wrapper round crane docker lifter
4
+ #
5
+ IMAGE_WITH_TAG="${1}" # like valkey:8.1.3-debian-12-r1
6
+
7
+ REGISTRY_LEVEREGE="us-docker.pkg.dev/leverege-registry/bitnami-mirror/images"
8
+ REGISTRY_BITNAMI="docker.io/bitnami"
9
+
10
+ crane copy "${REGISTRY_BITNAMI}/${IMAGE_WITH_TAG}" \
11
+ "${REGISTRY_LEVEREGE}"/${IMAGE_WITH_TAG}"
@@ -8,7 +8,16 @@
8
8
  # for each of the 4 ES node types in the cluster. See prd-recovr-auto for an
9
9
  # example of a big beefy system.
10
10
  #
11
+ # Moves us away from bitnami hosted charts/images
12
+ #
13
+ image:
14
+ registry: us-docker.pkg.dev
15
+ repository: leverege-registry/bitnami-mirror/images/elasticsearch
16
+ # tag: 8.18.0
17
+
11
18
  global:
19
+ security:
20
+ allowInsecureImages: true
12
21
  storageClass: "ssd"
13
22
 
14
23
  fullnameOverride: "elasticsearch8"
@@ -8,7 +8,16 @@
8
8
  # for each of the 4 ES node types in the cluster. See prd-recovr-auto for an
9
9
  # example of a big beefy system.
10
10
  #
11
+ # Moves us away from bitnami hosted charts/images
12
+ #
13
+ image:
14
+ registry: us-docker.pkg.dev
15
+ repository: leverege-registry/bitnami-mirror/images/elasticsearch
16
+ # tag: 8.18.0
17
+
11
18
  global:
19
+ security:
20
+ allowInsecureImages: true
12
21
  storageClass: "ssd"
13
22
 
14
23
  fullnameOverride: "elasticsearch8"
@@ -2,11 +2,11 @@
2
2
  #
3
3
  showInstalling "Elastic Search 8"
4
4
 
5
+ OCI_CHART="oci://us-docker.pkg.dev/leverege-registry/bitnami-mirror/charts/elasticsearch"
6
+
5
7
  # *** WARNING TO FUTURE SELF *** v22 of the chart is ES v9!!!
6
8
  [ -z "$ELASTIC_CHART_VERSION" ] && ELASTIC_CHART_VERSION="21.6.3"
7
9
 
8
- OCI_CHART="oci://registry-1.docker.io/bitnamicharts/elasticsearch"
9
-
10
10
  LOCAL_ES_VALUES="elasticsearch8/elasticsearch-local-dev.yaml"
11
11
  #LOCAL_ES_VALUES="elasticsearch8/elasticsearch-local-prd.yaml"
12
12
  [ ! -f "$LOCAL_ES_VALUES" ] && exitOnError 1 "Missing the local ES config file => `color y $LOCAL_ES_VALUES`"
@@ -14,4 +14,4 @@ LOCAL_ES_VALUES="elasticsearch8/elasticsearch-local-dev.yaml"
14
14
  helm upgrade --install elasticsearch8 $OCI_CHART \
15
15
  --namespace elastic --create-namespace \
16
16
  --values $LOCAL_ES_VALUES \
17
- --version $ELASTIC_CHART_VERSION $HELM_WHAT
17
+ --version $ELASTIC_CHART_VERSION $HELM_WHAT
File without changes
File without changes
@@ -0,0 +1,6 @@
1
+ ## Legacy PostgreSQL 11
2
+
3
+ This configuration was temporarily resurrected for supporting the bitnami
4
+ migrations. There are still quite a few legacy deployments using this
5
+ ancient psql approach. We use this config to point the servers at the Leverege
6
+ artifact registry for the mirrored bitnami images.
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ echo 'NO!'
@@ -0,0 +1,21 @@
1
+ #!/bin/bash
2
+ #
3
+ showInstalling "PostgreSQL Database (legacy)"
4
+
5
+ errorIfMissingSecret authz-postgres
6
+
7
+ OCI_CHART="oci://us-docker.pkg.dev/leverege-registry/bitnami-mirror/charts/postgresql"
8
+
9
+ [ -z "$PSQL_CHART_VERSION" ] && PSQL_CHART_VERSION="10.16.2"
10
+
11
+ helm upgrade --install postgres $OCI_CHART \
12
+ --values postgres/postgres-local.yaml \
13
+ --version $PSQL_CHART_VERSION $HELM_WHAT
14
+
15
+ #
16
+ # legacy
17
+ #helm upgrade --install postgres bitnami/postgresql \
18
+ # --values postgres/postgres-local.yaml \
19
+ # --version 10 $HELM_WHAT
20
+ #
21
+ #removeHelmRepo bitnami
@@ -0,0 +1,51 @@
1
+ # Moves us away from bitnami hosted charts/images
2
+ #
3
+ image:
4
+ registry: us-docker.pkg.dev
5
+ repository: leverege-registry/bitnami-mirror/images/postgresql
6
+ # tag: 11.14.0-debian-10-r28
7
+
8
+ postgresqlExtendedConf:
9
+ maxWorkerProcesses: 4
10
+ maxParallelWorkers: 4
11
+ maxConnections: 500
12
+ shared_buffers: 1GB
13
+ effectiveCacheSize: 4GB
14
+ maintenanceWorkMem: 1GB
15
+ workMem: 10MB
16
+
17
+ persistence:
18
+ storageClass: "ssd"
19
+ # size: 16Gi # default 8Gi
20
+
21
+ resources:
22
+ requests:
23
+ memory: 1Gi
24
+ cpu: 750m
25
+
26
+ postgresqlDatabase: authz
27
+ existingSecret: authz-postgres
28
+
29
+ metrics:
30
+ enabled: true
31
+ image:
32
+ registry: us-docker.pkg.dev
33
+ repository: leverege-registry/bitnami-mirror/images/postgres-exporter
34
+ # tag: 0.10.0-debian-10-r172
35
+
36
+ master:
37
+ tolerations:
38
+ - key: "database"
39
+ operator: "Equal"
40
+ value: "true"
41
+ effect: "NoSchedule"
42
+
43
+ affinity:
44
+ nodeAffinity:
45
+ requiredDuringSchedulingIgnoredDuringExecution:
46
+ nodeSelectorTerms:
47
+ - matchExpressions:
48
+ - key: target-env
49
+ operator: In
50
+ values:
51
+ - database
@@ -34,7 +34,8 @@ stackdriver:
34
34
  serviceMonitor:
35
35
  enabled: true
36
36
  namespace: prometheus
37
- interval: "30s"
37
+ interval: "60s" # Align with Stackdriver's 60s data resolution
38
+ # honorTimestamps: false # Avoid duplicate timestamp conflicts (eliminates dup timestamps?)
38
39
  relabelings:
39
40
  # Legacy labelmap used to preserve compatibility with pre-operator Grafana dashboards
40
41
  # Can be removed once legacy Prometheus stack is deprecated
@@ -2,10 +2,10 @@
2
2
 
3
3
  showInstalling "Redis"
4
4
 
5
- OCI_CHART="oci://registry-1.docker.io/bitnamicharts/redis"
5
+ OCI_CHART="oci://us-docker.pkg.dev/leverege-registry/bitnami-mirror/charts/redis"
6
6
 
7
7
  [ -z "$REDIS_CHART_VERSION" ] && REDIS_CHART_VERSION="20.13.4"
8
8
 
9
- helm upgrade --install redis $OCI_CHART \
9
+ helm upgrade --install redis $OCI_CHART \
10
10
  --values redis/values-local.yaml \
11
11
  --version $REDIS_CHART_VERSION $HELM_WHAT
@@ -1,4 +1,14 @@
1
+ #
2
+ # Moves us away from bitnami hosted charts/images
3
+ #
4
+ image:
5
+ registry: us-docker.pkg.dev
6
+ repository: leverege-registry/bitnami-mirror/images/redis
7
+ # tag: 7.4.3-debian-12-r0
8
+
1
9
  global:
10
+ security: # this allows us to use local images
11
+ allowInsecureImages: true
2
12
  storageClass: ssd
3
13
 
4
14
  auth:
@@ -70,6 +80,10 @@ networkPolicy:
70
80
 
71
81
  metrics:
72
82
  enabled: true
83
+ image:
84
+ registry: us-docker.pkg.dev
85
+ repository: leverege-registry/bitnami-mirror/images/redis-exporter
86
+ # tag: 1.74.0-debian-12-r2
73
87
  serviceMonitor:
74
88
  enabled: true # set to true for prometheus operator
75
89
  namespace: "prometheus"
@@ -17,7 +17,7 @@ TRAEFIK_NAMESPACE="traefik"
17
17
 
18
18
  addHelmRepo traefik https://helm.traefik.io/traefik
19
19
 
20
- [ -z "$TRAEFIK_CHART_VERSION" ] && TRAEFIK_CHART_VERSION="36"
20
+ [ -z "$TRAEFIK_CHART_VERSION" ] && TRAEFIK_CHART_VERSION="37"
21
21
  helm upgrade --install traefik traefik/traefik \
22
22
  --namespace $TRAEFIK_NAMESPACE --create-namespace \
23
23
  --values traefik/values.yaml \
@@ -2,10 +2,10 @@
2
2
 
3
3
  showInstalling "Valkey"
4
4
 
5
- OCI_CHART="oci://registry-1.docker.io/bitnamicharts/valkey"
5
+ OCI_CHART="oci://us-docker.pkg.dev/leverege-registry/bitnami-mirror/charts/valkey"
6
6
 
7
- [ -z "$VALKEY_CHART_VERSION" ] && VALKEY_CHART_VERSION="2.2.4"
7
+ [ -z "$VALKEY_CHART_VERSION" ] && VALKEY_CHART_VERSION="3.0.22"
8
8
 
9
- helm upgrade --install valkey $OCI_CHART \
9
+ helm upgrade --install valkey $OCI_CHART \
10
10
  --values valkey/valkey-local.yaml \
11
11
  --version $VALKEY_CHART_VERSION $HELM_WHAT
@@ -1,5 +1,11 @@
1
+ image:
2
+ registry: us-docker.pkg.dev
3
+ repository: leverege-registry/bitnami-mirror/images/valkey
4
+ # tag: 8.1.3-devian-12-r1
1
5
 
2
6
  global:
7
+ security:
8
+ allowInsecureImages: true
3
9
  storageClass: "ssd"
4
10
 
5
11
  architecture: replication
@@ -11,7 +17,7 @@ auth:
11
17
  primary:
12
18
  replicaCount: 1
13
19
 
14
- resourcesPreset: "nano"
20
+ resourcesPreset: "small"
15
21
  resources:
16
22
  requests:
17
23
  cpu: 250m
@@ -77,6 +83,10 @@ sentinel:
77
83
 
78
84
  metrics:
79
85
  enabled: true
86
+ image:
87
+ registry: us-docker.pkg.dev
88
+ repository: leverege-registry/bitnami-mirror/images/redis-exporter
89
+ # tag: 1.74.0-debian-12-r2
80
90
  serviceMonitor:
81
91
  enabled: true
82
92
  namespace: "prometheus"
@@ -7,7 +7,7 @@ addHelmRepo vmware-tanzu https://vmware-tanzu.github.io/helm-charts
7
7
  [ -z "$VELERO_CHART_VERSION" ] && VELERO_CHART_VERSION="10"
8
8
  #
9
9
  # Build the bucket, region and SA email variables and use --set to mod the
10
- # chart values as opposed to using an OVH:<label> approach. This eliminates
10
+ # chart values as opposed to using an ${label} approach. This eliminates
11
11
  # the need for an overwhelm generated values.yaml file which also contains
12
12
  # all of the contamination from the default-values.yaml file.
13
13
  #
package/src/helmup.sh CHANGED
@@ -83,25 +83,6 @@ function isLeveregeService() {
83
83
  echo $answer
84
84
  }
85
85
 
86
- # audit trail via slack
87
- # support for legacy bitnami charts
88
- function addBitnamiRepo() {
89
- if [ ! -z "$BITNAMI_LATEST" ] || [ "$1" == "latest" ];
90
- then
91
- BITNAMI_URL="https://charts.bitnami.com/bitnami"
92
- else
93
- cat<<CATNAMI
94
- Using the pre 2022 legacy charts from bitnami. To use latest run:
95
-
96
- `color y "BITNAMI_LATEST=1 $HELMUP_ARGS"`
97
-
98
- CATNAMI
99
- BITNAMI_URL="https://raw.githubusercontent.com/bitnami/charts/eb5f9a9513d987b519f0ecd732e7031241c50328/bitnami"
100
- fi
101
-
102
- addHelmRepo bitnami $BITNAMI_URL
103
- }
104
-
105
86
  # Accepts 3 paramaters - 1 mandatory.
106
87
  # bindWorkloadIdentity <Service Account> <Namespace> <Target Service Account>
107
88
  # where:
@@ -265,6 +246,34 @@ SERVICE_BOOTSTRAP
265
246
  ifPluggedIn $SERVICE
266
247
  }
267
248
 
249
+ # some initial installs may be performed from the local setups in the
250
+ # build-tools helm-charts directory
251
+ function ifCanBootstrap() {
252
+ local bootstrap_targets=(
253
+ argocd
254
+ cnpg-operator
255
+ cnpg-db-psql-stack
256
+ cnpg-db-tsdb-basic
257
+ elasticsearch8
258
+ pgbouncer
259
+ prom-operator
260
+ redis
261
+ valkey
262
+ traefik
263
+ traefik-canary
264
+ velero
265
+ )
266
+ local svc_name="$1"
267
+
268
+ if [[ " ${bootstrap_targets[*]} " == *" $svc_name "* ]];
269
+ then
270
+ bootstrapLocalSetup $svc_name
271
+ return 0
272
+ else
273
+ return 1
274
+ fi
275
+ }
276
+
268
277
  function installDefaultConfigs() {
269
278
  showInstalling "Default Configs"
270
279
 
@@ -584,6 +593,9 @@ CATBACKUP
584
593
  # If we're referencing a plugin then execute it and continue
585
594
  ifPluggedIn $SERVICE && continue
586
595
 
596
+ # If we can bootstrap a service on a new setup
597
+ ifCanBootstrap $SERVICE && continue
598
+
587
599
  case "$SERVICE" in
588
600
  "platform")
589
601
  doPlatormPreInstallChecks
@@ -594,18 +606,6 @@ CATBACKUP
594
606
  doInstall "${SYSTEM[@]}"
595
607
  ;;
596
608
 
597
- "argocd")
598
- bootstrapLocalSetup $SERVICE
599
- ;;
600
-
601
- cnpg-db-*)
602
- bootstrapLocalSetup $SERVICE
603
- ;;
604
-
605
- "cnpg-operator")
606
- bootstrapLocalSetup $SERVICE
607
- ;;
608
-
609
609
  "cronZombieKiller"|"zombie-killer")
610
610
  installCronZombieKiller # eradicate the gke 1.20+ zombies
611
611
  ;;
@@ -614,10 +614,6 @@ CATBACKUP
614
614
  installDefaultConfigs
615
615
  ;;
616
616
 
617
- "elasticsearch8")
618
- bootstrapLocalSetup $SERVICE
619
- ;;
620
-
621
617
  "estafette"|"preemptible-killer")
622
618
  installPreemptibleKiller # the gke preemptible node spreader outer
623
619
  ;;
@@ -626,18 +622,6 @@ CATBACKUP
626
622
  setupStackBuckets && exit 0
627
623
  ;;
628
624
 
629
- "pgbouncer")
630
- bootstrapLocalSetup $SERVICE
631
- ;;
632
-
633
- "prom-operator")
634
- bootstrapLocalSetup $SERVICE
635
- ;;
636
-
637
- "redis"|"valkey")
638
- bootstrapLocalSetup $SERVICE
639
- ;;
640
-
641
625
  "reflector")
642
626
  showInstalling "Secrets/ConfigMap Namespace Reflector"
643
627
  addHelmRepo emberstack https://emberstack.github.io/helm-charts
@@ -658,22 +642,7 @@ CATBACKUP
658
642
  HELMUP="helm upgrade --install $SERVICE leverege/transponder --values $SERVICE/values.yaml $CHARTVER $HELM_WHAT"
659
643
  doHelmup "$HELMUP"
660
644
  ;;
661
-
662
- "traefik")
663
- # installTraefikEnvironment
664
- bootstrapLocalSetup $SERVICE
665
- ;;
666
-
667
- "traefik-canary")
668
- # only valid if traefik is already installed
669
- bootstrapLocalSetup $SERVICE
670
- ;;
671
-
672
- "velero")
673
- # installVeleroEnvironment
674
- bootstrapLocalSetup $SERVICE
675
- ;;
676
-
645
+
677
646
  *)
678
647
  # if the service dir is missing then check to see if it's a platform
679
648
  # service and if it is then try to bootstrap from charts in build-tools
@@ -750,7 +719,7 @@ NOTRUNNING
750
719
  }
751
720
 
752
721
  # ---------- helmup MAIN ----------
753
- GITTOP=`git rev-parse --show-toplevel` # `&& cd $GITTOP
722
+ GITTOP=`git rev-parse --show-toplevel`
754
723
  K8S_UTILS="${GITTOP}/k8s-utils"
755
724
 
756
725
  overwhelm
@@ -764,5 +733,3 @@ GCE_REGION=`overwhelm -k GCE_REGION`
764
733
  doInstall $@
765
734
 
766
735
  displayBanner
767
-
768
- cd - &> $DEVNULL
package/src/k8x.sh CHANGED
@@ -47,6 +47,10 @@ K8X_HELP
47
47
  FZFQ="--query=grafana" && ns="prometheus" && cmd="bash"
48
48
  ;;
49
49
 
50
+ "grafold")
51
+ FZFQ="--query=grafana" && ns="monitoring" && cmd="bash"
52
+ ;;
53
+
50
54
  "prom-operator"|"prometheus")
51
55
  ns="prometheus" && cmd="bash"
52
56
  ;;
package/src/overwhelm.mjs CHANGED
@@ -79,7 +79,7 @@ if ( !fs.existsSync( 'overwhelm.yaml' ) ) {
79
79
  process.exit( 1 )
80
80
  }
81
81
 
82
- if ( !args.key && fs.existsSync( 'values-default.yaml' ) ) {
82
+ if ( !args.key && !args.fetchctx && !args.matchk8s && fs.existsSync( 'values-default.yaml' ) ) {
83
83
  log( chalk.red.bold( `
84
84
 
85
85
  ***ERROR overwhelm => values-default.yaml is no longer used/supported and will