UNPKG

scaleway-sync-firewall

Version:
46 lines (39 loc) 1.51 kB
import SecurityGroup from './SecurityGroup'; import { ScalewayZone } from './library/interfaces/Scaleway'; 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(): Promise<SecurityGroup>[] { const targets = require(`../${process.env.TARGET_GROUPS_JSON}`); return targets.map((target: { id: string, zone: ScalewayZone }) => { return SecurityGroup.get(target.zone, target.id); }); } /** * Current master group. */ async function syncGroups() { const primaryGroup = await SecurityGroup.get(<ScalewayZone>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); });