Skip to content

Commit cd68e31

Browse files
committed
Change ip6tables_version to constant in provider.
Facter is being asked for ip6tables_version every time ip6tables provider constructor is called during prefetch. This causes severe performance issues on systems with a lot of ip6tables rules (fe: openstack hypervisors) when even a single ipv6 rule is added. This commit should fix this.
1 parent 911b9bb commit cd68e31

File tree

2 files changed

+7
-8
lines changed

2 files changed

+7
-8
lines changed

lib/puppet/provider/firewall/ip6tables.rb

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,31 +52,30 @@
5252

5353
confine kernel: :linux
5454

55-
ip6tables_version = Facter.value('ip6tables_version')
56-
mark_flag = if ip6tables_version && Puppet::Util::Package.versioncmp(ip6tables_version, '1.4.1') < 0
55+
const_set(:Ip6tables_version, Facter.value('ip6tables_version'))
56+
mark_flag = if const_get(:Ip6tables_version) && Puppet::Util::Package.versioncmp(const_get(:Ip6tables_version), '1.4.1') < 0
5757
'--set-mark'
5858
else
5959
'--set-xmark'
6060
end
6161

6262
kernelversion = Facter.value('kernelversion')
6363
if (kernelversion && Puppet::Util::Package.versioncmp(kernelversion, '3.13') >= 0) &&
64-
(ip6tables_version && Puppet::Util::Package.versioncmp(ip6tables_version, '1.6.2') >= 0)
64+
(const_get(:Ip6tables_version) && Puppet::Util::Package.versioncmp(const_get(:Ip6tables_version), '1.6.2') >= 0)
6565
has_feature :random_fully
6666
end
6767

6868
if (kernelversion && Puppet::Util::Package.versioncmp(kernelversion, '3.3') >= 0) &&
69-
(ip6tables_version && Puppet::Util::Package.versioncmp(ip6tables_version, '1.4.13') >= 0)
69+
(const_get(:Ip6tables_version) && Puppet::Util::Package.versioncmp(const_get(:Ip6tables_version), '1.4.13') >= 0)
7070
has_feature :rpfilter
7171
end
7272

73-
if ip6tables_version && Puppet::Util::Package.versioncmp(ip6tables_version, '1.6.1') >= 0
73+
if const_get(:Ip6tables_version) && Puppet::Util::Package.versioncmp(const_get(:Ip6tables_version), '1.6.1') >= 0
7474
has_feature :nflog_size
7575
end
7676

7777
def initialize(*args)
78-
ip6tables_version = Facter.value('ip6tables_version')
79-
raise ArgumentError, 'The ip6tables provider is not supported on version 1.3 of iptables' if ip6tables_version&.match(%r{1\.3\.\d})
78+
raise ArgumentError, 'The ip6tables provider is not supported on version 1.3 of iptables' if Puppet::Type::Firewall::ProviderIp6tables::Ip6tables_version&.match(%r{1\.3\.\d})
8079
super
8180
end
8281

spec/unit/puppet/provider/ip6tables_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def stub_iptables
2121

2222
allow(Facter.fact(:kernel)).to receive(:value).and_return('Linux')
2323
allow(Facter.fact(:operatingsystem)).to receive(:value).and_return('Debian')
24-
allow(Facter.fact('ip6tables_version')).to receive(:value).and_return(ip6tables_version)
24+
stub_const('Puppet::Type::Firewall::ProviderIp6tables::Ip6tables_version', ip6tables_version)
2525
allow(Puppet::Util::Execution).to receive(:execute).and_return ''
2626
allow(Puppet::Util).to receive(:which).with('iptables-save')
2727
.and_return '/sbin/iptables-save'

0 commit comments

Comments
 (0)