scaleway-sync-firewall
Version:
Synchronize Scaleway Security Groups
44 lines (43 loc) • 1.62 kB
JavaScript
;
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);
});