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

Attributes inherited from Server

#private_key, #private_key_path, #public_key, #public_key_path, #ssh_options, #ssh_port, #username

Attributes inherited from Model

#collection, #service

Instance Method Summary collapse

Methods inherited from Server

#scp, #scp_download, #ssh, #ssh_ip_address, #ssh_ip_address=, #sshable?

Methods inherited from Model

#initialize, #inspect, #reload, #symbolize_keys, #to_json, #wait_for

Methods included from Attributes::ClassMethods

#_load, #aliases, #attribute, #attributes, #identity, #ignore_attributes, #ignored_attributes

Methods included from Fog::Core::DeprecatedConnectionAccessors

#connection, #connection=, #prepare_service_value

Methods included from Attributes::InstanceMethods

#_dump, #attributes, #dup, #identity, #identity=, #merge_attributes, #new_record?, #persisted?, #requires, #requires_one

Constructor Details

This class inherits a constructor from Fog::Model

Instance Attribute Details

#ssh_keys=(value) ⇒ Object (writeonly)

Sets the attribute ssh_keys

Parameters:

  • value

    the value to set the attribute ssh_keys to.



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

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

#ip_addressObject

Deprecated: Use public_ip_address instead.



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

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.



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

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.



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

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:



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 119

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



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

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.



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

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.



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

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.



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

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