marionette 0.0.2 → 0.0.3
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 +25 -4
- data/Rakefile +19 -21
- data/lib/marionette/version.rb +1 -1
- data/lib/tasks/marionette.rake +106 -0
- data/marionette.gemspec +1 -0
- metadata +23 -8
data/README.md
CHANGED
@@ -5,12 +5,25 @@ 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
|
+
|
9
|
+
|
8
10
|
For more about Headstartapp see <http://headstartapp.com>.
|
9
11
|
|
10
12
|
|
11
13
|
Installation
|
12
14
|
------------
|
13
15
|
|
16
|
+
You must, of course, first install zeromq. Run the following as root:
|
17
|
+
|
18
|
+
wget http://download.zeromq.org/zeromq-2.1.0.tar.gz
|
19
|
+
tar zxvf zeromq-2.1.0.tar.gz
|
20
|
+
cd zeromq-2.1.0
|
21
|
+
./configure
|
22
|
+
make
|
23
|
+
make install
|
24
|
+
ldconfig
|
25
|
+
|
26
|
+
|
14
27
|
If you're using RVM, run this under the system context.
|
15
28
|
Be sure to have the appropriate port open (for the following example, port 5555)
|
16
29
|
on the puppet node.
|
@@ -22,13 +35,17 @@ on the puppet node.
|
|
22
35
|
Example
|
23
36
|
-------
|
24
37
|
|
38
|
+
The following has been tested on Centos 5.5 running Ruby 1.8.7-p174 and p302.
|
25
39
|
In this example, puppet and master are on the same local network and the puppet's ip is 192.168.1.1.
|
26
40
|
|
27
41
|
Note: By default, Marionette connects to "tcp://127.0.0.1:5555"
|
28
42
|
|
29
43
|
Results:
|
44
|
+
|
30
45
|
1) on the pupet, /tmp/test.out contains "test #{Time.now}"
|
46
|
+
|
31
47
|
2) master.receive returns puppet's facts as a hash.
|
48
|
+
|
32
49
|
3) Note: this example does not execute a puppet run.
|
33
50
|
|
34
51
|
|
@@ -45,15 +62,19 @@ Results:
|
|
45
62
|
|
46
63
|
|
47
64
|
|
48
|
-
CLI
|
65
|
+
CLI:
|
49
66
|
|
50
|
-
marionette start tcp://192.168.1.1:5555
|
67
|
+
marionette start tcp://192.168.1.1:5555 # start marionette as a daemon
|
51
68
|
|
52
69
|
|
53
70
|
|
54
|
-
|
71
|
+
MISC:
|
55
72
|
|
56
|
-
|
73
|
+
# run as root
|
74
|
+
chkconfig marionette on # start marionette daemon at boot
|
75
|
+
service marionette start # start marionette as a service
|
76
|
+
service marionette restart # restart marionette service
|
77
|
+
service marionette stop # stop marionette service
|
57
78
|
|
58
79
|
|
59
80
|
|
data/Rakefile
CHANGED
@@ -1,21 +1,16 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
Bundler::GemHelper.install_tasks
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
namespace :marionette do
|
7
|
-
|
8
|
-
# task description
|
9
|
-
desc 'Set up marionette as a service (run this as sudo/root)'
|
10
|
-
|
4
|
+
def setup_service
|
5
|
+
# Set up marionette as a service to start at boot.
|
11
6
|
# define task:
|
12
7
|
# 1) write to init.d/marionette
|
13
8
|
# 2) set permissions
|
14
9
|
# 3) set ifconfig
|
15
10
|
# 4) start service
|
16
|
-
task :service do
|
17
11
|
|
18
|
-
|
12
|
+
|
13
|
+
script = <<CODE
|
19
14
|
#!/bin/bash
|
20
15
|
|
21
16
|
### BEGIN INIT INFO
|
@@ -41,12 +36,13 @@ NAME=marionette
|
|
41
36
|
DAEMON=/usr/local/bin/$NAME
|
42
37
|
PIDFILE=/var/run/$NAME.pid
|
43
38
|
LOGFILE=/var/log/$NAME.log
|
39
|
+
TCPFILE=/etc/marionette.tcp
|
44
40
|
SCRIPTNAME=/etc/init.d/$NAME
|
45
|
-
|
46
|
-
TCP=tcp://$IP:5555
|
41
|
+
TCP=`cat $TCPFILE`
|
47
42
|
|
48
43
|
# Gracefully exit if the package has been removed.
|
49
44
|
# test -x $DAEMON || exit 0
|
45
|
+
echo "connecting on $TCP..."
|
50
46
|
|
51
47
|
d_start() {
|
52
48
|
$DAEMON start $TCP || echo -en "\n already running"
|
@@ -83,17 +79,19 @@ esac
|
|
83
79
|
exit 0
|
84
80
|
|
85
81
|
CODE
|
86
|
-
file = File.open('/etc/init.d/marionette','w')
|
87
|
-
file.write script
|
88
|
-
file.close
|
89
|
-
|
90
|
-
system "chmod 755 /etc/init.d/marionette"
|
91
|
-
system "chkconfig marionette on"
|
92
|
-
system "service marionette start"
|
93
|
-
end
|
94
82
|
|
95
|
-
|
96
|
-
|
83
|
+
ip = `sudo /sbin/ifconfig eth1 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`
|
84
|
+
|
85
|
+
file = File.open('/etc/marionette.tcp','w')
|
86
|
+
file.write ip
|
87
|
+
file.close
|
88
|
+
|
89
|
+
file = File.open('/etc/init.d/marionette','w')
|
90
|
+
file.write script
|
91
|
+
file.close
|
92
|
+
|
93
|
+
system "sudo chmod 755 /etc/init.d/marionette"
|
97
94
|
|
98
95
|
end
|
99
96
|
|
97
|
+
setup_service
|
data/lib/marionette/version.rb
CHANGED
@@ -0,0 +1,106 @@
|
|
1
|
+
# This rake task sets up marionette as a service to start at boot.
|
2
|
+
# rake marionette:service
|
3
|
+
|
4
|
+
require 'rake'
|
5
|
+
|
6
|
+
namespace :marionette do
|
7
|
+
|
8
|
+
# task description
|
9
|
+
desc 'Set up marionette as a service (run this as sudo/root)'
|
10
|
+
|
11
|
+
# define task:
|
12
|
+
# 1) write to init.d/marionette
|
13
|
+
# 2) set permissions
|
14
|
+
# 3) set ifconfig
|
15
|
+
# 4) start service
|
16
|
+
task :service do
|
17
|
+
|
18
|
+
script = <<CODE
|
19
|
+
#!/bin/bash
|
20
|
+
|
21
|
+
### BEGIN INIT INFO
|
22
|
+
# Provides: marionette
|
23
|
+
# Default-Start: 2 3 4 5
|
24
|
+
# Default-Stop: 0 1 6
|
25
|
+
# Short-Description: start and stop marionette
|
26
|
+
# Description: 0mq connection for puppet and master.
|
27
|
+
# chkconfig: - 85 15
|
28
|
+
### END INIT INFO
|
29
|
+
|
30
|
+
# source function library
|
31
|
+
. /etc/rc.d/init.d/functions
|
32
|
+
|
33
|
+
RETVAL=0
|
34
|
+
prog="marionette"
|
35
|
+
|
36
|
+
set -e
|
37
|
+
|
38
|
+
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
39
|
+
DESC="marionette daemon"
|
40
|
+
NAME=marionette
|
41
|
+
DAEMON=/usr/local/bin/$NAME
|
42
|
+
PIDFILE=/var/run/$NAME.pid
|
43
|
+
LOGFILE=/var/log/$NAME.log
|
44
|
+
TCPFILE=/etc/marionette.tcp
|
45
|
+
SCRIPTNAME=/etc/init.d/$NAME
|
46
|
+
TCP=`cat $TCPFILE`
|
47
|
+
|
48
|
+
# Gracefully exit if the package has been removed.
|
49
|
+
# test -x $DAEMON || exit 0
|
50
|
+
echo `connecting on $TCP...`
|
51
|
+
|
52
|
+
d_start() {
|
53
|
+
$DAEMON start $TCP || echo -en "\n already running"
|
54
|
+
}
|
55
|
+
|
56
|
+
d_stop() {
|
57
|
+
kill -9 `cat $PIDFILE` || echo -en "\n not running"
|
58
|
+
}
|
59
|
+
|
60
|
+
case "$1" in
|
61
|
+
start)
|
62
|
+
echo -n "Starting $DESC: $NAME"
|
63
|
+
d_start
|
64
|
+
echo "."
|
65
|
+
;;
|
66
|
+
stop)
|
67
|
+
echo -n "Stopping $DESC: $NAME"
|
68
|
+
d_stop
|
69
|
+
echo "."
|
70
|
+
;;
|
71
|
+
restart)
|
72
|
+
echo -n "Restarting $DESC: $NAME"
|
73
|
+
d_stop
|
74
|
+
sleep 5
|
75
|
+
d_start
|
76
|
+
echo "."
|
77
|
+
;;
|
78
|
+
*)
|
79
|
+
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
|
80
|
+
exit 3
|
81
|
+
;;
|
82
|
+
esac
|
83
|
+
|
84
|
+
exit 0
|
85
|
+
|
86
|
+
CODE
|
87
|
+
|
88
|
+
ip = `ifconfig eth1 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`
|
89
|
+
|
90
|
+
file = File.open('/etc/init.d/marionette','w')
|
91
|
+
file.write script
|
92
|
+
file.close
|
93
|
+
|
94
|
+
file = File.open('/etc/marionette.tcp','w')
|
95
|
+
file.write ip
|
96
|
+
file.close
|
97
|
+
|
98
|
+
system "chmod 755 /etc/init.d/marionette"
|
99
|
+
system "chkconfig marionette on"
|
100
|
+
system "service marionette start"
|
101
|
+
end
|
102
|
+
|
103
|
+
# set "service" as the default task
|
104
|
+
task :default => [:service]
|
105
|
+
|
106
|
+
end
|
data/marionette.gemspec
CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.executables << 'marionette'
|
21
|
+
s.add_dependency('bundler')
|
21
22
|
s.add_dependency('facter')
|
22
23
|
s.add_dependency('zmq')
|
23
24
|
s.add_dependency('ffi')
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marionette
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Dan Lee
|
@@ -19,7 +19,7 @@ date: 2011-01-10 00:00:00 -08:00
|
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: bundler
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
type: :runtime
|
34
34
|
version_requirements: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
36
|
+
name: facter
|
37
37
|
prerelease: false
|
38
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
@@ -47,7 +47,7 @@ dependencies:
|
|
47
47
|
type: :runtime
|
48
48
|
version_requirements: *id002
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
50
|
+
name: zmq
|
51
51
|
prerelease: false
|
52
52
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
53
|
none: false
|
@@ -61,7 +61,7 @@ dependencies:
|
|
61
61
|
type: :runtime
|
62
62
|
version_requirements: *id003
|
63
63
|
- !ruby/object:Gem::Dependency
|
64
|
-
name: ffi
|
64
|
+
name: ffi
|
65
65
|
prerelease: false
|
66
66
|
requirement: &id004 !ruby/object:Gem::Requirement
|
67
67
|
none: false
|
@@ -75,7 +75,7 @@ dependencies:
|
|
75
75
|
type: :runtime
|
76
76
|
version_requirements: *id004
|
77
77
|
- !ruby/object:Gem::Dependency
|
78
|
-
name:
|
78
|
+
name: ffi-rzmq
|
79
79
|
prerelease: false
|
80
80
|
requirement: &id005 !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
@@ -88,6 +88,20 @@ dependencies:
|
|
88
88
|
version: "0"
|
89
89
|
type: :runtime
|
90
90
|
version_requirements: *id005
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: daemons
|
93
|
+
prerelease: false
|
94
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
hash: 3
|
100
|
+
segments:
|
101
|
+
- 0
|
102
|
+
version: "0"
|
103
|
+
type: :runtime
|
104
|
+
version_requirements: *id006
|
91
105
|
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.
|
92
106
|
email:
|
93
107
|
- dan@headstartapp.com
|
@@ -110,6 +124,7 @@ files:
|
|
110
124
|
- lib/marionette/master.rb
|
111
125
|
- lib/marionette/puppet.rb
|
112
126
|
- lib/marionette/version.rb
|
127
|
+
- lib/tasks/marionette.rake
|
113
128
|
- marionette.gemspec
|
114
129
|
has_rdoc: true
|
115
130
|
homepage: http://headstartapp.com
|