Files
cozystack/scripts/migrations/16
2025-07-02 06:15:04 +03:00

96 lines
3.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
# Migration 16 --> 17
#
# fix-nested-resources-map.sh prints kubectl patch commands.
# * Replaces each resources section with {cpu,memory} merged from requests + limits
# * Adds/Replaces .appVersion with "*"
set -e
CRDS='
clickhouses.apps.cozystack.io
etcds.apps.cozystack.io
ferretdb.apps.cozystack.io
httpcaches.apps.cozystack.io
kafkas.apps.cozystack.io
kuberneteses.apps.cozystack.io
monitorings.apps.cozystack.io
mysqls.apps.cozystack.io
natses.apps.cozystack.io
postgreses.apps.cozystack.io
rabbitmqs.apps.cozystack.io
redises.apps.cozystack.io
seaweedfses.apps.cozystack.io
tcpbalancers.apps.cozystack.io
virtualmachines.apps.cozystack.io
vminstances.apps.cozystack.io
vpns.apps.cozystack.io
'
for KIND in $CRDS; do
kubectl get "$KIND" -A -o json | jq -r --arg kind "$KIND" '
.items[]
| . as $obj
| ($obj.metadata.namespace // "") as $ns # namespace (empty string for cluster-scoped)
| $obj.metadata.name as $name # object name
# -------------------------------------------------------------------------
# Build an array with every JSON path ending with "resources"
# -------------------------------------------------------------------------
| [ $obj
| paths
| select(.[-1] == "resources")
] as $rpaths
# -------------------------------------------------------------------------
# Iterate through each resources path
# -------------------------------------------------------------------------
| foreach $rpaths[] as $rpath (null;
# Current resources object
($obj | getpath($rpath)) as $res
# requests + limits merged; requests override limits on key collision
| ($res.requests? // {}) as $req
| ($res.limits? // {}) as $lim
| ($req + $lim) as $flat
# Keep cpu & memory only
| ($flat
| with_entries(select(.key|test("^(cpu|memory)$")))
) as $value
| select(($value|length) > 0) # skip if nothing to patch
# ---------------------------------------------------------------------
# RFC6901-encoded JSON Pointer to the resources section
# ---------------------------------------------------------------------
| ("/" + ($rpath
| map(
tostring
| gsub("~";"~0")
| gsub("/";"~1")
)
| join("/")
)
) as $pointer
# ---------------------------------------------------------------------
# Compose JSON Patch: 1) add/replace appVersion, 2) replace resources
# ---------------------------------------------------------------------
| [
{ op:"add", path:"/appVersion", value:"*" },
{ op:"replace", path:$pointer, value:$value }
] as $patch
# ---------------------------------------------------------------------
# Print one ready-to-run kubectl patch command
# ---------------------------------------------------------------------
| "kubectl " +
(if $ns != "" then "-n \($ns) " else "" end) +
"patch \($kind) \($name) --type=json -p '\''\($patch|tojson)'\''"
)
' | sh -ex
done
# Write version to cozystack-version config
kubectl create configmap -n cozy-system cozystack-version --from-literal=version=17 --dry-run=client -o yaml | kubectl apply -f-