module Dory::Resolv::Macos
Public Class Methods
clean()
click to toggle source
# File lib/dory/resolv/macos.rb, line 73 def self.clean self.resolv_files.each do |filename| puts "Requesting sudo to delete '#{filename}'".green Bash.run_command("sudo rm -f #{filename}") end end
configure()
click to toggle source
# File lib/dory/resolv/macos.rb, line 58 def self.configure # have to use this hack cuz we don't run as root :-( unless Dir.exist?(self.resolv_dir) puts "Requesting sudo to create directory #{self.resolv_dir}".green Bash.run_command("sudo mkdir -p #{self.resolv_dir}") end self.resolv_files.each do |filename| puts "Requesting sudo to write to #{filename}".green Bash.run_command("echo -e '#{self.resolv_contents}' | sudo /usr/bin/tee #{Shellwords.escape(filename)} >/dev/null") end rescue DinghyError => e puts e.message.red false end
configured_to_use_dinghy()
click to toggle source
# File lib/dory/resolv/macos.rb, line 33 def self.configured_to_use_dinghy Dory::Dinghy.match?(Dory::Config.settings[:dory][:resolv][:nameserver]) end
contents_has_our_nameserver?(contents)
click to toggle source
# File lib/dory/resolv/macos.rb, line 98 def self.contents_has_our_nameserver?(contents) comment_match = contents =~ /#{self.file_comment}/ port_match = contents =~ /port.#{self.port}/ if configured_to_use_dinghy !!(comment_match && port_match) else nameserver_match = contents =~ /#{self.file_nameserver_line}/ !!(comment_match && port_match && nameserver_match) end end
file_comment()
click to toggle source
# File lib/dory/resolv/macos.rb, line 46 def self.file_comment '# added by dory' end
file_nameserver_line()
click to toggle source
# File lib/dory/resolv/macos.rb, line 42 def self.file_nameserver_line "nameserver #{self.nameserver}" end
has_our_nameserver?()
click to toggle source
# File lib/dory/resolv/macos.rb, line 88 def self.has_our_nameserver? self.resolv_files.all? do |filename| if File.exist?(filename) self.contents_has_our_nameserver?(File.read(filename)) else false end end end
nameserver()
click to toggle source
# File lib/dory/resolv/macos.rb, line 37 def self.nameserver ns = Dory::Config.settings[:dory][:resolv][:nameserver] Dory::Dinghy.match?(ns) ? Dory::Dinghy.ip : ns end
port()
click to toggle source
# File lib/dory/resolv/macos.rb, line 10 def self.port Dory::Config.settings[:dory][:resolv][:port] || 19323 end
resolv_contents()
click to toggle source
# File lib/dory/resolv/macos.rb, line 50 def self.resolv_contents <<-EOF.gsub(' ' * 10, '') #{self.file_comment} #{self.file_nameserver_line} port #{self.port} EOF end
resolv_dir()
click to toggle source
# File lib/dory/resolv/macos.rb, line 14 def self.resolv_dir '/etc/resolver' end
resolv_file_contents()
click to toggle source
# File lib/dory/resolv/macos.rb, line 84 def self.resolv_file_contents File.read(self.resolv_file) end
resolv_file_names()
click to toggle source
# File lib/dory/resolv/macos.rb, line 18 def self.resolv_file_names # on macos the file name should match the domain if Dory::Config.settings[:dory][:dnsmasq][:domain] [Dory::Config.settings[:dory][:dnsmasq][:domain]] elsif Dory::Config.settings[:dory][:dnsmasq][:domains] Dory::Config.settings[:dory][:dnsmasq][:domains].map{ |d| d[:domain] } else ['docker'] end end
resolv_files()
click to toggle source
# File lib/dory/resolv/macos.rb, line 29 def self.resolv_files self.resolv_file_names.map{ |f| "#{self.resolv_dir}/#{f}" } end
system_resolv_file()
click to toggle source
# File lib/dory/resolv/macos.rb, line 6 def self.system_resolv_file '/etc/resolv.conf' end
system_resolv_file_contents()
click to toggle source
# File lib/dory/resolv/macos.rb, line 80 def self.system_resolv_file_contents File.read(self.system_resolv_file) end