@@ -41,6 +41,16 @@ def interfaces
41
41
Facter . value ( :interfaces ) . split ( ',' )
42
42
end
43
43
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
+
44
54
Facter . add ( :docker_client_version ) do
45
55
setcode do
46
56
docker_version = Facter . value ( :docker_version )
@@ -65,70 +75,77 @@ def interfaces
65
75
end
66
76
end
67
77
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
-
80
78
Facter . add ( :docker_worker_join_token ) do
79
+ confine { Facter ::Core ::Execution . which ( 'docker' ) }
81
80
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
86
94
end
87
95
val
88
96
end
89
97
end
90
98
91
99
Facter . add ( :docker_manager_join_token ) do
100
+ confine { Facter ::Core ::Execution . which ( 'docker' ) }
92
101
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
97
115
end
98
116
val
99
117
end
100
118
end
101
119
102
120
Facter . add ( :docker ) do
121
+ confine { Facter ::Core ::Execution . which ( 'docker' ) }
103
122
setcode do
104
123
docker_version = Facter . value ( :docker_client_version )
105
124
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' ] = { }
113
131
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 )
127
144
end
128
- docker
129
- rescue JSON ::ParserError
130
- nil
131
145
end
146
+ docker
147
+ rescue JSON ::ParserError
148
+ nil
132
149
end
133
150
end
134
151
end
0 commit comments