class Fog::Hetznercloud::Compute::Server

Public Class Methods

new(options) click to toggle source
Calls superclass method
# File lib/fog/hetznercloud/models/compute/server.rb, line 30
def initialize(options)
  @async = true
  super(options)
end

Public Instance Methods

async=(value) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 186
def async=(value)
  @async = !!value
end
async?() click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 190
def async?
  @async
end
async_mode?() click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 194
def async_mode?
  async?
end
change_dns_ptr(dns_ptr, ip: public_ip_address, async: async_mode?) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 304
def change_dns_ptr(dns_ptr, ip: public_ip_address, async: async_mode?)
  requires :identity

  body = {
    ip: ip,
    dns_ptr: dns_ptr
  }

  execute_action('change_dns_ptr', async, body)
end
change_type(async: async_mode?, upgrade_disk: false, server_type:) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 278
def change_type(async: async_mode?, upgrade_disk: false, server_type:)
  requires :identity

  # FIXME: Should I shutdown and wait here as server needs to
  #        be stopped ?

  body = {
    upgrade_disk: upgrade_disk,
    server_type: server_type
  }

  execute_action('change_type', async, body)
end
create_backup(async: async_mode?, description: "Backup of click to toggle source

Returns action, imageObject

# File lib/fog/hetznercloud/models/compute/server.rb, line 240
def create_backup(async: async_mode?, description: "Backup of #{attributes[:name]} created at #{Time.now}")
  requires :identity

  create_image(async: async, description: description, type: 'backup')
end
create_image(async: async_mode?, description: "image of click to toggle source

Returns action, imageObject

# File lib/fog/hetznercloud/models/compute/server.rb, line 247
def create_image(async: async_mode?, description: "image of #{attributes[:name]} created at #{Time.now}", type: 'snapshot')
  requires :identity

  body = {
    description: description,
    type: type
  }

  execute_action('create_image', async, body)
end
datacenter=(value) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 93
def datacenter=(value)
  attributes[:datacenter] = case value
                            when Hash
                              service.datacenters.new(value)
                              attributes[:location] = service.locations.new(value['location'])
                            when String
                              service.datacenters.all(name: value).first
                            when Integer
                              service.datacenters.get(value)
                            else
                              value
                                end
end
destroy() click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 149
def destroy
  requires :identity

  service.delete_server(identity)
  true
end
disable_backup(async: async_mode?) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 315
def disable_backup(async: async_mode?)
  requires :identity

  execute_action('disable_backup', async)
end
disable_rescue(async: async_mode?) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 206
def disable_rescue(async: async_mode?)
  requires :identity

  execute_action('disable_rescue', async)
end
enable_backup(async: async_mode?, backup_window: nil) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 292
def enable_backup(async: async_mode?, backup_window: nil)
  requires :identity

  unless backup_window.nil?
    body = {
      backup_window: backup_window
    }
  end

  execute_action('enable_backup', async, body)
end
enable_rescue(type: 'linux64', ssh_keys: [], async: async_mode?) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 212
def enable_rescue(type: 'linux64', ssh_keys: [], async: async_mode?)
  requires :identity

  # FIXME: Refactor with ssh_keys=(value) above to do DRY
  sshkeys = []
  ssh_keys.each do |item|
    thing = case item
            when Hash
              service.ssh_keys.new(item)
            when String
              service.ssh_keys.all(name: item).first
            when Integer
              service.ssh_keys.get(item)
            else
              value
                       end
    sshkeys << thing.identity
  end

  body = {
    type: type,
    ssh_keys: sshkeys
  }

  execute_action('enable_rescue', async, body)
end
execute_action(action, async = true, body = {}) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 331
def execute_action(action, async = true, body = {})
  requires :identity

  request_body = service.execute_server_action(identity, action, body).body
  if (action = request_body['action'])
    service.actions.new(action).tap do |a|
      unless async
        a.wait_for { a.success? }
        reload
      end
    end
  end
  extra = service.images.new(request_body['image']) unless request_body['image'].nil?
  extra = request_body['root_password'] unless request_body['root_password'].nil?
  [action, extra]
end
image=(value) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 35
def image=(value)
  attributes[:image] = case value
                       when Hash
                         service.images.new(value)
                       when String
                         service.images.all(name: value).first
                       when Integer
                         service.images.get(value)
                       else
                         value
                       end
end
location=(value) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 80
def location=(value)
  attributes[:location] = case value
                          when Hash
                            service.locations.new(value)
                          when String
                            service.locations.all(name: value).first
                          when Integer
                            service.locations.get(value)
                          else
                            value
                           end
end
migrating?() click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 133
def migrating?
  status == 'migrating'
end
name=(value) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 115
def name=(value)
  return true if name == value
  @needsupdate = true
  attributes[:name] = value
end
poweroff(async: async_mode?) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 162
def poweroff(async: async_mode?)
  requires :identity

  execute_action('poweroff', async)
end
poweron(async: async_mode?) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 156
def poweron(async: async_mode?)
  requires :identity

  execute_action('poweron', async)
end
public_dns_name() click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 121
def public_dns_name
  "static.#{public_net['ipv4']['ip']}.clients.your-server.de"
end
public_ip_address() click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 348
def public_ip_address
  public_net['ipv6']['ip'] if public_net.key?('ipv6')
  public_net['ipv4']['ip'] if public_net.key?('ipv4')
end
ready?() click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 129
def ready?
  status == 'running'
end
reboot(async: async_mode?) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 168
def reboot(async: async_mode?)
  requires :identity

  execute_action('reboot', async)
end
rebuild_from_image(async: async_mode?, image:) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 258
def rebuild_from_image(async: async_mode?, image:)
  requires :identity

  # FIXME: Lookup images by description. As API does not support
  #        this we need to filter our own. Probably needs pagination
  #        support.
  image_id = case image
             when Fog::Hetznercloud::Compute::Image
               image.identity
             when Integer
               image
                        end

  body = {
    image: image_id
  }

  execute_action('rebuild', async, body)
end
reset(async: async_mode?) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 174
def reset(async: async_mode?)
  requires :identity

  execute_action('reset', async)
end
reset_root_password(async: async_mode?) click to toggle source

Returns action, password

# File lib/fog/hetznercloud/models/compute/server.rb, line 322
def reset_root_password(async: async_mode?)
  requires :identity
  unless ready?
    throw Fog::Hetznercloud::Error::StateError.new('ERROR: to reset the root password, the server must be running')
  end

  execute_action('reset_password', async)
end
reverse_dns_name() click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 125
def reverse_dns_name
  public_net['ipv4']['dns_ptr']
end
save() click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 141
def save
  if persisted?
    update
  else
    create
  end
end
server_type=(value) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 67
def server_type=(value)
  attributes[:server_type] = case value
                             when Hash
                               service.server_types.new(value)
                             when String
                               service.server_types.all(name: value).first
                             when Integer
                               service.server_types.get(value)
                             else
                               value
                       end
end
shutdown(async: async_mode?) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 180
def shutdown(async: async_mode?)
  requires :identity

  execute_action('shutdown', async)
end
ssh_keys=(value) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 48
def ssh_keys=(value)
  attributes[:ssh_keys] = []
  # API does not return ssh_key
  return true if value.nil?
  value.each do |item|
    thing = case item
            when Hash
              service.ssh_keys.new(item)
            when String
              service.ssh_keys.all(name: item).first
            when Integer
              service.ssh_keys.get(item)
            else
              value
                       end
    attributes[:ssh_keys] << thing
  end
end
stopped?() click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 137
def stopped?
  status == 'off'
end
sync=(value) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 198
def sync=(value)
  @async = !value
end
sync?() click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 202
def sync?
  !@async
end
user_data=(value) click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 107
def user_data=(value)
  attributes[:user_data] = if value =~ /^(\.|~)?\/[^\/]+/
                             File.read(value)
                           else
                             value
                           end
end

Private Instance Methods

create() click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 355
def create
  requires :name, :server_type, :image

  options = {}
  options[:ssh_keys] = ssh_keys.map(&:identity) unless ssh_keys.nil?
  options[:user_data] = user_data unless user_data.nil?
  options[:start_after_create] = start_after_create unless start_after_create.nil?
  options[:location] = location.identity unless location.nil?
  options[:datacenter] = datacenter.identity unless datacenter.nil?

  if (server = service.create_server(name, image.identity, server_type.identity, options).body['server'])
    merge_attributes(server)
    true
  else
    false
  end
end
update() click to toggle source
# File lib/fog/hetznercloud/models/compute/server.rb, line 373
def update
  requires :identity, :name
  return true unless @needsupdate

  body = attributes.dup

  body = {
    name: name
  }

  if (server = service.update_server(identity, body).body['server'])
    merge_attributes(server)
    true
  else
    false
  end
end