marionette 0.0.8 → 0.0.9
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/README.md +5 -4
- data/bin/marionette +6 -2
- data/lib/marionette/connect.rb +7 -2
- data/lib/marionette/master.rb +90 -11
- data/lib/marionette/setup.rb +2 -2
- data/lib/marionette/version.rb +1 -1
- data/marionette.gemspec +1 -0
- metadata +23 -19
data/README.md
CHANGED
@@ -5,10 +5,11 @@ Marionette connects a headstartapp server instance (puppet node) to its
|
|
5
5
|
master and executes puppet runs on demand. Marionette uses fast and lightweight
|
6
6
|
0MQ <http://zeromq.org> messaging system.
|
7
7
|
|
8
|
-
From version 0.0.
|
9
|
-
From version 0.0.
|
10
|
-
From version 0.0.7 onward,
|
11
|
-
From version 0.0.
|
8
|
+
* From version 0.0.9 onward, Marionette.setup automatically run at connect.
|
9
|
+
* From version 0.0.8 onward, use puppet agent for puppet runs
|
10
|
+
* From version 0.0.7 onward, talk replaces send and receive.
|
11
|
+
* From version 0.0.7 onward, marionette reconnects after n-poll attempts (10 by default).
|
12
|
+
* From version 0.0.6 onward, marionette polls before receives.
|
12
13
|
|
13
14
|
|
14
15
|
Installation
|
data/bin/marionette
CHANGED
@@ -4,8 +4,12 @@ require 'rubygems'
|
|
4
4
|
require 'daemons'
|
5
5
|
require 'marionette'
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
options = nil
|
8
|
+
|
9
|
+
if ARGV.size > 1
|
10
|
+
tcp = ARGV[1] rescue nil
|
11
|
+
options = { :uri => tcp }
|
12
|
+
end
|
9
13
|
|
10
14
|
Daemons.run_proc('marionette',:dir_mode => :system, :log_output => true) do
|
11
15
|
HeadStartApp::Marionette::Connect.new(options).puppet
|
data/lib/marionette/connect.rb
CHANGED
@@ -15,8 +15,13 @@ module HeadStartApp
|
|
15
15
|
def initialize(options = nil)
|
16
16
|
|
17
17
|
# Set default(s)
|
18
|
-
|
19
|
-
|
18
|
+
if options.nil?
|
19
|
+
|
20
|
+
HeadStartApp::Marionette.setup() if not File.exists? "/etc/marionette.tcp"
|
21
|
+
options = { :uri => `cat /etc/marionette.tcp` }
|
22
|
+
|
23
|
+
end
|
24
|
+
|
20
25
|
# Set URI
|
21
26
|
@uri = URI(options[:uri])
|
22
27
|
|
data/lib/marionette/master.rb
CHANGED
@@ -18,26 +18,85 @@ module HeadStartApp
|
|
18
18
|
# Sends a msg to puppet node
|
19
19
|
# and stands by for a reply
|
20
20
|
# and processes reply
|
21
|
-
def talk(msg)
|
21
|
+
def talk(msg, send_guarantee = false, poll_guarantee = false)
|
22
22
|
|
23
23
|
# Initial connection to socket
|
24
24
|
@socket = socket_connect
|
25
|
+
@poll = true
|
25
26
|
|
26
|
-
#
|
27
|
-
|
27
|
+
# Initiate send
|
28
|
+
begin
|
29
|
+
|
30
|
+
# if send successful start polling
|
31
|
+
@socket.send_string Marshal.dump(msg), ZMQ::NOBLOCK
|
32
|
+
|
33
|
+
rescue
|
34
|
+
|
35
|
+
if send_guarantee
|
36
|
+
|
37
|
+
# Keep sending till successful
|
38
|
+
while true do
|
39
|
+
|
40
|
+
begin
|
41
|
+
|
42
|
+
@socket.send_string Marshal.dump(msg), ZMQ::NOBLOCK
|
43
|
+
break
|
44
|
+
|
45
|
+
rescue
|
46
|
+
|
47
|
+
# sleep half a second before next attempt
|
48
|
+
sleep 500
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
else
|
55
|
+
|
56
|
+
# don't poll if send failed and no guarantee
|
57
|
+
@poll = false
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
if poll?
|
64
|
+
|
65
|
+
options = {:max => 10, :interval => 500}
|
66
|
+
poller = Poller.new @socket, options
|
67
|
+
|
68
|
+
if not poller.pull? and poll_guarantee
|
69
|
+
|
70
|
+
# Repeat poll till reply receive-able
|
71
|
+
while true do
|
72
|
+
|
73
|
+
@socket = socket_reconnect(@socket)
|
74
|
+
poller = Poller.new @socket, options
|
75
|
+
break if poller.pull?
|
76
|
+
|
77
|
+
end
|
28
78
|
|
29
|
-
|
30
|
-
|
79
|
+
end
|
80
|
+
|
81
|
+
if poller.pull?
|
82
|
+
|
83
|
+
# Fetch reply
|
84
|
+
@reply = process_message(@socket.recv_string)
|
85
|
+
|
86
|
+
else
|
87
|
+
|
88
|
+
# Polled but no reply
|
89
|
+
@reply = "Polled #{options[:max]} times every #{options[:interval]} milliseconds but no reply."
|
31
90
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
@socket = socket_reconnect(@socket)
|
91
|
+
end
|
92
|
+
|
93
|
+
else
|
36
94
|
|
95
|
+
# Send failed
|
96
|
+
@reply = "Send failed!"
|
97
|
+
|
37
98
|
end
|
38
99
|
|
39
|
-
@reply = process_message(@socket.recv_string)
|
40
|
-
|
41
100
|
end
|
42
101
|
|
43
102
|
private
|
@@ -50,6 +109,10 @@ module HeadStartApp
|
|
50
109
|
|
51
110
|
end
|
52
111
|
|
112
|
+
def poll?
|
113
|
+
@poll
|
114
|
+
end
|
115
|
+
|
53
116
|
# Connect master to puppet socket
|
54
117
|
def socket_connect(uri = @uri)
|
55
118
|
|
@@ -79,6 +142,22 @@ module HeadStartApp
|
|
79
142
|
end
|
80
143
|
|
81
144
|
end
|
145
|
+
|
146
|
+
def send_successful
|
147
|
+
|
148
|
+
while true do
|
149
|
+
|
150
|
+
# Send the message and catch send failure
|
151
|
+
begin
|
152
|
+
|
153
|
+
@socket.send_string Marshal.dump(msg), ZMQ::NOBLOCK
|
154
|
+
|
155
|
+
rescue
|
156
|
+
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
82
161
|
|
83
162
|
class Poller < ZMQ::Poller
|
84
163
|
attr_accessor :pull, :reconnect
|
data/lib/marionette/setup.rb
CHANGED
@@ -5,8 +5,8 @@ module HeadStartApp
|
|
5
5
|
def setup(options={})
|
6
6
|
|
7
7
|
# Set default(s)
|
8
|
-
ip = `
|
9
|
-
options
|
8
|
+
ip = `ifconfig eth1 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`
|
9
|
+
options[:uri] = "tcp://#{ip.strip}:5555" if options.nil? or options[:uri].nil? or options[:uri].blank?
|
10
10
|
|
11
11
|
# Set up marionette as a service to start at boot.
|
12
12
|
# define task:
|
data/lib/marionette/version.rb
CHANGED
data/marionette.gemspec
CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.executables << 'marionette'
|
21
21
|
s.executables << 'marionette-setup'
|
22
|
+
s.add_dependency('puppet')
|
22
23
|
s.add_dependency('bundler')
|
23
24
|
s.add_dependency('facter')
|
24
25
|
s.add_dependency('zmq')
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marionette
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
4
|
+
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
8
|
+
- 9
|
9
|
+
version: 0.0.9
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Dan Lee
|
@@ -19,89 +18,96 @@ date: 2011-01-17 00:00:00 -08:00
|
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
21
|
+
name: puppet
|
23
22
|
prerelease: false
|
24
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
24
|
none: false
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
28
|
segments:
|
31
29
|
- 0
|
32
30
|
version: "0"
|
33
31
|
type: :runtime
|
34
32
|
version_requirements: *id001
|
35
33
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
34
|
+
name: bundler
|
37
35
|
prerelease: false
|
38
36
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
37
|
none: false
|
40
38
|
requirements:
|
41
39
|
- - ">="
|
42
40
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 3
|
44
41
|
segments:
|
45
42
|
- 0
|
46
43
|
version: "0"
|
47
44
|
type: :runtime
|
48
45
|
version_requirements: *id002
|
49
46
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
47
|
+
name: facter
|
51
48
|
prerelease: false
|
52
49
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
50
|
none: false
|
54
51
|
requirements:
|
55
52
|
- - ">="
|
56
53
|
- !ruby/object:Gem::Version
|
57
|
-
hash: 3
|
58
54
|
segments:
|
59
55
|
- 0
|
60
56
|
version: "0"
|
61
57
|
type: :runtime
|
62
58
|
version_requirements: *id003
|
63
59
|
- !ruby/object:Gem::Dependency
|
64
|
-
name:
|
60
|
+
name: zmq
|
65
61
|
prerelease: false
|
66
62
|
requirement: &id004 !ruby/object:Gem::Requirement
|
67
63
|
none: false
|
68
64
|
requirements:
|
69
65
|
- - ">="
|
70
66
|
- !ruby/object:Gem::Version
|
71
|
-
hash: 3
|
72
67
|
segments:
|
73
68
|
- 0
|
74
69
|
version: "0"
|
75
70
|
type: :runtime
|
76
71
|
version_requirements: *id004
|
77
72
|
- !ruby/object:Gem::Dependency
|
78
|
-
name: ffi
|
73
|
+
name: ffi
|
79
74
|
prerelease: false
|
80
75
|
requirement: &id005 !ruby/object:Gem::Requirement
|
81
76
|
none: false
|
82
77
|
requirements:
|
83
78
|
- - ">="
|
84
79
|
- !ruby/object:Gem::Version
|
85
|
-
hash: 3
|
86
80
|
segments:
|
87
81
|
- 0
|
88
82
|
version: "0"
|
89
83
|
type: :runtime
|
90
84
|
version_requirements: *id005
|
91
85
|
- !ruby/object:Gem::Dependency
|
92
|
-
name:
|
86
|
+
name: ffi-rzmq
|
93
87
|
prerelease: false
|
94
88
|
requirement: &id006 !ruby/object:Gem::Requirement
|
95
89
|
none: false
|
96
90
|
requirements:
|
97
91
|
- - ">="
|
98
92
|
- !ruby/object:Gem::Version
|
99
|
-
hash: 3
|
100
93
|
segments:
|
101
94
|
- 0
|
102
95
|
version: "0"
|
103
96
|
type: :runtime
|
104
97
|
version_requirements: *id006
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: daemons
|
100
|
+
prerelease: false
|
101
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
segments:
|
107
|
+
- 0
|
108
|
+
version: "0"
|
109
|
+
type: :runtime
|
110
|
+
version_requirements: *id007
|
105
111
|
description: Marionette connects a headstartapp server instance (puppet node) to its master and executes puppet runs on demand. Marionette uses fast and lightweight 0MQ <http://zeromq.org> messaging system.
|
106
112
|
email:
|
107
113
|
- dan@headstartapp.com
|
@@ -143,7 +149,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
143
149
|
requirements:
|
144
150
|
- - ">="
|
145
151
|
- !ruby/object:Gem::Version
|
146
|
-
hash: 3
|
147
152
|
segments:
|
148
153
|
- 0
|
149
154
|
version: "0"
|
@@ -152,14 +157,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
157
|
requirements:
|
153
158
|
- - ">="
|
154
159
|
- !ruby/object:Gem::Version
|
155
|
-
hash: 3
|
156
160
|
segments:
|
157
161
|
- 0
|
158
162
|
version: "0"
|
159
163
|
requirements: []
|
160
164
|
|
161
165
|
rubyforge_project: marionette
|
162
|
-
rubygems_version: 1.
|
166
|
+
rubygems_version: 1.3.7
|
163
167
|
signing_key:
|
164
168
|
specification_version: 3
|
165
169
|
summary: 0MQ connection between puppet and master.
|