1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/brightbox/models/compute/server_group.rb
2011-11-17 16:41:59 +00:00

96 lines
2.8 KiB
Ruby

require 'fog/core/model'
module Fog
module Compute
class Brightbox
# A server group is a collection of servers
#
# Certain actions can accept a server group and affect all members
class ServerGroup < Fog::Model
identity :id
attribute :url
attribute :resource_type
attribute :name
attribute :description
attribute :default
attribute :created_at, :type => :time
attribute :server_ids, :aliases => "servers"
def save
options = {
:name => name,
:description => description
}.delete_if {|k,v| v.nil? || v == "" }
data = connection.create_server_group(options)
merge_attributes(data)
true
end
def servers
srv_ids = server_ids.collect {|srv| srv["id"]}
srv_ids.collect do |srv_id|
connection.servers.get(srv_id)
end
end
# Adds specified servers to this server group
#
# @param [Array] identifiers array of server identifier strings to add
# @return [Fog::Compute::ServerGroup]
def add_servers identifiers
requires :identity
options = {
:servers => server_references(identifiers)
}
data = connection.add_servers_server_group identity, options
merge_attributes data
end
# Removes specified servers from this server group
#
# @param [Array] identifiers array of server identifier strings to remove
# @return [Fog::Compute::ServerGroup]
def remove_servers identifiers
requires :identity
options = {
:servers => server_references(identifiers)
}
data = connection.remove_servers_server_group identity, options
merge_attributes data
end
# Moves specified servers from this server group to the specified destination server group
#
# @param [Array] identifiers array of server identifier strings to move
# @param [String] destination_group_id destination server group identifier
# @return [Fog::Compute::ServerGroup]
def move_servers identifiers, destination_group_id
requires :identity
options = {
:servers => server_references(identifiers),
:destination => destination_group_id
}
data = connection.move_servers_server_group identity, options
merge_attributes data
end
def destroy
requires :identity
connection.destroy_server_group(identity)
true
end
protected
def server_references identifiers
identifiers.map {|id| {"server" => id} }
end
end
end
end
end