class Fog::Scaleway::Compute::Server

Public Instance Methods

attach_volume(volume) click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 143
def attach_volume(volume)
  volumes[next_volume_index] = to_volume(volume)

  save if persisted?
end
bootscript=(value) click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 31
def bootscript=(value)
  attributes[:bootscript] = case value
                            when Hash
                              service.bootscripts.new(value)
                            when String
                              service.bootscripts.new(identity: value)
                            else
                              value
                            end
end
destroy() click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 99
def destroy
  requires :identity

  service.delete_server(identity)
  true
end
detach_volume(volume) click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 149
def detach_volume(volume)
  volumes.reject! { |_k, v| v == to_volume(volume) }

  save if persisted?
end
execute_action(action, async = true) click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 130
def execute_action(action, async = true)
  requires :identity

  if (task = service.execute_server_action(identity, action).body['task'])
    service.tasks.new(task).tap do |t|
      unless async
        t.wait_for { t.success? }
        reload
      end
    end
  end
end
image=(value) click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 42
def image=(value)
  attributes[:image] = case value
                       when Hash
                         service.images.new(value)
                       when String
                         service.images.new(identity: value)
                       else
                         value
                       end
end
poweroff(async = true) click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 112
def poweroff(async = true)
  requires :identity

  execute_action('poweroff', async)
end
poweron(async = true) click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 106
def poweron(async = true)
  requires :identity

  execute_action('poweron', async)
end
private_dns_name() click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 83
def private_dns_name
  "#{identity}.priv.cloud.scaleway.com"
end
private_ip_address() click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 159
def private_ip_address
  private_ip
end
public_dns_name() click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 79
def public_dns_name
  "#{identity}.pub.cloud.scaleway.com"
end
public_ip=(value) click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 53
def public_ip=(value)
  attributes[:public_ip] = case value
                           when Hash
                             service.ips.new(value)
                           when String
                             service.ips.new(identity: value)
                           else
                             value
                           end
end
public_ip_address() click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 155
def public_ip_address
  public_ip.address if public_ip
end
ready?() click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 87
def ready?
  state == 'running'
end
reboot(async = true) click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 118
def reboot(async = true)
  requires :identity

  execute_action('reboot', async)
end
save() click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 91
def save
  if persisted?
    update
  else
    create
  end
end
security_group=(value) click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 64
def security_group=(value)
  attributes[:security_group] = case value
                                when Hash
                                  service.security_groups.new(value)
                                when String
                                  service.security_groups.new(identity: value)
                                else
                                  value
                                end
end
terminate(async = true) click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 124
def terminate(async = true)
  requires :identity

  execute_action('terminate', async)
end
volumes=(value) click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 75
def volumes=(value)
  attributes[:volumes] = Hash[value.map { |i, v| [i, to_volume(v)] }]
end

Private Instance Methods

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

  options = {}
  options[:bootscript] = bootscript.identity unless bootscript.nil?
  options[:commercial_type] = commercial_type unless commercial_type.nil?
  options[:enable_ipv6] = enable_ipv6 unless enable_ipv6.nil?
  options[:dynamic_ip_required] = dynamic_ip_required unless dynamic_ip_required.nil?
  options[:public_ip] = public_ip.identity unless public_ip.nil?
  options[:security_group] = security_group.identity unless security_group.nil?
  options[:tags] = tags unless tags.nil?

  if (server = service.create_server(name, image.identity, volumes, options).body['server'])
    merge_attributes(server)
    true
  else
    false
  end
end
next_volume_index() click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 223
def next_volume_index
  used = volumes.keys.map(&:to_i)
  (1..Float::INFINITY).find { |i| !used.include?(i) }.to_s
end
to_volume(value) click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 212
def to_volume(value)
  case value
  when Hash
    service.volumes.new(value)
  when String
    service.volumes.new(identity: value)
  else
    value
  end
end
update() click to toggle source
# File lib/fog/scaleway/models/compute/server.rb, line 185
def update
  requires :identity

  body = attributes.dup

  unless public_ip.nil?
    body[:public_ip] = {
      id: public_ip.identity,
      address: public_ip.address
    }
  end

  unless security_group.nil?
    body[:security_group] = {
      id: security_group.identity,
      name: security_group.name
    }
  end

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