class SshShort::NodeMapper

Public Class Methods

new() click to toggle source
# File lib/ssh_short/nodemapper.rb, line 5
def initialize
  @node_map_file = SshShort::NODEMAP_FILE
  @node_map = NodeMapper.read_node_map(@node_map_file)
end
read_node_map(node_map_file) click to toggle source
# File lib/ssh_short/nodemapper.rb, line 45
def read_node_map(node_map_file)
  File.exist?(node_map_file) ? YAML.load_file(node_map_file) : []
end
save_node_map(node_map_file, node_map) click to toggle source
# File lib/ssh_short/nodemapper.rb, line 49
def save_node_map(node_map_file, node_map)
  File.open(node_map_file, 'w') { |fo| fo.puts node_map.to_yaml }
end

Public Instance Methods

get_aliases() click to toggle source
# File lib/ssh_short/nodemapper.rb, line 40
def get_aliases
  @node_map.collect { |node| node[:alias] }.compact
end
get_node(host_or_alias) click to toggle source

returns nil if no matching node is found

# File lib/ssh_short/nodemapper.rb, line 16
def get_node(host_or_alias)
  if is_alias? host_or_alias
    get_node_by_alias host_or_alias
  else
    get_node_by_host host_or_alias
  end
end
is_alias?(input) click to toggle source
# File lib/ssh_short/nodemapper.rb, line 10
def is_alias?(input)
  aliases = get_aliases
  aliases.include? input
end
update_node(node) click to toggle source
# File lib/ssh_short/nodemapper.rb, line 24
def update_node(node)
  if alias_changed? node
    existing_node_with_alias = get_node_by_alias(node[:alias])
    if existing_node_with_alias
      puts "Moving alias #{node[:alias]} from #{existing_node_with_alias[:host]} to #{node[:host]}"
      existing_node_with_alias.delete :alias
      upsert_node existing_node_with_alias
    end
  end

  upsert_node node

  NodeMapper.save_node_map(@node_map_file, @node_map)
  @node_map
end

Private Instance Methods

alias_changed?(node) click to toggle source
# File lib/ssh_short/nodemapper.rb, line 56
def alias_changed?(node)
  return false unless node[:alias]
  old_node = get_node_by_host node[:host]
  old_node ? old_node[:alias] != node[:alias] : true
end
get_node_by_alias(node_alias) click to toggle source
# File lib/ssh_short/nodemapper.rb, line 70
def get_node_by_alias(node_alias)
  nodes = @node_map.find_all { |node| node[:alias] == node_alias }
  # abort "Error: More than one Node has alias #{node_alias} in Node Map" if (nodes.count > 1)
  nodes[0]
end
get_node_by_host(host) click to toggle source
# File lib/ssh_short/nodemapper.rb, line 76
def get_node_by_host(host)
  nodes = @node_map.find_all { |node| node[:host] == host }
  # abort "Error: More than one Node has host #{host} in Node Map" if (nodes.count > 1)
  nodes[0]
end
upsert_node(node) click to toggle source
# File lib/ssh_short/nodemapper.rb, line 62
def upsert_node(node)
  existing_node = get_node_by_host node[:host]
  if existing_node
    @node_map.delete existing_node
  end
  @node_map.push node
end