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/rackspace/examples/auto_scale/create_scaling_group.rb

115 lines
3.2 KiB
Ruby

#!/usr/bin/env ruby
# This example demonstrates creating an auto scaling group with the Rackpace Open Cloud
require 'fog'
require 'fog/rackspace/models/auto_scale/group_builder'
# UUID for INTERNET
INTERNET = '00000000-0000-0000-0000-000000000000'
# UUID for Rackspace's service net
SERVICE_NET = '11111111-1111-1111-1111-111111111111'
def get_user_input(prompt)
print "#{prompt}: "
gets.chomp
end
def get_user_input_as_int(prompt)
str = get_user_input(prompt)
str.to_i
end
# Use username defined in ~/.fog file, if absent prompt for username.
# For more details on ~/.fog refer to http://fog.io/about/getting_started.html
def rackspace_username
Fog.credentials[:rackspace_username] || get_user_input("Enter Rackspace Username")
end
# Use api key defined in ~/.fog file, if absent prompt for api key
# For more details on ~/.fog refer to http://fog.io/about/getting_started.html
def rackspace_api_key
Fog.credentials[:rackspace_api_key] || get_user_input("Enter Rackspace API key")
end
def select_image(images)
puts "\nSelect Image For Server:\n\n"
images.each_with_index do |image, i|
puts "\t #{i}. #{image.name}"
end
select_str = get_user_input "\nEnter Image Number"
images[select_str.to_i]
end
# create auto scaling service
auto_scale_service = Fog::Rackspace::AutoScale.new({
:rackspace_username => rackspace_username,
:rackspace_api_key => rackspace_api_key,
:rackspace_region => :ord # Use Chicago Region
})
# create Next Generation Cloud Server service to get list of flavors
compute_service = Fog::Compute.new({
:provider => 'rackspace',
:rackspace_username => rackspace_username,
:rackspace_api_key => rackspace_api_key,
:version => :v2, # Use Next Gen Cloud Servers
:rackspace_region => :ord # Use Chicago Region
})
# prompt for scaling group name
scaling_group_name = get_user_input "Enter name of scaling group"
# prompt for cool down period
cooldown = get_user_input_as_int "Enter cool down period in seconds"
# prompt for miniumum number of entities
min_entities = get_user_input_as_int "Enter minimum number of servers"
# prompt for max number of entities
max_entities = get_user_input_as_int "Enter maximum number of servers"
# retrieve list of images from computer service
print "Loading available server images...."
images = compute_service.images.all
puts "[DONE]"
# prompt for server image
image = select_image(images)
# pick first server flavor
flavor = compute_service.flavors.first
attributes = {
:server_name => "autoscale_server",
:image => image,
:flavor => flavor,
:networks => [INTERNET, SERVICE_NET],
:personality => [
{
"path" => "/root/.csivh",
"contents" => "VGhpcyBpcyBhIHRlc3QgZmlsZS4="
}
],
:max_entities => max_entities,
:min_entities => min_entities,
:cooldown => cooldown,
:name => scaling_group_name,
:metadata => { "created_by" => "autoscale sample script" },
:launch_config_type => :launch_server
}
# Use builder to create group
group = Fog::Rackspace::AutoScale::GroupBuilder.build(auto_scale_service, attributes)
# save the built group
group.save
puts "\nScaling Group #{scaling_group_name} (#{group.id}) was created!"
puts "State: #{group.state}"