]> review.fuel-infra Code Review - puppet-modules/puppetlabs-firewall.git/commitdiff
Add --random support as per #141 comment
authorHunter Haugen <hunter@puppetlabs.com>
Wed, 5 Feb 2014 21:59:08 +0000 (13:59 -0800)
committerHunter Haugen <hunter@puppetlabs.com>
Wed, 5 Feb 2014 22:28:00 +0000 (14:28 -0800)
lib/puppet/provider/firewall/iptables.rb
lib/puppet/type/firewall.rb
spec/acceptance/firewall_spec.rb

index 97520e08567cb81577e42f9fad4352e801dfb06d..3095a1283527926346c8455ca693dec72f383f22 100644 (file)
@@ -62,6 +62,7 @@ Puppet::Type.type(:firewall).provide :iptables, :parent => Puppet::Provider::Fir
     :outiface => "-o",
     :port => '-m multiport --ports',
     :proto => "-p",
+    :random => "--random",
     :rdest => "--rdest",
     :reap => "--reap",
     :recent => "-m recent",
@@ -92,7 +93,15 @@ Puppet::Type.type(:firewall).provide :iptables, :parent => Puppet::Provider::Fir
 
   # These are known booleans that do not take a value, but we want to munge
   # to true if they exist.
-  @known_booleans = [:socket, :isfragment, :rsource, :rdest, :reap, :rttl]
+  @known_booleans = [
+    :isfragment,
+    :random,
+    :rdest,
+    :reap,
+    :rsource,
+    :rttl,
+    :socket
+  ]
 
 
   # Create property methods dynamically
@@ -132,7 +141,7 @@ Puppet::Type.type(:firewall).provide :iptables, :parent => Puppet::Provider::Fir
     :dst_type, :src_type, :socket, :pkttype, :name, :ipsec_dir, :ipsec_policy,
     :state, :ctstate, :icmp, :limit, :burst, :recent, :rseconds, :reap,
     :rhitcount, :rttl, :rname, :rsource, :rdest, :jump, :todest, :tosource,
-    :toports, :log_prefix, :log_level, :reject, :set_mark
+    :toports, :random, :log_prefix, :log_level, :reject, :set_mark
   ]
 
   def insert
index 18f1a713aa12dbd319ee411cb6929f31f99cb015..4701e2781a42555ae5f303ab253c929abffea571 100644 (file)
@@ -456,6 +456,15 @@ Puppet::Type.newtype(:firewall) do
     EOS
   end
 
+  newproperty(:random, :required_features => :dnat) do
+    desc <<-EOS
+      When using a jump value of "MASQUERADE", "DNAT", "REDIRECT", or "SNAT"
+      this boolean will enable randomized port mapping.
+    EOS
+
+    newvalues(:true, :false)
+  end
+
   # Reject ICMP type
   newproperty(:reject, :required_features => :reject_type) do
     desc <<-EOS
index c8c3ccd6bf2eadc533ff0d7cf5522bff9969b297..f4af72bd755637e9d85de60092e3ec9f3705c939 100644 (file)
@@ -822,6 +822,33 @@ describe 'firewall type' do
     end
   end
 
+  describe 'random' do
+    context '192.168.1.1' do
+      it 'applies' do
+        pp = <<-EOS
+          class { '::firewall': }
+          firewall { '570 - test 2':
+            proto  => all,
+            table  => 'nat',
+            chain  => 'POSTROUTING',
+            jump   => 'MASQUERADE',
+            source => '172.30.0.0/16',
+            random => true
+          }
+        EOS
+
+        apply_manifest(pp, :catch_failures => true)
+        apply_manifest(pp, :catch_changes => true)
+      end
+
+      it 'should contain the rule' do
+        shell('iptables -t nat -S') do |r|
+          expect(r.stdout).to match(/-A POSTROUTING -s 172\.30\.0\.0\/16 -m comment --comment "570 - test 2" -j MASQUERADE --random/)
+        end
+      end
+    end
+  end
+
   describe 'icmp' do
     context 'any' do
       it 'fails' do