Module: Dory::Resolv::Macos

Defined in:
lib/dory/resolv/macos.rb

Class Method Summary collapse

Class Method Details

.cleanObject



65
66
67
68
69
70
# File 'lib/dory/resolv/macos.rb', line 65

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

.configureObject



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/dory/resolv/macos.rb', line 53

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 tee #{Shellwords.escape(filename)} >/dev/null")
  end
end

.contents_has_our_nameserver?(contents) ⇒ Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/dory/resolv/macos.rb', line 90

def self.contents_has_our_nameserver?(contents)
  !!((contents =~ /#{self.file_comment}/) && (contents =~ /#{self.file_nameserver_line}/) && (contents =~ /port.#{self.port}/))
end

.file_commentObject



41
42
43
# File 'lib/dory/resolv/macos.rb', line 41

def self.file_comment
  '# added by dory'
end

.file_nameserver_lineObject



37
38
39
# File 'lib/dory/resolv/macos.rb', line 37

def self.file_nameserver_line
  "nameserver #{self.nameserver}"
end

.has_our_nameserver?Boolean

Returns:

  • (Boolean)


80
81
82
83
84
85
86
87
88
# File 'lib/dory/resolv/macos.rb', line 80

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

.nameserverObject



33
34
35
# File 'lib/dory/resolv/macos.rb', line 33

def self.nameserver
  Dory::Config.settings[:dory][:resolv][:nameserver]
end

.portObject



10
11
12
# File 'lib/dory/resolv/macos.rb', line 10

def self.port
  Dory::Config.settings[:dory][:resolv][:port] || 19323
end

.resolv_contentsObject



45
46
47
48
49
50
51
# File 'lib/dory/resolv/macos.rb', line 45

def self.resolv_contents
  "    \#{self.file_comment}\n    \#{self.file_nameserver_line}\n    port \#{self.port}\n  EOF\nend\n".gsub(' ' * 10, '')

.resolv_dirObject



14
15
16
# File 'lib/dory/resolv/macos.rb', line 14

def self.resolv_dir
  '/etc/resolver'
end

.resolv_file_contentsObject



76
77
78
# File 'lib/dory/resolv/macos.rb', line 76

def self.resolv_file_contents
  File.read(self.resolv_file)
end

.resolv_file_namesObject



18
19
20
21
22
23
24
25
26
27
# 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_filesObject



29
30
31
# 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_fileObject



6
7
8
# File 'lib/dory/resolv/macos.rb', line 6

def self.system_resolv_file
  '/etc/resolv.conf'
end

.system_resolv_file_contentsObject



72
73
74
# File 'lib/dory/resolv/macos.rb', line 72

def self.system_resolv_file_contents
  File.read(self.system_resolv_file)
end