Class: Provisional::Server
- Inherits:
-
Object
- Object
- Provisional::Server
- Defined in:
- lib/provisional/server.rb
Class Method Summary collapse
- .all(environment = nil) ⇒ Object
- .create(options = {}) ⇒ Object
- .delete(server) ⇒ Object
- .find(options = {}) ⇒ Object
- .list(environment) ⇒ Object
- .stop(server) ⇒ Object
Class Method Details
.all(environment = nil) ⇒ Object
10 11 12 13 |
# 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 = {}) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/provisional/server.rb', line 15 def self.create( = {}) raise "Must pass in a hash" unless .is_a?(Hash) name = [:name] image = [:image] = { region: 'nyc3', size: '512mb', ssh_keys: all_ssh_keys } droplet = DropletKit::Droplet.new({name: name, image: image.id}.merge()) 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) ⇒ Object
64 65 66 67 68 |
# 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 = {}) ⇒ Object
34 35 36 37 38 39 40 41 |
# File 'lib/provisional/server.rb', line 34 def self.find( = {}) raise "Must pass in a hash" unless .is_a?(Hash) if [:id] Provisional.digital_ocean.droplets.find(id: [:id]) elsif [:name] all.select{|server| server.name == [:name]}.first end end |
.list(environment) ⇒ Object
6 7 8 |
# File 'lib/provisional/server.rb', line 6 def self.list(environment) all.map(&:name) end |
.stop(server) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# 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 |