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.



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

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!



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

def destroy
  requires :id
  service.destroy_server id
end

#flavorObject

Helper method to get the flavor name



181
182
183
184
# File 'lib/fog/digitalocean/models/compute/server.rb', line 181

def flavor
  requires :flavor_id
  @flavor ||= service.flavors.get(flavor_id.to_i)
end

#imageObject

Helper method to get the image name



187
188
189
190
# File 'lib/fog/digitalocean/models/compute/server.rb', line 187

def image
  requires :image_id
  @image ||= service.images.get(image_id.to_i)
end

#ip_addressObject

Deprecated: Use public_ip_address instead.



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

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

#ip_addressesObject

Helper method to get an array with all available IP addresses



199
200
201
# File 'lib/fog/digitalocean/models/compute/server.rb', line 199

def ip_addresses
  [public_ip_address, private_ip_address].flatten.select(&:present?)
end

#power_cycleObject

Reboot the server (hard reboot).

Powers the server off and then powers it on again.



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

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)


170
171
172
# File 'lib/fog/digitalocean/models/compute/server.rb', line 170

def ready?
  state == 'active'
end

#rebootObject

Reboot the server (soft reboot).

The preferred method of rebooting a server.



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

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

#regionObject

Helper method to get the region name



193
194
195
196
# File 'lib/fog/digitalocean/models/compute/server.rb', line 193

def region
  requires :region_id
  @region ||= service.regions.get(region_id.to_i)
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)


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

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] = private_networking
  options[:backups_active] =  backups_active

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

#setup(credentials = {}) ⇒ Object



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

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.



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

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.



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

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.



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

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

#updateObject

DigitalOcean API does not support updating server state

Raises:

  • (NotImplementedError)


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

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