This commit is contained in:
alessandro barucci
2026-09-20 19:26:05 +02:00
parent 48f3f1ff22
commit 63649a642a
11 changed files with 578 additions and 45 deletions
+75
View File
@@ -0,0 +1,75 @@
#!/usr/bin/env bash
set -euo pipefail
# Aggiunge un hostname a spec.template.spec.hostAliases del Deployment blackbox.
#
# Uso:
# ./add-hostalias.sh <hostname> <deployment_name> <deployment_namespace>
#
# Esempio:
# ./add-hostalias.sh idcidcp.pigreco66.it cert-manager cert-manager
#
DEPLOYMENT_NAME="${2:-}"
DEPLOYMENT_NS="${3:-}"
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}"
+5 -3
View File
@@ -45,11 +45,13 @@ 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"
HOSTALIAS_SCRIPT="/root/work/pipeline/add-hostalias.sh"
if [[ -x "$HOSTALIAS_SCRIPT" ]]; then
"$HOSTALIAS_SCRIPT" "$host_no_port"
"$HOSTALIAS_SCRIPT" "$host_no_port" "cert-manager" "cert-manager"
"$HOSTALIAS_SCRIPT" "$host_no_port" "blackbox-exporter" "monitoring"
elif [[ -f "$HOSTALIAS_SCRIPT" ]]; then
bash "$HOSTALIAS_SCRIPT" "$host_no_port"
bash "$HOSTALIAS_SCRIPT" "$host_no_port" "cert-manager" "cert-manager"
bash "$HOSTALIAS_SCRIPT" "$host_no_port" "blackbox-exporter" "monitoring"
else
echo "Errore: script non trovato: $HOSTALIAS_SCRIPT" >&2
exit 1
-37
View File
@@ -7,44 +7,7 @@ ENVIRONMENT="${1:-dev}"
YAML_DIR="kubernetes"
# ---------------------------------------------------------------------------
# Cerca risorse postgresql.cnpg.io/v1 nei manifest e deploya una ConfigMap
# ---------------------------------------------------------------------------
CNPG_FILE=$(grep -rl "postgresql.cnpg.io/v1" "$YAML_DIR" 2>/dev/null | head -1 || true)
if [ -n "$CNPG_FILE" ]; then
echo "Trovata risorsa postgresql.cnpg.io/v1 in: $CNPG_FILE"
# Estrae metadata.name dal manifest CNPG preferendo yq, altrimenti awk
if command -v yq >/dev/null 2>&1; then
PG_NAME=$(yq eval 'select(.apiVersion == "postgresql.cnpg.io/v1") | .metadata.name' "$CNPG_FILE")
else
PG_NAME=$(awk '/postgresql\.cnpg\.io\/v1/{found=1} found && /^metadata:/{meta=1} meta && /^\s+name:/{print $2; exit}' "$CNPG_FILE")
fi
# Ricava il namespace dal Role namespace-deployer presente nel cluster
PG_NS=$(kubectl --kubeconfig=./kubeconfig get role namespace-deployer \
--no-headers \
-o custom-columns='NS:.metadata.namespace' 2>/dev/null | head -1 || true)
#PG_NS="${PG_NS:-default}"
if [ -z "$PG_NAME" ]; then
echo "⚠️ Impossibile estrarre metadata.name dal cluster CNPG, skip ConfigMap." >&2
else
echo " → cluster: $PG_NAME namespace: $PG_NS"
kubectl --kubeconfig=./kubeconfig apply -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: service-config
namespace: ${PG_NS}
data:
tipodb: "postgres"
urldb: "${PG_NAME}.${PG_NS}.svc.cluster.local"
EOF
echo "ConfigMap db-config deployata in namespace ${PG_NS}."
fi
fi
# ---------------------------------------------------------------------------
# Deploy di tutti i manifest Kubernetes