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 0caaa967e695778be8c2e9e44889bb5c1fa2804b..a672bee7e057f59b237eadb94d1f76405f050e38 100644 (file)
@@ -1,3 +1,5 @@
+default[:networking][:firewall][:inet] = []
+default[:networking][:firewall][:inet6] = []
 default[:networking][:interfaces] = {}
 default[:networking][:nameservers] = []
 default[:networking][:search] = []
index 44d141860073b3592d0d2fd71c7a2dd9e6e0b587..388470b9cdf3898963bc55c1379efc8b803adf0a 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 2f2812aa9cb4e01d20f84d659a701e86ea755aab..de493ecffb4251acee5f7879d242e2f48b333124 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 dbe0120cb21c4ff39e71f38acea306abcc923dc6..7cda2fbf174a4a5c572d19b0f4caeb3a5f9877f8 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 -%>