Skip to content

Commit c519de9

Browse files
committed
Confine facts based on availability of docker binary
1 parent a8d8858 commit c519de9

File tree

1 file changed

+58
-63
lines changed

1 file changed

+58
-63
lines changed

lib/facter/docker.rb

Lines changed: 58 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,16 @@ def interfaces
4141
Facter.value(:interfaces).split(',')
4242
end
4343

44+
Facter.add(:docker_version) do
45+
confine { Facter::Core::Execution.which('docker') }
46+
setcode do
47+
value = Facter::Core::Execution.execute(
48+
"#{docker_command} version --format '{{json .}}'", timeout: 90
49+
)
50+
JSON.parse(value)
51+
end
52+
end
53+
4454
Facter.add(:docker_client_version) do
4555
setcode do
4656
docker_version = Facter.value(:docker_version)
@@ -65,92 +75,77 @@ def interfaces
6575
end
6676
end
6777

68-
Facter.add(:docker_version) do
69-
setcode do
70-
if Facter::Core::Execution.which('docker')
71-
value = Facter::Core::Execution.execute(
72-
"#{docker_command} version --format '{{json .}}'", timeout: 90
73-
)
74-
val = JSON.parse(value)
75-
end
76-
val
77-
end
78-
end
79-
8078
Facter.add(:docker_worker_join_token) do
79+
confine { Facter::Core::Execution.which('docker') }
8180
setcode do
82-
if Facter::Core::Execution.which('docker')
83-
# only run `docker swarm` commands if this node is in active in a cluster
84-
docker_json_str = Facter::Core::Execution.execute(
85-
"#{docker_command} info --format '{{json .}}'", timeout: 90
86-
)
87-
begin
88-
docker = JSON.parse(docker_json_str)
89-
if docker.fetch('Swarm', {})['LocalNodeState'] == 'active'
90-
val = Facter::Core::Execution.execute(
91-
"#{docker_command} swarm join-token worker -q", timeout: 90
92-
)
93-
end
94-
rescue JSON::ParserError
95-
nil
81+
# only run `docker swarm` commands if this node is in active in a cluster
82+
docker_json_str = Facter::Core::Execution.execute(
83+
"#{docker_command} info --format '{{json .}}'", timeout: 90
84+
)
85+
begin
86+
docker = JSON.parse(docker_json_str)
87+
if docker.fetch('Swarm', {})['LocalNodeState'] == 'active'
88+
val = Facter::Core::Execution.execute(
89+
"#{docker_command} swarm join-token worker -q", timeout: 90
90+
)
9691
end
92+
rescue JSON::ParserError
93+
nil
9794
end
9895
val
9996
end
10097
end
10198

10299
Facter.add(:docker_manager_join_token) do
100+
confine { Facter::Core::Execution.which('docker') }
103101
setcode do
104-
if Facter::Core::Execution.which('docker')
105-
# only run `docker swarm` commands if this node is in active in a cluster
106-
docker_json_str = Facter::Core::Execution.execute(
107-
"#{docker_command} info --format '{{json .}}'", timeout: 90
108-
)
109-
begin
110-
docker = JSON.parse(docker_json_str)
111-
if docker.fetch('Swarm', {})['LocalNodeState'] == 'active'
112-
val = Facter::Core::Execution.execute(
113-
"#{docker_command} swarm join-token manager -q", timeout: 90
114-
)
115-
end
116-
rescue JSON::ParserError
117-
nil
102+
# only run `docker swarm` commands if this node is in active in a cluster
103+
docker_json_str = Facter::Core::Execution.execute(
104+
"#{docker_command} info --format '{{json .}}'", timeout: 90
105+
)
106+
begin
107+
docker = JSON.parse(docker_json_str)
108+
if docker.fetch('Swarm', {})['LocalNodeState'] == 'active'
109+
val = Facter::Core::Execution.execute(
110+
"#{docker_command} swarm join-token manager -q", timeout: 90
111+
)
118112
end
113+
rescue JSON::ParserError
114+
nil
119115
end
120116
val
121117
end
122118
end
123119

124120
Facter.add(:docker) do
121+
confine { Facter::Core::Execution.which('docker') }
125122
setcode do
126123
docker_version = Facter.value(:docker_client_version)
127124
if docker_version&.match?(%r{1[0-9][0-2]?[.]\w+})
128-
if Facter::Core::Execution.which('docker')
129-
docker_json_str = Facter::Core::Execution.execute(
130-
"#{docker_command} info --format '{{json .}}'", timeout: 90
131-
)
132-
begin
133-
docker = JSON.parse(docker_json_str)
134-
docker['network'] = {}
125+
docker_json_str = Facter::Core::Execution.execute(
126+
"#{docker_command} info --format '{{json .}}'", timeout: 90
127+
)
128+
begin
129+
docker = JSON.parse(docker_json_str)
130+
docker['network'] = {}
135131

136-
docker['network']['managed_interfaces'] = {}
137-
network_list = Facter::Core::Execution.execute("#{docker_command} network ls | tail -n +2", timeout: 90)
138-
docker_network_names = []
139-
network_list.each_line { |line| docker_network_names.push line.split[1] }
140-
docker_network_ids = []
141-
network_list.each_line { |line| docker_network_ids.push line.split[0] }
142-
docker_network_names.each do |network|
143-
inspect = JSON.parse(Facter::Core::Execution.execute("#{docker_command} network inspect #{network}", timeout: 90))
144-
docker['network'][network] = inspect[0]
145-
network_id = docker['network'][network]['Id'][0..11]
146-
interfaces.each do |iface|
147-
docker['network']['managed_interfaces'][iface] = network if %r{#{network_id}}.match?(iface)
148-
end
132+
docker['network']['managed_interfaces'] = {}
133+
network_list = Facter::Core::Execution.execute("#{docker_command} network ls | tail -n +2", timeout: 90)
134+
docker_network_names = []
135+
network_list.each_line { |line| docker_network_names.push line.split[1] }
136+
docker_network_ids = []
137+
network_list.each_line { |line| docker_network_ids.push line.split[0] }
138+
docker_network_names.each do |network|
139+
inspect = JSON.parse(Facter::Core::Execution.execute("#{docker_command} network inspect #{network}", timeout: 90))
140+
docker['network'][network] = inspect[0]
141+
network_id = docker['network'][network]['Id'][0..11]
142+
interfaces.each do |iface|
143+
docker['network']['managed_interfaces'][iface] = network if %r{#{network_id}}.match?(iface)
149144
end
150-
docker
151-
rescue JSON::ParserError
152-
nil
153145
end
146+
docker
147+
rescue JSON::ParserError
148+
nil
154149
end
155150
end
156151
end

0 commit comments

Comments
 (0)