marionette 0.0.1 → 0.0.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/.gitignore CHANGED
@@ -1,3 +1,5 @@
1
1
  pkg/*
2
2
  *.gem
3
3
  .bundle
4
+ *.output
5
+ *.pid
data/README.md CHANGED
@@ -7,27 +7,54 @@ master and executes puppet runs on demand. Marionette uses fast and lightweight
7
7
 
8
8
  For more about Headstartapp see <http://headstartapp.com>.
9
9
 
10
+
10
11
  Installation
11
12
  ------------
12
13
 
14
+ If you're using RVM, run this under the system context.
15
+ Be sure to have the appropriate port open (for the following example, port 5555)
16
+ on the puppet node.
17
+
13
18
  gem install marionette
14
19
 
20
+
21
+
15
22
  Example
16
23
  -------
17
24
 
25
+ In this example, puppet and master are on the same local network and the puppet's ip is 192.168.1.1.
26
+
27
+ Note: By default, Marionette connects to "tcp://127.0.0.1:5555"
28
+
29
+ Results:
30
+ 1) on the pupet, /tmp/test.out contains "test #{Time.now}"
31
+ 2) master.receive returns puppet's facts as a hash.
32
+ 3) Note: this example does not execute a puppet run.
33
+
34
+
18
35
  Ruby:
19
36
 
37
+ require 'rubygems'
20
38
  require 'marionette'
21
- # By default, Marionette connects to "tcp://master.headstartapp.com:5555"
22
- Headstartapp::Marionette::Connect.new.master
23
- # Connect to a different master
24
- Headstartapp::Marionette::Connect.new("tcp://master.example.com:5555").master
25
39
 
40
+ puppet = HeadStartApp::Marionette::Connect.new(:uri=>"192.168.1.1:5555) puppet
41
+ master = HeadStartApp::Marionette::Connect.new(:uri=>"192.168.1.1:5555").master
42
+ message = {:run=>{:system=>true,:facter=>true},:system=>{:command=>"echo 'test @ #{Time.now}' > /tmp/test.out"}}
43
+ master.send message
44
+ master.receive
45
+
46
+
47
+
48
+ CLI (start marionette-puppet as a daemon):
49
+
50
+ marionette start tcp://192.168.1.1:5555
51
+
52
+
53
+
54
+ Rake (set up marionette as a service:
26
55
 
27
- CLI (start as a daemon):
56
+ rake setup-service
28
57
 
29
- marionette-master start tcp://master.example.com:5555
30
- marionette-puppet start tcp://master.example.com:5555
31
58
 
32
59
 
33
60
  Meta
data/Rakefile CHANGED
@@ -1,2 +1,99 @@
1
1
  require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
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
+ SCRIPTNAME=/etc/init.d/$NAME
45
+ IP=`ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`
46
+ TCP=tcp://$IP:5555
47
+
48
+ # Gracefully exit if the package has been removed.
49
+ # test -x $DAEMON || exit 0
50
+
51
+ d_start() {
52
+ $DAEMON start $TCP || echo -en "\n already running"
53
+ }
54
+
55
+ d_stop() {
56
+ kill -9 `cat $PIDFILE` || echo -en "\n not running"
57
+ }
58
+
59
+ case "$1" in
60
+ start)
61
+ echo -n "Starting $DESC: $NAME"
62
+ d_start
63
+ echo "."
64
+ ;;
65
+ stop)
66
+ echo -n "Stopping $DESC: $NAME"
67
+ d_stop
68
+ echo "."
69
+ ;;
70
+ restart)
71
+ echo -n "Restarting $DESC: $NAME"
72
+ d_stop
73
+ sleep 5
74
+ d_start
75
+ echo "."
76
+ ;;
77
+ *)
78
+ echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
79
+ exit 3
80
+ ;;
81
+ esac
82
+
83
+ exit 0
84
+
85
+ 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
+
95
+ # set "service" as the default task
96
+ task :default => [:service]
97
+
98
+ end
99
+
@@ -6,8 +6,7 @@ require 'marionette'
6
6
 
7
7
  tcp = ARGV[1] rescue nil
8
8
  options = { :uri => tcp } unless ARGV.nil?
9
- puts "Connecting on #{tcp}..."
10
9
 
11
- Daemons.run_proc('marionette-puppet',:dir => '/var/run', :log_output => true) do
10
+ Daemons.run_proc('marionette',:dir_mode => :system, :log_output => true) do
12
11
  HeadStartApp::Marionette::Connect.new(options).puppet
13
12
  end
@@ -2,11 +2,12 @@ module HeadStartApp
2
2
  module Marionette
3
3
 
4
4
  require 'uri'
5
+ require 'facter'
5
6
 
6
7
 
7
8
  # Puppet class is the active ZMQ connection on the puppet node
8
9
  class Puppet
9
- attr_accessor :socket, :thread
10
+ attr_accessor :socket, :thread, :message
10
11
 
11
12
  def initialize(socket)
12
13
 
@@ -19,13 +20,13 @@ module HeadStartApp
19
20
  def start
20
21
 
21
22
  # Kill existing and create new pull-loop thread
22
- @thread.kill unless @thread.nil?
23
- Thread.abort_on_exception = true
24
- @thread = Thread.new do
23
+ # @thread.kill unless @thread.nil?
24
+ # Thread.abort_on_exception = true
25
+ # @thread = Thread.new do
25
26
  while true do
26
27
  pull
27
28
  end
28
- end
29
+ # end
29
30
 
30
31
  end
31
32
 
@@ -35,12 +36,16 @@ module HeadStartApp
35
36
  # Stand by for a response msg
36
37
  @response = @socket.recv
37
38
 
39
+ # Sets default message to current time
40
+ @message = "Response from node @ #{Time.now}."
41
+
38
42
  begin
39
43
 
40
44
  # Execute a puppet run and/or ad hoc system commands
41
45
  @response = Marshal.load(@response)
42
46
  puppet_run if @response[:run][:puppet]
43
47
  system_run if @response[:run][:system]
48
+ facter_run if @response[:run][:facter]
44
49
 
45
50
  rescue
46
51
 
@@ -51,7 +56,7 @@ module HeadStartApp
51
56
 
52
57
  # Send back system stats
53
58
  # @socket.send Marshal.dump(stats)
54
- @socket.send Marshal.dump(Time.now)
59
+ @socket.send Marshal.dump(@message)
55
60
 
56
61
  end
57
62
 
@@ -89,8 +94,16 @@ module HeadStartApp
89
94
  end
90
95
 
91
96
  end
97
+
98
+ # Fetches facts collection
99
+ def facter_run
100
+
101
+ Facter.loadfacts
102
+ @message = Facter.collection.to_hash
103
+
104
+ end
92
105
 
93
- # Gathers stats
106
+ # Some stats
94
107
  # - to be set up as a fact(s) later
95
108
  def stats
96
109
 
@@ -1,5 +1,5 @@
1
1
  module HeadStartApp
2
2
  module Marionette
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
data/marionette.gemspec CHANGED
@@ -17,13 +17,13 @@ Gem::Specification.new do |s|
17
17
  s.files = `git ls-files`.split("\n")
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
- s.executables << 'marionette-master'
21
- s.executables << 'marionette-puppet'
20
+ s.executables << 'marionette'
21
+ s.add_dependency('facter')
22
22
  s.add_dependency('zmq')
23
23
  s.add_dependency('ffi')
24
24
  s.add_dependency('ffi-rzmq')
25
25
  s.add_dependency('daemons')
26
26
  s.require_paths = ["lib"]
27
27
  s.bindir = "bin"
28
- s.require_paths = ["lib"]
29
- end
28
+ end
29
+
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: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dan Lee
@@ -15,11 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-08 00:00:00 -08:00
18
+ date: 2011-01-10 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: zmq
22
+ name: facter
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: ffi
36
+ name: zmq
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: ffi-rzmq
50
+ name: ffi
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: daemons
64
+ name: ffi-rzmq
65
65
  prerelease: false
66
66
  requirement: &id004 !ruby/object:Gem::Requirement
67
67
  none: false
@@ -74,14 +74,26 @@ dependencies:
74
74
  version: "0"
75
75
  type: :runtime
76
76
  version_requirements: *id004
77
+ - !ruby/object:Gem::Dependency
78
+ name: daemons
79
+ prerelease: false
80
+ requirement: &id005 !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ hash: 3
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ type: :runtime
90
+ version_requirements: *id005
77
91
  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.
78
92
  email:
79
93
  - dan@headstartapp.com
80
94
  executables:
81
- - marionette-master
82
- - marionette-puppet
83
- - marionette-master
84
- - marionette-puppet
95
+ - marionette
96
+ - marionette
85
97
  extensions: []
86
98
 
87
99
  extra_rdoc_files: []
@@ -92,8 +104,7 @@ files:
92
104
  - Gemfile.lock
93
105
  - README.md
94
106
  - Rakefile
95
- - bin/marionette-master
96
- - bin/marionette-puppet
107
+ - bin/marionette
97
108
  - lib/marionette.rb
98
109
  - lib/marionette/connect.rb
99
110
  - lib/marionette/master.rb
@@ -130,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
141
  requirements: []
131
142
 
132
143
  rubyforge_project: marionette
133
- rubygems_version: 1.4.1
144
+ rubygems_version: 1.4.2
134
145
  signing_key:
135
146
  specification_version: 3
136
147
  summary: 0MQ connection between puppet and master.
@@ -1,9 +0,0 @@
1
- #!/usr/local/bin/ruby
2
-
3
- require 'rubygems'
4
- require 'daemons'
5
- require 'marionette'
6
-
7
- Daemons.run_proc('marionette-master',:dir => '/var/run', :log_output => true) do
8
- HeadStartApp::Marionette::Connect.new.master
9
- end