class LinuxAdmin::Hosts
Attributes
filename[RW]
parsed_file[RW]
raw_lines[RW]
Public Class Methods
new(filename = "/etc/hosts")
click to toggle source
# File lib/linux_admin/hosts.rb, line 7 def initialize(filename = "/etc/hosts") @filename = filename self.reload end
Public Instance Methods
add_alias(address, hostname, comment = nil)
click to toggle source
# File lib/linux_admin/hosts.rb, line 23 def add_alias(address, hostname, comment = nil) add_name(address, hostname, false, comment) end
Also aliased as: update_entry
hostname()
click to toggle source
# File lib/linux_admin/hosts.rb, line 46 def hostname result = Common.run(Common.cmd("hostname")) result.success? ? result.output.strip : nil end
hostname=(name)
click to toggle source
# File lib/linux_admin/hosts.rb, line 37 def hostname=(name) if Common.cmd?("hostnamectl") Common.run!(Common.cmd('hostnamectl'), :params => ['set-hostname', name]) else File.write("/etc/hostname", name) Common.run!(Common.cmd('hostname'), :params => {:file => "/etc/hostname"}) end end
reload()
click to toggle source
# File lib/linux_admin/hosts.rb, line 12 def reload @raw_lines = File.read(@filename).split("\n") parse_file end
save()
click to toggle source
# File lib/linux_admin/hosts.rb, line 17 def save cleanup_empty @raw_lines = assemble_lines File.write(@filename, @raw_lines.join("\n") + "\n") end
set_canonical_hostname(address, hostname, comment = nil)
click to toggle source
# File lib/linux_admin/hosts.rb, line 33 def set_canonical_hostname(address, hostname, comment = nil) add_name(address, hostname, true, comment) end
set_loopback_hostname(hostname, comment = nil)
click to toggle source
# File lib/linux_admin/hosts.rb, line 29 def set_loopback_hostname(hostname, comment = nil) ["::1", "127.0.0.1"].each { |address| add_name(address, hostname, true, comment, false) } end
Private Instance Methods
add_name(address, hostname, fqdn, comment, remove_existing = true)
click to toggle source
# File lib/linux_admin/hosts.rb, line 53 def add_name(address, hostname, fqdn, comment, remove_existing = true) # Delete entries for this hostname first @parsed_file.each { |i| i[:hosts].to_a.delete(hostname) } if remove_existing # Add entry line_number = @parsed_file.find_path(address).first if line_number.blank? @parsed_file.push(:address => address, :hosts => [hostname], :comment => comment) else if fqdn new_hosts = @parsed_file.fetch_path(line_number, :hosts).to_a.unshift(hostname) else new_hosts = @parsed_file.fetch_path(line_number, :hosts).to_a.push(hostname) end @parsed_file.store_path(line_number, :hosts, new_hosts) @parsed_file.store_path(line_number, :comment, comment) if comment end end
assemble_lines()
click to toggle source
# File lib/linux_admin/hosts.rb, line 96 def assemble_lines @parsed_file.each_with_object([]) { |l, a| a.push(l[:blank] ? "" : build_line(l[:address], l[:hosts], l[:comment])) } end
build_line(address, hosts, comment)
click to toggle source
# File lib/linux_admin/hosts.rb, line 100 def build_line(address, hosts, comment) line = [address.to_s.ljust(16), hosts.to_a.uniq] line.push("##{comment}") if comment line.flatten.join(" ").strip end
cleanup_empty()
click to toggle source
# File lib/linux_admin/hosts.rb, line 87 def cleanup_empty @parsed_file.each do |h| h.delete(:hosts) if h[:address].blank? h.delete(:address) if h[:hosts].blank? end @parsed_file.delete_blank_paths end
parse_file()
click to toggle source
# File lib/linux_admin/hosts.rb, line 73 def parse_file @parsed_file = [] @raw_lines.each { |line| @parsed_file.push(parse_line(line.strip)) } @parsed_file.delete_blank_paths end
parse_line(line)
click to toggle source
# File lib/linux_admin/hosts.rb, line 79 def parse_line(line) data, comment = line.split("#", 2) address, hosts = data.to_s.split(" ", 2) hostnames = hosts.to_s.split(" ") { :address => address.to_s, :hosts => hostnames, :comment => comment.to_s.strip, :blank => line.blank?} end