diff --git a/data/export/supervisord/master.conf.erb b/data/export/supervisord/master.conf.erb index 4cf3586..4597f73 100644 --- a/data/export/supervisord/master.conf.erb +++ b/data/export/supervisord/master.conf.erb @@ -1,3 +1,9 @@ +<% +engine.procfile.entries.each do |process| + next if (conc = self.concurrency[process.name]) < 1 + 1.upto(self.concurrency[process.name]) do |num| + port = engine.port_for(process, num, self.port) +%> [program:<%= app %>-<%= process.name %>] command=<%= process.command %> autostart=true @@ -7,4 +13,8 @@ stdout_logfile=<%= log_root %>/<%=process.name%>-<%=num%>.log stderr_logfile=<%= log_root %>/<%=process.name%>-<%=num%>err.log user=<%= user %> directory=<%= engine.directory %> -environment=<% engine.environment.each_pair { |var,env| "#{var.upcase}=#{env}" }.join(',') %> \ No newline at end of file +environment=<% engine.environment.each_pair { |var,env| "#{var.upcase}=#{env}" }.join(',') %>,<%= "PORT=#{port}" %> +<% + end +end +%> diff --git a/lib/foreman/export/supervisord.rb b/lib/foreman/export/supervisord.rb new file mode 100644 index 0000000..4c4a13f --- /dev/null +++ b/lib/foreman/export/supervisord.rb @@ -0,0 +1,26 @@ +require "erb" +require "foreman/export" + +class Foreman::Export::Supervisord < Foreman::Export::Base + + def export + error("Must specify a location") unless location + + FileUtils.mkdir_p location + + app = self.app || File.basename(engine.directory) + user = self.user || app + log_root = self.log || "/var/log/#{app}" + template_root = self.template + + Dir["#{location}/#{app}*.conf"].each do |file| + say "cleaning up: #{file}" + FileUtils.rm(file) + end + + master_template = export_template("supervisord", "master.conf.erb", template_root) + master_config = ERB.new(master_template).result(binding) + write_file "#{location}/#{app}.conf", master_config + end + +end