mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
2e0b7e545a
Done with `rubocop --auto-correct --only EmptyLineBetweenDefs,EmptyLines,EmptyLinesAroundBody`
84 lines
3 KiB
Ruby
84 lines
3 KiB
Ruby
require 'fog/core/model'
|
|
require 'fog/rackspace/models/auto_scale/group_config'
|
|
require 'fog/rackspace/models/auto_scale/launch_config'
|
|
require 'fog/rackspace/models/auto_scale/policies'
|
|
|
|
module Fog
|
|
module Rackspace
|
|
class AutoScale
|
|
class GroupBuilder
|
|
class << self
|
|
def build(service, attributes)
|
|
service.groups.new :group_config => build_group_config(attributes), :launch_config => build_server_launch_config(attributes)
|
|
end
|
|
|
|
def build_group_config(attributes)
|
|
Fog::Rackspace::AutoScale::GroupConfig.new :max_entities => attributes[:max_entities],
|
|
:min_entities => attributes[:min_entities],
|
|
:cooldown => attributes[:cooldown],
|
|
:name => attributes[:name],
|
|
:metadata => attributes[:metadata] || {}
|
|
end
|
|
|
|
def build_server_launch_config(attributes)
|
|
return nil unless attributes[:launch_config_type] == :launch_server
|
|
args = {"server" => build_server_template(attributes) }
|
|
args["loadBalancers"] = build_load_balancers(attributes) if attributes[:load_balancers]
|
|
|
|
Fog::Rackspace::AutoScale::LaunchConfig.new :type => :launch_server, :args => args
|
|
end
|
|
|
|
private
|
|
|
|
def build_load_balancers(attributes)
|
|
return nil unless attributes[:load_balancers]
|
|
|
|
load_balancers = attributes[:load_balancers].is_a?(Array) ? attributes[:load_balancers] : [attributes[:load_balancers]]
|
|
load_balancers.collect do |obj|
|
|
obj.is_a?(Hash) ? obj : load_balancer_to_hash(obj)
|
|
end
|
|
end
|
|
|
|
def load_balancer_to_hash(lb)
|
|
raise ArgumentError.new("Expected LoadBalancer") unless lb.respond_to?(:id) && lb.respond_to?(:port)
|
|
{
|
|
"port" => lb.port,
|
|
"loadBalancerId" => lb.id
|
|
}
|
|
end
|
|
|
|
def build_server_template(attributes)
|
|
image_id = get_id(:image, attributes)
|
|
flavor_id = get_id(:flavor, attributes)
|
|
|
|
server_template = {
|
|
"name" => attributes[:server_name],
|
|
"imageRef" => image_id,
|
|
"flavorRef" => flavor_id,
|
|
"OS-DCF =>diskConfig" => attributes[:disk_config] || "MANUAL",
|
|
"metadata" => attributes[:server_metadata] || {}
|
|
}
|
|
|
|
server_template["personality"] = attributes[:personality] if attributes[:personality]
|
|
server_template["networks"] = networks_to_hash(attributes[:networks]) if attributes[:networks]
|
|
server_template
|
|
end
|
|
|
|
def model?(obj)
|
|
obj.class.ancestors.include?(Fog::Model)
|
|
end
|
|
|
|
def get_id(type, attributes)
|
|
id = attributes["#{type}_id".to_sym]
|
|
type_key = type.to_sym
|
|
id ||= model?(attributes[type_key]) ? attributes[type_key].id : attributes[type_key]
|
|
end
|
|
|
|
def networks_to_hash(networks)
|
|
networks.collect {|n| {"uuid" => n}}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|