Files
italiadatacenter/add-listener.js
alessandro 20d506407a primo
2026-07-17 09:42:52 +02:00

70 lines
2.4 KiB
JavaScript

#!/usr/bin/env node
/**
* Aggiunge un listener HTTPS alla sezione `listeners` del gateway.yaml.
*
* Uso:
* node add-listener.js <hostname> <name> <secret-name> [gateway-file]
*
* Esempio:
* node add-listener.js sonarqube.italiadatacenter.com https-sonarqube sonarqube-secret
* node add-listener.js grafana.italiadatacenter.com https-grafana grafana-secret gateway.yaml
*/
const fs = require('fs');
const path = require('path');
const [,, hostname, name, secretName, gatewayFile = 'gateway.yaml'] = process.argv;
if (!hostname || !name || !secretName) {
console.error('Uso: node add-listener.js <hostname> <name> <secret-name> [gateway-file]');
console.error('Es.: node add-listener.js sonarqube.italiadatacenter.com https-sonarqube sonarqube-secret');
process.exit(1);
}
const filepath = path.resolve(__dirname, gatewayFile);
if (!fs.existsSync(filepath)) {
console.error(`File non trovato: ${filepath}`);
process.exit(1);
}
const content = fs.readFileSync(filepath, 'utf8');
// Controlla se il listener esiste già (per nome o hostname)
if (content.includes(`name: ${name}`) || content.includes(`hostname: ${hostname}`)) {
console.warn(`Attenzione: un listener con name "${name}" o hostname "${hostname}" esiste già. Nessuna modifica applicata.`);
process.exit(0);
}
const newBlock = ` - allowedRoutes:
namespaces:
from: All
hostname: ${hostname}
name: ${name}
port: 443
protocol: HTTPS
tls:
certificateRefs:
- group: ""
kind: Secret
name: ${secretName}
mode: Terminate`;
// Inserisce il nuovo block prima della riga "kind: List" o in fondo alla lista listeners
// Trova l'ultima occorrenza di "mode: Terminate" e appende subito dopo
const lastTerminateIdx = content.lastIndexOf(' mode: Terminate');
if (lastTerminateIdx === -1) {
console.error('Impossibile trovare il punto di inserimento (mode: Terminate). File non modificato.');
process.exit(1);
}
const insertAfter = lastTerminateIdx + ' mode: Terminate'.length;
const updated = content.slice(0, insertAfter) + '\n' + newBlock + content.slice(insertAfter);
fs.writeFileSync(filepath, updated, 'utf8');
console.log(`Listener aggiunto:`);
console.log(` hostname : ${hostname}`);
console.log(` name : ${name}`);
console.log(` secret : ${secretName}`);
console.log(`File aggiornato: ${filepath}`);