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 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.8 onward, use puppet agent for puppet runs
9
- From version 0.0.7 onward, talk replaces send and receive.
10
- From version 0.0.7 onward, marionette reconnects after n-poll attempts (10 by default).
11
- From version 0.0.6 onward, marionette polls before receives.
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
- tcp = ARGV[1] rescue nil
8
- options = { :uri => tcp } unless ARGV.nil?
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
@@ -15,8 +15,13 @@ module HeadStartApp
15
15
  def initialize(options = nil)
16
16
 
17
17
  # Set default(s)
18
- options = { :uri => `cat /etc/marionette.tcp` } if options.nil?
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
 
@@ -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
- # Repeat until talk succeeds.
27
- while true do
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
- # Send the message
30
- @socket.send_string Marshal.dump(msg)
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
- # Poll server until it is receive-able and re-poll if necessary
33
- poller = Poller.new @socket, {:max => 10, :interval => 500}
34
- break if poller.pull?
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
@@ -5,8 +5,8 @@ module HeadStartApp
5
5
  def setup(options={})
6
6
 
7
7
  # Set default(s)
8
- ip = `sudo /sbin/ifconfig eth1 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`
9
- options = { :uri => "tcp://#{ip.strip}:5555" } if options.nil?
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:
@@ -1,5 +1,5 @@
1
1
  module HeadStartApp
2
2
  module Marionette
3
- VERSION = "0.0.8"
3
+ VERSION = "0.0.9"
4
4
  end
5
5
  end
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
- hash: 15
5
- prerelease:
4
+ prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 0
9
- - 8
10
- version: 0.0.8
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: bundler
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: facter
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: zmq
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: ffi
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-rzmq
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: daemons
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.4.2
166
+ rubygems_version: 1.3.7
163
167
  signing_key:
164
168
  specification_version: 3
165
169
  summary: 0MQ connection between puppet and master.