]> git.openstreetmap.org Git - chef.git/commitdiff
Add optional support for using systemd-resolved
authorTom Hughes <tom@compton.nu>
Thu, 21 Mar 2019 18:47:52 +0000 (18:47 +0000)
committerTom Hughes <tom@compton.nu>
Thu, 21 Mar 2019 19:05:04 +0000 (19:05 +0000)
cookbooks/networking/attributes/default.rb
cookbooks/networking/recipes/default.rb
cookbooks/networking/templates/default/resolved.conf.erb [new file with mode: 0644]

index f7db87730f14ded5b8d719defc7f30957d654a12..9f14bdf56d9bcb9ff3f13ce5e8dfe2e6d7b4b1e9 100644 (file)
@@ -9,3 +9,4 @@ default[:networking][:firewall][:mangle] = true
 default[:networking][:interfaces] = {}
 default[:networking][:nameservers] = []
 default[:networking][:search] = []
+default[:networking][:resolved] = false
index a308e535d2b1958eb8c5bfcfca18ccf85f7b13e8..6459a7e9dc91b840d0b07fec04980e79e10e1cb1 100644 (file)
@@ -174,19 +174,52 @@ template "/etc/hosts" do
   mode 0o644
 end
 
-unless node[:networking][:nameservers].empty?
-  link "/etc/resolv.conf" do
-    action :delete
-    link_type :symbolic
-    to "/run/resolvconf/resolv.conf"
-    only_if { File.symlink?("/etc/resolv.conf") }
+if node[:networking][:resolved]
+  service "systemd-resolved" do
+    action [:enable, :start]
+  end
+
+  directory "/etc/systemd/resolved.conf.d" do
+    owner "root"
+    group "root"
+    mode 0o755
   end
 
-  template "/etc/resolv.conf" do
-    source "resolv.conf.erb"
+  template "/etc/systemd/resolved.conf.d/99-chef.conf" do
+    source "resolved.conf.erb"
     owner "root"
     group "root"
     mode 0o644
+    notifies :restart, "service[systemd-resolved]"
+  end
+
+  file "/etc/resolv.conf" do
+    action :delete
+    not_if { ::File.symlink?("/etc/resolv.conf") }
+  end
+
+  link "/etc/resolv.conf" do
+    to "../run/systemd/resolve/stub-resolv.conf"
+  end
+
+  package "resolvconf" do
+    action :purge
+  end
+else
+  unless node[:networking][:nameservers].empty?
+    link "/etc/resolv.conf" do
+      action :delete
+      link_type :symbolic
+      to "/run/resolvconf/resolv.conf"
+      only_if { File.symlink?("/etc/resolv.conf") }
+    end
+
+    template "/etc/resolv.conf" do
+      source "resolv.conf.erb"
+      owner "root"
+      group "root"
+      mode 0o644
+    end
   end
 end
 
diff --git a/cookbooks/networking/templates/default/resolved.conf.erb b/cookbooks/networking/templates/default/resolved.conf.erb
new file mode 100644 (file)
index 0000000..efc4b2a
--- /dev/null
@@ -0,0 +1,3 @@
+[Resolve]
+DNS=<%= node[:networking][:nameservers].join(" ") %>
+Domains=<%= node[:networking][:search].join(" ") %>