puppet-pssh 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/puppet-pssh.rb +81 -3
- metadata +2 -2
data/lib/puppet-pssh.rb
CHANGED
@@ -9,7 +9,50 @@ require 'pp'
|
|
9
9
|
|
10
10
|
module PuppetPSSH
|
11
11
|
|
12
|
-
VERSION = "0.3.
|
12
|
+
VERSION = "0.3.2"
|
13
|
+
|
14
|
+
class PuppetDB
|
15
|
+
|
16
|
+
def initialize(host = 'puppet', port = '8080', use_ssl = false)
|
17
|
+
@host = host
|
18
|
+
@port = port
|
19
|
+
@use_ssl = use_ssl
|
20
|
+
end
|
21
|
+
|
22
|
+
def url
|
23
|
+
"#{@use_ssl ? 'https' : 'http'}://#{@host}:#{@port}/"
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_nodes_from_query(query)
|
27
|
+
target_url = "#{url}nodes?query=#{query}"
|
28
|
+
Log.debug "Puppet master host: #{@host}"
|
29
|
+
Log.debug "Puppet master url: #{target_url}"
|
30
|
+
|
31
|
+
nodes = []
|
32
|
+
begin
|
33
|
+
out = Excon.get target_url
|
34
|
+
JSON.parse(out.body).each do |n|
|
35
|
+
nodes << n
|
36
|
+
end
|
37
|
+
rescue TypeError => e
|
38
|
+
raise Exception.new "Error retrieving node list from master host: #{@host}"
|
39
|
+
rescue Excon::Errors::SocketError => e
|
40
|
+
raise Exception.new "Could not connect to the puppet master host: #{@host}"
|
41
|
+
end
|
42
|
+
nodes
|
43
|
+
end
|
44
|
+
|
45
|
+
def deactivated_nodes
|
46
|
+
query = URI.encode '["=", ["node", "active"], false]'
|
47
|
+
get_nodes_from_query query
|
48
|
+
end
|
49
|
+
|
50
|
+
def active_nodes
|
51
|
+
query = URI.encode '["=", ["node", "active"], true]'
|
52
|
+
get_nodes_from_query query
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
13
56
|
|
14
57
|
if !defined? Log or Log.nil?
|
15
58
|
Log = Logger.new($stdout)
|
@@ -147,6 +190,7 @@ module PuppetPSSH
|
|
147
190
|
|
148
191
|
parameter "COMMAND ...", "Command to run"
|
149
192
|
option "--nameserver", "DNS_SERVER", "Resolve node name using the given nameserver"
|
193
|
+
option "--use-ipaddress-fact", :flag, "Use node's ipaddress fact as the target IP"
|
150
194
|
option "--pssh-path", "PSSH_PATH", "Parallel-ssh command path", :default => '/usr/bin/parallel-ssh'
|
151
195
|
option "--hostlist-path", "HOSTLIST_PATH", "Save host list to path", :default => '/tmp/puppet-pssh-run-hostlist'
|
152
196
|
option ["-H", "--hostlist-path"], "HOSTLIST_PATH", "Save host list to path", :default => '/tmp/puppet-pssh-run-hostlist'
|
@@ -189,12 +233,14 @@ module PuppetPSSH
|
|
189
233
|
#
|
190
234
|
# Optionally resolve names using specific DNS server
|
191
235
|
#
|
192
|
-
|
236
|
+
if !nameserver.nil?
|
193
237
|
require 'net/dns'
|
194
238
|
Log.info "DNS Server: #{nameserver}"
|
195
239
|
Log.info "Resolving node names... (may take a while)"
|
196
240
|
res = Net::DNS::Resolver.new
|
197
241
|
res.nameservers = nameserver
|
242
|
+
elsif use_ipaddress_fact?
|
243
|
+
Log.info "Using node ipaddress fact to connect to the node..."
|
198
244
|
end
|
199
245
|
#
|
200
246
|
File.open hostlist_path, 'w' do |f|
|
@@ -202,8 +248,19 @@ module PuppetPSSH
|
|
202
248
|
address = i
|
203
249
|
# try to resolve before writing the list
|
204
250
|
Log.debug "Adding #{address}"
|
205
|
-
|
251
|
+
if !nameserver.nil?
|
206
252
|
address = res.query(i).answer.first.address rescue next
|
253
|
+
elsif use_ipaddress_fact?
|
254
|
+
value = JSON.parse(
|
255
|
+
Excon.get(master_url + "facts/#{i}").body
|
256
|
+
)['facts']['ipaddress']
|
257
|
+
if value
|
258
|
+
address = value
|
259
|
+
else
|
260
|
+
Log.warn "Node #{i} does not have ipaddress fact. Using FQDN."
|
261
|
+
address = i
|
262
|
+
end
|
263
|
+
else
|
207
264
|
end
|
208
265
|
f.puts "#{address}"
|
209
266
|
end
|
@@ -241,10 +298,31 @@ module PuppetPSSH
|
|
241
298
|
end
|
242
299
|
end
|
243
300
|
|
301
|
+
class CountNodes < Clamp::Command
|
302
|
+
option ["-p", "--puppetdb-host"], "PUPPETDB_HOST", "PuppetDB host", :default => 'puppet'
|
303
|
+
option ["-P", "--puppetdb-port"], "PUPPETMASTER_PORT", "PuppetDB port", :default => '8080'
|
304
|
+
option "--debug", :flag, "Print debugging output", :default => false do |o|
|
305
|
+
Log.level = Logger::DEBUG
|
306
|
+
end
|
307
|
+
|
308
|
+
def execute
|
309
|
+
pdb = PuppetDB.new puppetdb_host, puppetdb_port
|
310
|
+
active = pdb.active_nodes.size
|
311
|
+
deactivated = pdb.deactivated_nodes.size
|
312
|
+
total = active + deactivated
|
313
|
+
Log.info "Node population"
|
314
|
+
Log.info "Active nodes: #{active}"
|
315
|
+
Log.info "Inactive nodes: #{deactivated}"
|
316
|
+
Log.info "Total: #{total}"
|
317
|
+
end
|
318
|
+
|
319
|
+
end
|
320
|
+
|
244
321
|
class Driver < Clamp::Command
|
245
322
|
|
246
323
|
subcommand "run", "Run an arbitrary command against the nodes", Run
|
247
324
|
subcommand "list", "List registered nodes", List
|
325
|
+
subcommand "count-nodes", "Node population", CountNodes
|
248
326
|
|
249
327
|
end
|
250
328
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet-pssh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: colored
|