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
Instance Method Summary collapse
- #create_instance(instance_name) ⇒ Object
- #flavor ⇒ Object
- #image ⇒ Object
-
#initialize(os_compute, settings) ⇒ PromptsCreateInstance
constructor
A new instance of PromptsCreateInstance.
- #keypair ⇒ Object
- #userdata ⇒ Object
Constructor Details
#initialize(os_compute, settings) ⇒ PromptsCreateInstance
Returns a new instance of PromptsCreateInstance.
4 5 6 7 |
# File 'lib/danarchy_sys/cli/instance_manager/prompts_create_instance.rb', line 4 def initialize(os_compute, settings) @os_compute = os_compute @settings = settings end |
Instance Method Details
#create_instance(instance_name) ⇒ Object
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 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/danarchy_sys/cli/instance_manager/prompts_create_instance.rb', line 9 def create_instance(instance_name) # 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 @os_compute.instances.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 = self.image # Prompt for flavor puts "\nSelect a flavor (instance size) for #{instance_name}" flavor = self.flavor # Prompt for keypair puts "\nSelect a keypair (SSH key) for #{instance_name}" keypair = self.keypair # Prompt for userdata print "\nEnter a path to userdata for #{instance_name} or leave blank for no userdata: " file, userdata = self.userdata # Print summary and prompt to continue puts "\n================= Instance Summary ===================" puts "\nInstance Name: #{instance_name}" puts " Linux: #{image.name}" puts "Instance Size: #{flavor.name}" puts " Keypair: #{keypair.name}" puts " UserData: #{file}" puts "\n --- UserData --- \n#{userdata}\n --- End UserData ---\n" if userdata puts "\n=============== End Instance Summary =================" 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 = @os_compute.instances.create_instance(instance_name, image.id, flavor.id, keypair.name, userdata) else puts "Abandoning creation of #{instance_name}! Returning to chooser." instance = nil end instance_check = instance ? @os_compute.instances.check_instance(instance_name) : false if !instance return false elsif instance_check == true puts "Instance #{instance.name} is ready!" return instance elsif instance_check == false puts "Error: Could not create instance: #{instance_name}" end instance end |
#flavor ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/danarchy_sys/cli/instance_manager/prompts_create_instance.rb', line 90 def flavor flavors_numbered = Helpers.array_to_numhash(@os_compute.flavors.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" @os_compute.flavors.get_flavor_by_name(flavor_name) end |
#image ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/danarchy_sys/cli/instance_manager/prompts_create_instance.rb', line 74 def image images_numbered = Helpers.array_to_numhash(@os_compute.images.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" @os_compute.images.get_image_by_name(image_name) end |
#keypair ⇒ Object
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 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/danarchy_sys/cli/instance_manager/prompts_create_instance.rb', line 105 def keypair keypairs = Helpers.objects_to_numhash(@os_compute.keypairs.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 @os_compute.keypairs.create_keypair(keypair_name) else print 'Please enter an option from above: ' end end end @os_compute.keypairs.get_keypair(keypair_name) end |
#userdata ⇒ Object
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/danarchy_sys/cli/instance_manager/prompts_create_instance.rb', line 153 def userdata userdata = nil file = gets.chomp return ['-- no userdata --', nil] if file.empty? file = File.(file) userdata = File.exist?(file) ? File.read(file) : '' if userdata.empty? print 'File is empty!' userdata = editor(file) else puts userdata + "\n\n" print "Do any changes need to be made to '#{file}'? (Y/N): " if gets.chomp =~ /^y(es)?$/i userdata = editor(file) end end return [file, userdata] end |