Class: PromptsCreateInstance
- Inherits:
-
Object
- Object
- PromptsCreateInstance
- Defined in:
- lib/danarchy_sys/cli/instance_manager/prompts_create_instance.rb
Overview
CLI Prompt to create a new instance
Class Method Summary collapse
- .create_instance(os_compute, instance_name) ⇒ Object
- .flavor(comp_flvs) ⇒ Object
- .image(comp_imgs) ⇒ Object
- .item_chooser(items_numbered, item) ⇒ Object
- .keypair(comp_keys) ⇒ Object
Class Method Details
.create_instance(os_compute, instance_name) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/danarchy_sys/cli/instance_manager/prompts_create_instance.rb', line 4 def self.create_instance(os_compute, instance_name) comp_inst = os_compute.instances comp_imgs = os_compute.images comp_flvs = os_compute.flavors comp_keys = os_compute.keypairs # Prompt for and check that instance_name is unused if instance_name == nil print "\nWhat should we name the instance?: " instance_name = gets.chomp end # Make sure instance_name isn't already in use until comp_inst.check_instance(instance_name) == false print "\n#{instance_name} already exists! Try another name: " instance_name = gets.chomp end puts "Creating instance: #{instance_name}" # Prompt for image puts "\nSelect an image (operating system) for #{instance_name}" image = PromptsCreateInstance.image(comp_imgs) # Prompt for flavor puts "\nSelect a flavor (instance size) for #{instance_name}" flavor = PromptsCreateInstance.flavor(comp_flvs) # Prompt for keypair puts "\nSelect a keypair (SSH key) for #{instance_name}" keypair = PromptsCreateInstance.keypair(comp_keys) # Print summary and prompt to continue puts "\nInstance Name: #{instance_name}" puts " Linux: #{image.name}" puts "Instance Size: #{flavor.name}" puts " Keypair: #{keypair.name}" print 'Should we continue with creating the instance? (Y/N): ' instance = nil continue = gets.chomp if continue =~ /^y(es)?$/i puts "Creating instance: #{instance_name}" instance = comp_inst.create_instance(instance_name, image.id, flavor.id, keypair.name) else puts "Abandoning creation of #{instance_name}" return false end instance_check = comp_inst.check_instance(instance_name) if instance_check == true puts "Instance #{instance.name} is ready!" return instance else raise "Error: Could not create instance: #{instance_name}" if instance_check == false end end |
.flavor(comp_flvs) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/danarchy_sys/cli/instance_manager/prompts_create_instance.rb', line 80 def self.flavor(comp_flvs) flavors_numbered = Helpers.array_to_numhash(comp_flvs.all_flavors.sort_by(&:ram)) puts "\nAvailable Instance Flavors:" puts sprintf("%0s %-15s %-10s %-10s %0s", 'Id', 'Name', 'RAM', 'VCPUs', 'Disk') flavors_numbered.each do |id, flavor| print sprintf("%0s %-15s %-10s %-10s %0s\n", "#{id}.", flavor.name.split('.')[1], flavor.ram, flavor.vcpus, flavor.disk) end flavor_name = item_chooser(flavors_numbered, 'flavor') print "Flavor Name: #{flavor_name.split('.')[1]}\n" comp_flvs.get_flavor_by_name(flavor_name) end |
.image(comp_imgs) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/danarchy_sys/cli/instance_manager/prompts_create_instance.rb', line 64 def self.image(comp_imgs) images_numbered = Helpers.array_to_numhash(comp_imgs.all_images) # List available images in a numbered hash. puts "\nAvailable Images:" i_name_length = images_numbered.values.collect{|i| i.name}.max.size printf("%0s %-#{i_name_length}s\n", 'Id', 'Image') images_numbered.each do |id, image| printf("%0s %-#{i_name_length}s\n", "#{id}.", image.name) end image_name = item_chooser(images_numbered, 'image') print "Image Name: #{image_name}\n" comp_imgs.get_image_by_name(image_name) end |
.item_chooser(items_numbered, item) ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/danarchy_sys/cli/instance_manager/prompts_create_instance.rb', line 144 def self.item_chooser(items_numbered, item) # Loop input until existing object is selected item_name = nil print "Which #{item} should we use for this instance?: " until items_numbered.values.collect{|i| i.name}.include?(item_name) item_name = gets.chomp if item_name =~ /^[0-9]*$/ until items_numbered.keys.include?(item_name.to_i) print "#{item_name} is not a valid Id. Enter an Id from above: " item_name = gets.chomp end item_name = items_numbered[item_name.to_i].name end item_check = items_numbered.values.collect{|i| i.name}.include?(item_name) print "#{item_name} is not a valid item. Please enter an option from above: " if item_check == false end item_name end |
.keypair(comp_keys) ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/danarchy_sys/cli/instance_manager/prompts_create_instance.rb', line 95 def self.keypair(comp_keys) keypairs = Helpers.objects_to_numhash(comp_keys.all_keypairs) keypair_name = nil # List available keypairs puts "\nAvailable Keypairs:" print sprintf("%0s %-15s\n", 'Id', 'KeyPair Name') keypairs.each do |id, key| print sprintf("%0s %-15s\n", "#{id}.", key[:name]) end # Loop input until existing flavor is selected or create a new one print 'Enter a keypair to use for this instance or enter a name for a new keypair : ' keypair_check = false until keypair_check == true keypair_name = gets.chomp # Accept keypair Id as an entry if keypair_name =~ /^[0-9]*$/ until keypairs.keys.include?(keypair_name.to_i) print "#{keypair_name} is not a valid Id. Enter an Id from above, or \'return\' to restart keypair selection. : " keypair_name = gets.chomp return keypair(settings, compute) if keypair_name == 'return' end keypair_name = keypairs[keypair_name.to_i][:name] end keypair_check = Helpers.check_nested_hash_value(keypairs, :name, keypair_name) if keypair_check == false print "#{keypair_name} is not an existing keypair. Should we create a new keypair named #{keypair_name}? (Y/N): " if gets.chomp =~ /^y(es)?$/i puts "Creating keypair: #{keypair_name}!" return comp_keys.create_keypair(keypair_name) else print 'Please enter an option from above: ' end end end comp_keys.get_keypair(keypair_name) end |