Class: Fog::Compute::DigitalOcean::Server

Inherits:
Server
  • Object
show all
Defined in:
lib/fog/digitalocean/models/compute/server.rb

Overview

A DigitalOcean Droplet

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#ssh_keys=(value) ⇒ Object (writeonly)

Sets the attribute ssh_keys

Parameters:

  • value

    the value to set the attribute ssh_keys to.



22
23
24
# File 'lib/fog/digitalocean/models/compute/server.rb', line 22

def ssh_keys=(value)
  @ssh_keys = value
end

Instance Method Details

#destroyObject

Destroy the server, freeing up the resources.

DigitalOcean will stop charging you for the resources the server was using.

Once the server has been destroyed, there’s no way to recover it so the data is irrecoverably lost.

IMPORTANT: As of 2013/01/31, you should wait some time to destroy the server after creating it. If you try to destroy the server too fast, the destroy event may be lost and the server will remain running and consuming resources, so DigitalOcean will keep charging you. Double checked this with DigitalOcean staff and confirmed that it’s the way it works right now.

Double check the server has been destroyed!



156
157
158
159
# File 'lib/fog/digitalocean/models/compute/server.rb', line 156

def destroy
  requires :id
  service.destroy_server id
end

#ip_addressObject

Deprecated: Use public_ip_address instead.



25
26
27
28
# File 'lib/fog/digitalocean/models/compute/server.rb', line 25

def ip_address
  Fog::Logger.warning("ip_address has been deprecated. Use public_ip_address instead")
  public_ip_address
end

#power_cycleObject

Reboot the server (hard reboot).

Powers the server off and then powers it on again.



41
42
43
44
# File 'lib/fog/digitalocean/models/compute/server.rb', line 41

def power_cycle
  requires :id
  service.power_cycle_server self.id
end

#ready?Boolean

Checks whether the server status is ‘active’.

The server transitions from ‘new’ to ‘active’ sixty to ninety seconds after creating it (time varies and may take more than 90 secs).

Returns:

  • (Boolean)


168
169
170
# File 'lib/fog/digitalocean/models/compute/server.rb', line 168

def ready?
  state == 'active'
end

#rebootObject

Reboot the server (soft reboot).

The preferred method of rebooting a server.



33
34
35
36
# File 'lib/fog/digitalocean/models/compute/server.rb', line 33

def reboot
  requires :id
  service.reboot_server self.id
end

#saveBoolean

Creates the server (not to be called directly).

Usually called by Fog::Collection#create

docean = Fog::Compute.new({
  :provider => 'DigitalOcean',
  :digitalocean_api_key   => 'key-here',      # your API key here
  :digitalocean_client_id => 'client-id-here' # your client key here
})
docean.servers.create :name => 'foobar',
                  :image_id  => image_id_here,
                  :flavor_id => flavor_id_here,
                  :region_id => region_id_here

Returns:

  • (Boolean)

Raises:

  • (Fog::Errors::Error)


117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/fog/digitalocean/models/compute/server.rb', line 117

def save
  raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
  requires :name, :flavor_id, :image_id, :region_id

  options = {}
  if attributes[:ssh_key_ids]
    options[:ssh_key_ids] = attributes[:ssh_key_ids]
  elsif @ssh_keys
    options[:ssh_key_ids] = @ssh_keys.map(&:id)
  end

  options[:private_networking] = !!attributes[:private_networking]

  data = service.create_server name,
                               flavor_id,
                               image_id,
                               region_id,
                               options
  merge_attributes(data.body['droplet'])
  true
end

#setup(credentials = {}) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/fog/digitalocean/models/compute/server.rb', line 83

def setup(credentials = {})
  requires :ssh_ip_address
  require 'net/ssh'

  commands = [
    %{mkdir .ssh},
    %{passwd -l #{username}},
    %{echo "#{Fog::JSON.encode(Fog::JSON.sanitize(attributes))}" >> ~/attributes.json}
  ]
  if public_key
    commands << %{echo "#{public_key}" >> ~/.ssh/authorized_keys}
  end

  # wait for aws to be ready
  wait_for { sshable?(credentials) }

  Fog::SSH.new(ssh_ip_address, username, credentials).run(commands)
end

#shutdownObject

Shutdown the server

Sends a shutdown signal to the operating system. The server consumes resources while powered off so you are still charged.



53
54
55
56
# File 'lib/fog/digitalocean/models/compute/server.rb', line 53

def shutdown
  requires :id
  service.shutdown_server self.id
end

#startObject

Power on the server.

The server consumes resources while powered on so you will be charged.

Each time a server is spun up, even if for a few seconds, it is charged for an hour.



78
79
80
81
# File 'lib/fog/digitalocean/models/compute/server.rb', line 78

def start
  requires :id
  service.power_on_server self.id
end

#stopObject

Power off the server

Works as a power switch. The server consumes resources while powered off so you are still charged.



65
66
67
68
# File 'lib/fog/digitalocean/models/compute/server.rb', line 65

def stop
  requires :id
  service.power_off_server self.id
end

#updateObject

DigitalOcean API does not support updating server state

Raises:

  • (NotImplementedError)


173
174
175
176
# File 'lib/fog/digitalocean/models/compute/server.rb', line 173

def update
  msg = 'DigitalOcean servers do not support updates'
  raise NotImplementedError.new(msg)
end