require 'fog/compute/models/server' module Fog module Compute class DigitalOcean # A DigitalOcean Droplet # class Server < Fog::Compute::Server identity :id attribute :name attribute :memory attribute :vcpus attribute :disk attribute :locked attribute :created_at attribute :status, :aliases => 'state' attribute :backup_ids attribute :snapshot_ids attribute :features attribute :region attribute :image attribute :size attribute :size_slug attribute :networks attribute :kernel attribute :next_backup_window attribute :private_networking attribute :backups attribute :ipv6 attribute :ssh_keys def public_ip_address ipv4_address end def ipv6_address if (net = networks['v6'].find { |n| n['type'] == 'public' }) net['ip_address'] end end def ipv4_address if (net = networks['v4'].find { |n| n['type'] == 'public' }) net['ip_address'] end end def save raise Fog::Errors::Error.new('Re-saving an existing object may create a duplicate') if persisted? requires :name, :region, :size, :image options = {} if attributes[:ssh_keys] options[:ssh_keys] = attributes[:ssh_keys] elsif @ssh_keys options[:ssh_keys] = @ssh_keys.map(&:id) end options[:private_networking] = private_networking options[:backups] = backups options[:ipv6] = ipv6 data = service.create_server(name, size, image, region, options) merge_attributes(data.body['droplet']) true end def delete requires :id response = service.delete_server id response.body end def ready? status == 'active' end def locked? locked end def actions requires :id response = service.list_droplet_actions id response.body end def action(action_id) requires :id response = service.get_droplet_action(id, action_id) response.body end def reboot perform_action :reboot_server end def disable_backups perform_action :disable_backups end def power_cycle perform_action :power_cycle end def shutdown perform_action :shutdown end def power_off perform_action :power_off end def power_on perform_action :power_on end def restore(image) perform_action :restore, image end def password_reset perform_action :password_reset end def resize(resize_disk, size) perform_action :resize, resize_disk, size end def rebuild(image) perform_action :rebuild, image end def rename(name) perform_action :rename, name end def change_kernel(kernel) perform_action :change_kernel, kernel end def enable_ipv6 perform_action :enable_ipv6 end def enable_private_networking perform_action :enable_private_networking end def snapshot(name) perform_action :snapshot, name end def upgrade perform_action :upgrade end private # Performs a droplet action with the given set of arguments. def perform_action(action, *args) requires :id response = service.send(action, id, *args) response.body end end end end end