foreman-upstart-scaling 0.1

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.
@@ -0,0 +1,4 @@
1
+ description "<%= app %> processes"
2
+ stop on runlevel [!234]
3
+ stop on starting rc RUNLEVEL=[016]
4
+
@@ -0,0 +1,62 @@
1
+ stop on stopping <%= app %>-<%= process.name %>
2
+
3
+ respawn
4
+ respawn limit 10 5
5
+ kill timeout 20
6
+
7
+ instance $<%= app.upcase %>_<%= process.name.upcase %>_INSTANCE
8
+
9
+ # TODO sudo overwrites this those env vars
10
+ env PORT=<%= port %>
11
+ <% engine.environment.each_pair do |var,value| %>
12
+ env <%= var.upcase %>=<%= value %>
13
+ <% end %>
14
+
15
+ script
16
+ cd <%= engine.directory %>
17
+ name="<%= app %>-<%=process.name%>-$<%= app.upcase %>_<%= process.name.upcase %>_INSTANCE"
18
+
19
+ # This little dance pipes output into logger with three
20
+ # goals in mind:
21
+ # - Keep the process as a direct child of init (so upstart
22
+ # doesn't get confused).
23
+ # - Make sure logger isn't a child of the process (so it
24
+ # doesn't get confused).
25
+ # - Don't leave cruft sitting around in the filesystem.
26
+
27
+ # See `man 7 fifo` and `man 7 pipe` for more info.
28
+ mkdir -p <%= log_root %>
29
+ stdout_fifo="<%= log_root %>/$name-stdout-log.fifo"
30
+ stderr_fifo="<%= log_root %>/$name-stderr-log.fifo"
31
+ rm -f $stdout_fifo
32
+ rm -f $stderr_fifo
33
+ mkfifo $stdout_fifo
34
+ mkfifo $stderr_fifo
35
+
36
+ # Start logger reading from the fifos, in the background.
37
+ # The parens cause the logger process to be reparented to
38
+ # init, rather than remaining a child of the current proc.
39
+ #
40
+ # `setsid` will cause loggers to be in a different session
41
+ # and process group. If we let the loggers be in the same
42
+ # process group as the main process, they would be killed
43
+ # by upstart together with the main process, and all output
44
+ # would be suppressed during termination.
45
+ ( exec setsid logger -i -p local0.notice -t $name <$stdout_fifo & )
46
+ ( exec setsid logger -i -p local0.err -t $name <$stderr_fifo & )
47
+
48
+ # Redirect the current shell's output to the fifos. Now that
49
+ # we have open fds for those fifos, we don't need the file
50
+ # system entries any more...
51
+ exec >$stdout_fifo 2>$stderr_fifo
52
+
53
+ # ...so we'll remove it.
54
+ rm $stdout_fifo
55
+ rm $stderr_fifo
56
+
57
+ # Run the service in the usual way. Our output is already
58
+ # going to the fifos; that won't change when the new
59
+ # program executes.
60
+ exec sudo -H -i -u <%= user %> '<%= process.command %>'
61
+ end script
62
+
@@ -0,0 +1,17 @@
1
+ start on starting <%= app %>-<%= process.name %>
2
+
3
+ task
4
+
5
+ script
6
+ <%= app.upcase %>_<%= process.name.upcase %>_SCALE=$(su - <%= user %> -c 'echo $<%= app.upcase %>_<%= process.name.upcase %>_SCALE')
7
+ [ -z $<%= app.upcase %>_<%= process.name.upcase %>_SCALE ] && <%= app.upcase %>_<%= process.name.upcase %>_SCALE=0
8
+ export <%= app.upcase %>_<%= process.name.upcase %>_SCALE
9
+
10
+ i=1
11
+ while [ $i -le $<%= app.upcase %>_<%= process.name.upcase %>_SCALE ]; do
12
+ start <%= app %>-<%= process.name %>-instance <%= app.upcase %>_<%= process.name.upcase %>_INSTANCE=$i
13
+ i=$(( $i + 1 ))
14
+ done
15
+
16
+ end script
17
+
@@ -0,0 +1,3 @@
1
+ start on starting <%= app %>
2
+ stop on stopping <%= app %>
3
+
@@ -0,0 +1,42 @@
1
+ require "erb"
2
+ require "fileutils"
3
+ require "foreman/export"
4
+
5
+ class Foreman::Export::UpstartScaling < Foreman::Export::Base
6
+
7
+ def export
8
+ error("Must specify a location") unless location
9
+ FileUtils.mkdir_p location
10
+ @location = Pathname.new(@location)
11
+
12
+ app = self.app || File.basename(engine.directory)
13
+ user = self.user || app
14
+ log_root = self.log || "/var/log/#{app}"
15
+ template_root = self.template || File.expand_path("../../../../data/export/upstart_scaling", __FILE__)
16
+
17
+ Dir["#{location}/#{app}*.conf"].each do |file|
18
+ say "cleaning up: #{file}"
19
+ FileUtils.rm(file)
20
+ end
21
+
22
+ master_template = export_template("upstart_scaling", "master.conf.erb", template_root)
23
+ master_config = ERB.new(master_template).result(binding)
24
+ write_file "#{location}/#{app}.conf", master_config
25
+
26
+ engine.procfile.entries.each do |process|
27
+ process_master_template = export_template("upstart_scaling", "process_master.conf.erb", template_root)
28
+ process_master_config = ERB.new(process_master_template).result(binding)
29
+ write_file "#{location}/#{app}-#{process.name}.conf", process_master_config
30
+
31
+ process_instances_template = export_template("upstart_scaling", "process_instances.conf.erb", template_root)
32
+ process_instances_config = ERB.new(process_instances_template).result(binding)
33
+ write_file "#{location}/#{app}-#{process.name}-instances.conf", process_instances_config
34
+
35
+ process_template = export_template("upstart_scaling", "process.conf.erb", template_root)
36
+ process_config = ERB.new(process_template).result(binding)
37
+ write_file "#{location}/#{app}-#{process.name}-instance.conf", process_config
38
+ end
39
+ end
40
+
41
+ end
42
+
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: foreman-upstart-scaling
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Fabio Kung
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-05 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: foreman
16
+ requirement: &70179280215540 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.46.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70179280215540
25
+ description: Upstart exporter for foreman, that supports worker scaling via env vars.
26
+ email: fabio.kung@gmail.com
27
+ executables: []
28
+ extensions: []
29
+ extra_rdoc_files: []
30
+ files:
31
+ - lib/foreman/export/upstart_scaling.rb
32
+ - data/export/upstart_scaling/master.conf.erb
33
+ - data/export/upstart_scaling/process.conf.erb
34
+ - data/export/upstart_scaling/process_instances.conf.erb
35
+ - data/export/upstart_scaling/process_master.conf.erb
36
+ homepage: http://github.com/fabiokung/foreman-upstart-scaling
37
+ licenses: []
38
+ post_install_message:
39
+ rdoc_options: []
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubyforge_project:
56
+ rubygems_version: 1.8.12
57
+ signing_key:
58
+ specification_version: 3
59
+ summary: Upstart configuration generator for foreman
60
+ test_files: []