class Provisional::Server
Public Class Methods
all(environment = nil)
click to toggle source
# File lib/provisional/server.rb, line 10 def self.all(environment = nil) # TODO: Filter by environment (and domain), if given. Provisional.digital_ocean.droplets.all.to_a end
create(options = {})
click to toggle source
# File lib/provisional/server.rb, line 15 def self.create(options = {}) raise "Must pass in a hash" unless options.is_a?(Hash) name = options[:name] image = options[:image] server_options = { region: 'nyc3', size: '512mb', ssh_keys: all_ssh_keys } droplet = DropletKit::Droplet.new({name: name, image: image.id}.merge(server_options)) server = Provisional.digital_ocean.droplets.create(droplet) print "Building server '#{name}' from image '#{image.slug || image.name}'." $stdout.flush while find(id: server.id).status == "new" putc(".") $stdout.flush sleep 5 end puts "DONE" # Have to re-get the server, so it's populated with its IP address. find(id: server.id) end
delete(server)
click to toggle source
# File lib/provisional/server.rb, line 64 def self.delete(server) return unless server Provisional.digital_ocean.droplets.delete(id: server.id) # Don't really need to wait for this operation to complete. end
find(options = {})
click to toggle source
# File lib/provisional/server.rb, line 34 def self.find(options = {}) raise "Must pass in a hash" unless options.is_a?(Hash) if options[:id] Provisional.digital_ocean.droplets.find(id: options[:id]) elsif options[:name] all.select{|server| server.name == options[:name]}.first end end
list(environment)
click to toggle source
# File lib/provisional/server.rb, line 6 def self.list(environment) all.map(&:name) end
stop(server)
click to toggle source
# File lib/provisional/server.rb, line 43 def self.stop(server) return unless server action = Provisional.digital_ocean.droplet_actions.shutdown(droplet_id: server.id) action_id = action.id print "Stopping server '#{server.name}' (action_id = #{action_id})." until action.status == "completed" do putc(".") # $stdout.flush sleep 1 action = Provisional.digital_ocean.actions.find(id: action_id) end # TODO: I've seen a shutdown not work, so we'll need a timeout. until Provisional.digital_ocean.droplets.find(id: server.id).status == "off" do putc(".") $stdout.flush sleep 1 end puts "DONE" end
Private Class Methods
all_ssh_keys()
click to toggle source
# File lib/provisional/server.rb, line 72 def self.all_ssh_keys Provisional.digital_ocean.ssh_keys.all.to_a.map(&:id) end