#!/usr/bin/env node /** * Aggiunge un listener HTTPS alla sezione `listeners` del gateway.yaml. * * Uso: * node add-listener.js [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 [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}`);