This commit is contained in:
alessandro
2026-08-26 10:45:35 +02:00
parent c431fc36c5
commit 30d93adcad
26 changed files with 1796 additions and 0 deletions
+287
View File
@@ -0,0 +1,287 @@
# Clone and Transform Script
Script bash per clonare un repository GitLab usando API e token privato, con sostituzione automatica di stringhe nei file.
## Prerequisiti
- `bash` (4.0+)
- `git`
- `curl` (opzionale, per verificare l'accesso)
- Token privato GitLab con almeno scope `api` o `read_repository`
## Preparazione
### 1. Creare il file `transform.txt`
Crea un file `transform.txt` nella stessa directory dello script con il formato:
```txt
<old_string>=<new_string>
<old_string>=<new_string>
...
```
**Esempio di transform.txt:**
```txt
# Configurazioni di sviluppo verso produzione
DATABASE_HOST=localhost=DATABASE_HOST=prod.example.com
DATABASE_PORT=5432=DATABASE_PORT=5432
API_ENDPOINT=http://localhost:8080=API_ENDPOINT=https://api.prod.com
ENVIRONMENT=development=ENVIRONMENT=production
LOG_LEVEL=debug=LOG_LEVEL=info
SECRET_KEY=dev-secret=SECRET_KEY=prod-secret-key-xyz
```
### 2. Ottenere un token GitLab
1. Accedi a GitLab
2. Vai a **Profile → Access Tokens**
3. Crea un nuovo token con scopes:
- `api` - accesso completo
- oppure `read_repository` - solo lettura
4. Copia il token (non sarà più visibile dopo)
### 3. Rendere eseguibile lo script
```bash
chmod +x clone-and-transform.sh
```
## Utilizzo
### Sintassi base
```bash
./clone-and-transform.sh -u <URL> -t <TOKEN> -r <REPO-PATH> -d <DEST-DIR>
```
### Parametri
| Parametro | Breve | Descrizione | Esempio |
|-----------|-------|-------------|---------|
| `--url` | `-u` | URL base di GitLab | `https://gitlab.com` |
| `--token` | `-t` | Token di accesso privato | `glpat-xxxxx` |
| `--repo` | `-r` | Percorso del repository | `mygroup/myproject` |
| `--dest` | `-d` | Directory di destinazione | `./cloned-repo` |
| `--transform` | `-f` | Path del file transform.txt | `./transform.txt` (default) |
| `--help` | `-h` | Mostra l'aiuto | - |
### Esempi di utilizzo
**Esempio 1: Clone con trasformazioni usando file default**
```bash
./clone-and-transform.sh \
-u https://gitlab.com \
-t glpat-xxxxxxxxxxxx \
-r mygroup/myproject \
-d ./my-cloned-repo
```
**Esempio 2: Clone con file transform.txt personalizzato**
```bash
./clone-and-transform.sh \
-u https://gitlab.internal.com \
-t glpat-xxxxxxxxxxxx \
-r company/backend \
-d ./backend-clone \
-f ./custom-transform.txt
```
**Esempio 3: Clone da GitLab Enterprise**
```bash
./clone-and-transform.sh \
-u https://gitlab.mycompany.com \
-t glpat-xxxxxxxxxxxx \
-r products/idcidp \
-d ./idcidp-prod
```
## Come funziona lo script
1. **Validazione**: Verifica i parametri e l'esistenza di `transform.txt`
2. **Clone**: Clona il repository usando autenticazione OAuth2
3. **Scoperta directory**: Identifica directory `kubernetes`, `containers`, `conf`
4. **Trasformazione**: Per ogni file trovato applica le sostituzioni definite in `transform.txt`
5. **Report**: Mostra il number di file modificati e suggerisce i prossimi passi
### Directory elaborate
Lo script elabora automaticamente questi percorsi:
- `kubernetes/`
- `containers/`
- `conf/`
Se una directory non esiste, viene saltata con un avvertimento.
### File binari
I file binari (immagini, archivi, ecc.) vengono automaticamente saltati per evitare corruzioni.
## Output esempio
```
[INFO] Starting GitLab repository clone and transformation...
[INFO] GitLab URL: https://gitlab.com
[INFO] Repository: mygroup/myproject
[INFO] Destination: ./my-cloned-repo
[INFO] Transform file: ./transform.txt
[INFO] Cloning repository...
[INFO] Repository cloned successfully
[INFO] Found directory: kubernetes
[INFO] Found directory: containers
[INFO] Applying transformations from ./transform.txt...
[INFO] Processing directory: kubernetes
[INFO] Modified: ./my-cloned-repo/kubernetes/deployment.yaml
[INFO] Modified: ./my-cloned-repo/kubernetes/service.yaml
[INFO] Processing directory: containers
[INFO] ========== TRANSFORMATION SUMMARY ==========
Total files processed: 12
Files modified: 5
[INFO] ==========================================
[INFO] Transformation completed successfully!
Next steps:
1. Review changes: cd my-cloned-repo && git diff
2. Commit changes: git add . && git commit -m 'Apply transformations'
3. Push changes: git push
```
## Verifica delle modifiche
Dopo l'esecuzione, è consigliato verificare le modifiche:
```bash
cd ./my-cloned-repo
git diff
```
Per vedere solo i file modificati:
```bash
git status
```
## Commit e Push
Se le modifiche sono corrette:
```bash
git add .
git commit -m "Apply environment transformations"
git push
```
## Troubleshooting
### Errore: "Failed to clone repository"
**Causa**: Token non valido o senza permessi
**Soluzione**:
1. Verifica il token nel profilo GitLab
2. Assicurati che il token abbia scope `api`
3. Verifica che il repository sia accessibile con il token
### Errore: "Transform file not found"
**Causa**: Il file `transform.txt` non esiste
**Soluzione**:
1. Crea il file `transform.txt` nella directory dove esegui lo script
2. Usa l'opzione `-f` per specificare un percorso personalizzato
### Nessun file modificato
**Causa**: Le stringhe in `transform.txt` non corrispondono ai file
**Soluzione**:
1. Verifica il contenuto dei file nella directory clonata
2. Assicurati che le stringhe in `transform.txt` siano corrette
3. Usa pattern più generici se necessario
### Errore di escaping in stringhe complesse
Se le stringhe contengono caratteri speciali (barre, ampersand, etc.):
**Lo script gestisce automaticamente l'escaping**, ma se riscontri problemi:
1. Usa sequenze di escape nel file transform.txt
2. Ad esempio, per una barra inversa: `path\\old=path\\new`
## Sicurezza
### Best practices
1. **Non** commettere il token nel repository
2. Usa variabili d'ambiente per il token:
```bash
./clone-and-transform.sh \
-u https://gitlab.com \
-t $GITLAB_TOKEN \
-r mygroup/myproject \
-d ./clone
```
3. Usa file `.gitignore` per `transform.txt` se contiene dati sensibili:
```bash
echo "transform.txt" >> .gitignore
```
4. Revoca il token dopo l'uso se è ad uso singolo
## Opzioni avanzate
### Usare con script di automazione
```bash
#!/bin/bash
export GITLAB_TOKEN="glpat-xxxxx"
export GITLAB_URL="https://gitlab.internal.com"
./clone-and-transform.sh \
-u $GITLAB_URL \
-t $GITLAB_TOKEN \
-r company/backend \
-d ./backend-clone
```
### Variazione per ambienti multipli
Crea diversi file di trasformazione:
- `transform-dev.txt`
- `transform-qa.txt`
- `transform-prod.txt`
```bash
# Per development
./clone-and-transform.sh \
-u https://gitlab.com \
-t $GITLAB_TOKEN \
-r mygroup/myproject \
-d ./clone-dev \
-f transform-dev.txt
# Per production
./clone-and-transform.sh \
-u https://gitlab.com \
-t $GITLAB_TOKEN \
-r mygroup/myproject \
-d ./clone-prod \
-f transform-prod.txt
```
## Changelog
### v1.0 (Initial Release)
- Clone repository con token privato
- Applicazione di trasformazioni su directory specifiche
- Supporto per file UTF-8
- Skip automatico file binari
- Output colorato e dettagliato
## Licenza
MIT
+101
View File
@@ -0,0 +1,101 @@
#!/bin/bash
set -Eeuo pipefail
# Configuration
SOURCE_ENV="${1:-dbdev}"
DBNAME="${2:-geco}"
POD_NAME="${3:-postgresql-1-postgresql-0}"
CONTAINER_NAME="${4:-postgresql-server}"
BACKUP_REMOTE_DIR="${5:-/shared/backup}"
BACKUP_LOCAL_DIR="${6:-.}"
COMPRESSION="${7:-true}"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# Logging function
log() {
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $*"
}
error() {
echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] ERROR:${NC} $*" >&2
exit 1
}
warn() {
echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] WARN:${NC} $*"
}
# Determine backup file extension
if [ "${COMPRESSION}" = "true" ]; then
BACKUP_FILE="${DBNAME}-${SOURCE_ENV}-$(date +%Y%m%d-%H%M%S).backup.gz"
DUMP_FORMAT="c"
else
BACKUP_FILE="${DBNAME}-${SOURCE_ENV}-$(date +%Y%m%d-%H%M%S).backup"
DUMP_FORMAT="c"
fi
log "Inizio backup database PostgreSQL"
log "Namespace: ${SOURCE_ENV}"
log "Pod: ${POD_NAME}"
log "Database: ${DBNAME}"
log "File di backup: ${BACKUP_FILE}"
# Check if namespace exists
if ! kubectl get namespace "${SOURCE_ENV}" &>/dev/null; then
error "Namespace '${SOURCE_ENV}' non trovato"
fi
# Check if pod exists
if ! kubectl get pod "${POD_NAME}" -n "${SOURCE_ENV}" &>/dev/null; then
error "Pod '${POD_NAME}' non trovato nel namespace '${SOURCE_ENV}'"
fi
# Check if pod is running
POD_STATUS=$(kubectl get pod "${POD_NAME}" -n "${SOURCE_ENV}" -o jsonpath='{.status.phase}')
if [ "${POD_STATUS}" != "Running" ]; then
error "Pod '${POD_NAME}' non è in stato Running (stato attuale: ${POD_STATUS})"
fi
log "Creazione backup sul pod..."
# Create backup on remote pod
if [ "${COMPRESSION}" = "true" ]; then
kubectl exec -i "${POD_NAME}" \
-c "${CONTAINER_NAME}" \
-n "${SOURCE_ENV}" \
-- pg_dump -U postgres -d "${DBNAME}" -F "${DUMP_FORMAT}" -b -v | gzip > "${BACKUP_LOCAL_DIR}/${BACKUP_FILE}" || error "Backup fallito"
else
kubectl exec -i "${POD_NAME}" \
-c "${CONTAINER_NAME}" \
-n "${SOURCE_ENV}" \
-- pg_dump -U postgres -d "${DBNAME}" -F "${DUMP_FORMAT}" -b -v > "${BACKUP_LOCAL_DIR}/${BACKUP_FILE}" || error "Backup fallito"
fi
log "Backup completato"
# Verify file exists and has content
if [ ! -f "${BACKUP_LOCAL_DIR}/${BACKUP_FILE}" ]; then
error "File di backup non trovato: ${BACKUP_LOCAL_DIR}/${BACKUP_FILE}"
fi
FILE_SIZE=$(du -h "${BACKUP_LOCAL_DIR}/${BACKUP_FILE}" | cut -f1)
if [ -z "${FILE_SIZE}" ] || [ "${FILE_SIZE}" = "0" ]; then
error "File di backup vuoto o non valido"
fi
log "✅ Backup completato con successo"
log "Percorso: ${BACKUP_LOCAL_DIR}/${BACKUP_FILE}"
log "Dimensione: ${FILE_SIZE}"
log "Inizio trasferimento file di backup su server remoto..."
if sshpass -p "POC-25_sts" scp "${BACKUP_LOCAL_DIR}/${BACKUP_FILE}" barucci@10.20.1.101:/home/barucci/froms/; then
log "✅ File trasferito con successo su 10.20.1.101"
log "Destinazione: barucci@10.20.1.101:/home/barucci/froms/${BACKUP_FILE}"
else
warn "Trasferimento file fallito, ma backup locale è disponibile in ${BACKUP_LOCAL_DIR}/${BACKUP_FILE}"
fi
+773
View File
@@ -0,0 +1,773 @@
#!/bin/bash
################################################################################
# Script: clone-and-transform.sh
# Description: Clone GitLab repository using private token and apply
# string substitutions from transform.env
# Usage: ./clone-and-transform.sh <gitlab-url> <token> <repo-path> <dest-dir>
################################################################################
set -e # Exit on error
# Color codes for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Function to print colored output
print_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
# Function to display usage
usage() {
cat << EOF
Usage: $0 [OPTIONS]
OPTIONS:
-u, --url <URL> GitLab API base URL (e.g., https://gitlab.com)
-t, --token <TOKEN> Private access token
-r, --repo <REPO-PATH> Repository path (e.g., group/project)
-d, --dest <DEST-DIR> Destination directory for clone / transformation source
-f, --transform <FILE> Path to transform.env file (default: ./transform.env)
--gitea-repo <REPO-PATH> Repository path to clone from Gitea (default: same as --repo)
-transformation Skip GitLab clone; run Gitea clone + transform + commit/push
-h, --help Show this help message
Example:
$0 -u https://gitlab.com -t glpat-xxxxx -r mygroup/myproject -d ./cloned-repo
$0 -transformation -d ./existing-repo --gitea-repo mygroup/myproject -f ./transform.env
EOF
exit 1
}
# Default values
GITLAB_URL=""
PRIVATE_TOKEN=""
REPO_PATH=""
DEST_DIR=""
TRANSFORM_FILE="./transform.env"
GITEA_URL="https://git.italiadatacenter.com"
GITEA_TOKEN="65fc5f07365bd3f89c5b9ddca3d2d2e7b3777a88"
GITEA_REPO_PATH=""
GITEA_DEST_DIR="target-repo"
TRANSFORMATION_ONLY=false
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
-u|--url)
GITLAB_URL="$2"
shift 2
;;
-t|--token)
PRIVATE_TOKEN="$2"
shift 2
;;
-r|--repo)
REPO_PATH="$2"
shift 2
;;
-d|--dest)
DEST_DIR="$2"
shift 2
;;
-f|--transform)
TRANSFORM_FILE="$2"
shift 2
;;
--gitea-repo)
GITEA_REPO_PATH="$2"
shift 2
;;
-transformation)
TRANSFORMATION_ONLY=true
shift
;;
-h|--help)
usage
;;
*)
print_error "Unknown option: $1"
usage
;;
esac
done
# Validate required parameters
if [[ "$TRANSFORMATION_ONLY" == true ]]; then
if [[ -z "$DEST_DIR" ]]; then
print_error "Missing required parameter: --dest"
usage
fi
else
if [[ -z "$GITLAB_URL" ]] || [[ -z "$PRIVATE_TOKEN" ]] || [[ -z "$REPO_PATH" ]] || [[ -z "$DEST_DIR" ]]; then
print_error "Missing required parameters"
usage
fi
fi
# Check if transform.env exists
if [[ ! -f "$TRANSFORM_FILE" ]]; then
print_error "Transform file not found: $TRANSFORM_FILE"
exit 1
fi
# Validate transform.env format
if ! grep -Eq '^[[:space:]]*[^#[:space:]].*===.*$' "$TRANSFORM_FILE"; then
print_error "Transform file format invalid. Expected: <old_string>===<new_string>"
exit 1
fi
if [[ "$TRANSFORMATION_ONLY" == true ]]; then
print_info "Mode: transformation only (GitLab clone skipped)"
else
print_info "Starting GitLab repository clone and transformation..."
print_info "GitLab URL: $GITLAB_URL"
print_info "Repository: $REPO_PATH"
fi
print_info "Destination: $DEST_DIR"
print_info "Transform file: $TRANSFORM_FILE"
print_info "Gitea instance: $GITEA_URL"
print_info "Gitea destination: $GITEA_DEST_DIR"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
HTTPROUTE_TEMPLATE_FILE="$SCRIPT_DIR/httproute.yaml"
if [[ "$TRANSFORMATION_ONLY" == false ]]; then
# Build repository URLs
BASE_URL="${GITLAB_URL%/}"
if [[ ! "$BASE_URL" =~ ^https?:// ]]; then
print_error "GitLab URL must start with http:// or https://"
exit 1
fi
TARGET_REPO_URL="${BASE_URL}/${REPO_PATH}.git"
AUTH_REPO_URL="$(printf '%s\n' "$TARGET_REPO_URL" | sed -E "s#^(https?://)#\\1oauth2:${PRIVATE_TOKEN}@#")"
# Always use a fresh clone to avoid stale/outdated repository state
if [[ -e "$DEST_DIR" ]]; then
if [[ -z "$DEST_DIR" || "$DEST_DIR" == "/" || "$DEST_DIR" == "." ]]; then
print_error "Refusing to remove unsafe destination path: $DEST_DIR"
exit 1
fi
print_info "Destination already exists, removing it before clone: $DEST_DIR"
rm -rf -- "$DEST_DIR"
fi
print_info "Cloning repository..."
print_info "Running: git clone $(printf '%s' "$AUTH_REPO_URL" | sed -E 's#(https?://)[^@]+@#\1***@#') $DEST_DIR"
GIT_TERMINAL_PROMPT=0 git clone --quiet "$AUTH_REPO_URL" "$DEST_DIR" 2>/dev/null || {
print_error "Failed to clone repository"
print_info "Ensure your token has 'api' or 'read_repository' scope"
exit 1
}
print_info "Repository cloned successfully"
fi # end TRANSFORMATION_ONLY skip
# Clone additional repository from Gitea into target-repo
if [[ -z "$GITEA_REPO_PATH" ]]; then
GITEA_REPO_PATH="$REPO_PATH"
fi
GITEA_BASE_URL="${GITEA_URL%/}"
if [[ ! "$GITEA_BASE_URL" =~ ^https?:// ]]; then
print_error "Gitea URL must start with http:// or https://"
exit 1
fi
GITEA_TARGET_REPO_URL="${GITEA_BASE_URL}/${GITEA_REPO_PATH}.git"
GITEA_AUTH_REPO_URL="$(printf '%s\n' "$GITEA_TARGET_REPO_URL" | sed -E "s#^(https?://)#\\1${GITEA_TOKEN}@#")"
if [[ -e "$GITEA_DEST_DIR" ]]; then
if [[ -z "$GITEA_DEST_DIR" || "$GITEA_DEST_DIR" == "/" || "$GITEA_DEST_DIR" == "." ]]; then
print_error "Refusing to remove unsafe destination path: $GITEA_DEST_DIR"
exit 1
fi
print_info "Gitea destination already exists, removing it before clone: $GITEA_DEST_DIR"
rm -rf -- "$GITEA_DEST_DIR"
fi
print_info "Cloning additional repository from Gitea..."
print_info "Running: git clone $(printf '%s' "$GITEA_AUTH_REPO_URL" | sed -E 's#(https?://)[^@]+@#\1***@#') $GITEA_DEST_DIR"
GIT_TERMINAL_PROMPT=0 git clone --quiet "$GITEA_AUTH_REPO_URL" "$GITEA_DEST_DIR" 2>/dev/null || {
print_error "Failed to clone additional Gitea repository"
print_info "Check Gitea token permissions and repository path"
exit 1
}
print_info "Additional Gitea repository cloned successfully"
# In transformation-only mode, seed DEST_DIR from the freshly cloned Gitea repo
if [[ "$TRANSFORMATION_ONLY" == true ]]; then
if [[ -e "$DEST_DIR" ]]; then
if [[ -z "$DEST_DIR" || "$DEST_DIR" == "/" || "$DEST_DIR" == "." ]]; then
print_error "Refusing to remove unsafe destination path: $DEST_DIR"
exit 1
fi
print_info "Removing existing DEST_DIR before seeding from Gitea: $DEST_DIR"
rm -rf -- "$DEST_DIR"
fi
print_info "Copying Gitea clone ($GITEA_DEST_DIR) -> $DEST_DIR ..."
cp -R "$GITEA_DEST_DIR" "$DEST_DIR"
print_info "Copy completed"
fi
# Check if target directories exist
DIRS_TO_PROCESS=("kubernetes" "container" "conf" "envs")
FOUND_DIRS=()
for dir in "${DIRS_TO_PROCESS[@]}"; do
if [[ -d "$DEST_DIR/$dir" ]]; then
FOUND_DIRS+=("$dir")
print_info "Found directory: $dir"
fi
done
# Also search for envs directories nested in subdirectories
while IFS= read -r envs_abs; do
envs_rel="${envs_abs#${DEST_DIR}/}"
# Skip top-level envs (already handled above)
if [[ "$envs_rel" != "envs" ]]; then
FOUND_DIRS+=("$envs_rel")
print_info "Found nested envs directory: $envs_rel"
fi
done < <(find "$DEST_DIR" -mindepth 2 -type d -name "envs" 2>/dev/null)
if [[ ${#FOUND_DIRS[@]} -eq 0 ]]; then
print_warning "No target directories (kubernetes/container/conf/envs) found in cloned repository"
fi
# Function to apply transformations to a file
apply_transformations() {
local file="$1"
local temp_file
local changes=0
temp_file="$(mktemp "${file}.tmp.XXXXXX")"
# Create a copy
cp "$file" "$temp_file"
# Apply each transformation from transform.env (format: old_string===new_string)
while IFS= read -r line || [[ -n "$line" ]]; do
# Skip empty lines and comments
[[ -z "$line" ]] && continue
[[ "$line" =~ ^[[:space:]]*# ]] && continue
[[ "$line" != *"==="* ]] && continue
local old_string new_string
old_string="${line%%===*}"
new_string="${line#*===}"
# Trim whitespace
old_string=$(echo "$old_string" | xargs)
new_string=$(echo "$new_string" | xargs)
# Check if substitution would occur
if grep -Fq -- "$old_string" "$temp_file" 2>/dev/null; then
# Use sed with proper escaping for replacement
local old_escaped new_escaped
old_escaped=$(printf '%s\n' "$old_string" | sed 's/[&|\\]/\\&/g')
new_escaped=$(printf '%s\n' "$new_string" | sed 's/[&|\\]/\\&/g')
sed -i "s|${old_escaped}|${new_escaped}|g" "$temp_file"
changes=$((changes + 1))
fi
done < "$TRANSFORM_FILE"
# Compare and update if changes were made
if ! diff -q "$file" "$temp_file" > /dev/null 2>&1; then
mv "$temp_file" "$file"
return 0
else
rm "$temp_file"
return 1
fi
}
# Function to apply automatic placeholder transformation: %string% -> <string>
apply_placeholder_transformations() {
local file="$1"
local temp_file
temp_file="$(mktemp "${file}.tmp.XXXXXX")"
cp "$file" "$temp_file"
# Convert placeholders enclosed in %...% to <...>
sed -i -E 's/%([^%]+)%/<\1>/g' "$temp_file"
if ! diff -q "$file" "$temp_file" > /dev/null 2>&1; then
mv "$temp_file" "$file"
return 0
else
rm "$temp_file"
return 1
fi
}
# Apply transformations to files in target directories
print_info "Applying transformations from $TRANSFORM_FILE..."
total_files=0
modified_files=0
for dir in "${FOUND_DIRS[@]}"; do
target_path="$DEST_DIR/$dir"
print_info "Processing directory: $dir"
# Find all files in the directory and its subdirectories
while IFS= read -r file; do
total_files=$((total_files + 1))
# Skip binary files
if file "$file" | grep -q "binary"; then
print_warning "Skipping binary file: $file"
continue
fi
if apply_transformations "$file"; then
print_info " Modified: $file"
modified_files=$((modified_files + 1))
fi
done < <(find "$target_path" -type f 2>/dev/null)
done
# Apply automatic %string% -> <string> transformation to all files in target directory
print_info "Applying automatic placeholder transformation (%...% -> <...>) in $DEST_DIR..."
placeholder_total_files=0
placeholder_modified_files=0
while IFS= read -r file; do
placeholder_total_files=$((placeholder_total_files + 1))
# Skip binary files
if file "$file" | grep -q "binary"; then
print_warning "Skipping binary file: $file"
continue
fi
if apply_placeholder_transformations "$file"; then
print_info " Placeholder updated: $file"
placeholder_modified_files=$((placeholder_modified_files + 1))
fi
done < <(find "$DEST_DIR" -type f 2>/dev/null)
# Post-transformation directory operations on DEST_DIR
if [[ "$TRANSFORMATION_ONLY" == false ]]; then
print_info "Applying post-transformation directory operations on $DEST_DIR..."
# 1) Rename container -> containers
if [[ -d "$DEST_DIR/container" ]]; then
mv -- "$DEST_DIR/container" "$DEST_DIR/containers"
print_info "Renamed: container -> containers"
else
print_warning "Directory not found, skipping rename: $DEST_DIR/container"
fi
# 2) Rename conf -> env (fail if env already exists)
if [[ -d "$DEST_DIR/conf" ]]; then
if [[ -e "$DEST_DIR/env" ]]; then
print_error "Cannot rename conf -> env: destination $DEST_DIR/env already exists"
exit 1
fi
mv -- "$DEST_DIR/conf" "$DEST_DIR/env"
print_info "Renamed: conf -> env"
else
print_warning "Directory not found, skipping rename: $DEST_DIR/conf"
fi
# 3) Remove .git directory
if [[ -d "$DEST_DIR/.git" ]]; then
rm -rf -- "$DEST_DIR/.git"
print_info "Removed: $DEST_DIR/.git"
else
print_warning "Directory not found, skipping removal: $DEST_DIR/.git"
fi
# 4) Remove .gitlab-ci.yml
if [[ -f "$DEST_DIR/.gitlab-ci.yml" ]]; then
rm -f -- "$DEST_DIR/.gitlab-ci.yml"
print_info "Removed: $DEST_DIR/.gitlab-ci.yml"
else
print_warning "File not found, skipping removal: $DEST_DIR/.gitlab-ci.yml"
fi
# Summary
echo ""
print_info "========== TRANSFORMATION SUMMARY =========="
echo "Total files processed: $total_files"
echo "Files modified: $modified_files"
echo "Placeholder files scanned: $placeholder_total_files"
echo "Placeholder files modified: $placeholder_modified_files"
print_info "=========================================="
if [[ $modified_files -gt 0 ]]; then
print_info "Transformation completed successfully!"
else
print_warning "No files were modified. Check transform.env contents and patterns."
fi
# Rename configuration.txt -> values.env under env directory
if [[ -d "$DEST_DIR/env" ]]; then
print_info "Rinomino configuration.txt -> values.env in $DEST_DIR/env ..."
while IFS= read -r f; do
target_path="$(dirname "$f")/values.env"
mv -- "$f" "$target_path"
print_info " Renamed: $f -> $target_path"
done < <(find "$DEST_DIR/env" -type f -name "configuration.txt")
else
print_warning "Directory $DEST_DIR/env non trovata, skip rename configuration.txt"
fi
# Move env/configuration.env to DEST_DIR root as properties.env
if [[ -f "$DEST_DIR/env/configuration.env" ]]; then
if [[ -f "$DEST_DIR/properties.env" ]]; then
rm -f -- "$DEST_DIR/properties.env"
print_info "Removed existing file: $DEST_DIR/properties.env"
fi
mv -- "$DEST_DIR/env/configuration.env" "$DEST_DIR/properties.env"
print_info "Moved: $DEST_DIR/env/configuration.env -> $DEST_DIR/properties.env"
else
print_warning "File non trovato, skip move: $DEST_DIR/env/configuration.env"
fi
# If an Ingress resource exists in kubernetes YAMLs, generate httproute.yaml from template
# and remove Ingress resource definitions from manifests.
K8S_DIR="$DEST_DIR/kubernetes"
if [[ -d "$K8S_DIR" ]]; then
print_info "Checking Kubernetes manifests for Ingress resources in $K8S_DIR ..."
ingress_found=false
service_name=""
ingress_service_name=""
ingress_port=""
while IFS= read -r -d '' k8s_file; do
if [[ -z "$service_name" ]]; then
service_name="$(awk '
/^[[:space:]]*kind:[[:space:]]*Service([[:space:]]|$)/ { in_service=1; next }
in_service && /^[[:space:]]*kind:[[:space:]]*/ { in_service=0 }
in_service && /^[[:space:]]*name:[[:space:]]*/ {
value=$0
sub(/^[[:space:]]*name:[[:space:]]*/, "", value)
gsub(/[[:space:]]+$/, "", value)
print value
exit
}
' "$k8s_file")"
fi
if grep -Eq '^[[:space:]]*kind:[[:space:]]*Ingress([[:space:]]|$)' "$k8s_file"; then
ingress_found=true
if [[ -z "$ingress_port" ]]; then
ingress_port="$(awk '
/^[[:space:]]*kind:[[:space:]]*Ingress([[:space:]]|$)/ { in_ingress=1; next }
in_ingress && /^[[:space:]]*kind:[[:space:]]*/ { in_ingress=0 }
in_ingress && /^[[:space:]]*number:[[:space:]]*[0-9]+/ {
value=$0
sub(/.*number:[[:space:]]*/, "", value)
gsub(/[^0-9].*$/, "", value)
print value
exit
}
' "$k8s_file")"
fi
if [[ -z "$ingress_service_name" ]]; then
ingress_service_name="$(awk '
/^[[:space:]]*kind:[[:space:]]*Ingress([[:space:]]|$)/ { in_ingress=1; next }
in_ingress && /^[[:space:]]*kind:[[:space:]]*/ { in_ingress=0 }
in_ingress && /^[[:space:]]*name:[[:space:]]*/ {
value=$0
sub(/^[[:space:]]*name:[[:space:]]*/, "", value)
gsub(/[[:space:]]+$/, "", value)
print value
exit
}
' "$k8s_file")"
fi
fi
done < <(find "$K8S_DIR" -type f \( -name "*.yaml" -o -name "*.yml" \) -print0)
if [[ "$ingress_found" == true ]]; then
if [[ ! -f "$HTTPROUTE_TEMPLATE_FILE" ]]; then
print_error "HTTPRoute template not found: $HTTPROUTE_TEMPLATE_FILE"
exit 1
fi
if [[ -z "$service_name" ]]; then
service_name="$ingress_service_name"
fi
if [[ -z "$service_name" ]]; then
print_error "Cannot create HTTPRoute: service name not found in Kubernetes YAML"
exit 1
fi
if [[ -z "$ingress_port" ]]; then
print_error "Cannot create HTTPRoute: ingress port number not found in Kubernetes YAML"
exit 1
fi
httproute_output="$K8S_DIR/httproute.yaml"
sed -e "s|<svc-name>|$service_name|g" -e "s|<port>|$ingress_port|g" "$HTTPROUTE_TEMPLATE_FILE" > "$httproute_output"
print_info "Created HTTPRoute file: $httproute_output"
while IFS= read -r -d '' k8s_file; do
temp_k8s_file="$(mktemp "${k8s_file}.tmp.XXXXXX")"
awk '
function flush_doc() {
if (!doc_started) {
return
}
if (!doc_is_ingress) {
if (output_count > 0) {
printf "---\n"
}
printf "%s", doc
output_count++
}
doc = ""
doc_started = 0
doc_is_ingress = 0
}
/^[[:space:]]*---[[:space:]]*$/ {
flush_doc()
next
}
{
doc_started = 1
doc = doc $0 "\n"
if ($0 ~ /^[[:space:]]*kind:[[:space:]]*Ingress([[:space:]]|$)/) {
doc_is_ingress = 1
}
}
END {
flush_doc()
}
' "$k8s_file" > "$temp_k8s_file"
if [[ ! -s "$temp_k8s_file" ]]; then
rm -f -- "$k8s_file"
rm -f -- "$temp_k8s_file"
print_info "Removed ingress-only manifest file: $k8s_file"
else
mv -- "$temp_k8s_file" "$k8s_file"
fi
done < <(find "$K8S_DIR" -type f \( -name "*.yaml" -o -name "*.yml" \) -print0)
print_info "Ingress resource definitions removed from Kubernetes manifests"
else
print_info "No Ingress resource found in Kubernetes manifests"
fi
# If a PersistentVolume resource exists in kubernetes YAMLs,
# remove PersistentVolume resource definitions from manifests.
pv_found=false
while IFS= read -r -d '' k8s_file; do
if grep -Eq '^[[:space:]]*kind:[[:space:]]*PersistentVolume([[:space:]]|$)' "$k8s_file"; then
pv_found=true
break
fi
done < <(find "$K8S_DIR" -type f \( -name "*.yaml" -o -name "*.yml" \) -print0)
if [[ "$pv_found" == true ]]; then
print_info "PersistentVolume resources found, removing from Kubernetes manifests ..."
while IFS= read -r -d '' k8s_file; do
temp_k8s_file="$(mktemp "${k8s_file}.tmp.XXXXXX")"
awk '
function flush_doc() {
if (!doc_started) {
return
}
if (!doc_is_pv) {
if (output_count > 0) {
printf "---\n"
}
printf "%s", doc
output_count++
}
doc = ""
doc_started = 0
doc_is_pv = 0
}
/^[[:space:]]*---[[:space:]]*$/ {
flush_doc()
next
}
{
doc_started = 1
doc = doc $0 "\n"
if ($0 ~ /^[[:space:]]*kind:[[:space:]]*PersistentVolume([[:space:]]|$)/) {
doc_is_pv = 1
}
}
END {
flush_doc()
}
' "$k8s_file" > "$temp_k8s_file"
if [[ ! -s "$temp_k8s_file" ]]; then
rm -f -- "$k8s_file"
rm -f -- "$temp_k8s_file"
print_info "Removed persistent-volume-only manifest file: $k8s_file"
else
mv -- "$temp_k8s_file" "$k8s_file"
fi
done < <(find "$K8S_DIR" -type f \( -name "*.yaml" -o -name "*.yml" \) -print0)
print_info "PersistentVolume resource definitions removed from Kubernetes manifests"
else
print_info "No PersistentVolume resource found in Kubernetes manifests"
fi
# Normalize line endings to LF for kubernetes manifests.
while IFS= read -r -d '' k8s_file; do
sed -i 's/\r$//' "$k8s_file"
done < <(find "$K8S_DIR" -type f \( -name "*.yaml" -o -name "*.yml" \) -print0)
print_info "Normalized line endings to LF for Kubernetes YAML files"
else
print_warning "Directory not found, skipping Kubernetes ingress conversion: $K8S_DIR"
fi
# Conditional directory restructuring: check if src/ and containers/ exist,
# and if containers/ has exactly 1 subdirectory
print_info "Checking conditions for directory restructuring..."
SRC_PATH="$DEST_DIR/src"
CONTAINERS_PATH="$DEST_DIR/containers"
RESTRUCTURE=false
CONTAINERS_SUBDIR=""
if [[ -d "$SRC_PATH" ]]; then
print_info " ✓ Found: $SRC_PATH"
if [[ -d "$CONTAINERS_PATH" ]]; then
print_info " ✓ Found: $CONTAINERS_PATH"
# Count subdirectories in containers/
subdir_count=0
subdirs=()
while IFS= read -r subdir; do
subdirs+=("$subdir")
subdir_count=$((subdir_count + 1))
done < <(find "$CONTAINERS_PATH" -mindepth 1 -maxdepth 1 -type d)
if [[ $subdir_count -eq 1 ]]; then
CONTAINERS_SUBDIR="${subdirs[0]##*/}" # Extract basename
print_info " ✓ Found exactly 1 subdirectory in containers: $CONTAINERS_SUBDIR"
RESTRUCTURE=true
elif [[ $subdir_count -eq 0 ]]; then
print_warning " ✗ No subdirectories found in $CONTAINERS_PATH"
else
print_warning " ✗ Found $subdir_count subdirectories in $CONTAINERS_PATH (expected 1)"
fi
else
print_warning " ✗ Directory not found: $CONTAINERS_PATH"
fi
else
print_warning " ✗ Directory not found: $SRC_PATH"
fi
if [[ "$RESTRUCTURE" == true ]]; then
print_info "========== STARTING CONDITIONAL DIRECTORY RESTRUCTURING =========="
print_info "Target subdirectory name: $CONTAINERS_SUBDIR"
# 1) Rename src -> _src
if [[ -d "$SRC_PATH" ]]; then
mv -- "$SRC_PATH" "$DEST_DIR/_src"
print_info "Step 1/6: Renamed src -> _src"
fi
# 2) Create src/<containers_subdir>/
mkdir -p "$DEST_DIR/src/$CONTAINERS_SUBDIR"
print_info "Step 2/6: Created directory src/$CONTAINERS_SUBDIR"
# 3) Move _src -> src/<containers_subdir>/
mv -- "$DEST_DIR/_src" "$DEST_DIR/src/$CONTAINERS_SUBDIR/_src"
print_info "Step 3/6: Moved _src -> src/$CONTAINERS_SUBDIR/_src"
# 4) Rename _src -> src (within src/<containers_subdir>/)
mv -- "$DEST_DIR/src/$CONTAINERS_SUBDIR/_src" "$DEST_DIR/src/$CONTAINERS_SUBDIR/src"
print_info "Step 4/6: Renamed _src -> src/$CONTAINERS_SUBDIR/src"
# 5) Move *.json, *.js, .prettierrc from root to src/<containers_subdir>/
print_info "Step 5/6: Moving files from root to src/$CONTAINERS_SUBDIR/..."
# Move *.json files
while IFS= read -r json_file; do
if [[ -f "$json_file" ]]; then
mv -- "$json_file" "$DEST_DIR/src/$CONTAINERS_SUBDIR/"
print_info " Moved: $(basename "$json_file") -> src/$CONTAINERS_SUBDIR/"
fi
done < <(find "$DEST_DIR" -maxdepth 1 -type f -name "*.json")
# Move *.js files
while IFS= read -r js_file; do
if [[ -f "$js_file" ]]; then
mv -- "$js_file" "$DEST_DIR/src/$CONTAINERS_SUBDIR/"
print_info " Moved: $(basename "$js_file") -> src/$CONTAINERS_SUBDIR/"
fi
done < <(find "$DEST_DIR" -maxdepth 1 -type f -name "*.js")
# Move .prettierrc if exists
if [[ -f "$DEST_DIR/.prettierrc" ]]; then
mv -- "$DEST_DIR/.prettierrc" "$DEST_DIR/src/$CONTAINERS_SUBDIR/"
print_info " Moved: .prettierrc -> src/$CONTAINERS_SUBDIR/"
fi
# 6) Move envs/ directory if exists
if [[ -d "$DEST_DIR/envs" ]]; then
mv -- "$DEST_DIR/envs" "$DEST_DIR/src/$CONTAINERS_SUBDIR/"
print_info "Step 6/6: Moved envs directory -> src/$CONTAINERS_SUBDIR/envs"
else
print_warning "Step 6/6: envs directory not found at root, skipping move"
fi
print_info "========== DIRECTORY RESTRUCTURING COMPLETED SUCCESSFULLY =========="
else
print_info "Directory restructuring conditions not met, skipping directory reorganization"
fi
fi # end TRANSFORMATION_ONLY skip for directory operations
# Copy transformed content from source repo to target repo
print_info "Copying transformed content: $DEST_DIR -> $GITEA_DEST_DIR ..."
cp -R "./${DEST_DIR}/." "./${GITEA_DEST_DIR}/"
print_info "Copy completed"
# Commit and push changes on target Gitea repository with skip CI/CD marker
print_info "Preparing commit and push in $GITEA_DEST_DIR ..."
git -C "$GITEA_DEST_DIR" add -A
if git -C "$GITEA_DEST_DIR" diff --cached --quiet; then
print_warning "No changes detected in $GITEA_DEST_DIR, skipping commit and push"
else
COMMIT_MESSAGE="chore: sync transformed content [skip ci]"
git -C "$GITEA_DEST_DIR" commit -m "$COMMIT_MESSAGE"
git -C "$GITEA_DEST_DIR" push
print_info "Commit and push completed"
fi
exit 0
+18
View File
@@ -0,0 +1,18 @@
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: httproute2
spec:
hostnames:
- <endpoint>
parentRefs:
- name: main-gateway
namespace: nginx-gateway
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: <svc-name
port: 80
+2
View File
@@ -0,0 +1,2 @@
delete from campionati_ftp;
insert into campionati_ftp (knrtcx,ktipax,ksgtcl,ksgtcx,kdetcx,id,prov,reg,kris7x,israg,c5,refertodigitale) select knrtcx,ktipax,ksgtcl,ksgtcx,kdetcx,id,prov,reg,kris7x,israg,c5,refertodigitale from dblink('dbname=pgare','select * from siglecampionati') AS campionati(knrtcx character(16),ktipax text,ksgtcl text,ksgtcx text,kdetcx text,id integer,prov character(32),reg character(36),kris7x text,israg boolean,c5 boolean,refertodigitale boolean);
+2
View File
@@ -0,0 +1,2 @@
delete from companies_ftp;
insert into companies_ftp(scoso,scomo,scomi,scomc,scomf,ssigl,sdeno,sind2,scaps,slocr,spvre,scapc,sloco,steds,stepr,stesr,scapo,sfaxs,stelx,spiva,snatu,ssito,smail,spresc,spresn,f0dei,f0ini,f0loi,f9coi,f0prv,f0cap,scosop,stid) select * from dblink('dbname=pgare','select scoso,scomo,scomi,scomc,scomf,ssigl,sdeno,sind2,scaps,slocr,spvre,scapc,sloco,steds,stepr,stesr,scapo,sfaxs,stelx,spiva,snatu,ssito,smail,spresc,spresn,f0dei,f0ini,f0loi,f9coi,f0prv,f0cap,scosop,stid from anagrafe') AS anagrafe(scoso integer,scomo text,scomi text,scomc text,scomf text,ssigl text,sdeno text,sind2 text,scaps text,slocr text,spvre text,scapc text,sloco text,steds text,stepr text,stesr text,scapo text,sfaxs text,stelx text,spiva text,snatu text,ssito text,smail text,spresc text,spresn text,f0dei text,f0ini text,f0loi text,f9coi text,f0prv text,f0cap text,scosop integer,stid integer);
+6
View File
@@ -0,0 +1,6 @@
#
# m h dom mon dow command
0 5 * * * /home/gitlab-runner/dockeclean.sh
0 * * * * /project/inbound_figc/journal_old2new.sh > /project/inbound_figc/journal_old2new.out
30 4 * * * /project/inbound_figc/mainload.sh > /project/inbound_figc/loadmain.out
0 3 * * * /project/inbound_figc/backup.sh > /project/inbound_figc/backup.out
+1
View File
@@ -0,0 +1 @@
SELECT "aaagare"();
+11
View File
@@ -0,0 +1,11 @@
userid="sportftp"
password="\$porteams2019"
ftp -n 212.77.67.140 << EOFTP >ftpget.$$
user $userid $password
prompt
cd files
mget *.csv
quit
EOFTP
+14
View File
@@ -0,0 +1,14 @@
delete from journal_ftp;
insert into journal_ftp(id,chi,quando,idp,ida,ora,data,idc) select * from dblink('dbname=pgare','select id,chi,quando,idp,ida,ora,data,idc from vjournal') AS journal(id integer,chi numeric,quando timestamp,idp integer,ida integer,ora text,data date,idc varchar);
insert into journal_figc(id_utente_modificatore,matricola_figc_sq_modificatrice,created_at,id_partita,id_azione,orario,data,matricola_impianto_figc,azione_annullata,id_old)
select
null as id_utente_modificatore,
null as matricola_figc_sq_modificatrice,
j.quando as created_at,
p.id as id_partita,
j.ida as id_azione,
j.ora::time as orario,
j.data as data,
idc as matricola_impianto_figc,
false as azione_annullata,j.id
from journal_ftp j,partite_figc p where j.idp=p.id_partita_ftp and j.id not in(select id_old from journal_figc) order by j.id;
+12
View File
@@ -0,0 +1,12 @@
insert into journal_figc(id_utente_modificatore,matricola_figc_sq_modificatrice,created_at,id_partita,id_azione,orario,data,matricola_impianto_figc,azione_annullata,id_old)
select
null as id_utente_modificatore,
null as matricola_figc_sq_modificatrice,
j.quando as created_at,
p.id as id_partita,
j.ida as id_azione,
j.ora::time as orario,
j.data as data,
idc as matricola_impianto_figc,
false as azione_annullata,j.id
from journal_ftp j,partite_figc p where j.idp=p.id_partita_ftp and j.id not in(select id_old from journal_figc) order by j.id;
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
. ./.profile
cd /project/inbound_figc
/usr/local/bin/kubectl cp journal.sql db/postgresql-1-postgresql-0:/etc/journal.sql -c postgresql-server
/usr/local/bin/kubectl exec -it postgresql-1-postgresql-0 -c postgresql-server -n db -- psql -U postgres -d gare -f /etc/journal.sql
+1
View File
@@ -0,0 +1 @@
insert into partite(idpf,ids) select distinct * from pgpartite2insert;
+30
View File
@@ -0,0 +1,30 @@
#!/bin/bash
sed -i "s/\"/ /g" $1
if [[ $2 == "cal" ]]
then
echo "strutr;r0cmp;r0gir;r0gio;r0anr;r0dai;r0ma1;r0ma2;r0no1;r0pu1;r0pu2;void1;void2;void3;void4;void5;void6;void7;r0imp;r0ori;void8"|cat - $1 > /tmp/out && mv /tmp/out $1"_int"
fi
if [[ $2 == "imp" ]]
then
echo "i0str;i0imp;i0dei;i0ini;i0loi;i0prv;void"|cat - $1 > /tmp/out && mv /tmp/out $1"_int"
fi
if [[ $2 == "ana" ]]
then
echo "SCOSO;SCOMO;SCOMI;SCOMC;SCOMF;SSIGL;SDENO;DESCA;X21;X23;X24;SPC01;SIND1;SIND2;SCAPS;SLOCR;SPVRE;SINC1;SINC2;SCAPC;SLOCO;SPVCO;STEDS;STEPR;STESR;SCAPO;SFAXS;STELX;SPIVA;SNATU;SSITO;SMAIL;SPRESC;SPRESN;F0DEI;F0INI;F0LOI;F9COI;F0PRV;F0CAP;C0DEI;C0INI;C0LOI;C9COI;C0PRV;C0CAP;D0DEI;D0INI;D0LOI;D9COI;D0PRV;D0CAP;SAT01;SAT02;SAT03;SAT04;SAT05;SAT06;SAT07;SAT08;SAT09;SAT10;void"|cat - $1 > /tmp/out && mv /tmp/out $1"_int"
fi
if [[ $2 == "cla" ]]
then
echo "REG;KSGTCL;GIRONE;IDSOC;PUNTI;GF;GS;GIOCATE;VINTE;PAREGGIATE;perse"|cat - $1 > /tmp/out && mv /tmp/out $1"_int"
fi
iconv -f iso-8859-1 -t UTF-8 $1"_int" -o $1"_int_utf8"
sed '1s/^\xEF\xBB\xBF//' < $1"_int_utf8" >$1"_int_utf8_nobom.csv"
sed -i '1s/^\xEF\xBB\xBF//' $1"_int_utf8"
View File
+15
View File
@@ -0,0 +1,15 @@
#!/bin/bash
cd /project/inbound_figc
kubectl cp cserc17f.csv_int_utf8_nobom.csv dbdev/postgresql-1-postgresql-0:/etc/cserc17f_2load_utf8_nobom.csv
kubectl cp cseri17f.csv_int_utf8_nobom.csv dbdev/postgresql-1-postgresql-0:/etc/cseri17f_2load_utf8_nobom.csv
kubectl cp csexc17f.csv_int_utf8_nobom.csv dbdev/postgresql-1-postgresql-0:/etc/csexc17f_2load_utf8_nobom.csv
kubectl cp csezc17f.csv_int_utf8_nobom.csv dbdev/postgresql-1-postgresql-0:/etc/csezc17f_2load_utf8_nobom.csv
#k cp csezc17f.csv_int_utf8_nobom.csv dbdev/postgresql-1-postgresql-0:/etc/csezc17f_2load_utf8_nobom.csv
kubectl cp gareload.sql dbdev/postgresql-1-postgresql-0:/etc/gareload.sql
kubectl exec -it postgresql-1-postgresql-0 -c postgresql-server -n dbdev -- psql -U postgres -d gare -f /etc/gareload.sql
#kubectl cp loadclub.sql db/postgresql-1-postgresql-0:/etc/loadclub.sql
#kubectl exec -it postgresql-1-postgresql-0 -c postgresql-server -n db -- psql -U postgres -d segdigi -f /etc/loadclub.sql
+2
View File
@@ -0,0 +1,2 @@
delete from partite_ftp;
insert into partite_ftp(id,strutr,r0cmp,r0gir,r0gio,r0anr,r0dai,r0ma1,r0ma2,r0pu1,r0pu2,r0cov,r0rdi,rfl0,r0imp,r0ori,color,data,valid) select * from dblink('dbname=pgare','select id,strutr,r0cmp,r0gir,r0gio,r0anr,r0dai,r0ma1,r0ma2,r0pu1,r0pu2,r0cov,r0rdi,r0fl0,r0imp,r0ori,color,data,valid from calendari') AS calendari(id integer, strutr integer,r0cmp character(8),r0gir character(8),r0gio character(8),r0anr character(3),r0dai character(6),r0ma1 integer,r0ma2 integer,r0pu1 character(3),r0pu2 character(3),r0cov character(3),r0rdi character(3),r0fl0 character(3),r0imp character(8),r0ori character(4),color character(10),data date,valid boolean);
+4
View File
@@ -0,0 +1,4 @@
SELECT "aaapgare"();
SELECT "aaapgare_imp"();
SELECT "aaapgare_ana"();
SELECT "aaacla"();
+162
View File
@@ -0,0 +1,162 @@
#!/bin/bash
set -Eeuo pipefail
# Configuration
TARGET_ENV="${1:-stsharedservices-dev}"
DBNAME="${2:-geco}"
POD_NAME="${3:-stpgclusterdev-1}"
CONTAINER_NAME="${4:-postgres}"
BACKUP_FILE="${5:-.}"
DROP_IF_EXISTS="${6:-true}"
DB_USER="${7:-${PGUSER:-postgres}}"
DB_PASSWORD="${8:-${PGPASSWORD:-}}"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# Logging functions
log() {
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $*"
}
error() {
echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] ERROR:${NC} $*" >&2
exit 1
}
warn() {
echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] WARN:${NC} $*"
}
info() {
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')] INFO:${NC} $*"
}
log "Inizio restore database PostgreSQL"
log "Namespace target: ${TARGET_ENV}"
log "Pod target: ${POD_NAME}"
log "Database: ${DBNAME}"
log "DB user: ${DB_USER}"
log "File backup: ${BACKUP_FILE}"
# Validate backup file exists
if [ ! -f "${BACKUP_FILE}" ]; then
error "File di backup non trovato: ${BACKUP_FILE}"
fi
FILE_SIZE=$(du -h "${BACKUP_FILE}" | cut -f1)
log "Dimensione file backup: ${FILE_SIZE}"
# Determine if backup is compressed
if [[ "${BACKUP_FILE}" == *.gz ]]; then
IS_COMPRESSED=true
info "Backup compresso (gzip) rilevato"
else
IS_COMPRESSED=false
info "Backup non compresso rilevato"
fi
# Check if namespace exists
if ! kubectl get namespace "${TARGET_ENV}" &>/dev/null; then
error "Namespace '${TARGET_ENV}' non trovato"
fi
# Check if pod exists
if ! kubectl get pod "${POD_NAME}" -n "${TARGET_ENV}" &>/dev/null; then
error "Pod '${POD_NAME}' non trovato nel namespace '${TARGET_ENV}'"
fi
# Check if pod is running
POD_STATUS=$(kubectl get pod "${POD_NAME}" -n "${TARGET_ENV}" -o jsonpath='{.status.phase}')
if [ "${POD_STATUS}" != "Running" ]; then
error "Pod '${POD_NAME}' non è in stato Running (stato attuale: ${POD_STATUS})"
fi
# Check database connectivity
info "Verifica connessione al database..."
if ! kubectl exec -i "${POD_NAME}" \
-c "${CONTAINER_NAME}" \
-n "${TARGET_ENV}" \
-- env "PGPASSWORD=${DB_PASSWORD}" pg_isready -U "${DB_USER}" -d "${DBNAME}" &>/dev/null; then
error "Impossibile connettersi a PostgreSQL nel pod '${POD_NAME}'"
fi
log "Connessione al database verificata"
# Drop database if requested
if [ "${DROP_IF_EXISTS}" = "true" ]; then
warn "Elimino il database '${DBNAME}' se esiste..."
kubectl exec -i "${POD_NAME}" \
-c "${CONTAINER_NAME}" \
-n "${TARGET_ENV}" \
-- env "PGPASSWORD=${DB_PASSWORD}" psql -U "${DB_USER}" -c "DROP DATABASE IF EXISTS \"${DBNAME}\" WITH (FORCE);" 2>/dev/null || warn "Database non esiste o elimina non è riuscita"
info "Creo nuovo database '${DBNAME}'..."
kubectl exec -i "${POD_NAME}" \
-c "${CONTAINER_NAME}" \
-n "${TARGET_ENV}" \
-- env "PGPASSWORD=${DB_PASSWORD}" psql -U "${DB_USER}" -c "CREATE DATABASE \"${DBNAME}\";" || error "Impossibile creare il database '${DBNAME}'"
fi
log "Inizio restore del database..."
# Execute restore
if [ "${IS_COMPRESSED}" = "true" ]; then
info "Decompressione e restore in corso..."
gunzip -c "${BACKUP_FILE}" | kubectl exec -i "${POD_NAME}" \
-c "${CONTAINER_NAME}" \
-n "${TARGET_ENV}" \
-- env "PGPASSWORD=${DB_PASSWORD}" pg_restore -U "${DB_USER}" -d "${DBNAME}" --no-owner -v 2>&1 | grep -E "(NOTICE|ERROR|completed)" || true
else
info "Restore da file plain SQL in corso..."
cat "${BACKUP_FILE}" | kubectl exec -i "${POD_NAME}" \
-c "${CONTAINER_NAME}" \
-n "${TARGET_ENV}" \
-- env "PGPASSWORD=${DB_PASSWORD}" psql -U "${DB_USER}" -d "${DBNAME}" -v ON_ERROR_STOP=1 2>&1 | grep -E "(NOTICE|ERROR|INSERT|CREATE)" | tail -20 || true
fi
log "Restore completato"
info "Allineo owner delle tabelle al proprietario del database target..."
TARGET_DB_OWNER=$(kubectl exec -i "${POD_NAME}" \
-c "${CONTAINER_NAME}" \
-n "${TARGET_ENV}" \
-- env "PGPASSWORD=${DB_PASSWORD}" psql -U "${DB_USER}" -d postgres -t -A -c "SELECT pg_get_userbyid(datdba) FROM pg_database WHERE datname='${DBNAME}';")
if [ -z "${TARGET_DB_OWNER}" ]; then
error "Impossibile determinare l'owner del database '${DBNAME}'"
fi
kubectl exec -i "${POD_NAME}" \
-c "${CONTAINER_NAME}" \
-n "${TARGET_ENV}" \
-- env "PGPASSWORD=${DB_PASSWORD}" psql -U "${DB_USER}" -d "${DBNAME}" -v ON_ERROR_STOP=1 -c "DO \$\$ DECLARE r RECORD; BEGIN FOR r IN SELECT n.nspname, c.relname FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN ('r', 'p') AND n.nspname NOT IN ('pg_catalog', 'information_schema') AND n.nspname NOT LIKE 'pg_toast%' LOOP EXECUTE format('ALTER TABLE %I.%I OWNER TO %I', r.nspname, r.relname, '${TARGET_DB_OWNER}'); END LOOP; END \$\$;" >/dev/null
log "Owner tabelle allineato a '${TARGET_DB_OWNER}'"
# Verify restore success
info "Verifica integrità database..."
TABLE_COUNT=$(kubectl exec -i "${POD_NAME}" \
-c "${CONTAINER_NAME}" \
-n "${TARGET_ENV}" \
-- env "PGPASSWORD=${DB_PASSWORD}" psql -U "${DB_USER}" -d "${DBNAME}" -t -c "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='public';" 2>/dev/null || echo "0")
if [ "${TABLE_COUNT}" -gt 0 ]; then
log "✅ Restore completato con successo"
log "Database '${DBNAME}' contiene ${TABLE_COUNT} tabelle"
else
warn "⚠️ Database '${DBNAME}' non contiene tabelle pubbliche (potrebbe essere empty)"
fi
# Get database size
DB_SIZE=$(kubectl exec -i "${POD_NAME}" \
-c "${CONTAINER_NAME}" \
-n "${TARGET_ENV}" \
-- env "PGPASSWORD=${DB_PASSWORD}" psql -U "${DB_USER}" -t -c "SELECT pg_size_pretty(pg_database_size('${DBNAME}'));" 2>/dev/null || echo "N/A")
log "Dimensione database: ${DB_SIZE}"
log "✅ Restore completato con successo"
+50
View File
@@ -0,0 +1,50 @@
#!/bin/bash
set -euo pipefail
# Launcher script for clone-and-transform.sh
# Fill all values below before running.
GITLAB_URL="https://gitlab.com"
GITLAB_TOKEN="glpat-E67BjdXoKvSEgHG31XZW0GM6MQpvOjEKdTozNzF5OQ8.01.171191k74"
GITLAB_REPO_PATH=$1
DEST_DIR="./work-repo"
TRANSFORM_FILE=$3
GITEA_REPO_PATH=$2
TRANSFORMATION_ONLY="${4:-false}"
#
#GITLAB_URL="https://gitlab.com"
#GITLAB_TOKEN="glpat-xxxxxxxxxxxxxxxxxxxx"
#GITLAB_REPO_PATH="group/project"
#DEST_DIR="./work-repo"
#TRANSFORM_FILE="./transform.env"
#GITEA_REPO_PATH="group/project"
# Set to "true" to skip GitLab clone and run only: Gitea clone + transform + commit/push
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
MAIN_SCRIPT="${SCRIPT_DIR}/clone-and-transform.sh"
if [[ ! -f "$MAIN_SCRIPT" ]]; then
echo "[ERROR] Main script not found: $MAIN_SCRIPT"
exit 1
fi
chmod +x "$MAIN_SCRIPT"
if [[ "$TRANSFORMATION_ONLY" == "true" ]]; then
"$MAIN_SCRIPT" \
-transformation \
--dest "$DEST_DIR" \
--transform "$TRANSFORM_FILE" \
--gitea-repo "$GITEA_REPO_PATH"
else
"$MAIN_SCRIPT" \
--url "$GITLAB_URL" \
--token "$GITLAB_TOKEN" \
--repo "$GITLAB_REPO_PATH" \
--dest "$DEST_DIR" \
--transform "$TRANSFORM_FILE" \
--gitea-repo "$GITEA_REPO_PATH"
fi
+49
View File
@@ -0,0 +1,49 @@
---1) creazione nuova org su gitea Sporteams
---2) crezione progetto stsharedservices
---3) deploy postregsdb su stsharedservices
---4) deploy rabbitmq su stsharedservices
---5) export db Geco
---6) import db Geco
---7) creazione progetti gecofe e gecobe
8) clonazione da analoghi st
9) deploy
kubectl cnpg hibernate on pg-athleteos -n athleteos-dev
stpgclusterdev-rw.stsharedservices-dev.svc.cluster.local
kubectl cnpg delete cluster stpgclusterdev
devVkn9tcHSxK7E
Backup
#!/bin/sh
source_env=dbdev
#target_env=dbqa
dbname=geco
backupfile=${dbname}.backup
#cd /shared/dbdata/sql
kubectl exec -it postgresql-1-postgresql-0 -c postgresql-server -n ${source_env} -- pg_dump -U postgres -d ${dbname} -F c -b -v -f /shared/backup/$backupfile
kubectl cp ${source_env}/postgresql-1-postgresql-0:/shared/backup/${backupfile} ${backupfile}
#mv $backupfile restore_${backupfile}
kubectl cp ${backupfile} ${target_env}/postgresql-1-postgresql-0:/tmp/restore_${backupfile}
kubectl exec -it postgresql-1-postgresql-0 -c postgresql-server -n ${target_env} -- psql -U postgres -c "drop database ${dbname}"
kubectl exec -it postgresql-1-postgresql-0 -c postgresql-server -n ${target_env} -- psql -U postgres -c "create database ${dbname}"
kubectl exec -it postgresql-1-postgresql-0 -c postgresql-server -n ${target_env} -- pg_restore -U postgres -d ${dbname} /tmp/restore_${backupfile}
scp geco-20260418-171917.backup.gz barucci@10.20.1.101:/root/work/fromst
iZmBf42AVzDtD8ZcA9pFvtIGX6cbg9VvzjE0Jd7LkZnplvpceCAYjLqQRr7Z7SsA
rabbitmqcluster.dbdev.svc.cluster.local=stmqclusterdev.stsharedservices-dev.svc.cluster.local
Binary file not shown.
+297
View File
@@ -0,0 +1,297 @@
namespace;tipo;nome;replicas;cpu_req_cores;mem_req_Mi
accessi-enba;deployments;stqrcodeapi;1;0,002;0
accessi-enbadev;deployments;stqrcodeapi;1;0,002;90
accessi-enbaqa;deployments;stqrcodeapi;0;0,002;62
accessi;deployments;nest;1;0,01;200
accessidev;deployments;nest;1;0,01;200
accessiqa;deployments;nest;0;0,01;200
adria;deployments;nginx;1;0,001;0
agimdev;deployments;allegati;0;0,01;200
agimdev;deployments;apigateway;0;0,01;200
agimdev;deployments;geocode;0;0,01;200
agimdev;deployments;postgrest;0;0;0
algoranddev;deployments;algo;0;0,01;100
allenamenti;deployments;nest;1;0,2;1024
allenamentidev;deployments;nest;1;0,1;512
allenamentiqa;deployments;nest;0;0,1;512
anagrafiche;deployments;nest;1;0,5;4096
anagrafichedev;deployments;nest;1;0,1;512
anagraficheqa;deployments;nest;0;0,1;512
cert-manager;deployments;cert-manager;1;0;0
cert-manager;deployments;cert-manager-cainjector;1;0;0
cert-manager;deployments;cert-manager-webhook;1;0;0
companies;deployments;nest;1;0,5;2048
companiesdev;deployments;nest;1;0,1;512
companiesqa;deployments;nest;0;0,1;512
convocazioni;deployments;nest;1;0,1;0
convocazionidev;deployments;nest;1;0,1;0
convocazioniqa;deployments;nest;0;0,1;0
db;deployments;adminer;1;0,002;0
db;deployments;filebrowser2;1;0,01;0
db;deployments;nfs-server;1;0,002;0
db;deployments;nginx;1;0,001;0
db;deployments;php;1;0,002;0
db;deployments;postgrestadmin;0;0;0
db;deployments;postgrestadminmatch;0;0;0
dbdev;deployments;filebrowser2;1;0,001;8
dbdev;deployments;nfs-server;1;0,002;186
dbdev;deployments;nginx;1;0,001;4
dbdev;deployments;php;1;0,002;8
dbqa;deployments;filebrowser2;0;0,1;0
dbqa;deployments;nfs-server;0;0,001;186
dbqa;deployments;nginx;0;0,001;7
dbqa;deployments;php;0;0,002;8
default;deployments;locust-master;0;0;0
default;deployments;locust-worker;0;0;0
demodev;deployments;nginx;2;0,01;100
dev;deployments;nginx;0;0;0
enbabeapi;deployments;nest;1;0,1;0
enbabeapidev;deployments;nest;1;0,1;0
enbafe;deployments;nginx;1;0;0
enbafedev;deployments;nginx;1;0,001;8
eventi-wow;deployments;nest;1;0,1;0
eventi-wowdev;deployments;nest;1;0,1;0
eventi-wowqa;deployments;nest;0;0,1;0
eventi;deployments;nest;1;0,1;0
eventidev;deployments;nest;1;0,1;0
eventiqa;deployments;nest;0;0,1;0
frontend-club;deployments;nginx;1;0,1;200
frontend-clubdev;deployments;nginx;1;0,001;3
frontend-clubqa;deployments;nginx;0;0,001;3
frontend-limec;deployments;nginx;1;0;0
frontend-limecdev;deployments;nginx;1;0;0
frontend-limecqa;deployments;nginx;1;0;0
frontend-matchdev;deployments;nginx;1;0;0
frontend-sestra;deployments;nginx;1;0;0
frontend-sestradev;deployments;nginx;1;0;0
frontend-sestraqa;deployments;nginx;0;0;0
frontend-wow;deployments;nginx;1;0,001;0
frontend-wowdev;deployments;nginx;1;0,001;3
frontend-wowqa;deployments;nginx;0;0,001;3
gare;deployments;nest;1;0,3;0
garedev;deployments;nest;1;0,1;0
gareqa;deployments;nest;0;0,1;768
gateway-accessi;deployments;nest;1;0,1;0
gateway-accessidev;deployments;nest;1;0,1;0
gateway-accessiqa;deployments;nest;0;0,1;0
gateway-club;deployments;nest;4;0,5;4096
gateway-clubdev;deployments;nest;1;0,3;1024
gateway-clubqa;deployments;nest;0;0,1;0
gateway-csi;deployments;nest;1;0,1;0
gateway-csidev;deployments;nest;1;0,1;0
gateway-csiqa;deployments;nest;0;0,1;0
gateway-limec;deployments;nest;4;0,5;4096
gateway-limecdev;deployments;nest;1;0,3;1024
gateway-match;deployments;nest;1;0,1;0
gateway-matchdev;deployments;nest;1;0,1;0
gateway-matchqa;deployments;nest;0;0,1;0
geco;deployments;nginx;1;0,001;0
gecobe;deployments;nest;1;0,1;0
gecobedev;deployments;nest;1;0,1;0
gecobeqa;deployments;nest;0;0,1;0
gecodev;deployments;nginx;1;0,001;3
gecoqa;deployments;nginx;0;0,001;3
giornalistadev;deployments;nginx;1;0,01;100
gke-connect;deployments;gke-connect-agent-20210430-00-00;1;0,002;0
grafana;deployments;grafana;0;0,002;0
homepage;deployments;nginx;1;0;0
homepagedev;deployments;nginx;1;0,002;5
ingress-nginx2;deployments;nginx2-nginx-ingress;1;1;2000
isclubdev;deployments;apiserver;1;0,1;0
isclubdev;deployments;identityserver;1;0,1;0
isclubdev;deployments;isadmin;1;0,1;0
isclubqa;deployments;apiserver;0;0,1;0
isclubqa;deployments;identityserver;0;0,1;0
isclubqa;deployments;isadmin;0;0,1;0
iscsi;deployments;apiserver;1;0,002;0
iscsi;deployments;identityserver;1;0,002;0
iscsi;deployments;isadmin;1;0,002;0
iscsidev;deployments;apiserver;1;0,1;0
iscsidev;deployments;identityserver;1;0,1;0
iscsidev;deployments;isadmin;1;0,1;0
iscsiqa;deployments;apiserver;0;0,002;70
iscsiqa;deployments;identityserver;0;0,002;78
iscsiqa;deployments;isadmin;0;0,002;70
isenba;deployments;apiserver;1;0,1;0
isenba;deployments;identityserver;1;0,1;0
isenba;deployments;isadmin;1;0,1;0
isenbadev;deployments;apiserver;1;0,1;0
isenbadev;deployments;identityserver;1;0,1;0
isenbadev;deployments;isadmin;1;0,1;0
isenbaqa;deployments;apiserver;0;0,1;0
isenbaqa;deployments;identityserver;0;0,1;0
isenbaqa;deployments;isadmin;0;0,1;0
ismatch;deployments;apiserver;1;0,002;0
ismatch;deployments;identityserver;1;0,002;0
ismatch;deployments;isadmin;1;0,002;0
ismatchdev;deployments;apiserver;1;0,1;0
ismatchdev;deployments;identityserver;1;0,1;0
ismatchdev;deployments;isadmin;1;0,1;0
ismatchqa;deployments;apiserver;0;0,002;64
ismatchqa;deployments;identityserver;0;0,002;80
ismatchqa;deployments;isadmin;0;0,002;59
ispub;deployments;apiserver;1;0,002;0
ispub;deployments;identityserver;1;0,002;0
ispub;deployments;isadmin;1;0,002;0
ispubdev;deployments;apiserver;1;0,1;0
ispubdev;deployments;identityserver;1;0,1;0
ispubdev;deployments;isadmin;1;0,1;0
ispubqa;deployments;apiserver;0;0,002;69
ispubqa;deployments;identityserver;0;0,002;84
ispubqa;deployments;isadmin;0;0,002;60
isstaysafe-primario;deployments;apiserver;1;0,1;0
isstaysafe-primario;deployments;identityserver;1;0,1;0
isstaysafe-primario;deployments;isadmin;1;0,1;0
isstaysafe-primariodev;deployments;apiserver;1;0,1;0
isstaysafe-primariodev;deployments;identityserver;1;0,1;0
isstaysafe-primariodev;deployments;isadmin;1;0,1;0
isstaysafe-primarioqa;deployments;apiserver;0;0,1;0
isstaysafe-primarioqa;deployments;identityserver;0;0,1;0
isstaysafe-primarioqa;deployments;isadmin;0;0,1;0
isstaysafe;deployments;apiserver;1;0,002;0
isstaysafe;deployments;identityserver;1;0,002;0
isstaysafe;deployments;isadmin;1;0,002;0
isstaysafedev;deployments;apiserver;1;0,002;80
isstaysafedev;deployments;identityserver;1;0,002;76
isstaysafedev;deployments;isadmin;1;0,002;61
isstaysafeqa;deployments;apiserver;0;0,002;67
isstaysafeqa;deployments;identityserver;0;0,002;83
isstaysafeqa;deployments;isadmin;0;0,002;59
kube-downscaler;deployments;kube-downscaler;1;0,03;0
kube-system;deployments;konnectivity-agent;8;0,015;60
kube-system;deployments;konnectivity-agent-autoscaler;1;0,01;10
kube-system;deployments;kube-dns;3;0,27;155
kube-system;deployments;kube-dns-autoscaler;1;0,02;10
kube-system;deployments;kube-state-metrics;1;0;0
kube-system;deployments;l7-default-backend;1;0,01;20
kube-system;deployments;metrics-server-v1,35,1;1;0,065;231
kube-system;deployments;tiller-deploy;0;0;0
licenze;deployments;nest;1;0,01;200
licenzedev;deployments;nest;1;0,01;200
licenzeqa;deployments;nest;0;0,01;200
limecaccessi;deployments;nest;1;0,01;200
limecaccessidev;deployments;nest;1;0,01;200
limecallenamenti;deployments;nest;1;0,2;1024
limecallenamentidev;deployments;nest;1;0,1;512
limecanagrafiche;deployments;nest;1;0,5;2048
limecanagrafichedev;deployments;nest;1;0,1;512
limeccarriere;deployments;nest;1;0,5;2048
limeccarrieredev;deployments;nest;1;0,1;512
limeccompanies;deployments;nest;1;0,5;2048
limeccompaniesdev;deployments;nest;1;0,1;512
limecconvocazioni;deployments;nest;1;0,1;0
limecconvocazionidev;deployments;nest;1;0,1;0
limeceventi;deployments;nest;1;0,1;0
limeceventidev;deployments;nest;1;0,1;0
limecgare;deployments;nest;1;0,3;0
limecgaredev;deployments;nest;1;0,1;0
limeclicenze;deployments;nest;1;0,01;200
limeclicenzedev;deployments;nest;1;0,01;200
limecmailsms;deployments;nest;1;0,1;0
limecmailsmsdev;deployments;nest;1;0,1;0
limecmoduli;deployments;nest;1;0,5;2048
limecmodulidev;deployments;nest;1;0,1;0
limecnotifiche;deployments;nest;1;0,01;200
limecnotifichedev;deployments;nest;1;0,01;200
limecsponsor;deployments;nest;1;0,5;2048
limecsponsordev;deployments;nest;1;0,1;0
limecstrutture;deployments;nest;1;0,1;0
limecstrutturedev;deployments;nest;1;0,1;0
limecsupertokens;deployments;supertoken;1;0,1;200
limecsupertokensdev;deployments;supertoken;1;0,1;200
localita;deployments;nest;1;0,1;0
localitadev;deployments;nest;1;0,1;0
localitaqa;deployments;nest;0;0,1;0
mailsms;deployments;nest;1;0,1;0
mailsmsdev;deployments;nest;1;0,1;0
mailsmsqa;deployments;nest;0;0,1;0
mockapidev;deployments;node;1;0,001;35
moduli;deployments;nest;1;0,5;2048
modulidev;deployments;nest;1;0,1;0
moduliqa;deployments;nest;0;0,1;0
mongodb;deployments;mongo-express;1;0,002;0
mongodb;deployments;mongodb-kubernetes-operator;1;0,002;0
mongodbdev;deployments;mongo-express;1;0,002;61
mongodbdev;deployments;mongodb-kubernetes-operator;1;0,002;18
mongodbqa;deployments;mongodb-kubernetes-operator;0;0,002;16
nocodbdev;deployments;nocodb;1;0,01;100
notifiche;deployments;nest;1;0,01;200
notifichedev;deployments;nest;1;0,01;200
notificheqa;deployments;nest;0;0,01;200
pgare;deployments;nginx;0;0,002;0
pgare;deployments;nodepgare;1;0,001;0
pgare;deployments;postgrest;1;0,004;0
pgare;deployments;pwafed;1;0,001;0
pgaredev;deployments;nginx;0;0,001;3
pgaredev;deployments;nodepgare;0;0,1;0
pgaredev;deployments;postgrest;0;0,003;19
pgaredev;deployments;pwafed;0;0,001;4
prenotazione;deployments;prenotazione;1;0,003;0
prenotazionedev;deployments;prenotazione;1;0,1;0
prenotazioneqa;deployments;prenotazione;0;0,003;121
prenotazioni-clubdev;deployments;prenotazione;1;0,1;0
prenotazioni-clubqa;deployments;prenotazione;0;0,002;37
prenotazioni-csi;deployments;prenotazione;1;0,003;0
prenotazioni-csidev;deployments;prenotazione;1;0,1;0
prenotazioni-csiqa;deployments;prenotazione;0;0,003;122
prenotazioni-enba;deployments;prenotazione;1;0,1;0
prenotazioni-enbadev;deployments;prenotazione;1;0,1;0
prenotazioni-enbaqa;deployments;prenotazione;0;0,1;0
qrcodeapi;deployments;stqrcodeapi;0;0,002;0
rabbitmq-system;deployments;rabbitmq-cluster-operator;1;0,2;500
referti;deployments;nest;1;0,1;256
refertidev;deployments;nest;1;0,1;256
refertiqa;deployments;nest;0;0,1;0
sestrabeapi;deployments;nest;1;0,1;0
sestrabeapidev;deployments;nest;1;0,1;0
sestrabeapiqa;deployments;nest;0;0,1;0
sonarq;deployments;sonarqube;0;0,009;0
sponsor;deployments;nest;1;0,5;2048
sponsordev;deployments;nest;1;0,1;0
sponsorqa;deployments;nest;0;0,1;0
stayrsa;deployments;nginx;1;0,001;0
stayrsadev;deployments;nginx;1;0,001;8
stayrsaqa;deployments;nginx;0;0,001;4
staysafebeapi;deployments;nest;1;0,1;0
staysafebeapidev;deployments;nest;1;0,1;0
staysafebeapiqa;deployments;nest;0;0,06;581
staysafebeqa;deployments;nodestaysafebe;0;0,08;505
strutture;deployments;nest;1;0,1;0
strutturedev;deployments;nest;1;0,1;0
struttureqa;deployments;nest;0;0,1;0
supertokens;deployments;supertoken;1;0,1;200
supertokens;deployments;supertoken-match;1;0,1;200
supertokens;deployments;supertoken-sestra;1;0,101;200
supertokensdev;deployments;supertoken;1;0,1;200
supertokensdev;deployments;supertoken-match;1;0,1;200
supertokensdev;deployments;supertoken-sestra;1;0,101;200
supertokensqa;deployments;supertoken;0;0,1;200
supertokensqa;deployments;supertoken-match;0;0,1;200
supertokensqa;deployments;supertoken-sestra;0;0,101;200
tornei;deployments;nest;1;0,01;200
torneidev;deployments;nest;1;0,01;200
torneiqa;deployments;nest;0;0,01;200
utenti-sporteamsdev;deployments;nest;1;0,1;0
utenti-sporteamsqa;deployments;nest;0;0,1;0
verdaccio;deployments;verdaccio;1;0,001;0
webhooks;deployments;nest;1;0,01;200
webhooksdev;deployments;nest;1;0,01;200
webhooksqa;deployments;nest;0;0,01;200
db;statefulsets;limecrabbitmqcluster-server;1;0,1;1024
db;statefulsets;postgresql-1-postgresql;1;1,5;3000
db;statefulsets;rabbitmqcluster-server;1;0,1;1024
db16;statefulsets;postgresql-16-postgresql;1;0,1;100
dbdev;statefulsets;limecrabbitmqcluster-server;1;0,1;1024
dbdev;statefulsets;postgresql-1-postgresql;1;0,1;100
dbdev;statefulsets;rabbitmqcluster-server;3;0,1;1024
dbdev16;statefulsets;postgresql-16-postgresql;1;0,1;100
dbqa;statefulsets;limecrabbitmqcluster-server;1;0,1;1024
dbqa;statefulsets;postgresql-1-postgresql;0;0,1;100
dbqa;statefulsets;rabbitmqcluster-server;1;0,1;1024
dbqa16;statefulsets;postgresql-16-postgresql;1;0,1;100
isdb;statefulsets;postgresql-1-postgresql;1;0,1;100
isdbdev;statefulsets;postgresql-1-postgresql;0;0,1;100
isdbqa;statefulsets;postgresql-1-postgresql;0;0,1;100
mongodb;statefulsets;mongodb-replica-set;3;0,4;400
mongodbdev;statefulsets;mongodb-replica-set;3;0,4;400
mongodbqa;statefulsets;mongodb-replica-set;0;0,4;400
1 namespace tipo nome replicas cpu_req_cores mem_req_Mi
2 accessi-enba deployments stqrcodeapi 1 0,002 0
3 accessi-enbadev deployments stqrcodeapi 1 0,002 90
4 accessi-enbaqa deployments stqrcodeapi 0 0,002 62
5 accessi deployments nest 1 0,01 200
6 accessidev deployments nest 1 0,01 200
7 accessiqa deployments nest 0 0,01 200
8 adria deployments nginx 1 0,001 0
9 agimdev deployments allegati 0 0,01 200
10 agimdev deployments apigateway 0 0,01 200
11 agimdev deployments geocode 0 0,01 200
12 agimdev deployments postgrest 0 0 0
13 algoranddev deployments algo 0 0,01 100
14 allenamenti deployments nest 1 0,2 1024
15 allenamentidev deployments nest 1 0,1 512
16 allenamentiqa deployments nest 0 0,1 512
17 anagrafiche deployments nest 1 0,5 4096
18 anagrafichedev deployments nest 1 0,1 512
19 anagraficheqa deployments nest 0 0,1 512
20 cert-manager deployments cert-manager 1 0 0
21 cert-manager deployments cert-manager-cainjector 1 0 0
22 cert-manager deployments cert-manager-webhook 1 0 0
23 companies deployments nest 1 0,5 2048
24 companiesdev deployments nest 1 0,1 512
25 companiesqa deployments nest 0 0,1 512
26 convocazioni deployments nest 1 0,1 0
27 convocazionidev deployments nest 1 0,1 0
28 convocazioniqa deployments nest 0 0,1 0
29 db deployments adminer 1 0,002 0
30 db deployments filebrowser2 1 0,01 0
31 db deployments nfs-server 1 0,002 0
32 db deployments nginx 1 0,001 0
33 db deployments php 1 0,002 0
34 db deployments postgrestadmin 0 0 0
35 db deployments postgrestadminmatch 0 0 0
36 dbdev deployments filebrowser2 1 0,001 8
37 dbdev deployments nfs-server 1 0,002 186
38 dbdev deployments nginx 1 0,001 4
39 dbdev deployments php 1 0,002 8
40 dbqa deployments filebrowser2 0 0,1 0
41 dbqa deployments nfs-server 0 0,001 186
42 dbqa deployments nginx 0 0,001 7
43 dbqa deployments php 0 0,002 8
44 default deployments locust-master 0 0 0
45 default deployments locust-worker 0 0 0
46 demodev deployments nginx 2 0,01 100
47 dev deployments nginx 0 0 0
48 enbabeapi deployments nest 1 0,1 0
49 enbabeapidev deployments nest 1 0,1 0
50 enbafe deployments nginx 1 0 0
51 enbafedev deployments nginx 1 0,001 8
52 eventi-wow deployments nest 1 0,1 0
53 eventi-wowdev deployments nest 1 0,1 0
54 eventi-wowqa deployments nest 0 0,1 0
55 eventi deployments nest 1 0,1 0
56 eventidev deployments nest 1 0,1 0
57 eventiqa deployments nest 0 0,1 0
58 frontend-club deployments nginx 1 0,1 200
59 frontend-clubdev deployments nginx 1 0,001 3
60 frontend-clubqa deployments nginx 0 0,001 3
61 frontend-limec deployments nginx 1 0 0
62 frontend-limecdev deployments nginx 1 0 0
63 frontend-limecqa deployments nginx 1 0 0
64 frontend-matchdev deployments nginx 1 0 0
65 frontend-sestra deployments nginx 1 0 0
66 frontend-sestradev deployments nginx 1 0 0
67 frontend-sestraqa deployments nginx 0 0 0
68 frontend-wow deployments nginx 1 0,001 0
69 frontend-wowdev deployments nginx 1 0,001 3
70 frontend-wowqa deployments nginx 0 0,001 3
71 gare deployments nest 1 0,3 0
72 garedev deployments nest 1 0,1 0
73 gareqa deployments nest 0 0,1 768
74 gateway-accessi deployments nest 1 0,1 0
75 gateway-accessidev deployments nest 1 0,1 0
76 gateway-accessiqa deployments nest 0 0,1 0
77 gateway-club deployments nest 4 0,5 4096
78 gateway-clubdev deployments nest 1 0,3 1024
79 gateway-clubqa deployments nest 0 0,1 0
80 gateway-csi deployments nest 1 0,1 0
81 gateway-csidev deployments nest 1 0,1 0
82 gateway-csiqa deployments nest 0 0,1 0
83 gateway-limec deployments nest 4 0,5 4096
84 gateway-limecdev deployments nest 1 0,3 1024
85 gateway-match deployments nest 1 0,1 0
86 gateway-matchdev deployments nest 1 0,1 0
87 gateway-matchqa deployments nest 0 0,1 0
88 geco deployments nginx 1 0,001 0
89 gecobe deployments nest 1 0,1 0
90 gecobedev deployments nest 1 0,1 0
91 gecobeqa deployments nest 0 0,1 0
92 gecodev deployments nginx 1 0,001 3
93 gecoqa deployments nginx 0 0,001 3
94 giornalistadev deployments nginx 1 0,01 100
95 gke-connect deployments gke-connect-agent-20210430-00-00 1 0,002 0
96 grafana deployments grafana 0 0,002 0
97 homepage deployments nginx 1 0 0
98 homepagedev deployments nginx 1 0,002 5
99 ingress-nginx2 deployments nginx2-nginx-ingress 1 1 2000
100 isclubdev deployments apiserver 1 0,1 0
101 isclubdev deployments identityserver 1 0,1 0
102 isclubdev deployments isadmin 1 0,1 0
103 isclubqa deployments apiserver 0 0,1 0
104 isclubqa deployments identityserver 0 0,1 0
105 isclubqa deployments isadmin 0 0,1 0
106 iscsi deployments apiserver 1 0,002 0
107 iscsi deployments identityserver 1 0,002 0
108 iscsi deployments isadmin 1 0,002 0
109 iscsidev deployments apiserver 1 0,1 0
110 iscsidev deployments identityserver 1 0,1 0
111 iscsidev deployments isadmin 1 0,1 0
112 iscsiqa deployments apiserver 0 0,002 70
113 iscsiqa deployments identityserver 0 0,002 78
114 iscsiqa deployments isadmin 0 0,002 70
115 isenba deployments apiserver 1 0,1 0
116 isenba deployments identityserver 1 0,1 0
117 isenba deployments isadmin 1 0,1 0
118 isenbadev deployments apiserver 1 0,1 0
119 isenbadev deployments identityserver 1 0,1 0
120 isenbadev deployments isadmin 1 0,1 0
121 isenbaqa deployments apiserver 0 0,1 0
122 isenbaqa deployments identityserver 0 0,1 0
123 isenbaqa deployments isadmin 0 0,1 0
124 ismatch deployments apiserver 1 0,002 0
125 ismatch deployments identityserver 1 0,002 0
126 ismatch deployments isadmin 1 0,002 0
127 ismatchdev deployments apiserver 1 0,1 0
128 ismatchdev deployments identityserver 1 0,1 0
129 ismatchdev deployments isadmin 1 0,1 0
130 ismatchqa deployments apiserver 0 0,002 64
131 ismatchqa deployments identityserver 0 0,002 80
132 ismatchqa deployments isadmin 0 0,002 59
133 ispub deployments apiserver 1 0,002 0
134 ispub deployments identityserver 1 0,002 0
135 ispub deployments isadmin 1 0,002 0
136 ispubdev deployments apiserver 1 0,1 0
137 ispubdev deployments identityserver 1 0,1 0
138 ispubdev deployments isadmin 1 0,1 0
139 ispubqa deployments apiserver 0 0,002 69
140 ispubqa deployments identityserver 0 0,002 84
141 ispubqa deployments isadmin 0 0,002 60
142 isstaysafe-primario deployments apiserver 1 0,1 0
143 isstaysafe-primario deployments identityserver 1 0,1 0
144 isstaysafe-primario deployments isadmin 1 0,1 0
145 isstaysafe-primariodev deployments apiserver 1 0,1 0
146 isstaysafe-primariodev deployments identityserver 1 0,1 0
147 isstaysafe-primariodev deployments isadmin 1 0,1 0
148 isstaysafe-primarioqa deployments apiserver 0 0,1 0
149 isstaysafe-primarioqa deployments identityserver 0 0,1 0
150 isstaysafe-primarioqa deployments isadmin 0 0,1 0
151 isstaysafe deployments apiserver 1 0,002 0
152 isstaysafe deployments identityserver 1 0,002 0
153 isstaysafe deployments isadmin 1 0,002 0
154 isstaysafedev deployments apiserver 1 0,002 80
155 isstaysafedev deployments identityserver 1 0,002 76
156 isstaysafedev deployments isadmin 1 0,002 61
157 isstaysafeqa deployments apiserver 0 0,002 67
158 isstaysafeqa deployments identityserver 0 0,002 83
159 isstaysafeqa deployments isadmin 0 0,002 59
160 kube-downscaler deployments kube-downscaler 1 0,03 0
161 kube-system deployments konnectivity-agent 8 0,015 60
162 kube-system deployments konnectivity-agent-autoscaler 1 0,01 10
163 kube-system deployments kube-dns 3 0,27 155
164 kube-system deployments kube-dns-autoscaler 1 0,02 10
165 kube-system deployments kube-state-metrics 1 0 0
166 kube-system deployments l7-default-backend 1 0,01 20
167 kube-system deployments metrics-server-v1,35,1 1 0,065 231
168 kube-system deployments tiller-deploy 0 0 0
169 licenze deployments nest 1 0,01 200
170 licenzedev deployments nest 1 0,01 200
171 licenzeqa deployments nest 0 0,01 200
172 limecaccessi deployments nest 1 0,01 200
173 limecaccessidev deployments nest 1 0,01 200
174 limecallenamenti deployments nest 1 0,2 1024
175 limecallenamentidev deployments nest 1 0,1 512
176 limecanagrafiche deployments nest 1 0,5 2048
177 limecanagrafichedev deployments nest 1 0,1 512
178 limeccarriere deployments nest 1 0,5 2048
179 limeccarrieredev deployments nest 1 0,1 512
180 limeccompanies deployments nest 1 0,5 2048
181 limeccompaniesdev deployments nest 1 0,1 512
182 limecconvocazioni deployments nest 1 0,1 0
183 limecconvocazionidev deployments nest 1 0,1 0
184 limeceventi deployments nest 1 0,1 0
185 limeceventidev deployments nest 1 0,1 0
186 limecgare deployments nest 1 0,3 0
187 limecgaredev deployments nest 1 0,1 0
188 limeclicenze deployments nest 1 0,01 200
189 limeclicenzedev deployments nest 1 0,01 200
190 limecmailsms deployments nest 1 0,1 0
191 limecmailsmsdev deployments nest 1 0,1 0
192 limecmoduli deployments nest 1 0,5 2048
193 limecmodulidev deployments nest 1 0,1 0
194 limecnotifiche deployments nest 1 0,01 200
195 limecnotifichedev deployments nest 1 0,01 200
196 limecsponsor deployments nest 1 0,5 2048
197 limecsponsordev deployments nest 1 0,1 0
198 limecstrutture deployments nest 1 0,1 0
199 limecstrutturedev deployments nest 1 0,1 0
200 limecsupertokens deployments supertoken 1 0,1 200
201 limecsupertokensdev deployments supertoken 1 0,1 200
202 localita deployments nest 1 0,1 0
203 localitadev deployments nest 1 0,1 0
204 localitaqa deployments nest 0 0,1 0
205 mailsms deployments nest 1 0,1 0
206 mailsmsdev deployments nest 1 0,1 0
207 mailsmsqa deployments nest 0 0,1 0
208 mockapidev deployments node 1 0,001 35
209 moduli deployments nest 1 0,5 2048
210 modulidev deployments nest 1 0,1 0
211 moduliqa deployments nest 0 0,1 0
212 mongodb deployments mongo-express 1 0,002 0
213 mongodb deployments mongodb-kubernetes-operator 1 0,002 0
214 mongodbdev deployments mongo-express 1 0,002 61
215 mongodbdev deployments mongodb-kubernetes-operator 1 0,002 18
216 mongodbqa deployments mongodb-kubernetes-operator 0 0,002 16
217 nocodbdev deployments nocodb 1 0,01 100
218 notifiche deployments nest 1 0,01 200
219 notifichedev deployments nest 1 0,01 200
220 notificheqa deployments nest 0 0,01 200
221 pgare deployments nginx 0 0,002 0
222 pgare deployments nodepgare 1 0,001 0
223 pgare deployments postgrest 1 0,004 0
224 pgare deployments pwafed 1 0,001 0
225 pgaredev deployments nginx 0 0,001 3
226 pgaredev deployments nodepgare 0 0,1 0
227 pgaredev deployments postgrest 0 0,003 19
228 pgaredev deployments pwafed 0 0,001 4
229 prenotazione deployments prenotazione 1 0,003 0
230 prenotazionedev deployments prenotazione 1 0,1 0
231 prenotazioneqa deployments prenotazione 0 0,003 121
232 prenotazioni-clubdev deployments prenotazione 1 0,1 0
233 prenotazioni-clubqa deployments prenotazione 0 0,002 37
234 prenotazioni-csi deployments prenotazione 1 0,003 0
235 prenotazioni-csidev deployments prenotazione 1 0,1 0
236 prenotazioni-csiqa deployments prenotazione 0 0,003 122
237 prenotazioni-enba deployments prenotazione 1 0,1 0
238 prenotazioni-enbadev deployments prenotazione 1 0,1 0
239 prenotazioni-enbaqa deployments prenotazione 0 0,1 0
240 qrcodeapi deployments stqrcodeapi 0 0,002 0
241 rabbitmq-system deployments rabbitmq-cluster-operator 1 0,2 500
242 referti deployments nest 1 0,1 256
243 refertidev deployments nest 1 0,1 256
244 refertiqa deployments nest 0 0,1 0
245 sestrabeapi deployments nest 1 0,1 0
246 sestrabeapidev deployments nest 1 0,1 0
247 sestrabeapiqa deployments nest 0 0,1 0
248 sonarq deployments sonarqube 0 0,009 0
249 sponsor deployments nest 1 0,5 2048
250 sponsordev deployments nest 1 0,1 0
251 sponsorqa deployments nest 0 0,1 0
252 stayrsa deployments nginx 1 0,001 0
253 stayrsadev deployments nginx 1 0,001 8
254 stayrsaqa deployments nginx 0 0,001 4
255 staysafebeapi deployments nest 1 0,1 0
256 staysafebeapidev deployments nest 1 0,1 0
257 staysafebeapiqa deployments nest 0 0,06 581
258 staysafebeqa deployments nodestaysafebe 0 0,08 505
259 strutture deployments nest 1 0,1 0
260 strutturedev deployments nest 1 0,1 0
261 struttureqa deployments nest 0 0,1 0
262 supertokens deployments supertoken 1 0,1 200
263 supertokens deployments supertoken-match 1 0,1 200
264 supertokens deployments supertoken-sestra 1 0,101 200
265 supertokensdev deployments supertoken 1 0,1 200
266 supertokensdev deployments supertoken-match 1 0,1 200
267 supertokensdev deployments supertoken-sestra 1 0,101 200
268 supertokensqa deployments supertoken 0 0,1 200
269 supertokensqa deployments supertoken-match 0 0,1 200
270 supertokensqa deployments supertoken-sestra 0 0,101 200
271 tornei deployments nest 1 0,01 200
272 torneidev deployments nest 1 0,01 200
273 torneiqa deployments nest 0 0,01 200
274 utenti-sporteamsdev deployments nest 1 0,1 0
275 utenti-sporteamsqa deployments nest 0 0,1 0
276 verdaccio deployments verdaccio 1 0,001 0
277 webhooks deployments nest 1 0,01 200
278 webhooksdev deployments nest 1 0,01 200
279 webhooksqa deployments nest 0 0,01 200
280 db statefulsets limecrabbitmqcluster-server 1 0,1 1024
281 db statefulsets postgresql-1-postgresql 1 1,5 3000
282 db statefulsets rabbitmqcluster-server 1 0,1 1024
283 db16 statefulsets postgresql-16-postgresql 1 0,1 100
284 dbdev statefulsets limecrabbitmqcluster-server 1 0,1 1024
285 dbdev statefulsets postgresql-1-postgresql 1 0,1 100
286 dbdev statefulsets rabbitmqcluster-server 3 0,1 1024
287 dbdev16 statefulsets postgresql-16-postgresql 1 0,1 100
288 dbqa statefulsets limecrabbitmqcluster-server 1 0,1 1024
289 dbqa statefulsets postgresql-1-postgresql 0 0,1 100
290 dbqa statefulsets rabbitmqcluster-server 1 0,1 1024
291 dbqa16 statefulsets postgresql-16-postgresql 1 0,1 100
292 isdb statefulsets postgresql-1-postgresql 1 0,1 100
293 isdbdev statefulsets postgresql-1-postgresql 0 0,1 100
294 isdbqa statefulsets postgresql-1-postgresql 0 0,1 100
295 mongodb statefulsets mongodb-replica-set 3 0,4 400
296 mongodbdev statefulsets mongodb-replica-set 3 0,4 400
297 mongodbqa statefulsets mongodb-replica-set 0 0,4 400
Binary file not shown.
+33
View File
@@ -0,0 +1,33 @@
# Example transformations:
# DATABASE_HOST=localhost=DATABASE_HOST=10.0.0.5
# API_PORT=8080=API_PORT=3000
# ENVIRONMENT=dev=ENVIRONMENT=prod
# OLD_SECRET_KEY=abc123=NEW_SECRET_KEY=xyz789
#Postgres uri
postgresql-1-postgresql-svc.dbdev.svc.cluster.local=postgresql-rw.stsharedservices-dev.svc.cluster.local
#dns domain
sporteams.app=pigreco66.it
#postgres user password
devVkn9tcHSxK7E=iZmBf42AVzDtD8ZcA9pFvtIGX6cbg9VvzjE0Jd7LkZnplvpceCAYjLqQRr7Z7SsA
#rabbitMQ uri
rabbitmqcluster.dbdev.svc.cluster.local=stmqclusterdev.stsharedservices-dev.svc.cluster.local
#RABBITMQ_USER
t2rW7tOSXkq2Oh6XZIrVlBp8Cd3kzd7M=default_user_wN2410ODWhkuXJynz9C
#RABBITMQ_PASSWORD
q2zB-eeyJwDltXDhEFzJ7QhPsrOg4XDe=oENtKdDBUWOePk5OTQ36JInQ8XPsZD8W
#GECO_INTERNAL_URL =
nest.gecobedev=nest.st-geco-backend
#docker image
eu.gcr.io/sporteamscloud/nest%name%:%tag%=<IMAGE_TAG_nest>
eu.gcr.io/sporteamscloud/nginx%name%:%tag%=<IMAGE_TAG_nginx>
#parametri
%backendurl%=<backendurl>