Skip to content

Instantly share code, notes, and snippets.

@Genki-S
Created October 25, 2015 18:39
Show Gist options
  • Save Genki-S/d4e3d261c275a87278c4 to your computer and use it in GitHub Desktop.
Save Genki-S/d4e3d261c275a87278c4 to your computer and use it in GitHub Desktop.
require 'sinatra'
require 'json'
require 'droplet_kit'
DO_TOKEN = 'YOUR_TOKEN'
DATA_JSON_FILE = './data.json'
set :bind, '0.0.0.0'
def do_client
@do_client ||= DropletKit::Client.new(access_token: DO_TOKEN)
end
get '/:id' do
unless File.exist?(DATA_JSON_FILE)
File.open(DATA_JSON_FILE, 'w') { |f| f.write({}.to_json) }
end
data = JSON.parse(File.read(DATA_JSON_FILE))
id = params[:id]
# FIXME: super demo mode
if id == '2' && data.has_key?(id) && data.has_key?('1')
dock(data[id], data['1'])
else
built = register_new_figure
data[id] = built
File.open(DATA_JSON_FILE, 'w') { |f| f.write(data.to_json) }
end
'Done.'
end
def register_new_figure
puts 'Type? (1: instance, 2: container)'
type = gets.to_i
type == 1 ? register_new_instance : register_new_container
end
def register_new_instance
puts 'Name?'
name = gets.chomp
puts 'OS? (1: CoreOS)'
gets
puts 'Region? (1: SF)'
gets
puts 'Memory? (1: 512MB)'
gets
droplet = DropletKit::Droplet.new(
name: name,
region: 'sfo1',
image: 'coreos-stable',
size: '512mb',
ssh_keys: [496296],
)
created = do_client.droplets.create(droplet)
{ type: 'instance', name: name, instance_id: created[:id] }
end
def register_new_container
puts 'Image?'
image = gets.chomp
puts 'Run Command?'
cmd = gets.chomp
{ type: 'container', image: image, run_command: cmd }
end
def dock(container, instance)
puts "Deploying container #{container['name']}..."
droplet = do_client.droplets.find(id: instance['instance_id'])
ip = droplet[:networks][:v4][0][:ip_address]
run_command = container['run_command']
image = container['image']
system("ssh core@#{ip} #{run_command} #{image}")
end
@Bads25
Copy link

Bads25 commented Mar 1, 2022

Join

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment