Skip to content

Instantly share code, notes, and snippets.

@meatballhat
Last active December 16, 2015 07:09
Show Gist options
  • Save meatballhat/5396867 to your computer and use it in GitHub Desktop.
Save meatballhat/5396867 to your computer and use it in GitHub Desktop.
data bag ssh key combiner thingy
#!/usr/bin/env ruby
USAGE = "Usage: #{File.basename($0)} <source.json> [source.json...] <dest.json>"
if ARGV.include?('-h') || ARGV.include?('--help')
$stderr.puts USAGE
exit 0
end
if ARGV.length < 2
$stderr.puts USAGE
abort 'ERROR: Need moar args (at least 2)'
end
require 'json'
dest = ARGV.last
sources = ARGV[0..-2]
source_keys = []
begin
dest_json = File.open(dest) { |f| JSON.load(f) }
rescue => e
$stderr.puts "Failed to load dest file #{dest.inspect}"
$stderr.puts "#{e.class.name}: #{e.message}"
exit 1
end
dest_keys = [*(dest_json['ssh_keys'] || [])]
sources.each do |source|
begin
source_keys += [*(File.open(source) { |f| JSON.load(f) }['ssh_keys'] || [])]
rescue => e
$stderr.puts "Failed to add keys for #{source.inspect}"
$stderr.puts "#{e.class.name}: #{e.message} -> #{e.backtrace.join("\n")}"
end
end
all_keys = source_keys | dest_keys
dest_json['ssh_keys'] = all_keys
puts JSON.pretty_generate(dest_json)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment