mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
76 lines
2 KiB
Ruby
76 lines
2 KiB
Ruby
require 'fog/core/model'
|
|
|
|
module Fog
|
|
module Compute
|
|
class Glesys
|
|
|
|
class Ip < Fog::Model
|
|
|
|
extend Fog::Deprecation
|
|
|
|
identity :ip
|
|
|
|
attribute :ip, :aliases => "ipaddress"
|
|
attribute :datacenter
|
|
attribute :version, :aliases => "ipversion"
|
|
attribute :platform
|
|
attribute :netmask
|
|
attribute :broadcast
|
|
attribute :gateway
|
|
attribute :nameservers
|
|
attribute :serverid
|
|
attribute :reserved
|
|
attribute :ptr
|
|
attribute :cost
|
|
|
|
def attached?
|
|
!serverid.nil?
|
|
end
|
|
|
|
# Return an unused ip-address to the pool of free ips.
|
|
def release
|
|
requires :ip
|
|
raise Fog::Errors::Error.new('You can\'t release a ip that is attached to a server') if attached?
|
|
service.ip_release(
|
|
:ipaddress => identity
|
|
)
|
|
end
|
|
|
|
# Add an ip-adress to the server.
|
|
def attach(server)
|
|
requires :ip
|
|
server = server.serverid if server.is_a?(Fog::Compute::Glesys::Server)
|
|
raise Fog::Errors::Error.new("Ip is already attached to a server, #{serverid}") unless serverid.nil?
|
|
data = service.ip_add(
|
|
:ipaddress => identity,
|
|
:serverid => server
|
|
).body["response"]["details"]
|
|
merge_attributes data
|
|
end
|
|
|
|
# Remove an ip from the server
|
|
def remove(options = {})
|
|
requires :ip
|
|
raise Fog::Errors::Error.new('Ip is not attached to a server.') if serverid.nil?
|
|
data = service.ip_remove({:ipaddress => ip}.merge!(options)).body["response"]["details"]
|
|
merge_attributes data
|
|
end
|
|
|
|
# Remove the ip from a server and release it
|
|
def destroy
|
|
requires :ip
|
|
remove(:release => true)
|
|
end
|
|
|
|
def take
|
|
requires :ip
|
|
data = service.ip_take(
|
|
:ipaddress => ip
|
|
).body["response"]["details"]
|
|
merge_attributes data
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|