Révision 032387dc
Add nftables.version to structured fact.
```
FACTERLIB=. facter -p nftables
{
tables => [
"bridge-filter",
"bridge-nat",
"inet-firewalld",
"ip-firewalld",
"ip6-firewalld"
],
version => "0.9.3"
}
```
lib/facter/nftables.rb | ||
---|---|---|
6 | 6 |
# table ip6 nat |
7 | 7 |
# table inet f2b-table |
8 | 8 |
# |
9 |
# Produce the version of nftables (nft --version) |
|
10 |
# nftables v0.9.3 (Topsy) |
|
11 |
# |
|
9 | 12 |
Facter.add(:nftables) do |
10 | 13 |
@nft_cmd = Facter::Util::Resolution.which('nft') |
11 | 14 |
confine { @nft_cmd } |
... | ... | |
16 | 19 |
table_result.each_line do |line| |
17 | 20 |
tables.push(line.split(' ')[1, 2].join('-')) |
18 | 21 |
end |
19 |
{ 'tables' => tables } |
|
22 |
version = Facter::Core::Execution.execute(%(#{@nft_cmd} --version))[%r{^.*v(\d+\.\d+.\d+)\s.*$}, 1] |
|
23 |
{ |
|
24 |
'tables' => tables, |
|
25 |
'version' => version, |
|
26 |
} |
|
20 | 27 |
end |
21 | 28 |
end |
spec/unit/facter/nftables_spec.rb | ||
---|---|---|
5 | 5 |
Facter.clear |
6 | 6 |
Process.stubs(:uid).returns(0) |
7 | 7 |
Facter::Util::Resolution.stubs(:which).with('nft').returns('/usr/sbin/nft') |
8 |
Facter::Core::Execution.stubs(:execute).with('/usr/sbin/nft list tables').returns(nft_result) |
|
8 |
Facter::Core::Execution.stubs(:execute).with('/usr/sbin/nft list tables').returns(nft_tables_result) |
|
9 |
Facter::Core::Execution.stubs(:execute).with('/usr/sbin/nft --version').returns(nft_version_result) |
|
9 | 10 |
end |
10 | 11 |
|
11 |
context 'nft rules present' do |
|
12 |
let(:nft_result) { "table inet firewalld\ntable ip firewalld\n" } |
|
12 |
context 'nft present' do |
|
13 |
let(:nft_tables_result) { "table inet firewalld\ntable ip firewalld\n" } |
|
14 |
let(:nft_version_result) { "nftables v0.9.15 (Topsy)\n" } |
|
13 | 15 |
|
14 |
it 'returns valid tables' do
|
|
15 |
expect(Facter.fact('nftables').value).to eq('tables' => ['inet-firewalld', 'ip-firewalld']) |
|
16 |
it 'returns valid fact' do
|
|
17 |
expect(Facter.fact('nftables').value).to eq('tables' => ['inet-firewalld', 'ip-firewalld'], 'version' => '0.9.15')
|
|
16 | 18 |
end |
17 | 19 |
end |
18 | 20 |
|
19 | 21 |
context 'nft fails' do |
20 |
let(:nft_result) { :failed } |
|
22 |
let(:nft_tables_result) { :failed } |
|
23 |
let(:nft_version_result) { :failed } |
|
21 | 24 |
|
22 | 25 |
it 'does not return a fact' do |
26 |
Facter::Core::Execution.stubs(:execute).with('/usr/sbin/nft --version', on_fail: :failed).returns(:failed) |
|
23 | 27 |
Facter::Core::Execution.stubs(:execute).with('/usr/sbin/nft list tables', on_fail: :failed).returns(:failed) |
24 | 28 |
|
25 | 29 |
expect(Facter.fact('nftables').value).to be_nil |
Formats disponibles : Unified diff