Skip to content

Commit 6e81b7e

Browse files
authored
Merge pull request #773 from smortex/fix/check-for-nil-value
Fix facts gathering
2 parents 4862f92 + f756598 commit 6e81b7e

File tree

2 files changed

+38
-35
lines changed

2 files changed

+38
-35
lines changed

lib/facter/docker.rb

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ def interfaces
6868
Facter.add(:docker_version) do
6969
setcode do
7070
if Facter::Core::Execution.which('docker')
71-
value = Facter::Core::Execution.exec(
72-
"#{docker_command} version --format '{{json .}}'", timeout: 90
71+
value = Facter::Core::Execution.execute(
72+
"#{docker_command} version --format '{{json .}}'", time_limit: 90
7373
)
7474
val = JSON.parse(value)
7575
end
@@ -79,9 +79,9 @@ def interfaces
7979

8080
Facter.add(:docker_worker_join_token) do
8181
setcode do
82-
if Facter::Util::Resolution.which('docker')
83-
val = Facter::Util::Resolution.exec(
84-
"#{docker_command} swarm join-token worker -q",
82+
if Facter::Core::Execution.which('docker')
83+
val = Facter::Core::Execution.execute(
84+
"#{docker_command} swarm join-token worker -q", time_limit: 90
8585
)
8686
end
8787
val
@@ -90,9 +90,9 @@ def interfaces
9090

9191
Facter.add(:docker_manager_join_token) do
9292
setcode do
93-
if Facter::Util::Resolution.which('docker')
94-
val = Facter::Util::Resolution.exec(
95-
"#{docker_command} swarm join-token manager -q",
93+
if Facter::Core::Execution.which('docker')
94+
val = Facter::Core::Execution.execute(
95+
"#{docker_command} swarm join-token manager -q", time_limit: 90
9696
)
9797
end
9898
val
@@ -102,23 +102,23 @@ def interfaces
102102
Facter.add(:docker) do
103103
setcode do
104104
docker_version = Facter.value(:docker_client_version)
105-
if docker_version.match?(%r{1[0-9][0-2]?[.]\w+})
105+
if docker_version&.match?(%r{1[0-9][0-2]?[.]\w+})
106106
if Facter::Core::Execution.which('docker')
107-
docker_json_str = Facter::Core::Execution.exec(
108-
"#{docker_command} info --format '{{json .}}'", timeout: 90
107+
docker_json_str = Facter::Core::Execution.execute(
108+
"#{docker_command} info --format '{{json .}}'", time_limit: 90
109109
)
110110
begin
111111
docker = JSON.parse(docker_json_str)
112112
docker['network'] = {}
113113

114114
docker['network']['managed_interfaces'] = {}
115-
network_list = Facter::Core::Execution.exec("#{docker_command} network ls | tail -n +2", timeout: 90)
115+
network_list = Facter::Core::Execution.execute("#{docker_command} network ls | tail -n +2", time_limit: 90)
116116
docker_network_names = []
117117
network_list.each_line { |line| docker_network_names.push line.split[1] }
118118
docker_network_ids = []
119119
network_list.each_line { |line| docker_network_ids.push line.split[0] }
120120
docker_network_names.each do |network|
121-
inspect = JSON.parse(Facter::Core::Execution.exec("#{docker_command} network inspect #{network}", timeout: 90))
121+
inspect = JSON.parse(Facter::Core::Execution.execute("#{docker_command} network inspect #{network}", time_limit: 90))
122122
docker['network'][network] = inspect[0]
123123
network_id = docker['network'][network]['Id'][0..11]
124124
interfaces.each do |iface|

spec/unit/lib/facter/docker_spec.rb

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,44 @@
66
describe 'Facter::Util::Fact' do
77
before :each do
88
Facter.clear
9+
allow(Facter::Core::Execution).to receive(:which).and_call_original
10+
allow(Facter::Core::Execution).to receive(:execute).and_call_original
11+
912
if Facter.value(:kernel) == 'windows'
1013
docker_command = 'powershell -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Bypass -c docker'
11-
Facter::Core::Execution.stubs(:which).with('dhcpcd').returns('C:\Windows\dhcpd.exe')
12-
Facter::Core::Execution.stubs(:which).with('route').returns('C:\Windows\System32\ROUTE.EXE')
13-
Facter::Core::Execution.stubs(:which).with('docker').returns('C:\Program Files\Docker\docker.exe')
14+
allow(Facter::Core::Execution).to receive(:which).with('dhcpcd').and_return('C:\Windows\dhcpd.exe')
15+
allow(Facter::Core::Execution).to receive(:which).with('route').and_return('C:\Windows\System32\ROUTE.EXE')
16+
allow(Facter::Core::Execution).to receive(:which).with('docker').and_return('C:\Program Files\Docker\docker.exe')
1417
else
1518
docker_command = 'docker'
16-
Facter::Core::Execution.stubs(:which).with('route').returns('/usr/bin/route')
17-
Facter::Core::Execution.stubs(:which).with('dhcpcd').returns('/usr/bin/dhcpd')
18-
Facter::Core::Execution.stubs(:which).with('docker').returns('/usr/bin/docker')
19+
allow(Facter::Core::Execution).to receive(:which).with('route').and_return('/usr/bin/route')
20+
allow(Facter::Core::Execution).to receive(:which).with('dhcpcd').and_return('/usr/bin/dhcpd')
21+
allow(Facter::Core::Execution).to receive(:which).with('docker').and_return('/usr/bin/docker')
1922
end
2023
docker_info = File.read(fixtures('facts', 'docker_info'))
21-
Facter::Core::Execution.stubs(:exec).with("#{docker_command} info --format '{{json .}}'", timeout: 90).returns(docker_info)
24+
allow(Facter::Core::Execution).to receive(:execute).with("#{docker_command} info --format '{{json .}}'", time_limit: 90).and_return(docker_info)
2225
processors = File.read(fixtures('facts', 'processors'))
23-
Facter.fact(:processors).stubs(:value).returns(JSON.parse(processors))
26+
allow(Facter.fact(:processors)).to receive(:value).and_return(JSON.parse(processors))
2427
docker_version = File.read(fixtures('facts', 'docker_version'))
25-
Facter::Core::Execution.stubs(:exec).with("#{docker_command} version --format '{{json .}}'", timeout: 90).returns(docker_version)
28+
allow(Facter::Core::Execution).to receive(:execute).with("#{docker_command} version --format '{{json .}}'", time_limit: 90).and_return(docker_version)
2629
docker_network_list = File.read(fixtures('facts', 'docker_network_list'))
27-
Facter::Core::Execution.stubs(:exec).with("#{docker_command} network ls | tail -n +2", timeout: 90).returns(docker_network_list)
30+
allow(Facter::Core::Execution).to receive(:execute).with("#{docker_command} network ls | tail -n +2", time_limit: 90).and_return(docker_network_list)
2831
docker_network_names = []
2932
docker_network_list.each_line { |line| docker_network_names.push line.split[1] }
3033
docker_network_names.each do |network|
3134
inspect = File.read(fixtures('facts', "docker_network_inspect_#{network}"))
32-
Facter::Core::Execution.stubs(:exec).with("#{docker_command} network inspect #{network}", timeout: 90).returns(inspect)
35+
allow(Facter::Core::Execution).to receive(:execute).with("#{docker_command} network inspect #{network}", time_limit: 90).and_return(inspect)
3336
end
3437
docker_worker_token = File.read(fixtures('facts', 'docker_swarm_worker_token'))
35-
Facter::Util::Resolution.stubs(:exec).with("#{docker_command} swarm join-token worker -q").returns(docker_worker_token.chomp)
38+
allow(Facter::Core::Execution).to receive(:execute).with("#{docker_command} swarm join-token worker -q", time_limit: 90).and_return(docker_worker_token.chomp)
3639
docker_manager_token = File.read(fixtures('facts', 'docker_swarm_manager_token'))
37-
Facter::Util::Resolution.stubs(:exec).with("#{docker_command} swarm join-token manager -q").returns(docker_manager_token.chomp)
40+
allow(Facter::Core::Execution).to receive(:execute).with("#{docker_command} swarm join-token manager -q", time_limit: 90).and_return(docker_manager_token.chomp)
3841
end
3942
after(:each) { Facter.clear }
4043

4144
describe 'docker fact with composer network' do
4245
before :each do
43-
Facter.fact(:interfaces).stubs(:value).returns('br-c5810f1e3113,docker0,eth0,lo')
46+
allow(Facter.fact(:interfaces)).to receive(:value).and_return('br-c5810f1e3113,docker0,eth0,lo')
4447
end
4548
it do
4649
fact = File.read(fixtures('facts', 'facts_with_compose'))
@@ -54,7 +57,7 @@
5457

5558
describe 'docker fact without composer network' do
5659
before :each do
57-
Facter.fact(:interfaces).stubs(:value).returns('br-19a6ebf6f5a5,docker0,eth0,lo')
60+
allow(Facter.fact(:interfaces)).to receive(:value).and_return('br-19a6ebf6f5a5,docker0,eth0,lo')
5861
end
5962
it do
6063
fact = File.read(fixtures('facts', 'facts_without_compose')).chomp
@@ -71,8 +74,8 @@
7174
describe 'docker client version' do
7275
before(:each) do
7376
docker_version = File.read(fixtures('facts', 'docker_version'))
74-
Facter.fact(:docker_version).stubs(:value).returns(JSON.parse(docker_version))
75-
Facter.fact(:interfaces).stubs(:value).returns('br-19a6ebf6f5a5,docker0,eth0,lo')
77+
allow(Facter.fact(:docker_version)).to receive(:value).and_return(JSON.parse(docker_version))
78+
allow(Facter.fact(:interfaces)).to receive(:value).and_return('br-19a6ebf6f5a5,docker0,eth0,lo')
7679
end
7780
it do
7881
expect(Facter.fact(:docker_client_version).value).to eq(
@@ -84,8 +87,8 @@
8487
describe 'docker server version' do
8588
before(:each) do
8689
docker_version = File.read(fixtures('facts', 'docker_version'))
87-
Facter.fact(:docker_version).stubs(:value).returns(JSON.parse(docker_version))
88-
Facter.fact(:interfaces).stubs(:value).returns('br-19a6ebf6f5a5,docker0,eth0,lo')
90+
allow(Facter.fact(:docker_version)).to receive(:value).and_return(JSON.parse(docker_version))
91+
allow(Facter.fact(:interfaces)).to receive(:value).and_return('br-19a6ebf6f5a5,docker0,eth0,lo')
8992
end
9093
it do
9194
expect(Facter.fact(:docker_server_version).value).to eq(
@@ -96,7 +99,7 @@
9699

97100
describe 'docker info' do
98101
before :each do
99-
Facter.fact(:interfaces).stubs(:value).returns('br-19a6ebf6f5a5,docker0,eth0,lo')
102+
allow(Facter.fact(:interfaces)).to receive(:value).and_return('br-19a6ebf6f5a5,docker0,eth0,lo')
100103
end
101104
it 'has valid entries' do
102105
expect(Facter.fact(:docker).value).to include(
@@ -107,7 +110,7 @@
107110

108111
describe 'docker swarm worker join-token' do
109112
before :each do
110-
Facter.fact(:interfaces).stubs(:value).returns('br-19a6ebf6f5a5,docker0,eth0,lo')
113+
allow(Facter.fact(:interfaces)).to receive(:value).and_return('br-19a6ebf6f5a5,docker0,eth0,lo')
111114
end
112115
it do
113116
expect(Facter.fact(:docker_worker_join_token).value).to eq(
@@ -118,7 +121,7 @@
118121

119122
describe 'docker swarm manager join-token' do
120123
before :each do
121-
Facter.fact(:interfaces).stubs(:value).returns('br-19a6ebf6f5a5,docker0,eth0,lo')
124+
allow(Facter.fact(:interfaces)).to receive(:value).and_return('br-19a6ebf6f5a5,docker0,eth0,lo')
122125
end
123126
it do
124127
expect(Facter.fact(:docker_manager_join_token).value).to eq(

0 commit comments

Comments
 (0)