Rework firewall rule handling
authorTom Hughes <tom@compton.nu>
Sun, 14 Aug 2016 15:53:39 +0000 (16:53 +0100)
committerTom Hughes <tom@compton.nu>
Sun, 14 Aug 2016 15:53:39 +0000 (16:53 +0100)
Instead of patching the variables attached to the resource, keep
the list of firewall rules in the attributes.

cookbooks/networking/attributes/default.rb
cookbooks/networking/definitions/firewall_rule.rb
cookbooks/networking/recipes/default.rb
cookbooks/networking/templates/default/shorewall-rules.erb

index 0caaa96..a672bee 100644 (file)
@@ -1,3 +1,5 @@
+default[:networking][:firewall][:inet] = []
+default[:networking][:firewall][:inet6] = []
 default[:networking][:interfaces] = {}
 default[:networking][:nameservers] = []
 default[:networking][:search] = []
index 44d1418..388470b 100644 (file)
 #
 
 define :firewall_rule, :action => :accept do
-  inet = nil
-  inet6 = nil
-
-  begin
-    inet = resources(:template => "/etc/shorewall/rules")
-    inet6 = resources(:template => "/etc/shorewall6/rules")
-  rescue
-  end
-
   rule = Hash[
     :action => params[:action].to_s.upcase,
     :source => params[:source],
@@ -38,12 +29,12 @@ define :firewall_rule, :action => :accept do
   ]
 
   if params[:family].nil?
-    inet.variables[:rules] << rule unless inet.nil?
-    inet6.variables[:rules] << rule unless inet6.nil?
+    node.default[:networking][:firewall][:inet] << rule
+    node.default[:networking][:firewall][:inet6] << rule
   elsif params[:family].to_s == "inet"
-    inet.variables[:rules] << rule unless inet.nil?
+    node.default[:networking][:firewall][:inet] << rule
   elsif params[:family].to_s == "inet6"
-    inet6.variables[:rules] << rule unless inet6.nil?
+    node.default[:networking][:firewall][:inet6] << rule
   else
     log "Unsupported network family" do
       level :error
index 2f2812a..de493ec 100644 (file)
@@ -188,7 +188,7 @@ template "/etc/shorewall/rules" do
   owner "root"
   group "root"
   mode 0o644
-  variables :rules => []
+  variables :family => "inet"
   notifies :restart, "service[shorewall]"
 end
 
@@ -301,7 +301,7 @@ unless node.interfaces(:family => :inet6).empty?
     owner "root"
     group "root"
     mode 0o644
-    variables :rules => []
+    variables :family => "inet6"
     notifies :restart, "service[shorewall6]"
   end
 
index dbe0120..7cda2fb 100644 (file)
@@ -8,6 +8,6 @@ SECTION NEW
 
 # ACTION       SOURCE  DEST    PROTO           DEST            SOURCE  ORIGINAL        RATE
 #                                              PORTS           PORTS   DEST            LIMIT
-<% @rules.each do |r| -%>
+<% node[:networking][:firewall][@family].each do |r| # ~FC034 -%>
 <%= r[:action] %>              <%= r[:source] %>       <%= r[:dest] %> <%= r[:proto] %>                <%= r[:dest_ports] %>   <%= r[:source_ports] %> -       <%= r[:rate_limit] %>
 <% end -%>