gitops
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Aggiunge un hostname a spec.template.spec.hostAliases del Deployment cert-manager.
|
||||
#
|
||||
# Uso:
|
||||
# ./add-cert-manager-hostalias.sh <hostname>
|
||||
#
|
||||
# Esempio:
|
||||
# ./add-cert-manager-hostalias.sh main-gateway-nginx.nginx-gateway.svc.cluster.local
|
||||
# ./add-cert-manager-hostalias.sh api.internal
|
||||
|
||||
DEPLOYMENT_NAME="cert-manager"
|
||||
DEPLOYMENT_NS="cert-manager"
|
||||
TARGET_IP="10.43.37.118"
|
||||
HOSTNAME_VAL="${1:-}"
|
||||
|
||||
if [[ -z "$HOSTNAME_VAL" ]]; then
|
||||
echo "Uso: $0 <hostname>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v kubectl >/dev/null 2>&1; then
|
||||
echo "Errore: kubectl non trovato nel PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v jq >/dev/null 2>&1; then
|
||||
echo "Errore: jq non trovato nel PATH" >&2
|
||||
echo "Installa jq e riprova." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Idempotenza: controlla solo il blocco hostAliases associato a TARGET_IP.
|
||||
EXISTING_HOSTNAMES="$(kubectl get deployment "$DEPLOYMENT_NAME" -n "$DEPLOYMENT_NS" -o jsonpath="{.spec.template.spec.hostAliases[?(@.ip=='${TARGET_IP}')].hostnames[*]}" 2>/dev/null || true)"
|
||||
if echo " $EXISTING_HOSTNAMES " | grep -Fq " $HOSTNAME_VAL "; then
|
||||
echo "Hostname '$HOSTNAME_VAL' gia presente per IP ${TARGET_IP} in ${DEPLOYMENT_NS}/${DEPLOYMENT_NAME}. Nessuna modifica."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
DEPLOY_JSON="$(kubectl get deployment "$DEPLOYMENT_NAME" -n "$DEPLOYMENT_NS" -o json)"
|
||||
|
||||
UPDATED_HOST_ALIASES="$({
|
||||
echo "$DEPLOY_JSON" | jq -c --arg ip "$TARGET_IP" --arg hostname "$HOSTNAME_VAL" '
|
||||
(.spec.template.spec.hostAliases //= [])
|
||||
| if any(.spec.template.spec.hostAliases[]?; .ip == $ip) then
|
||||
.spec.template.spec.hostAliases |= map(
|
||||
if .ip == $ip then
|
||||
if ((.hostnames // []) | index($hostname)) then
|
||||
.
|
||||
else
|
||||
.hostnames = ((.hostnames // []) + [$hostname])
|
||||
end
|
||||
else
|
||||
.
|
||||
end
|
||||
)
|
||||
else
|
||||
.spec.template.spec.hostAliases += [{"ip": $ip, "hostnames": [$hostname]}]
|
||||
end
|
||||
| .spec.template.spec.hostAliases
|
||||
'
|
||||
} )"
|
||||
|
||||
PATCH_PAYLOAD="$(jq -cn --argjson hostAliases "$UPDATED_HOST_ALIASES" '{spec:{template:{spec:{hostAliases:$hostAliases}}}}')"
|
||||
|
||||
kubectl patch deployment "$DEPLOYMENT_NAME" \
|
||||
-n "$DEPLOYMENT_NS" \
|
||||
--type=merge \
|
||||
-p "$PATCH_PAYLOAD" >/dev/null
|
||||
|
||||
echo "Hostname aggiunto con successo."
|
||||
echo " Deployment: ${DEPLOYMENT_NS}/${DEPLOYMENT_NAME}"
|
||||
echo " IP : ${TARGET_IP}"
|
||||
echo " Hostname : ${HOSTNAME_VAL}"
|
||||
@@ -35,6 +35,7 @@ fi
|
||||
# Per calcolare il token usa host pulito (senza schema e path)
|
||||
host_for_token="${endpoint#*://}"
|
||||
host_for_token="${host_for_token%%/*}"
|
||||
host_no_port="${host_for_token%%:*}"
|
||||
token="${host_for_token%%.*}"
|
||||
|
||||
if [[ -z "$token" ]]; then
|
||||
@@ -42,5 +43,18 @@ if [[ -z "$token" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Se l'hostname non e nel dominio *.italiadatacenter.com, aggiungilo anche a cert-manager hostAliases.
|
||||
if [[ "$host_no_port" != *.italiadatacenter.com ]]; then
|
||||
HOSTALIAS_SCRIPT="/root/work/pipeline/add-cert-manager-hostalias.sh"
|
||||
if [[ -x "$HOSTALIAS_SCRIPT" ]]; then
|
||||
"$HOSTALIAS_SCRIPT" "$host_no_port"
|
||||
elif [[ -f "$HOSTALIAS_SCRIPT" ]]; then
|
||||
bash "$HOSTALIAS_SCRIPT" "$host_no_port"
|
||||
else
|
||||
echo "Errore: script non trovato: $HOSTALIAS_SCRIPT" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Output richiesto: <endpoint> https-<token> <token>-secret
|
||||
/root/work/pipeline/add-listener.sh $endpoint https-$token $token-secret
|
||||
|
||||
Reference in New Issue
Block a user