@@ -41,6 +41,16 @@ def interfaces
4141 Facter . value ( :interfaces ) . split ( ',' )
4242end
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+
4454Facter . add ( :docker_client_version ) do
4555 setcode do
4656 docker_version = Facter . value ( :docker_version )
@@ -65,70 +75,77 @@ def interfaces
6575 end
6676end
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-
8078Facter . add ( :docker_worker_join_token ) do
79+ confine { Facter ::Core ::Execution . which ( 'docker' ) }
8180 setcode do
82- if Facter ::Core ::Execution . which ( 'docker' )
83- val = Facter ::Core ::Execution . execute (
84- "#{ docker_command } swarm join-token worker -q" , timeout : 90
85- )
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+ )
91+ end
92+ rescue JSON ::ParserError
93+ nil
8694 end
8795 val
8896 end
8997end
9098
9199Facter . add ( :docker_manager_join_token ) do
100+ confine { Facter ::Core ::Execution . which ( 'docker' ) }
92101 setcode do
93- if Facter ::Core ::Execution . which ( 'docker' )
94- val = Facter ::Core ::Execution . execute (
95- "#{ docker_command } swarm join-token manager -q" , timeout : 90
96- )
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+ )
112+ end
113+ rescue JSON ::ParserError
114+ nil
97115 end
98116 val
99117 end
100118end
101119
102120Facter . add ( :docker ) do
121+ confine { Facter ::Core ::Execution . which ( 'docker' ) }
103122 setcode do
104123 docker_version = Facter . value ( :docker_client_version )
105124 if docker_version &.match? ( %r{1[0-9][0-2]?[.]\w +} )
106- if Facter ::Core ::Execution . which ( 'docker' )
107- docker_json_str = Facter ::Core ::Execution . execute (
108- "#{ docker_command } info --format '{{json .}}'" , timeout : 90
109- )
110- begin
111- docker = JSON . parse ( docker_json_str )
112- 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' ] = { }
113131
114- docker [ 'network' ] [ 'managed_interfaces' ] = { }
115- network_list = Facter ::Core ::Execution . execute ( "#{ docker_command } network ls | tail -n +2" , timeout : 90 )
116- docker_network_names = [ ]
117- network_list . each_line { |line | docker_network_names . push line . split [ 1 ] }
118- docker_network_ids = [ ]
119- network_list . each_line { |line | docker_network_ids . push line . split [ 0 ] }
120- docker_network_names . each do |network |
121- inspect = JSON . parse ( Facter ::Core ::Execution . execute ( "#{ docker_command } network inspect #{ network } " , timeout : 90 ) )
122- docker [ 'network' ] [ network ] = inspect [ 0 ]
123- network_id = docker [ 'network' ] [ network ] [ 'Id' ] [ 0 ..11 ]
124- interfaces . each do |iface |
125- docker [ 'network' ] [ 'managed_interfaces' ] [ iface ] = network if %r{#{ network_id } } . match? ( iface )
126- 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 )
127144 end
128- docker
129- rescue JSON ::ParserError
130- nil
131145 end
146+ docker
147+ rescue JSON ::ParserError
148+ nil
132149 end
133150 end
134151 end
0 commit comments