freighthop 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (259) hide show
  1. checksums.yaml +7 -0
  2. data/Puppetfile +1 -1
  3. data/Puppetfile.lock +4 -5
  4. data/README.md +18 -7
  5. data/Vagrantfile +4 -0
  6. data/lib/freighthop/cli/help.rb +1 -0
  7. data/lib/freighthop/cli/init.rb +10 -10
  8. data/lib/freighthop/cli/version.rb +17 -0
  9. data/lib/freighthop/cli.rb +3 -1
  10. data/lib/freighthop/version.rb +1 -1
  11. data/lib/freighthop.rb +4 -0
  12. data/modules/apt/CHANGELOG +2 -36
  13. data/modules/apt/Gemfile +5 -6
  14. data/modules/apt/Gemfile.lock +7 -40
  15. data/modules/apt/Modulefile +1 -1
  16. data/modules/apt/README.md +1 -2
  17. data/modules/apt/Rakefile +0 -1
  18. data/modules/apt/manifests/init.pp +2 -5
  19. data/modules/apt/manifests/params.pp +1 -4
  20. data/modules/apt/manifests/pin.pp +1 -1
  21. data/modules/apt/manifests/ppa.pp +10 -24
  22. data/modules/apt/manifests/update.pp +0 -1
  23. data/modules/apt/metadata.json +19 -32
  24. data/modules/apt/spec/defines/ppa_spec.rb +2 -53
  25. data/modules/apt/spec/defines/source_spec.rb +2 -2
  26. data/modules/apt/templates/source.list.erb +2 -2
  27. data/modules/apt/tests/key.pp +3 -3
  28. data/modules/concat/CHANGELOG +73 -0
  29. data/modules/concat/Gemfile +20 -0
  30. data/modules/concat/Gemfile.lock +104 -0
  31. data/modules/concat/Modulefile +7 -6
  32. data/modules/concat/README.md +440 -0
  33. data/modules/concat/Rakefile +5 -1
  34. data/modules/concat/files/concatfragments.rb +137 -0
  35. data/modules/concat/files/concatfragments.sh +15 -4
  36. data/modules/concat/lib/facter/concat_basedir.rb +9 -3
  37. data/modules/concat/manifests/fragment.pp +108 -48
  38. data/modules/concat/manifests/init.pp +191 -210
  39. data/modules/concat/manifests/setup.pp +31 -31
  40. data/modules/concat/metadata.json +40 -21
  41. data/modules/{apt → concat}/spec/spec_helper_system.rb +11 -6
  42. data/modules/{firewall → concat}/spec/system/basic_spec.rb +1 -1
  43. data/modules/concat/spec/system/concat_spec.rb +154 -0
  44. data/modules/concat/spec/system/deprecation_warnings_spec.rb +247 -0
  45. data/modules/concat/spec/system/empty_spec.rb +27 -0
  46. data/modules/concat/spec/system/fragment_source_spec.rb +142 -0
  47. data/modules/concat/spec/system/replace_spec.rb +257 -0
  48. data/modules/concat/spec/system/symbolic_name_spec.rb +35 -0
  49. data/modules/concat/spec/system/warn_spec.rb +106 -0
  50. data/modules/concat/spec/unit/classes/concat_setup_spec.rb +42 -0
  51. data/modules/concat/spec/unit/defines/concat_fragment_spec.rb +267 -0
  52. data/modules/concat/spec/unit/defines/concat_spec.rb +380 -0
  53. data/modules/concat/spec/unit/facts/concat_basedir_spec.rb +18 -0
  54. data/modules/concat/tests/fragment.pp +19 -0
  55. data/modules/concat/tests/init.pp +7 -0
  56. data/modules/firewall/Changelog +38 -0
  57. data/modules/firewall/Gemfile +5 -2
  58. data/modules/firewall/Gemfile.lock +76 -26
  59. data/modules/firewall/Modulefile +1 -1
  60. data/modules/firewall/README.markdown +47 -15
  61. data/modules/firewall/Rakefile +0 -7
  62. data/modules/firewall/lib/puppet/provider/firewall/ip6tables.rb +50 -7
  63. data/modules/firewall/lib/puppet/provider/firewall/iptables.rb +147 -31
  64. data/modules/firewall/lib/puppet/provider/firewallchain/iptables_chain.rb +19 -8
  65. data/modules/firewall/lib/puppet/type/firewall.rb +207 -3
  66. data/modules/firewall/lib/puppet/type/firewallchain.rb +73 -2
  67. data/modules/firewall/lib/puppet/util/firewall.rb +14 -0
  68. data/modules/firewall/metadata.json +181 -76
  69. data/modules/firewall/spec/acceptance/basic_spec.rb +8 -0
  70. data/modules/firewall/spec/acceptance/change_source_spec.rb +77 -0
  71. data/modules/firewall/spec/acceptance/class_spec.rb +27 -0
  72. data/modules/firewall/spec/acceptance/firewall_spec.rb +1608 -0
  73. data/modules/firewall/spec/acceptance/firewallchain_spec.rb +125 -0
  74. data/modules/firewall/spec/acceptance/ip6_fragment_spec.rb +94 -0
  75. data/modules/firewall/spec/acceptance/isfragment_spec.rb +92 -0
  76. data/modules/firewall/spec/acceptance/nodesets/centos-59-x64.yml +10 -0
  77. data/modules/firewall/spec/acceptance/nodesets/centos-64-x64-fusion.yml +10 -0
  78. data/modules/firewall/spec/acceptance/nodesets/centos-64-x64-pe.yml +12 -0
  79. data/modules/firewall/spec/acceptance/nodesets/centos-64-x64.yml +10 -0
  80. data/modules/firewall/spec/acceptance/nodesets/debian-607-x64.yml +10 -0
  81. data/modules/firewall/spec/acceptance/nodesets/debian-70rc1-x64.yml +10 -0
  82. data/modules/firewall/spec/acceptance/nodesets/default.yml +10 -0
  83. data/modules/firewall/spec/acceptance/nodesets/fedora-18-x64.yml +10 -0
  84. data/modules/firewall/spec/acceptance/nodesets/sles-11sp1-x64.yml +10 -0
  85. data/modules/firewall/spec/acceptance/nodesets/ubuntu-server-10044-x64.yml +10 -0
  86. data/modules/firewall/spec/acceptance/nodesets/ubuntu-server-12042-x64.yml +10 -0
  87. data/modules/firewall/spec/{system → acceptance}/params_spec.rb +44 -52
  88. data/modules/firewall/spec/acceptance/purge_spec.rb +124 -0
  89. data/modules/firewall/spec/acceptance/resource_cmd_spec.rb +93 -0
  90. data/modules/firewall/spec/acceptance/rules_spec.rb +248 -0
  91. data/modules/firewall/spec/acceptance/socket_spec.rb +96 -0
  92. data/modules/firewall/spec/{system → acceptance}/standard_usage_spec.rb +6 -10
  93. data/modules/firewall/spec/fixtures/ip6tables/conversion_hash.rb +107 -0
  94. data/modules/firewall/spec/fixtures/iptables/conversion_hash.rb +56 -2
  95. data/modules/firewall/spec/spec_helper_acceptance.rb +38 -0
  96. data/modules/firewall/spec/unit/classes/firewall_spec.rb +2 -2
  97. data/modules/firewall/spec/unit/facter/iptables_persistent_version_spec.rb +8 -5
  98. data/modules/firewall/spec/unit/facter/iptables_spec.rb +6 -4
  99. data/modules/firewall/spec/unit/puppet/provider/iptables_chain_spec.rb +14 -4
  100. data/modules/firewall/spec/unit/puppet/provider/iptables_spec.rb +246 -5
  101. data/modules/firewall/spec/unit/puppet/type/firewall_spec.rb +99 -8
  102. data/modules/firewall/spec/unit/puppet/type/firewallchain_spec.rb +50 -6
  103. data/modules/firewall/spec/unit/puppet/util/firewall_spec.rb +21 -0
  104. data/modules/mysql/CHANGELOG +0 -30
  105. data/modules/mysql/Gemfile +0 -1
  106. data/modules/mysql/Gemfile.lock +30 -31
  107. data/modules/mysql/Modulefile +1 -1
  108. data/modules/mysql/README.md +2 -49
  109. data/modules/mysql/files/mysqltuner.pl +1 -1
  110. data/modules/mysql/lib/puppet/provider/database/mysql.rb +1 -1
  111. data/modules/mysql/lib/puppet/provider/database_grant/mysql.rb +1 -1
  112. data/modules/mysql/lib/puppet/provider/database_user/mysql.rb +1 -1
  113. data/modules/mysql/lib/puppet/provider/mysql.rb +1 -2
  114. data/modules/mysql/lib/puppet/provider/mysql_database/mysql.rb +13 -2
  115. data/modules/mysql/lib/puppet/provider/mysql_user/mysql.rb +12 -0
  116. data/modules/mysql/lib/puppet/type/database_user.rb +1 -1
  117. data/modules/mysql/lib/puppet/type/mysql_grant.rb +3 -5
  118. data/modules/mysql/manifests/client.pp +0 -7
  119. data/modules/mysql/manifests/server/root_password.pp +0 -2
  120. data/modules/mysql/manifests/server.pp +0 -6
  121. data/modules/mysql/metadata.json +79 -81
  122. data/modules/mysql/spec/classes/mysql_server_spec.rb +0 -74
  123. data/modules/mysql/spec/system/mysql_server_root_password_spec.rb +1 -7
  124. data/modules/mysql/spec/system/mysql_server_spec.rb +3 -6
  125. data/modules/mysql/spec/system/types/mysql_grant_spec.rb +0 -27
  126. data/modules/mysql/spec/unit/puppet/functions/mysql_deepmerge_spec.rb +1 -1
  127. data/modules/mysql/spec/unit/puppet/provider/database/mysql_spec.rb +4 -4
  128. data/modules/mysql/spec/unit/puppet/provider/database_grant/mysql_spec.rb +15 -15
  129. data/modules/mysql/spec/unit/puppet/provider/database_user/mysql_spec.rb +4 -4
  130. data/modules/mysql/spec/unit/puppet/provider/mysql_database/mysql_spec.rb +3 -3
  131. data/modules/mysql/spec/unit/puppet/provider/mysql_user/mysql_spec.rb +3 -3
  132. data/modules/mysql/templates/my.cnf.erb +2 -4
  133. data/modules/mysql/tests/mysql_grant.pp +1 -1
  134. data/modules/postgresql/Changelog +31 -0
  135. data/modules/postgresql/Gemfile +4 -2
  136. data/modules/postgresql/Modulefile +1 -1
  137. data/modules/postgresql/README.md +10 -4
  138. data/modules/postgresql/Rakefile +0 -1
  139. data/modules/postgresql/lib/puppet/provider/postgresql_psql/ruby.rb +25 -3
  140. data/modules/postgresql/manifests/globals.pp +2 -0
  141. data/modules/postgresql/manifests/params.pp +21 -0
  142. data/modules/postgresql/manifests/server/config.pp +0 -5
  143. data/modules/postgresql/manifests/server/config_entry.pp +1 -1
  144. data/modules/postgresql/manifests/server/database.pp +2 -1
  145. data/modules/postgresql/manifests/server/db.pp +2 -0
  146. data/modules/postgresql/manifests/server/grant.pp +20 -16
  147. data/modules/postgresql/manifests/server/initdb.pp +27 -3
  148. data/modules/postgresql/manifests/server/pg_hba_rule.pp +2 -4
  149. data/modules/postgresql/manifests/server/role.pp +8 -2
  150. data/modules/postgresql/manifests/server/service.pp +5 -0
  151. data/modules/postgresql/manifests/server.pp +2 -0
  152. data/modules/postgresql/metadata.json +88 -65
  153. data/modules/postgresql/spec/acceptance/client_spec.rb +18 -0
  154. data/modules/postgresql/spec/{system → acceptance}/common_patterns_spec.rb +8 -14
  155. data/modules/postgresql/spec/{system → acceptance}/contrib_spec.rb +4 -9
  156. data/modules/postgresql/spec/acceptance/lib/devel_spec.rb +17 -0
  157. data/modules/postgresql/spec/acceptance/lib/java_spec.rb +20 -0
  158. data/modules/postgresql/spec/acceptance/lib/python_spec.rb +19 -0
  159. data/modules/postgresql/spec/acceptance/nodesets/centos-510-x64.yml +10 -0
  160. data/modules/postgresql/spec/acceptance/nodesets/centos-59-x64.yml +10 -0
  161. data/modules/postgresql/spec/acceptance/nodesets/centos-64-x64-pe.yml +12 -0
  162. data/modules/postgresql/spec/acceptance/nodesets/centos-64-x64.yml +10 -0
  163. data/modules/postgresql/spec/acceptance/nodesets/debian-607-x64.yml +10 -0
  164. data/modules/postgresql/spec/acceptance/nodesets/debian-73-x64.yml +10 -0
  165. data/modules/postgresql/spec/acceptance/nodesets/default.yml +10 -0
  166. data/modules/postgresql/spec/acceptance/nodesets/ubuntu-server-10044-x64.yml +10 -0
  167. data/modules/postgresql/spec/acceptance/nodesets/ubuntu-server-12042-x64.yml +10 -0
  168. data/modules/postgresql/spec/{system → acceptance}/postgresql_psql_spec.rb +6 -14
  169. data/modules/postgresql/spec/{system → acceptance}/server/config_entry_spec.rb +6 -12
  170. data/modules/postgresql/spec/{system → acceptance}/server/database_grant_spec.rb +6 -12
  171. data/modules/postgresql/spec/{system → acceptance}/server/database_spec.rb +6 -12
  172. data/modules/postgresql/spec/{system → acceptance}/server/db_spec.rb +47 -42
  173. data/modules/postgresql/spec/{system → acceptance}/server/grant_spec.rb +6 -12
  174. data/modules/postgresql/spec/{system → acceptance}/server/pg_hba_rule_spec.rb +10 -23
  175. data/modules/postgresql/spec/{system → acceptance}/server/plperl_spec.rb +6 -10
  176. data/modules/postgresql/spec/{system → acceptance}/server/role_spec.rb +13 -28
  177. data/modules/postgresql/spec/acceptance/server/table_grant_spec.rb +124 -0
  178. data/modules/postgresql/spec/{system → acceptance}/server/tablespace_spec.rb +8 -22
  179. data/modules/postgresql/spec/{system → acceptance}/server_spec.rb +38 -61
  180. data/modules/postgresql/spec/{system → acceptance}/validate_db_connection_spec.rb +8 -20
  181. data/modules/postgresql/spec/spec_helper_acceptance.rb +70 -0
  182. data/modules/postgresql/spec/unit/classes/globals_spec.rb +2 -2
  183. data/modules/postgresql/spec/unit/classes/lib/devel_spec.rb +1 -1
  184. data/modules/postgresql/spec/unit/classes/params_spec.rb +1 -1
  185. data/modules/postgresql/spec/unit/classes/repo_spec.rb +1 -1
  186. data/modules/postgresql/spec/unit/classes/server/initdb_spec.rb +2 -1
  187. data/modules/postgresql/spec/unit/classes/server/plperl_spec.rb +2 -2
  188. data/modules/postgresql/spec/unit/classes/server_spec.rb +9 -2
  189. data/modules/postgresql/spec/unit/puppet/provider/postgresql_psql/ruby_spec.rb +15 -17
  190. data/modules/rbenv/bin/autospec +0 -0
  191. data/modules/rbenv/bin/facter +0 -0
  192. data/modules/rbenv/bin/filebucket +0 -0
  193. data/modules/rbenv/bin/hiera +0 -0
  194. data/modules/rbenv/bin/htmldiff +0 -0
  195. data/modules/rbenv/bin/ldiff +0 -0
  196. data/modules/rbenv/bin/pi +0 -0
  197. data/modules/rbenv/bin/puppet +0 -0
  198. data/modules/rbenv/bin/puppet-lint +0 -0
  199. data/modules/rbenv/bin/puppet-module +0 -0
  200. data/modules/rbenv/bin/puppetca +0 -0
  201. data/modules/rbenv/bin/puppetd +0 -0
  202. data/modules/rbenv/bin/puppetdoc +0 -0
  203. data/modules/rbenv/bin/puppetmasterd +0 -0
  204. data/modules/rbenv/bin/puppetqd +0 -0
  205. data/modules/rbenv/bin/puppetrun +0 -0
  206. data/modules/rbenv/bin/rake +0 -0
  207. data/modules/rbenv/bin/ralsh +0 -0
  208. data/modules/rbenv/bin/rspec +0 -0
  209. data/modules/rbenv/bin/rspec-puppet-init +0 -0
  210. data/modules/stdlib/spec/monkey_patches/alias_should_to_must.rb +0 -0
  211. data/modules/stdlib/spec/monkey_patches/publicize_methods.rb +0 -0
  212. data/modules/stdlib/spec/unit/puppet/parser/functions/abs_spec.rb +0 -0
  213. data/modules/stdlib/spec/unit/puppet/parser/functions/bool2num_spec.rb +0 -0
  214. data/modules/stdlib/spec/unit/puppet/parser/functions/capitalize_spec.rb +0 -0
  215. data/modules/stdlib/spec/unit/puppet/parser/functions/chomp_spec.rb +0 -0
  216. data/modules/stdlib/spec/unit/puppet/parser/functions/chop_spec.rb +0 -0
  217. data/modules/stdlib/spec/unit/puppet/parser/functions/delete_at_spec.rb +0 -0
  218. data/modules/stdlib/spec/unit/puppet/parser/functions/delete_spec.rb +0 -0
  219. data/modules/stdlib/spec/unit/puppet/parser/functions/dirname_spec.rb +0 -0
  220. data/modules/stdlib/spec/unit/puppet/parser/functions/downcase_spec.rb +0 -0
  221. data/modules/stdlib/spec/unit/puppet/parser/functions/empty_spec.rb +0 -0
  222. data/modules/stdlib/spec/unit/puppet/parser/functions/flatten_spec.rb +0 -0
  223. data/modules/stdlib/spec/unit/puppet/parser/functions/grep_spec.rb +0 -0
  224. data/modules/stdlib/spec/unit/puppet/parser/functions/has_interface_with_spec.rb +0 -0
  225. data/modules/stdlib/spec/unit/puppet/parser/functions/has_ip_address_spec.rb +0 -0
  226. data/modules/stdlib/spec/unit/puppet/parser/functions/has_ip_network_spec.rb +0 -0
  227. data/modules/stdlib/spec/unit/puppet/parser/functions/max_spec.rb +0 -0
  228. data/modules/stdlib/spec/unit/puppet/parser/functions/min_spec.rb +0 -0
  229. data/modules/stdlib/spec/unit/puppet/parser/functions/reject_spec.rb +0 -0
  230. data/modules/stdlib/spec/unit/puppet/parser/functions/to_bytes_spec.rb +0 -0
  231. data/modules/stdlib/spec/unit/puppet/parser/functions/validate_slength_spec.rb +0 -0
  232. metadata +92 -77
  233. data/modules/apt/manifests/unattended_upgrades.pp +0 -68
  234. data/modules/apt/spec/classes/unattended_upgrades_spec.rb +0 -204
  235. data/modules/apt/spec/system/apt_builddep_spec.rb +0 -38
  236. data/modules/apt/spec/system/apt_key_spec.rb +0 -53
  237. data/modules/apt/spec/system/apt_ppa_spec.rb +0 -59
  238. data/modules/apt/spec/system/apt_source_spec.rb +0 -51
  239. data/modules/apt/spec/system/basic_spec.rb +0 -10
  240. data/modules/apt/spec/system/class_spec.rb +0 -20
  241. data/modules/apt/templates/10periodic.erb +0 -12
  242. data/modules/apt/templates/50unattended-upgrades.erb +0 -53
  243. data/modules/apt/tests/unattended-upgrades.pp +0 -1
  244. data/modules/concat/README.markdown +0 -150
  245. data/modules/concat/spec/defines/init_spec.rb +0 -115
  246. data/modules/concat/spec/fixtures/manifests/site.pp +0 -0
  247. data/modules/firewall/spec/spec_helper_system.rb +0 -49
  248. data/modules/firewall/spec/system/class_spec.rb +0 -39
  249. data/modules/firewall/spec/system/purge_spec.rb +0 -29
  250. data/modules/firewall/spec/system/resource_cmd_spec.rb +0 -53
  251. data/modules/mysql/manifests/server/providers.pp +0 -8
  252. data/modules/mysql/tests/bindings.pp +0 -3
  253. data/modules/postgresql/Gemfile.lock +0 -74
  254. data/modules/postgresql/spec/spec_helper_system.rb +0 -66
  255. data/modules/postgresql/spec/system/client_spec.rb +0 -22
  256. data/modules/postgresql/spec/system/lib/devel_spec.rb +0 -22
  257. data/modules/postgresql/spec/system/lib/java_spec.rb +0 -25
  258. data/modules/postgresql/spec/system/lib/python_spec.rb +0 -24
  259. data/modules/postgresql/spec/system/server/table_grant_spec.rb +0 -72
@@ -0,0 +1,124 @@
1
+ require 'spec_helper_acceptance'
2
+
3
+ describe "purge tests:" do
4
+ context('resources purge') do
5
+ before(:all) do
6
+ iptables_flush_all_tables
7
+
8
+ shell('/sbin/iptables -A INPUT -s 1.2.1.2')
9
+ shell('/sbin/iptables -A INPUT -s 1.2.1.2')
10
+ end
11
+
12
+ it 'make sure duplicate existing rules get purged' do
13
+
14
+ pp = <<-EOS
15
+ class { 'firewall': }
16
+ resources { 'firewall':
17
+ purge => true,
18
+ }
19
+ EOS
20
+
21
+ apply_manifest(pp, :expect_changes => true)
22
+ end
23
+
24
+ it 'saves' do
25
+ shell('/sbin/iptables-save') do |r|
26
+ expect(r.stdout).to_not match(/1\.2\.1\.2/)
27
+ expect(r.stderr).to eq("")
28
+ end
29
+ end
30
+ end
31
+
32
+ context('chain purge') do
33
+ before(:each) do
34
+ iptables_flush_all_tables
35
+
36
+ shell('/sbin/iptables -A INPUT -p tcp -s 1.2.1.1')
37
+ shell('/sbin/iptables -A INPUT -p udp -s 1.2.1.1')
38
+ shell('/sbin/iptables -A OUTPUT -s 1.2.1.2 -m comment --comment "010 output-1.2.1.2"')
39
+ end
40
+
41
+ it 'purges only the specified chain' do
42
+ pp = <<-EOS
43
+ class { 'firewall': }
44
+ firewallchain { 'INPUT:filter:IPv4':
45
+ purge => true,
46
+ }
47
+ EOS
48
+
49
+ apply_manifest(pp, :expect_changes => true)
50
+
51
+ shell('/sbin/iptables-save') do |r|
52
+ expect(r.stdout).to match(/010 output-1\.2\.1\.2/)
53
+ expect(r.stdout).to_not match(/1\.2\.1\.1/)
54
+ expect(r.stderr).to eq("")
55
+ end
56
+ end
57
+
58
+ it 'ignores managed rules' do
59
+ pp = <<-EOS
60
+ class { 'firewall': }
61
+ firewallchain { 'OUTPUT:filter:IPv4':
62
+ purge => true,
63
+ }
64
+ firewall { '010 output-1.2.1.2':
65
+ chain => 'OUTPUT',
66
+ proto => 'all',
67
+ source => '1.2.1.2',
68
+ }
69
+ EOS
70
+
71
+ apply_manifest(pp, :catch_changes => true)
72
+ end
73
+
74
+ it 'ignores specified rules' do
75
+ pp = <<-EOS
76
+ class { 'firewall': }
77
+ firewallchain { 'INPUT:filter:IPv4':
78
+ purge => true,
79
+ ignore => [
80
+ '-s 1\.2\.1\.1',
81
+ ],
82
+ }
83
+ EOS
84
+
85
+ apply_manifest(pp, :catch_changes => true)
86
+ end
87
+
88
+ it 'adds managed rules with ignored rules' do
89
+ pp = <<-EOS
90
+ class { 'firewall': }
91
+ firewallchain { 'INPUT:filter:IPv4':
92
+ purge => true,
93
+ ignore => [
94
+ '-s 1\.2\.1\.1',
95
+ ],
96
+ }
97
+ firewall { '014 input-1.2.1.6':
98
+ chain => 'INPUT',
99
+ proto => 'all',
100
+ source => '1.2.1.6',
101
+ }
102
+ -> firewall { '013 input-1.2.1.5':
103
+ chain => 'INPUT',
104
+ proto => 'all',
105
+ source => '1.2.1.5',
106
+ }
107
+ -> firewall { '012 input-1.2.1.4':
108
+ chain => 'INPUT',
109
+ proto => 'all',
110
+ source => '1.2.1.4',
111
+ }
112
+ -> firewall { '011 input-1.2.1.3':
113
+ chain => 'INPUT',
114
+ proto => 'all',
115
+ source => '1.2.1.3',
116
+ }
117
+ EOS
118
+
119
+ apply_manifest(pp, :catch_failures => true)
120
+
121
+ expect(shell('/sbin/iptables-save').stdout).to match(/-A INPUT -s 1\.2\.1\.1\/32 -p tcp \n-A INPUT -s 1\.2\.1\.1\/32 -p udp/)
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,93 @@
1
+ require 'spec_helper_acceptance'
2
+
3
+ # Here we want to test the the resource commands ability to work with different
4
+ # existing ruleset scenarios. This will give the parsing capabilities of the
5
+ # code a good work out.
6
+ describe 'puppet resource firewall command:' do
7
+ context 'make sure it returns no errors when executed on a clean machine' do
8
+ it do
9
+ shell('puppet resource firewall') do |r|
10
+ r.exit_code.should be_zero
11
+ # don't check stdout, some boxes come with rules, that is normal
12
+ r.stderr.should be_empty
13
+ end
14
+ end
15
+ end
16
+
17
+ context 'flush iptables and make sure it returns nothing afterwards' do
18
+ before(:all) do
19
+ iptables_flush_all_tables
20
+ end
21
+
22
+ # No rules, means no output thanks. And no errors as well.
23
+ it do
24
+ shell('puppet resource firewall') do |r|
25
+ r.exit_code.should be_zero
26
+ r.stderr.should be_empty
27
+ r.stdout.should == "\n"
28
+ end
29
+ end
30
+ end
31
+
32
+ context 'accepts rules without comments' do
33
+ before(:all) do
34
+ iptables_flush_all_tables
35
+ shell('/sbin/iptables -A INPUT -j ACCEPT -p tcp --dport 80')
36
+ end
37
+
38
+ it do
39
+ shell('puppet resource firewall') do |r|
40
+ r.exit_code.should be_zero
41
+ # don't check stdout, testing preexisting rules, output is normal
42
+ r.stderr.should be_empty
43
+ end
44
+ end
45
+ end
46
+
47
+ context 'accepts rules with invalid comments' do
48
+ before(:all) do
49
+ iptables_flush_all_tables
50
+ shell('/sbin/iptables -A INPUT -j ACCEPT -p tcp --dport 80 -m comment --comment "http"')
51
+ end
52
+
53
+ it do
54
+ shell('puppet resource firewall') do |r|
55
+ r.exit_code.should be_zero
56
+ # don't check stdout, testing preexisting rules, output is normal
57
+ r.stderr.should be_empty
58
+ end
59
+ end
60
+ end
61
+
62
+ context 'accepts rules with negation' do
63
+ before :all do
64
+ iptables_flush_all_tables
65
+ shell('/sbin/iptables -t nat -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535')
66
+ shell('/sbin/iptables -t nat -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535')
67
+ shell('/sbin/iptables -t nat -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE')
68
+ end
69
+
70
+ it do
71
+ shell('puppet resource firewall') do |r|
72
+ r.exit_code.should be_zero
73
+ # don't check stdout, testing preexisting rules, output is normal
74
+ r.stderr.should be_empty
75
+ end
76
+ end
77
+ end
78
+
79
+ context 'accepts rules with match extension tcp flag' do
80
+ before :all do
81
+ iptables_flush_all_tables
82
+ shell('/sbin/iptables -t mangle -A PREROUTING -d 1.2.3.4 -p tcp -m tcp -m multiport --dports 80,443,8140 -j MARK --set-mark 42')
83
+ end
84
+
85
+ it do
86
+ shell('puppet resource firewall') do |r|
87
+ r.exit_code.should be_zero
88
+ # don't check stdout, testing preexisting rules, output is normal
89
+ r.stderr.should be_empty
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,248 @@
1
+ require 'spec_helper_acceptance'
2
+
3
+ describe 'complex ruleset 1' do
4
+ before :all do
5
+ iptables_flush_all_tables
6
+ end
7
+
8
+ after :all do
9
+ shell('iptables -t filter -P INPUT ACCEPT')
10
+ shell('iptables -t filter -P FORWARD ACCEPT')
11
+ shell('iptables -t filter -P OUTPUT ACCEPT')
12
+ shell('iptables -t filter --flush')
13
+ end
14
+
15
+ it 'applies cleanly' do
16
+ pp = <<-EOS
17
+ firewall { '090 forward allow local':
18
+ chain => 'FORWARD',
19
+ proto => 'all',
20
+ source => '10.0.0.0/8',
21
+ destination => '10.0.0.0/8',
22
+ action => 'accept',
23
+ }
24
+ firewall { '100 forward standard allow tcp':
25
+ chain => 'FORWARD',
26
+ source => '10.0.0.0/8',
27
+ destination => '!10.0.0.0/8',
28
+ proto => 'tcp',
29
+ state => 'NEW',
30
+ port => [80,443,21,20,22,53,123,43,873,25,465],
31
+ action => 'accept',
32
+ }
33
+ firewall { '100 forward standard allow udp':
34
+ chain => 'FORWARD',
35
+ source => '10.0.0.0/8',
36
+ destination => '!10.0.0.0/8',
37
+ proto => 'udp',
38
+ port => [53,123],
39
+ action => 'accept',
40
+ }
41
+ firewall { '100 forward standard allow icmp':
42
+ chain => 'FORWARD',
43
+ source => '10.0.0.0/8',
44
+ destination => '!10.0.0.0/8',
45
+ proto => 'icmp',
46
+ action => 'accept',
47
+ }
48
+
49
+ firewall { '090 ignore ipsec':
50
+ table => 'nat',
51
+ chain => 'POSTROUTING',
52
+ outiface => 'eth0',
53
+ ipsec_policy => 'ipsec',
54
+ ipsec_dir => 'out',
55
+ action => 'accept',
56
+ }
57
+ firewall { '093 ignore 10.0.0.0/8':
58
+ table => 'nat',
59
+ chain => 'POSTROUTING',
60
+ outiface => 'eth0',
61
+ destination => '10.0.0.0/8',
62
+ action => 'accept',
63
+ }
64
+ firewall { '093 ignore 172.16.0.0/12':
65
+ table => 'nat',
66
+ chain => 'POSTROUTING',
67
+ outiface => 'eth0',
68
+ destination => '172.16.0.0/12',
69
+ action => 'accept',
70
+ }
71
+ firewall { '093 ignore 192.168.0.0/16':
72
+ table => 'nat',
73
+ chain => 'POSTROUTING',
74
+ outiface => 'eth0',
75
+ destination => '192.168.0.0/16',
76
+ action => 'accept',
77
+ }
78
+ firewall { '100 masq outbound':
79
+ table => 'nat',
80
+ chain => 'POSTROUTING',
81
+ outiface => 'eth0',
82
+ jump => 'MASQUERADE',
83
+ }
84
+ firewall { '101 redirect port 1':
85
+ table => 'nat',
86
+ chain => 'PREROUTING',
87
+ iniface => 'eth0',
88
+ proto => 'tcp',
89
+ dport => '1',
90
+ toports => '22',
91
+ jump => 'REDIRECT',
92
+ }
93
+ EOS
94
+
95
+ # Run it twice and test for idempotency
96
+ apply_manifest(pp, :catch_failures => true)
97
+ expect(apply_manifest(pp, :catch_failures => true).exit_code).to be_zero
98
+ end
99
+
100
+ it 'contains appropriate rules' do
101
+ shell('iptables -S') do |r|
102
+ expect(r.stdout).to eq(
103
+ "-P INPUT ACCEPT\n" +
104
+ "-P FORWARD ACCEPT\n" +
105
+ "-P OUTPUT ACCEPT\n" +
106
+ "-A FORWARD -s 10.0.0.0/8 -d 10.0.0.0/8 -m comment --comment \"090 forward allow local\" -j ACCEPT \n" +
107
+ "-A FORWARD -s 10.0.0.0/8 ! -d 10.0.0.0/8 -p icmp -m comment --comment \"100 forward standard allow icmp\" -j ACCEPT \n" +
108
+ "-A FORWARD -s 10.0.0.0/8 ! -d 10.0.0.0/8 -p tcp -m multiport --ports 80,443,21,20,22,53,123,43,873,25,465 -m comment --comment \"100 forward standard allow tcp\" -m state --state NEW -j ACCEPT \n" +
109
+ "-A FORWARD -s 10.0.0.0/8 ! -d 10.0.0.0/8 -p udp -m multiport --ports 53,123 -m comment --comment \"100 forward standard allow udp\" -j ACCEPT \n"
110
+ )
111
+ end
112
+ end
113
+ end
114
+
115
+ describe 'complex ruleset 2' do
116
+ after :all do
117
+ shell('iptables -t filter -P INPUT ACCEPT')
118
+ shell('iptables -t filter -P FORWARD ACCEPT')
119
+ shell('iptables -t filter -P OUTPUT ACCEPT')
120
+ shell('iptables -t filter --flush')
121
+ expect(shell('iptables -t filter -X LOCAL_INPUT').stderr).to eq("")
122
+ expect(shell('iptables -t filter -X LOCAL_INPUT_PRE').stderr).to eq("")
123
+ end
124
+
125
+ it 'applies cleanly' do
126
+ pp = <<-EOS
127
+ class { '::firewall': }
128
+
129
+ Firewall {
130
+ proto => 'all',
131
+ stage => 'pre',
132
+ }
133
+ Firewallchain {
134
+ stage => 'pre',
135
+ purge => 'true',
136
+ ignore => [
137
+ '--comment "[^"]*(?i:ignore)[^"]*"',
138
+ ],
139
+ }
140
+
141
+ firewall { '010 INPUT allow established and related':
142
+ proto => 'all',
143
+ state => ['ESTABLISHED', 'RELATED'],
144
+ action => 'accept',
145
+ before => Firewallchain['INPUT:filter:IPv4'],
146
+ }
147
+ firewall { '012 accept loopback':
148
+ iniface => 'lo',
149
+ action => 'accept',
150
+ before => Firewallchain['INPUT:filter:IPv4'],
151
+ }
152
+ firewall { '020 ssh':
153
+ proto => 'tcp',
154
+ dport => '22',
155
+ state => 'NEW',
156
+ action => 'accept',
157
+ before => Firewallchain['INPUT:filter:IPv4'],
158
+ }
159
+
160
+ firewall { '013 icmp echo-request':
161
+ proto => 'icmp',
162
+ icmp => 'echo-request',
163
+ action => 'accept',
164
+ source => '10.0.0.0/8',
165
+ }
166
+ firewall { '013 icmp destination-unreachable':
167
+ proto => 'icmp',
168
+ icmp => 'destination-unreachable',
169
+ action => 'accept',
170
+ }
171
+ firewall { '013 icmp time-exceeded':
172
+ proto => 'icmp',
173
+ icmp => 'time-exceeded',
174
+ action => 'accept',
175
+ }
176
+ firewall { '999 reject':
177
+ action => 'reject',
178
+ reject => 'icmp-host-prohibited',
179
+ }
180
+
181
+
182
+ firewallchain { 'LOCAL_INPUT_PRE:filter:IPv4': }
183
+ firewall { '001 LOCAL_INPUT_PRE':
184
+ jump => 'LOCAL_INPUT_PRE',
185
+ require => Firewallchain['LOCAL_INPUT_PRE:filter:IPv4'],
186
+ }
187
+ firewallchain { 'LOCAL_INPUT:filter:IPv4': }
188
+ firewall { '900 LOCAL_INPUT':
189
+ jump => 'LOCAL_INPUT',
190
+ require => Firewallchain['LOCAL_INPUT:filter:IPv4'],
191
+ }
192
+ firewallchain { 'INPUT:filter:IPv4':
193
+ policy => 'drop',
194
+ ignore => [
195
+ '-j fail2ban-ssh',
196
+ '--comment "[^"]*(?i:ignore)[^"]*"',
197
+ ],
198
+ }
199
+
200
+
201
+ firewall { '010 allow established and related':
202
+ chain => 'FORWARD',
203
+ proto => 'all',
204
+ state => ['ESTABLISHED','RELATED'],
205
+ action => 'accept',
206
+ before => Firewallchain['FORWARD:filter:IPv4'],
207
+ }
208
+ firewallchain { 'FORWARD:filter:IPv4':
209
+ policy => 'drop',
210
+ }
211
+
212
+ firewallchain { 'OUTPUT:filter:IPv4': }
213
+
214
+
215
+ # purge unknown rules from mangle table
216
+ firewallchain { ['PREROUTING:mangle:IPv4', 'INPUT:mangle:IPv4', 'FORWARD:mangle:IPv4', 'OUTPUT:mangle:IPv4', 'POSTROUTING:mangle:IPv4']: }
217
+
218
+ # and the nat table
219
+ firewallchain { ['PREROUTING:nat:IPv4', 'INPUT:nat:IPv4', 'OUTPUT:nat:IPv4', 'POSTROUTING:nat:IPv4']: }
220
+ EOS
221
+
222
+ # Run it twice and test for idempotency
223
+ apply_manifest(pp, :catch_failures => true)
224
+ apply_manifest(pp, :catch_changes => true)
225
+ end
226
+
227
+ it 'contains appropriate rules' do
228
+ shell('iptables -S') do |r|
229
+ expect(r.stdout).to eq(
230
+ "-P INPUT DROP\n" +
231
+ "-P FORWARD DROP\n" +
232
+ "-P OUTPUT ACCEPT\n" +
233
+ "-N LOCAL_INPUT\n" +
234
+ "-N LOCAL_INPUT_PRE\n" +
235
+ "-A INPUT -m comment --comment \"001 LOCAL_INPUT_PRE\" -j LOCAL_INPUT_PRE \n" +
236
+ "-A INPUT -m comment --comment \"010 INPUT allow established and related\" -m state --state RELATED,ESTABLISHED -j ACCEPT \n" +
237
+ "-A INPUT -i lo -m comment --comment \"012 accept loopback\" -j ACCEPT \n" +
238
+ "-A INPUT -p icmp -m comment --comment \"013 icmp destination-unreachable\" -m icmp --icmp-type 3 -j ACCEPT \n" +
239
+ "-A INPUT -s 10.0.0.0/8 -p icmp -m comment --comment \"013 icmp echo-request\" -m icmp --icmp-type 8 -j ACCEPT \n" +
240
+ "-A INPUT -p icmp -m comment --comment \"013 icmp time-exceeded\" -m icmp --icmp-type 11 -j ACCEPT \n" +
241
+ "-A INPUT -p tcp -m multiport --dports 22 -m comment --comment \"020 ssh\" -m state --state NEW -j ACCEPT \n" +
242
+ "-A INPUT -m comment --comment \"900 LOCAL_INPUT\" -j LOCAL_INPUT \n" +
243
+ "-A INPUT -m comment --comment \"999 reject\" -j REJECT --reject-with icmp-host-prohibited \n" +
244
+ "-A FORWARD -m comment --comment \"010 allow established and related\" -m state --state RELATED,ESTABLISHED -j ACCEPT \n"
245
+ )
246
+ end
247
+ end
248
+ end
@@ -0,0 +1,96 @@
1
+ require 'spec_helper_acceptance'
2
+
3
+ describe 'firewall socket property' do
4
+ before :all do
5
+ iptables_flush_all_tables
6
+ end
7
+
8
+ shared_examples "is idempotent" do |value, line_match|
9
+ it "changes the value to #{value}" do
10
+ pp = <<-EOS
11
+ class { '::firewall': }
12
+ firewall { '598 - test':
13
+ ensure => present,
14
+ proto => 'tcp',
15
+ chain => 'PREROUTING',
16
+ table => 'raw',
17
+ #{value}
18
+ }
19
+ EOS
20
+
21
+ apply_manifest(pp, :catch_failures => true)
22
+ apply_manifest(pp, :catch_changes => true)
23
+
24
+ shell('iptables -t raw -S') do |r|
25
+ expect(r.stdout).to match(/#{line_match}/)
26
+ end
27
+ end
28
+ end
29
+ shared_examples "doesn't change" do |value, line_match|
30
+ it "doesn't change the value to #{value}" do
31
+ pp = <<-EOS
32
+ class { '::firewall': }
33
+ firewall { '598 - test':
34
+ ensure => present,
35
+ proto => 'tcp',
36
+ chain => 'PREROUTING',
37
+ table => 'raw',
38
+ #{value}
39
+ }
40
+ EOS
41
+
42
+ apply_manifest(pp, :catch_changes => true)
43
+
44
+ shell('iptables -t raw -S') do |r|
45
+ expect(r.stdout).to match(/#{line_match}/)
46
+ end
47
+ end
48
+ end
49
+
50
+ describe 'adding a rule' do
51
+ context 'when unset' do
52
+ before :all do
53
+ iptables_flush_all_tables
54
+ end
55
+ it_behaves_like 'is idempotent', '', /-A PREROUTING -p tcp -m comment --comment "598 - test"/
56
+ end
57
+ context 'when set to true' do
58
+ before :all do
59
+ iptables_flush_all_tables
60
+ end
61
+ it_behaves_like 'is idempotent', 'socket => true,', /-A PREROUTING -p tcp -m socket -m comment --comment "598 - test"/
62
+ end
63
+ context 'when set to false' do
64
+ before :all do
65
+ iptables_flush_all_tables
66
+ end
67
+ it_behaves_like "is idempotent", 'socket => false,', /-A PREROUTING -p tcp -m comment --comment "598 - test"/
68
+ end
69
+ end
70
+ describe 'editing a rule' do
71
+ context 'when unset or false' do
72
+ before :each do
73
+ iptables_flush_all_tables
74
+ shell('/sbin/iptables -t raw -A PREROUTING -p tcp -m comment --comment "598 - test"')
75
+ end
76
+ context 'and current value is false' do
77
+ it_behaves_like "doesn't change", 'socket => false,', /-A PREROUTING -p tcp -m comment --comment "598 - test"/
78
+ end
79
+ context 'and current value is true' do
80
+ it_behaves_like "is idempotent", 'socket => true,', /-A PREROUTING -p tcp -m socket -m comment --comment "598 - test"/
81
+ end
82
+ end
83
+ context 'when set to true' do
84
+ before :each do
85
+ iptables_flush_all_tables
86
+ shell('/sbin/iptables -t raw -A PREROUTING -p tcp -m socket -m comment --comment "598 - test"')
87
+ end
88
+ context 'and current value is false' do
89
+ it_behaves_like "is idempotent", 'socket => false,', /-A PREROUTING -p tcp -m comment --comment "598 - test"/
90
+ end
91
+ context 'and current value is true' do
92
+ it_behaves_like "doesn't change", 'socket => true,', /-A PREROUTING -p tcp -m socket -m comment --comment "598 - test"/
93
+ end
94
+ end
95
+ end
96
+ end
@@ -1,8 +1,8 @@
1
- require 'spec_helper_system'
1
+ require 'spec_helper_acceptance'
2
2
 
3
3
  # Some tests for the standard recommended usage
4
4
  describe 'standard usage tests:' do
5
- context 'standard 1' do
5
+ it 'applies twice' do
6
6
  pp = <<-EOS
7
7
  class my_fw::pre {
8
8
  Firewall {
@@ -21,7 +21,7 @@ describe 'standard usage tests:' do
21
21
  }->
22
22
  firewall { '002 accept related established rules':
23
23
  proto => 'all',
24
- state => ['RELATED', 'ESTABLISHED'],
24
+ ctstate => ['RELATED', 'ESTABLISHED'],
25
25
  action => 'accept',
26
26
  }
27
27
  }
@@ -48,12 +48,8 @@ describe 'standard usage tests:' do
48
48
  }
49
49
  EOS
50
50
 
51
- context puppet_apply(pp) do
52
- its(:stderr) { should be_empty }
53
- its(:exit_code) { should_not == 1 }
54
- its(:refresh) { should be_nil }
55
- its(:stderr) { should be_empty }
56
- its(:exit_code) { should be_zero }
57
- end
51
+ # Run it twice and test for idempotency
52
+ apply_manifest(pp, :catch_failures => true)
53
+ expect(apply_manifest(pp, :catch_failures => true).exit_code).to be_zero
58
54
  end
59
55
  end