UNPKG

scaleway-sync-firewall

Version:
44 lines (43 loc) 1.62 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const SecurityGroup_1 = __importDefault(require("./SecurityGroup")); require('dotenv-defaults').config(); /** * Validate that all required environment variables are set. */ function validateEnvironmentVariables() { const requiredEnv = ['AUTH_TOKEN', 'MASTER_ID', 'MASTER_ZONE', 'TARGET_GROUPS_JSON']; requiredEnv.forEach((variable) => { if (!process.env[variable]) { throw Error(`Missing environment variable! See .env.defaults [Missing: ${variable}]`); } }); } function targets() { const targets = require(`../${process.env.TARGET_GROUPS_JSON}`); return targets.map((target) => { return SecurityGroup_1.default.get(target.zone, target.id); }); } /** * Current master group. */ async function syncGroups() { const primaryGroup = await SecurityGroup_1.default.get(process.env.MASTER_ZONE, process.env.MASTER_ID); const primaryRules = await primaryGroup.editableRules; const targetGroups = await Promise.all(targets()); await Promise.all(targetGroups.map(async (group) => { await group.clearRules(); await group.addRules(primaryRules); })); } validateEnvironmentVariables(); syncGroups().then(() => { console.info('Successfully synchronized groups!'); }).catch((error) => { console.error('Encountered error syncing groups!'); console.error(error); });