huck 0.3.0 → 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.
- checksums.yaml +4 -4
- data/lib/huck/generator.rb +4 -4
- data/lib/huck/generators/basic.rb +3 -2
- data/lib/huck/generators/exec.rb +32 -0
- data/lib/huck/generators/facter.rb +2 -1
- data/lib/huck/generators/file.rb +27 -0
- data/lib/huck/generators/ohai.rb +3 -1
- data/lib/huck/handlers/exec.rb +3 -6
- data/lib/huck/util.rb +30 -1
- data/lib/huck/version.rb +1 -1
- data/lib/huck.rb +30 -24
- metadata +3 -3
- data/lib/huck/generators/json.rb +0 -35
- data/lib/huck/generators/yaml.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b92d1a0367c6d0a896431dc7ccee1301c72367e
|
4
|
+
data.tar.gz: a30e14efb2a153c6ac90fdc9129dea7741bb2830
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a9a9adfd2acb585c57e370c91369aca27b594f65ce3335e5cdd43bada495d01d5dd042577d6ad932ccdc2f5064cea52f308455f9bf0c5b376a2853f7fe0ad45
|
7
|
+
data.tar.gz: dce955a2fcb58a4ddc38eb9150c5833ecde9f81ea4a228a05d64c7c1654576d2a35da42c06b0a484c07530a8584ed56f14e08da3239fcd2278eeb8b1b5478aec
|
data/lib/huck/generator.rb
CHANGED
@@ -28,10 +28,10 @@ module Huck
|
|
28
28
|
g = Generators::FacterGenerator.new
|
29
29
|
when 'ohai'
|
30
30
|
g = Generators::OhaiGenerator.new
|
31
|
-
when '
|
32
|
-
g = Generators::
|
33
|
-
when '
|
34
|
-
g = Generators::
|
31
|
+
when 'file'
|
32
|
+
g = Generators::FileGenerator.new
|
33
|
+
when 'exec'
|
34
|
+
g = Generators::ExecGenerator.new
|
35
35
|
else
|
36
36
|
raise RuntimeError, "bad generator: #{name}"
|
37
37
|
end
|
@@ -16,8 +16,9 @@ module Huck
|
|
16
16
|
# A hash of host information
|
17
17
|
#
|
18
18
|
def generate
|
19
|
-
{'hostname' => Socket.gethostname,
|
20
|
-
|
19
|
+
data = {'hostname' => Socket.gethostname,
|
20
|
+
'platform' => RUBY_PLATFORM}
|
21
|
+
Huck::serialize data, :format => @config['format']
|
21
22
|
end
|
22
23
|
|
23
24
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Huck
|
2
|
+
|
3
|
+
module Generators
|
4
|
+
|
5
|
+
# A generator to execute arbitrary scripts and use their output
|
6
|
+
class ExecGenerator < Generator
|
7
|
+
|
8
|
+
# Includes all required modules
|
9
|
+
def initialize
|
10
|
+
Huck::must_load 'open3'
|
11
|
+
end
|
12
|
+
|
13
|
+
# Ensures that configuration is set properly before executing
|
14
|
+
def verify_config
|
15
|
+
if !@config.has_key? 'command'
|
16
|
+
raise RuntimeError, 'missing "exec" generator config: "command"'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Generate data by running a command and collecting output
|
21
|
+
def generate
|
22
|
+
verify_config
|
23
|
+
|
24
|
+
Open3.popen2e @config['command'] do |_, output, thread|
|
25
|
+
thread.value # wait for process to complete
|
26
|
+
return output.read
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Huck
|
2
|
+
|
3
|
+
module Generators
|
4
|
+
|
5
|
+
# File generator reads any file and submits the raw content
|
6
|
+
class FileGenerator < Generator
|
7
|
+
|
8
|
+
# Ensure that all JSON config items are properly set
|
9
|
+
def verify_config
|
10
|
+
if !@config.has_key? 'path'
|
11
|
+
raise RuntimeError, 'missing "file" generator config: "path"'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Reads in a configured file and returns the data
|
16
|
+
#
|
17
|
+
# == Returns:
|
18
|
+
# The text contained within the specified file
|
19
|
+
#
|
20
|
+
def generate
|
21
|
+
verify_config
|
22
|
+
IO.read(@config['path'])
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/huck/generators/ohai.rb
CHANGED
@@ -22,7 +22,9 @@ module Huck
|
|
22
22
|
# Need to load the JSON output, since ohai emits a 'mash' object map
|
23
23
|
# instead of normal hashes, making serialization ugly in some cases
|
24
24
|
# like YAML where canonical objects (eg. !ruby/mash) is emitted.
|
25
|
-
JSON.load ohai.json_pretty_print
|
25
|
+
data = JSON.load ohai.json_pretty_print
|
26
|
+
|
27
|
+
Huck::serialize data, :format => @config['format']
|
26
28
|
end
|
27
29
|
|
28
30
|
end
|
data/lib/huck/handlers/exec.rb
CHANGED
@@ -13,11 +13,8 @@ module Huck
|
|
13
13
|
|
14
14
|
# Ensures that configuration is set properly before executing
|
15
15
|
def verify_config
|
16
|
-
if !@config.has_key? '
|
17
|
-
raise RuntimeError, 'missing exec config'
|
18
|
-
end
|
19
|
-
if !@config['exec'].has_key? 'command'
|
20
|
-
raise RuntimeError, 'missing exec config: command'
|
16
|
+
if !@config.has_key? 'command'
|
17
|
+
raise RuntimeError, 'missing "exec" generator config: "command"'
|
21
18
|
end
|
22
19
|
end
|
23
20
|
|
@@ -31,7 +28,7 @@ module Huck
|
|
31
28
|
def handle msg
|
32
29
|
verify_config
|
33
30
|
|
34
|
-
Open3.popen2 @config['
|
31
|
+
Open3.popen2 @config['command'] do |stdin, _, _|
|
35
32
|
stdin.print msg
|
36
33
|
end
|
37
34
|
end
|
data/lib/huck/util.rb
CHANGED
@@ -74,7 +74,9 @@ module Huck
|
|
74
74
|
# A string of serialized text
|
75
75
|
#
|
76
76
|
def self.serialize data, kwargs = {}
|
77
|
-
format = Huck::getarg kwargs, :format,
|
77
|
+
format = Huck::getarg kwargs, :format, nil
|
78
|
+
format = 'json' if format.nil?
|
79
|
+
|
78
80
|
case format
|
79
81
|
when 'json'
|
80
82
|
return JSON.dump data
|
@@ -85,4 +87,31 @@ module Huck
|
|
85
87
|
end
|
86
88
|
end
|
87
89
|
|
90
|
+
# Parses a list of provider data for generators or handlers. This allows
|
91
|
+
# each provider to have its own config, and if no config is required, to
|
92
|
+
# simply pass the name of the provider. It also allows multiples of the
|
93
|
+
# same provider type to be configured and run.
|
94
|
+
#
|
95
|
+
# == Parameters:
|
96
|
+
# data::
|
97
|
+
# The configuration data to parse
|
98
|
+
#
|
99
|
+
def self.parse_providers data
|
100
|
+
if !data.kind_of? Array
|
101
|
+
raise RuntimeError, "expected array, got: #{data}"
|
102
|
+
end
|
103
|
+
data.each do |provider|
|
104
|
+
config = Hash.new
|
105
|
+
if provider.kind_of? Hash
|
106
|
+
name = provider.keys[0]
|
107
|
+
config = provider.values[0]
|
108
|
+
elsif provider.kind_of? String
|
109
|
+
name = provider
|
110
|
+
else
|
111
|
+
raise RuntimeError, "expected hash, got: #{gen}"
|
112
|
+
end
|
113
|
+
yield name, config
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
88
117
|
end
|
data/lib/huck/version.rb
CHANGED
data/lib/huck.rb
CHANGED
@@ -7,8 +7,8 @@ require 'huck/generator'
|
|
7
7
|
require 'huck/generators/basic'
|
8
8
|
require 'huck/generators/facter'
|
9
9
|
require 'huck/generators/ohai'
|
10
|
-
require 'huck/generators/
|
11
|
-
require 'huck/generators/
|
10
|
+
require 'huck/generators/file'
|
11
|
+
require 'huck/generators/exec'
|
12
12
|
require 'huck/sender'
|
13
13
|
require 'huck/senders/sqs'
|
14
14
|
require 'huck/senders/rabbitmq'
|
@@ -26,12 +26,10 @@ module Huck
|
|
26
26
|
# generator will be invoked instead.
|
27
27
|
#
|
28
28
|
# == Parameters:
|
29
|
-
#
|
29
|
+
# config_file::
|
30
30
|
# Configuration file path
|
31
|
-
#
|
32
|
-
#
|
33
|
-
# sender::
|
34
|
-
# The name of the sender to use
|
31
|
+
# config::
|
32
|
+
# Configuration hash to use in place of a config file
|
35
33
|
#
|
36
34
|
def self.run kwargs = {}
|
37
35
|
config = Huck::getarg kwargs, :config, nil
|
@@ -40,13 +38,7 @@ module Huck
|
|
40
38
|
config = Huck::config :path => conf_file
|
41
39
|
end
|
42
40
|
|
43
|
-
|
44
|
-
gen_name = config['generator']
|
45
|
-
end
|
46
|
-
gen_arg = Huck::getarg kwargs, :generator, nil
|
47
|
-
gen_name = gen_arg if !gen_arg.nil?
|
48
|
-
g = Generator::factory :name => gen_name, :config => config
|
49
|
-
|
41
|
+
# Prep the sender
|
50
42
|
if config.has_key? 'sender'
|
51
43
|
send_name = config['sender']
|
52
44
|
end
|
@@ -54,8 +46,18 @@ module Huck
|
|
54
46
|
send_name = send_arg if !send_arg.nil?
|
55
47
|
s = Sender::factory :name => send_name, :config => config
|
56
48
|
|
57
|
-
|
58
|
-
|
49
|
+
# Create an array of generators to execute
|
50
|
+
gen_list = config.has_key?('generators') ? config['generators'] : ['basic']
|
51
|
+
generators = Array.new
|
52
|
+
Huck::parse_providers gen_list do |gen_name, gen_config|
|
53
|
+
generators << Generator::factory(:name => gen_name, :config => gen_config)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Execute the generators and send their output
|
57
|
+
generators.each do |g|
|
58
|
+
data = block_given? ? yield : g.generate
|
59
|
+
s.send data
|
60
|
+
end
|
59
61
|
end
|
60
62
|
|
61
63
|
# Main method to receive messages from a Huck client. If a block is given, the
|
@@ -63,8 +65,10 @@ module Huck
|
|
63
65
|
# or default handler will be used.
|
64
66
|
#
|
65
67
|
# == Parameters:
|
66
|
-
#
|
67
|
-
#
|
68
|
+
# config_file::
|
69
|
+
# Configuration file path
|
70
|
+
# config::
|
71
|
+
# Configuration hash to use in place of a config file
|
68
72
|
#
|
69
73
|
def self.serve kwargs = {}
|
70
74
|
config = Huck::getarg kwargs, :config, nil
|
@@ -73,13 +77,14 @@ module Huck
|
|
73
77
|
config = Huck::config :path => conf_file
|
74
78
|
end
|
75
79
|
|
76
|
-
|
77
|
-
|
80
|
+
# Create an array of handlers to run when messages arrive
|
81
|
+
hand_list = config.has_key?('handlers') ? config['handlers'] : ['echo']
|
82
|
+
handlers = Array.new
|
83
|
+
Huck::parse_providers hand_list do |hand_name, hand_config|
|
84
|
+
handlers << Handler::factory(:name => hand_name, :config => hand_config)
|
78
85
|
end
|
79
|
-
hand_arg = Huck::getarg kwargs, :handler, nil
|
80
|
-
hand_name = hand_arg if !hand_arg.nil?
|
81
|
-
h = Handler::factory :name => hand_name, :config => config
|
82
86
|
|
87
|
+
# Prep the receiver
|
83
88
|
if config.has_key? 'receiver'
|
84
89
|
recv_name = config['receiver']
|
85
90
|
end
|
@@ -87,9 +92,10 @@ module Huck
|
|
87
92
|
recv_name = recv_arg if !recv_arg.nil?
|
88
93
|
r = Receiver::factory :name => recv_name, :config => config
|
89
94
|
|
95
|
+
# Receive messages and pass them down to the handlers
|
90
96
|
begin
|
91
97
|
r.receive do |msg|
|
92
|
-
block_given? ? yield(msg) : h.handle
|
98
|
+
block_given? ? yield(msg) : handlers.each {|h| h.handle msg}
|
93
99
|
end
|
94
100
|
rescue Interrupt, SystemExit
|
95
101
|
return
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: huck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Uber
|
@@ -62,8 +62,8 @@ files:
|
|
62
62
|
- lib/huck/generators/ohai.rb
|
63
63
|
- lib/huck/generators/facter.rb
|
64
64
|
- lib/huck/generators/basic.rb
|
65
|
-
- lib/huck/generators/
|
66
|
-
- lib/huck/generators/
|
65
|
+
- lib/huck/generators/exec.rb
|
66
|
+
- lib/huck/generators/file.rb
|
67
67
|
- lib/huck/senders/sqs.rb
|
68
68
|
- lib/huck/senders/rabbitmq.rb
|
69
69
|
- lib/huck/receiver.rb
|
data/lib/huck/generators/json.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
module Huck
|
2
|
-
|
3
|
-
module Generators
|
4
|
-
|
5
|
-
# JSON generator reads json files for data
|
6
|
-
class JsonGenerator < Generator
|
7
|
-
|
8
|
-
# Load required modules for json generator
|
9
|
-
def initialize
|
10
|
-
Huck::must_load 'json'
|
11
|
-
end
|
12
|
-
|
13
|
-
# Ensure that all JSON config items are properly set
|
14
|
-
def verify_config
|
15
|
-
if !@config.has_key? 'json'
|
16
|
-
raise RuntimeError, 'missing json config'
|
17
|
-
end
|
18
|
-
if !@config['json'].has_key? 'file'
|
19
|
-
raise RuntimeError, 'missing json config: file'
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
# Reads in a configured JSON file and returns the data
|
24
|
-
#
|
25
|
-
# == Returns:
|
26
|
-
# A hash of facts read from the JSON file
|
27
|
-
#
|
28
|
-
def generate
|
29
|
-
verify_config
|
30
|
-
JSON.load IO.read(@config['json']['file'])
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/lib/huck/generators/yaml.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
module Huck
|
2
|
-
|
3
|
-
module Generators
|
4
|
-
|
5
|
-
# YAML generator reads yaml files for data
|
6
|
-
class YamlGenerator < Generator
|
7
|
-
|
8
|
-
# Load required modules for yaml generator
|
9
|
-
def initialize
|
10
|
-
Huck::must_load 'yaml'
|
11
|
-
end
|
12
|
-
|
13
|
-
# Ensure that all YAML config items are properly set
|
14
|
-
def verify_config
|
15
|
-
if !@config.has_key? 'yaml'
|
16
|
-
raise RuntimeError, 'missing yaml config'
|
17
|
-
end
|
18
|
-
if !@config['yaml'].has_key? 'file'
|
19
|
-
raise RuntimeError, 'missing yaml config: file'
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
# Reads in a configured YAML file and returns the data
|
24
|
-
#
|
25
|
-
# == Returns:
|
26
|
-
# A hash of facts read from the YAML file
|
27
|
-
#
|
28
|
-
def generate
|
29
|
-
verify_config
|
30
|
-
YAML.load_file @config['yaml']['file']
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|