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