]> git.openstreetmap.org Git - chef.git/blobdiff - cookbooks/networking/resources/firewall_rule.rb
Allow network interfaces to override role attributes
[chef.git] / cookbooks / networking / resources / firewall_rule.rb
index 4cda0486bbbdcea894eaff7bbbe837fbcbe5c0e1..22bde6ca99d61cec37ba5700df9af5eb722a9c87 100644 (file)
@@ -75,7 +75,9 @@ action_class do
     if new_resource.connection_limit
       set = "connlimit-#{new_resource.rule}-#{ip}"
 
-      node.default[:networking][:firewall][:sets] << set
+      node.default[:networking][:firewall][:sets] << {
+        :name => set, :type => set_type(ip), :flags => %w[dynamic]
+      }
 
       rule << "add @#{set} { #{ip} saddr ct count #{new_resource.connection_limit} }"
     end
@@ -85,7 +87,9 @@ action_class do
       rate = Regexp.last_match(1)
       burst = Regexp.last_match(2)
 
-      node.default[:networking][:firewall][:sets] << set
+      node.default[:networking][:firewall][:sets] << {
+        :name => set, :type => set_type(ip), :flags => %w[dynamic], :timeout => 120
+      }
 
       rule << "update @#{set} { #{ip} saddr limit rate #{rate}/second burst #{burst} packets }"
     end
@@ -114,9 +118,9 @@ action_class do
       addresses
     else
       Array(addresses).map do |address|
-        if ip == "ip" && IPAddr.new(address).ipv4?
+        if ip == "ip" && IPAddr.new(address.to_s).ipv4?
           address
-        elsif ip == "ip6" && IPAddr.new(address).ipv6?
+        elsif ip == "ip6" && IPAddr.new(address.to_s).ipv6?
           address
         end
       end.compact
@@ -134,4 +138,11 @@ action_class do
       "{ #{Array(addresses).map(&:to_s).join(', ')} }"
     end
   end
+
+  def set_type(ip)
+    case ip
+    when "ip" then "ipv4_addr"
+    when "ip6" then "ipv6_addr"
+    end
+  end
 end