class InstanceManager
Public Class Methods
chooser()
click to toggle source
# File lib/danarchy_sys/cli/instance_manager.rb, line 102 def self.chooser instances_numhash = Helpers.objects_to_numhash(@os_compute.instances.all_instances) instance_name = nil instance = nil # Create a new instances if none exist if instances_numhash.empty? print 'No existing instances were found. Should we create a new one? (Y/N): ' abort('Exiting!') unless gets.chomp =~ /^y(es)?$/i instance = @prompts_create_instance.create_instance(nil) puts "Working with: #{instance.name}\tStatus: #{instance.state}" return instance end puts 'Available instances:' istatus = InstanceStatus.new(@os_compute) istatus.all_instances(instances_numhash) # Loop input until an existing instance is selected print 'Enter an instance to manage or enter a name for a new instance: ' until instances_numhash.values.collect{|i| i[:name]}.include?(instance_name) instance_name = gets instance_name = instance_name ? instance_name.chomp : abort('Exiting!') until instance_name.empty? == false print 'Input was blank! Enter an instance or Id from above: ' instance_name = gets.chomp end abort('Exiting') if instance_name == 'exit' return 'main' if instance_name == 'main' # Accept instance Id as an entry if instance_name =~ /^[0-9]*$/ until instances_numhash.keys.include?(instance_name.to_i) print "#{instance_name} is not a valid Id. Enter an Id from above: " instance_name = gets.chomp end instance_name = instances_numhash[instance_name.to_i][:name].to_s end unless instances_numhash.values.collect{|i| i[:name]}.include?(instance_name) print "#{instance_name} is not a valid instance. Should we create a new instance named #{instance_name}? (Y/N): " if gets.chomp =~ /^y(es)?$/i instance = @prompts_create_instance.create_instance(instance_name) return instance else puts "Not creating new instance: #{instance_name}." return false end end end instance = @os_compute.instances.get_instance(instance_name) Menus.print_menu('instance') puts "Managing instance: #{instance_name}\tStatus: #{instance.state}" instance end
manager(os_compute, settings)
click to toggle source
# File lib/danarchy_sys/cli/instance_manager.rb, line 5 def self.manager(os_compute, settings) @os_compute = os_compute @settings = settings @prompts_create_instance = PromptsCreateInstance.new(@os_compute, @settings) puts 'Instance Manager: enter \'help\' to view available commands or \'main\' for the main menu.' menu = Menus.numbered_menu('instance') instance = false loop do trap('SIGINT') { print "\nEnter an instance to manage or enter a name for a new instance: " } while instance == false instance = chooser return Menus.print_menu('main') if instance == 'main' end print "#{instance.name} ~: " if instance cmd = gets cmd = cmd ? cmd.chomp : abort('Exiting!') abort('Exiting!') if cmd == 'exit' if cmd =~ /^[0-9]*$/ menu[cmd.to_i].map { |k, v| cmd = k } if menu.keys.include? cmd.to_i end if cmd == 'help' Menus.print_menu('instance') elsif cmd == 'main' return Menus.print_menu('main') elsif cmd == 'chooser' instance = chooser elsif cmd == 'create' instance = @prompts_create_instance.create_instance(nil) elsif cmd == 'delete' print "Are you sure you wish to delete instance: #{instance.name}? (this is permanent!) (Y/N): " delete = @os_compute.instances.delete_instance(instance.name) if gets.chomp =~ /^y(es)?$/i if delete == true puts "#{instance.name} has been deleted! Returning to the instance chooser." instance = chooser else puts "#{instance.name} was not deleted!" end elsif cmd == 'status' instance = @os_compute.instances.get_instance(instance.name) if instance.state != 'ACTIVE' printf("%#{instance.name.size}s %0s %0s\n", instance.name, ' => ', instance.state) elsif @os_compute.ssh(instance, 'uptime')[:stderr] printf("%#{instance.name.size}s %0s %0s\n", instance.name, ' => ', 'WAITING') else printf("%#{instance.name.size}s %0s %0s\n", instance.name, ' => ', instance.state) end elsif %w(pause unpause suspend resume start stop).include?(cmd.to_s) status = instance.state if cmd =~ /e$/ print "#{cmd.gsub(/e$/, 'ing')} #{instance.name} ." else print "#{cmd}ing #{instance.name} ." end response = @os_compute.instances.send(cmd.to_s, instance.name.to_s) if response == false puts "\nInvalid action for #{instance.name}'s current status!" next end until status != instance.state instance = @os_compute.instances.get_instance(instance.name) sleep(3) print ' .' end printf("\n%#{instance.name.size}s %0s %0s\n", instance.name, ' => ', instance.state) elsif cmd == 'rebuild' image = @prompts_create_instance.image print "Should we rebuild #{instance.name} with image: #{image.name}? (Y/N): " if gets.chomp =~ /^y(es)?$/i puts "Rebuilding #{instance.name} with #{image.name}" instance = @os_compute.instances.rebuild_instance(instance, image) puts "\nRebuild in progress!" else puts "Not rebuilding #{instance.name} at this time." end elsif cmd == 'connect' if instance.state == 'ACTIVE' @os_compute.ssh(instance.name) else puts "Unable to connect: #{instance.name} is not running!" end else Menus.print_menu('instance') puts "\nCommand \'#{cmd}\' not available. Enter a command from above." end return Menus.print_menu('main') if instance == 'main' end end