From 5d6b00101b71cfa01785bb69748af327ccd546f9 Mon Sep 17 00:00:00 2001 From: Kyle Rames Date: Wed, 23 Jan 2013 14:58:42 -0600 Subject: [PATCH] [rackspace|compute] tweaking examples --- lib/fog/rackspace/examples/create_image.rb | 8 +- lib/fog/rackspace/examples/delete_image.rb | 3 +- lib/fog/rackspace/examples/delete_server.rb | 3 +- lib/fog/rackspace/examples/resize_server.rb | 97 +++++++++++++++++++++ 4 files changed, 100 insertions(+), 11 deletions(-) create mode 100644 lib/fog/rackspace/examples/resize_server.rb diff --git a/lib/fog/rackspace/examples/create_image.rb b/lib/fog/rackspace/examples/create_image.rb index 8fa18ceca..971f45cd6 100644 --- a/lib/fog/rackspace/examples/create_image.rb +++ b/lib/fog/rackspace/examples/create_image.rb @@ -44,14 +44,8 @@ servers.each_with_index do |server, i| end selected_str = get_user_input "\nEnter number" +server = servers[selected_str.to_i] -selected_id = begin - Integer(selected_str) -rescue - abort "Unrecognized input. Exiting without creating image." -end - -server = servers[selected_id] image_name = get_user_input "Enter name for image" #creates image for server diff --git a/lib/fog/rackspace/examples/delete_image.rb b/lib/fog/rackspace/examples/delete_image.rb index b4af8ed82..8f614e98d 100644 --- a/lib/fog/rackspace/examples/delete_image.rb +++ b/lib/fog/rackspace/examples/delete_image.rb @@ -60,8 +60,7 @@ if delete_str == 'ALL' snapshot_images.each {|image| image.destroy } puts "All images have been destroyed" else - delete_id = Integer(delete_str) - image = snapshot_images[delete_id] + image = snapshot_images[delete_str.to_i] image.destroy puts "#{image.name} has been destroyed" end diff --git a/lib/fog/rackspace/examples/delete_server.rb b/lib/fog/rackspace/examples/delete_server.rb index 26d509113..b9953a051 100644 --- a/lib/fog/rackspace/examples/delete_server.rb +++ b/lib/fog/rackspace/examples/delete_server.rb @@ -55,8 +55,7 @@ if delete_str == 'ALL' servers.each {|server| server.destroy } puts "All servers have been destroyed" else - delete_id = Integer(delete_str) - server = servers[delete_id] + server = servers[delete_str.to_i] server.destroy puts "#{server.name} has been destroyed" end diff --git a/lib/fog/rackspace/examples/resize_server.rb b/lib/fog/rackspace/examples/resize_server.rb new file mode 100644 index 000000000..a4dc1b527 --- /dev/null +++ b/lib/fog/rackspace/examples/resize_server.rb @@ -0,0 +1,97 @@ +#!/usr/bin/env ruby + +# This example demonstrates how to resize servers with Fog and the Rackspace Open Cloud + +require 'rubygems' #required for Ruby 1.8.x +require './lib/fog' + +def get_user_input(prompt) + print "#{prompt}: " + gets.chomp +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 + username = Fog.credentials[:rackspace_username] + 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 + api_key = Fog.credentials[:rackspace_api_key] + api_key ||= get_user_input "Enter Rackspace API key: " +end + +#create Next Generation Cloud Server service +service = Fog::Compute.new({ + :provider => 'rackspace', + :rackspace_username => rackspace_username, + :rackspace_api_key => rackspace_api_key, + :version => :v2, # Use Next Gen Cloud Servers + :rackspace_endpoint => Fog::Compute::RackspaceV2::ORD_ENDPOINT #Use Chicago Region +}) + +#retrieve list of servers +servers = service.servers + +abort "\nThere are not any servers to resize. Try running create_server.rb\n\n" if servers.empty? + +puts "\nSelect server resize:\n\n" +servers.each_with_index do |server, i| + puts "\t #{i}. #{server.name} [#{server.public_ip_address}]" +end + +selected_str = get_user_input "\nEnter number" +server = servers[selected_str.to_i] + +puts "\n" + +# retrieve list of avaliable flavors +flavors = service.flavors + +puts "\nSelect flavor to resize to:\n\n" +flavors.each_with_index do |flavor, i| + next if server.flavor_id == flavor.id + puts "\t #{i}. #{flavor.name}" +end + +selected_flavor_str = get_user_input "\nEnter number" +selected_flavor = flavors[selected_flavor_str.to_i] + +# resize server +server.resize selected_flavor.id + +begin + # Check every 5 seconds to see if server is in the active state (ready?). + # If the server has not been built in 5 minutes (600 seconds) an exception will be raised. + server.wait_for(600, 5) do + print "." + STDOUT.flush + ready? + end + + puts "[DONE]\n\n" +rescue Fog::Errors::TimeoutError + puts "[TIMEOUT]\n\n" + + puts "This server is currently #{server.progress}% into the resize process and is taking longer to complete than expected." + puts "You can continute to monitor the build process through the web console at https://mycloud.rackspace.com/\n\n" + + exit +end + + puts "Server has been successfull resized!" + action = get_user_input "Press 'C' to confirm or 'R' to revert resize (R/C)" + + case action + when 'C' + puts "\nConfirming resize operation" + server.confirm_resize + when 'R' + puts "\nReverting resize operation" + server.revert_resize + else + puts "\nUnrecognized input. Exiting." + end