class Cyoi::Cli::Addresses::AddressCliOpenstack
Attributes
attributes[R]
hl[R]
provider_client[R]
Public Class Methods
new(provider_client, attributes, highline)
click to toggle source
# File lib/cyoi/cli/provider_addresses/address_cli_openstack.rb, line 7 def initialize(provider_client, attributes, highline) @provider_client = provider_client @hl = highline @attributes = attributes.is_a?(Hash) ? ReadWriteSettings.new(attributes) : attributes raise "@attributes must be ReadWriteSettings (or Hash)" unless @attributes.is_a?(ReadWriteSettings) end
Public Instance Methods
display_confirmation()
click to toggle source
# File lib/cyoi/cli/provider_addresses/address_cli_openstack.rb, line 36 def display_confirmation puts "\n" puts "Confirming: Using address #{attributes.ip}" end
export_attributes()
click to toggle source
helper to export the complete nested attributes.
# File lib/cyoi/cli/provider_addresses/address_cli_openstack.rb, line 27 def export_attributes attributes.to_nested_hash end
perform_and_return_attributes()
click to toggle source
# File lib/cyoi/cli/provider_addresses/address_cli_openstack.rb, line 14 def perform_and_return_attributes unless valid_address? if networks? subnet = select_subnet choose_address_from_subnet(subnet) else provision_address end end export_attributes end
valid_address?()
click to toggle source
# File lib/cyoi/cli/provider_addresses/address_cli_openstack.rb, line 32 def valid_address? attributes["ip"] end
Protected Instance Methods
choose_address_from_subnet(subnet)
click to toggle source
# File lib/cyoi/cli/provider_addresses/address_cli_openstack.rb, line 72 def choose_address_from_subnet(subnet) default_ip = provider_client.next_available_ip_in_subnet(subnet) puts "\n" ip = hl.ask("Choose IP ") { |q| q.default = default_ip }.to_s attributes["ip"] = ip end
networks?()
click to toggle source
# File lib/cyoi/cli/provider_addresses/address_cli_openstack.rb, line 48 def networks? provider_client.networks? end
pretty_ip_pool_ranges(subnet)
click to toggle source
# File lib/cyoi/cli/provider_addresses/address_cli_openstack.rb, line 79 def pretty_ip_pool_ranges(subnet) ranges = subnet.allocation_pools.map do |pool| "#{pool['start']}-#{pool['end']}" end ranges.join(',') end
pretty_subnet_name(subnet)
click to toggle source
# File lib/cyoi/cli/provider_addresses/address_cli_openstack.rb, line 86 def pretty_subnet_name(subnet) "#{subnet.name} (#{subnet.cidr})" end
provision_address()
click to toggle source
# File lib/cyoi/cli/provider_addresses/address_cli_openstack.rb, line 42 def provision_address print "Acquiring a public IP address... " attributes["ip"] = provider_client.provision_public_ip_address puts attributes.ip end
select_subnet()
click to toggle source
# File lib/cyoi/cli/provider_addresses/address_cli_openstack.rb, line 52 def select_subnet subnets = provider_client.subnets subnet = if subnets.size == 0 $stderr.puts "ERROR: Your OpenStack is configured for Neutron networking but you have not yet created any subnets." exit 1 elsif subnets.size == 1 subnets.first else hl.choose do |menu| menu.prompt = "Choose a subnet: " # menu.choice("AWS") { "aws" } subnets.each do |subnet| menu.choice("#{pretty_subnet_name(subnet)}") { subnet } end end end attributes["subnet_id"] = subnet.network_id subnet end