hotdog 0.4.1 → 0.5.0
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.
- checksums.yaml +4 -4
- data/README.md +4 -0
- data/lib/hotdog/application.rb +21 -15
- data/lib/hotdog/commands/down.rb +10 -8
- data/lib/hotdog/commands/hosts.rb +0 -1
- data/lib/hotdog/commands/pssh.rb +27 -24
- data/lib/hotdog/commands/search.rb +640 -262
- data/lib/hotdog/commands/ssh.rb +30 -20
- data/lib/hotdog/commands/tags.rb +0 -1
- data/lib/hotdog/commands/up.rb +0 -1
- data/lib/hotdog/commands.rb +66 -22
- data/lib/hotdog/version.rb +1 -1
- data/spec/parser/parser_spec.rb +3 -3
- data/spec/parser/tag_expression_spec.rb +10 -8
- data/spec/parser/tag_glob_expression_spec.rb +10 -8
- data/spec/parser/tag_regexp_expression_spec.rb +10 -8
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c464a62cf28997e088dd57a9e0ede3f2983f274
|
4
|
+
data.tar.gz: 85ad0d5644e20a84eaa99fee56c86ad8ead5de21
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1ae715a85cc4ad9531cbbb23a965df3c0dede59a5c2fdaf4b09fd3bf24b4e4eb2f98863357924d88feff3729c4f89bf54c484311c9a2c7152ddb59e85db2101
|
7
|
+
data.tar.gz: d79aa608eecf509fc7838f2ab3682eeea5f7009bea8479f334a7194f875b9b8b05572f16dbbdaa1788f818c3f04ba002e64a12ec931bfc856c631f34ec9f37e3
|
data/README.md
CHANGED
@@ -105,6 +105,7 @@ expression: expression0
|
|
105
105
|
|
106
106
|
expression0: expression1 "and" expression
|
107
107
|
| expression1 "or" expression
|
108
|
+
| expression1 "xor" expression
|
108
109
|
| expression1
|
109
110
|
;
|
110
111
|
|
@@ -118,6 +119,9 @@ expression2: expression3 expression
|
|
118
119
|
|
119
120
|
expression3: expression4 "&&" expression
|
120
121
|
| expression4 "||" expression
|
122
|
+
| expression4 '&' expression
|
123
|
+
| expression4 '^' expression
|
124
|
+
| expression4 '|' expression
|
121
125
|
| expression4
|
122
126
|
;
|
123
127
|
|
data/lib/hotdog/application.rb
CHANGED
@@ -28,6 +28,7 @@ module Hotdog
|
|
28
28
|
logger.level = Logger::INFO
|
29
29
|
},
|
30
30
|
max_time: 5,
|
31
|
+
offline: false,
|
31
32
|
print0: false,
|
32
33
|
print1: true,
|
33
34
|
primary_tag: nil,
|
@@ -50,25 +51,27 @@ module Hotdog
|
|
50
51
|
end
|
51
52
|
args = @optparse.order(argv)
|
52
53
|
|
53
|
-
|
54
|
-
|
55
|
-
|
54
|
+
begin
|
55
|
+
command = ( args.shift || "help" )
|
56
|
+
get_command(command).new(self).tap do |cmd|
|
57
|
+
cmd.define_options(@optparse)
|
58
|
+
args = cmd.parse_options(@optparse, args)
|
59
|
+
unless options[:api_key]
|
60
|
+
raise("DATADOG_API_KEY is not set")
|
61
|
+
end
|
56
62
|
|
57
|
-
|
58
|
-
|
59
|
-
|
63
|
+
unless options[:application_key]
|
64
|
+
raise("DATADOG_APPLICATION_KEY is not set")
|
65
|
+
end
|
60
66
|
|
61
|
-
|
67
|
+
options[:formatter] = get_formatter(options[:format]).new
|
62
68
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
69
|
+
if options[:debug] or options[:verbose]
|
70
|
+
options[:logger].level = Logger::DEBUG
|
71
|
+
else
|
72
|
+
options[:logger].level = Logger::INFO
|
73
|
+
end
|
68
74
|
|
69
|
-
begin
|
70
|
-
command = ( args.shift || "help" )
|
71
|
-
get_command(command).new(self).tap do |cmd|
|
72
75
|
cmd.run(args)
|
73
76
|
end
|
74
77
|
rescue Errno::EPIPE
|
@@ -120,6 +123,9 @@ module Hotdog
|
|
120
123
|
@optparse.on("-V", "--[no-]verbose", "Enable verbose mode") do |v|
|
121
124
|
options[:verbose] = v
|
122
125
|
end
|
126
|
+
@optparse.on("--[no-]offline", "Enable offline mode") do |v|
|
127
|
+
options[:offline] = v
|
128
|
+
end
|
123
129
|
end
|
124
130
|
|
125
131
|
def const_name(name)
|
data/lib/hotdog/commands/down.rb
CHANGED
@@ -5,24 +5,26 @@ require "fileutils"
|
|
5
5
|
module Hotdog
|
6
6
|
module Commands
|
7
7
|
class Down < BaseCommand
|
8
|
-
def
|
9
|
-
downtime = 86400
|
10
|
-
start = Time.new
|
8
|
+
def define_options(optparse)
|
9
|
+
@downtime = 86400
|
10
|
+
@start = Time.new
|
11
11
|
optparse.on("--downtime DURATION") do |v|
|
12
|
-
downtime = v.to_i
|
12
|
+
@downtime = v.to_i
|
13
13
|
end
|
14
14
|
optparse.on("--start TIME") do |v|
|
15
|
-
start = Time.parse(v)
|
15
|
+
@start = Time.parse(v)
|
16
16
|
end
|
17
|
-
|
17
|
+
end
|
18
|
+
|
19
|
+
def run(args=[])
|
18
20
|
args.each do |arg|
|
19
21
|
if arg.index(":").nil?
|
20
22
|
scope = "host:#{arg}"
|
21
23
|
else
|
22
24
|
scope = arg
|
23
25
|
end
|
24
|
-
code, schedule = @dog.schedule_downtime(scope, :start => start.to_i, :end => (start
|
25
|
-
logger.debug("dog.schedule_donwtime(%s, :start => %s, :end => %s) #==> [%s, %s]" % [scope.inspect, start.to_i, (start
|
26
|
+
code, schedule = @dog.schedule_downtime(scope, :start => @start.to_i, :end => (@start+@downtime).to_i)
|
27
|
+
logger.debug("dog.schedule_donwtime(%s, :start => %s, :end => %s) #==> [%s, %s]" % [scope.inspect, @start.to_i, (@start+@downtime).to_i, code.inspect, schedule.inspect])
|
26
28
|
if code.to_i / 100 != 2
|
27
29
|
raise("dog.schedule_downtime(%s, ...) returns [%s, %s]" % [scope.inspect, code.inspect, schedule.inspect])
|
28
30
|
end
|
data/lib/hotdog/commands/pssh.rb
CHANGED
@@ -9,36 +9,39 @@ require "parallel"
|
|
9
9
|
module Hotdog
|
10
10
|
module Commands
|
11
11
|
class Pssh < Search
|
12
|
-
def
|
13
|
-
|
12
|
+
def define_options(optparse)
|
13
|
+
@ssh_options = @options.merge({
|
14
14
|
options: [],
|
15
15
|
user: nil,
|
16
16
|
port: nil,
|
17
17
|
identity_file: nil,
|
18
18
|
max_parallelism: nil,
|
19
|
-
}
|
19
|
+
})
|
20
20
|
|
21
21
|
optparse.on("-o SSH_OPTION", "Passes this string to ssh command through shell. This option may be given multiple times") do |option|
|
22
|
-
|
22
|
+
@ssh_options[:options] += [option]
|
23
23
|
end
|
24
24
|
optparse.on("-i SSH_IDENTITY_FILE", "SSH identity file path") do |path|
|
25
|
-
|
25
|
+
@ssh_options[:identity_file] = path
|
26
26
|
end
|
27
27
|
optparse.on("-p PORT", "Port of the remote host", Integer) do |port|
|
28
|
-
|
28
|
+
@ssh_options[:port] = port
|
29
29
|
end
|
30
30
|
optparse.on("-u SSH_USER", "SSH login user name") do |user|
|
31
|
-
|
31
|
+
@ssh_options[:user] = user
|
32
32
|
end
|
33
33
|
optparse.on("-P PARALLELISM", "Max parallelism", Integer) do |n|
|
34
|
-
|
34
|
+
@ssh_options[:max_parallelism] = n
|
35
35
|
end
|
36
|
+
end
|
36
37
|
|
37
|
-
|
38
|
+
def parse_options(optparse, args=[])
|
39
|
+
optparse.order(args)
|
40
|
+
end
|
38
41
|
|
39
|
-
|
40
|
-
|
41
|
-
expression =
|
42
|
+
def run(args=[])
|
43
|
+
use_color = STDOUT.tty?
|
44
|
+
expression = args.join(" ").strip
|
42
45
|
if expression.empty? || args.empty?
|
43
46
|
exit(1)
|
44
47
|
end
|
@@ -62,25 +65,25 @@ module Hotdog
|
|
62
65
|
|
63
66
|
# build ssh command
|
64
67
|
cmdline = ["ssh"]
|
65
|
-
|
68
|
+
@ssh_options[:options].each do |option|
|
66
69
|
cmdline << "-o" << option
|
67
70
|
end
|
68
|
-
if path =
|
71
|
+
if path = @ssh_options[:identity_file]
|
69
72
|
cmdline << "-i" << Shellwords.escape(path)
|
70
73
|
end
|
71
|
-
if port =
|
74
|
+
if port = @ssh_options[:port]
|
72
75
|
cmdline << "-p" << port.to_s
|
73
76
|
end
|
74
|
-
if
|
77
|
+
if @ssh_options[:forward_agent]
|
75
78
|
cmdline << "-A"
|
76
79
|
end
|
77
80
|
|
78
81
|
cmdline << "-o" << "BatchMode=yes"
|
79
82
|
|
80
|
-
user =
|
83
|
+
user = @ssh_options[:user]
|
81
84
|
|
82
|
-
threads =
|
83
|
-
stats = Parallel.map(addresses, in_threads: threads)
|
85
|
+
threads = @ssh_options[:max_parallelism] || addresses.size
|
86
|
+
stats = Parallel.map(addresses, in_threads: threads) { |address,name|
|
84
87
|
if use_color
|
85
88
|
header = "\e[0;36m#{name}\e[00m"
|
86
89
|
else
|
@@ -97,14 +100,14 @@ module Hotdog
|
|
97
100
|
c.concat(args)
|
98
101
|
|
99
102
|
IO.popen([*c, in: :close, err: [:child, :out]]) do |io|
|
100
|
-
io.each_line
|
103
|
+
io.each_line do |line|
|
101
104
|
STDOUT.write "#{header}: #{line}"
|
102
|
-
|
105
|
+
end
|
103
106
|
end
|
104
|
-
$?.success?
|
105
|
-
|
107
|
+
$?.success? # $? is thread-local variable
|
108
|
+
}
|
106
109
|
|
107
|
-
unless stats.all?
|
110
|
+
unless stats.all?
|
108
111
|
exit(1)
|
109
112
|
end
|
110
113
|
end
|