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.



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

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

#flavorObject

Helper method to get the flavor name



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

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

#imageObject

Helper method to get the image name



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

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

#ip_addressObject

Deprecated: Use public_ip_address instead.



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

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



197
198
199
# File 'lib/fog/digitalocean/models/compute/server.rb', line 197

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.



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

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.



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

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

#regionObject

Helper method to get the region name



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

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)


116
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 116

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



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

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 DigitalOcean 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.



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

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.



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

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.



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

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