From f29bf49a35e175777801690ed3a2d6c9fec153ee Mon Sep 17 00:00:00 2001 From: Aaron Kalin Date: Wed, 5 Sep 2012 18:27:10 -0500 Subject: [PATCH 1/5] Add support for setting environment variables --- data/export/launchd/launchd.plist.erb | 7 +++++++ spec/resources/export/launchd/launchd-a.default | 7 +++++++ spec/resources/export/launchd/launchd-b.default | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/data/export/launchd/launchd.plist.erb b/data/export/launchd/launchd.plist.erb index faf2db6..56fc947 100644 --- a/data/export/launchd/launchd.plist.erb +++ b/data/export/launchd/launchd.plist.erb @@ -4,6 +4,13 @@ Label <%= "#{app}-#{name}-#{num}" %> + EnvironmentVariables + + <% engine.env.merge("PORT" => port).each_pair do |var,env| %> + <%= var.upcase %> + <%= env %> + <% end %> + ProgramArguments <%= process.command %> diff --git a/spec/resources/export/launchd/launchd-a.default b/spec/resources/export/launchd/launchd-a.default index 05675ea..bcbb8e8 100644 --- a/spec/resources/export/launchd/launchd-a.default +++ b/spec/resources/export/launchd/launchd-a.default @@ -4,6 +4,13 @@ Label app-alpha-1 + EnvironmentVariables + + + PORT + 5000 + + ProgramArguments ./alpha diff --git a/spec/resources/export/launchd/launchd-b.default b/spec/resources/export/launchd/launchd-b.default index 99d5a04..ab7647f 100644 --- a/spec/resources/export/launchd/launchd-b.default +++ b/spec/resources/export/launchd/launchd-b.default @@ -4,6 +4,13 @@ Label app-bravo-1 + EnvironmentVariables + + + PORT + 5000 + + ProgramArguments ./bravo From f6d4badcd2bd4e42eb55a04e446a419cbee8191a Mon Sep 17 00:00:00 2001 From: Aaron Kalin Date: Mon, 10 Sep 2012 18:18:56 -0500 Subject: [PATCH 2/5] Enable trim_mode via '-' in ERB templates This adds whitespace supression optionally, similar to the default behavior in Rails ActionView ERB templates. Just add - to a %> like so: -%> and it will remove trailing whitespace and newlines. This can also be done to the beginning tag for removing newlines from the beginning of the tag line. --- lib/foreman/export/base.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/foreman/export/base.rb b/lib/foreman/export/base.rb index d55fe23..72dd464 100644 --- a/lib/foreman/export/base.rb +++ b/lib/foreman/export/base.rb @@ -119,7 +119,7 @@ private ###################################################################### end def write_template(name, target, binding) - compiled = ERB.new(export_template(name)).result(binding) + compiled = ERB.new(export_template(name), nil, '-').result(binding) write_file target, compiled end From c617ddb3b2ea74616b40227dbcb2490ebfa46f73 Mon Sep 17 00:00:00 2001 From: Aaron Kalin Date: Mon, 10 Sep 2012 18:21:51 -0500 Subject: [PATCH 3/5] Cleanup launchd exporter Also suppresses the deprecation warning for the launchd exporter when using port instead of engine.port_for --- data/export/launchd/launchd.plist.erb | 8 ++++---- lib/foreman/export/launchd.rb | 1 + spec/resources/export/launchd/launchd-a.default | 6 ++---- spec/resources/export/launchd/launchd-b.default | 6 ++---- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/data/export/launchd/launchd.plist.erb b/data/export/launchd/launchd.plist.erb index 56fc947..1731c4c 100644 --- a/data/export/launchd/launchd.plist.erb +++ b/data/export/launchd/launchd.plist.erb @@ -6,10 +6,10 @@ <%= "#{app}-#{name}-#{num}" %> EnvironmentVariables - <% engine.env.merge("PORT" => port).each_pair do |var,env| %> - <%= var.upcase %> - <%= env %> - <% end %> + <%- engine.env.merge("PORT" => port).each_pair do |var,env| -%> + <%= var.upcase %> + <%= env %> + <%- end -%> ProgramArguments diff --git a/lib/foreman/export/launchd.rb b/lib/foreman/export/launchd.rb index fd73681..4b9571f 100644 --- a/lib/foreman/export/launchd.rb +++ b/lib/foreman/export/launchd.rb @@ -7,6 +7,7 @@ class Foreman::Export::Launchd < Foreman::Export::Base super engine.each_process do |name, process| 1.upto(engine.formation[name]) do |num| + port = engine.port_for(process, num) write_template "launchd/launchd.plist.erb", "#{app}-#{name}-#{num}.plist", binding end end diff --git a/spec/resources/export/launchd/launchd-a.default b/spec/resources/export/launchd/launchd-a.default index bcbb8e8..80c731d 100644 --- a/spec/resources/export/launchd/launchd-a.default +++ b/spec/resources/export/launchd/launchd-a.default @@ -6,10 +6,8 @@ app-alpha-1 EnvironmentVariables - - PORT - 5000 - + PORT + 5000 ProgramArguments diff --git a/spec/resources/export/launchd/launchd-b.default b/spec/resources/export/launchd/launchd-b.default index ab7647f..da78927 100644 --- a/spec/resources/export/launchd/launchd-b.default +++ b/spec/resources/export/launchd/launchd-b.default @@ -6,10 +6,8 @@ app-bravo-1 EnvironmentVariables - - PORT - 5000 - + PORT + 5100 ProgramArguments From 698e6ae092112e6b7404814ca8ecfbba14b42087 Mon Sep 17 00:00:00 2001 From: Aaron Kalin Date: Mon, 10 Sep 2012 19:10:47 -0500 Subject: [PATCH 4/5] Add command argument string splitting launchd uses exec() under the hood when you specify ProgramArguments or Program so you must break apart program arguments into separate strings in an array or the command will fail --- data/export/launchd/launchd.plist.erb | 4 ++- lib/foreman/export/launchd.rb | 1 + spec/foreman/export/launchd_spec.rb | 10 +++++++ .../export/launchd/launchd-c.default | 28 +++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 spec/resources/export/launchd/launchd-c.default diff --git a/data/export/launchd/launchd.plist.erb b/data/export/launchd/launchd.plist.erb index 1731c4c..8694564 100644 --- a/data/export/launchd/launchd.plist.erb +++ b/data/export/launchd/launchd.plist.erb @@ -13,7 +13,9 @@ ProgramArguments - <%= process.command %> + <%- command_args.each do |command| -%> + <%= command %> + <%- end -%> KeepAlive diff --git a/lib/foreman/export/launchd.rb b/lib/foreman/export/launchd.rb index 4b9571f..ceee3a8 100644 --- a/lib/foreman/export/launchd.rb +++ b/lib/foreman/export/launchd.rb @@ -8,6 +8,7 @@ class Foreman::Export::Launchd < Foreman::Export::Base engine.each_process do |name, process| 1.upto(engine.formation[name]) do |num| port = engine.port_for(process, num) + command_args = process.command.split(" ") write_template "launchd/launchd.plist.erb", "#{app}-#{name}-#{num}.plist", binding end end diff --git a/spec/foreman/export/launchd_spec.rb b/spec/foreman/export/launchd_spec.rb index 984b35c..3a22b5a 100644 --- a/spec/foreman/export/launchd_spec.rb +++ b/spec/foreman/export/launchd_spec.rb @@ -18,4 +18,14 @@ describe Foreman::Export::Launchd, :fakefs do File.read("/tmp/init/app-bravo-1.plist").should == example_export_file("launchd/launchd-b.default") end + context "with multiple command arguments" do + let(:procfile) { FileUtils.mkdir_p("/tmp/app"); write_procfile("/tmp/app/Procfile", "charlie") } + + it "splits each command argument" do + launchd.export + File.read("/tmp/init/app-alpha-1.plist").should == example_export_file("launchd/launchd-c.default") + end + + end + end diff --git a/spec/resources/export/launchd/launchd-c.default b/spec/resources/export/launchd/launchd-c.default new file mode 100644 index 0000000..8059a9d --- /dev/null +++ b/spec/resources/export/launchd/launchd-c.default @@ -0,0 +1,28 @@ + + + + + Label + app-alpha-1 + EnvironmentVariables + + PORT + 5000 + + ProgramArguments + + ./alpha + charlie + + KeepAlive + + RunAtLoad + + StandardErrorPath + /var/log/app/app-alpha-1.log + UserName + app + WorkingDirectory + /tmp/app + + From 1d06124457129edd5144c4afcc8c48e0090c3af3 Mon Sep 17 00:00:00 2001 From: Aaron Kalin Date: Tue, 11 Sep 2012 15:04:15 -0500 Subject: [PATCH 5/5] Add StandardOutPath to launchd export --- data/export/launchd/launchd.plist.erb | 2 ++ spec/resources/export/launchd/launchd-a.default | 2 ++ spec/resources/export/launchd/launchd-b.default | 2 ++ spec/resources/export/launchd/launchd-c.default | 2 ++ 4 files changed, 8 insertions(+) diff --git a/data/export/launchd/launchd.plist.erb b/data/export/launchd/launchd.plist.erb index 8694564..fe02308 100644 --- a/data/export/launchd/launchd.plist.erb +++ b/data/export/launchd/launchd.plist.erb @@ -21,6 +21,8 @@ RunAtLoad + StandardOutPath + <%= log %>/<%= app %>-<%= name %>-<%=num%>.log StandardErrorPath <%= log %>/<%= app %>-<%= name %>-<%=num%>.log UserName diff --git a/spec/resources/export/launchd/launchd-a.default b/spec/resources/export/launchd/launchd-a.default index 80c731d..7342302 100644 --- a/spec/resources/export/launchd/launchd-a.default +++ b/spec/resources/export/launchd/launchd-a.default @@ -17,6 +17,8 @@ RunAtLoad + StandardOutPath + /var/log/app/app-alpha-1.log StandardErrorPath /var/log/app/app-alpha-1.log UserName diff --git a/spec/resources/export/launchd/launchd-b.default b/spec/resources/export/launchd/launchd-b.default index da78927..51b6363 100644 --- a/spec/resources/export/launchd/launchd-b.default +++ b/spec/resources/export/launchd/launchd-b.default @@ -17,6 +17,8 @@ RunAtLoad + StandardOutPath + /var/log/app/app-bravo-1.log StandardErrorPath /var/log/app/app-bravo-1.log UserName diff --git a/spec/resources/export/launchd/launchd-c.default b/spec/resources/export/launchd/launchd-c.default index 8059a9d..b157d84 100644 --- a/spec/resources/export/launchd/launchd-c.default +++ b/spec/resources/export/launchd/launchd-c.default @@ -18,6 +18,8 @@ RunAtLoad + StandardOutPath + /var/log/app/app-alpha-1.log StandardErrorPath /var/log/app/app-alpha-1.log UserName