mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
96 lines
2.8 KiB
Ruby
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
|