Skip to content

Instantly share code, notes, and snippets.

@jrgm
Last active December 16, 2015 15:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jrgm/5456765 to your computer and use it in GitHub Desktop.
Save jrgm/5456765 to your computer and use it in GitHub Desktop.
hack to convert some semi-structured notes into bash aliases for aws, etc.
#!/usr/bin/env node
const fs = require('fs');
const rimraf = require('rimraf'); // XXX remove this dependency
const format = require('util').format;
function createAliases(loadBalancers, targetDirectory) {
var aliases = {};
Object.keys(loadBalancers).forEach(function(key) {
var lb = loadBalancers[key];
var instances = lb.instances;
for (var i = 0; i < instances.length; ++i) {
var inst = instances[i];
var name = "st" + inst.Name.slice(18) + "-" + (i + 1);
aliases[name] = 'ssh root@' + inst.private_ip_address;
}
});
Object.keys(aliases).forEach(function(alias) {
fs.appendFileSync(format('%s/%s', targetDirectory, 'jumps'),
format("alias %s='%s'\n", alias, aliases[alias]));
});
}
function createGroups(instances, targetDirectory) {
var groups = {};
Object.keys(instances).forEach(function(inst) {
var ip = instances[inst].private_ip_address;
var name = instances[inst].Name;
name = name.match(/identity-dev-stage-(\S+)-/)[1];
if (!groups[name]) groups[name] = [];
groups[name].push(ip);
});
Object.keys(groups).forEach(function(group) {
fs.writeFileSync(format('%s/%s', targetDirectory, group),
groups[group].join(' ') + '\n');
});
}
(function run() {
const targetDirectory = format('%s/%s', process.env.HOME, 'awsjumps');
console.log('writing files to', targetDirectory);
if (fs.existsSync(targetDirectory)) {
rimraf.sync(targetDirectory);
fs.mkdirSync(targetDirectory);
}
var filename = process.argv[2] || '/tmp/aws.json';
console.log('reading', filename);
var data = JSON.parse(fs.readFileSync(filename, 'utf8'));
var instances = data.instances;
var loadBalancers = data['load balancers'];
var bastion = data.bastion_ip;
createAliases(loadBalancers, targetDirectory);
createGroups(instances, targetDirectory);
console.log('bastion', '->', bastion);
console.log('run this command:');
console.log(' ', 'rsync -arv -e ssh -P %s/* root@%s:/root', targetDirectory, bastion);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment