From dbda63263bb1db79a16d9f911bedfa34a725b4d3 Mon Sep 17 00:00:00 2001 From: Raphael Randschau Date: Fri, 20 Apr 2012 09:11:25 +0200 Subject: [PATCH 1/3] fix supervisord export for environments containing commas --- data/export/supervisord/app.conf.erb | 2 +- lib/foreman/export/supervisord.rb | 8 ++++++++ spec/foreman/export/supervisord_spec.rb | 10 ++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/data/export/supervisord/app.conf.erb b/data/export/supervisord/app.conf.erb index 931d0da..fc6a9ef 100644 --- a/data/export/supervisord/app.conf.erb +++ b/data/export/supervisord/app.conf.erb @@ -5,7 +5,7 @@ engine.procfile.entries.each do |process| 1.upto(self.concurrency[process.name]) do |num| port = engine.port_for(process, num, self.port) name = if (conc > 1); "#{process.name}-#{num}" else process.name; end - environment = (engine.environment.map{ |var,env| "#{var.upcase}=#{env}" } + ["PORT=#{port}"]) + environment = (engine.environment.map{ |var,env| "#{var.upcase}=#{wrap_environment env}" } + ["PORT=#{port}"]) app_name = "#{app}-#{name}" app_names << app_name %> diff --git a/lib/foreman/export/supervisord.rb b/lib/foreman/export/supervisord.rb index 11eedd6..17a428c 100644 --- a/lib/foreman/export/supervisord.rb +++ b/lib/foreman/export/supervisord.rb @@ -23,4 +23,12 @@ class Foreman::Export::Supervisord < Foreman::Export::Base write_file "#{location}/#{app}.conf", app_config end + def wrap_environment env + if env.index(',').nil? + env + else + "\"#{env}\"" + end + end + end diff --git a/spec/foreman/export/supervisord_spec.rb b/spec/foreman/export/supervisord_spec.rb index 616b181..a805da4 100644 --- a/spec/foreman/export/supervisord_spec.rb +++ b/spec/foreman/export/supervisord_spec.rb @@ -72,4 +72,14 @@ describe Foreman::Export::Supervisord, :fakefs do end end + context "environment export" do + it "returns the original environment if it contains no comma" do + supervisord.wrap_environment("production").should == "production" + end + + it "wrapps the original environment with quotes if it contains a comma" do + supervisord.wrap_environment("slowqueue,fastqueue").should == '"slowqueue,fastqueue"' + end + end + end From b8ea6fd4b30a3407a35ada97e6515575d9a86ad6 Mon Sep 17 00:00:00 2001 From: Raphael Randschau Date: Fri, 20 Apr 2012 09:14:12 +0200 Subject: [PATCH 2/3] fix typo in spec description --- spec/foreman/export/supervisord_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/foreman/export/supervisord_spec.rb b/spec/foreman/export/supervisord_spec.rb index a805da4..75ef4d3 100644 --- a/spec/foreman/export/supervisord_spec.rb +++ b/spec/foreman/export/supervisord_spec.rb @@ -77,7 +77,7 @@ describe Foreman::Export::Supervisord, :fakefs do supervisord.wrap_environment("production").should == "production" end - it "wrapps the original environment with quotes if it contains a comma" do + it "wraps the original environment with quotes if it contains a comma" do supervisord.wrap_environment("slowqueue,fastqueue").should == '"slowqueue,fastqueue"' end end From b721fd894ee19a158321a127c67a5f06b16d801c Mon Sep 17 00:00:00 2001 From: Raphael Randschau Date: Fri, 20 Apr 2012 21:15:43 +0200 Subject: [PATCH 3/3] per default wrap every environment value in quotes --- data/export/supervisord/app.conf.erb | 2 +- lib/foreman/export/supervisord.rb | 6 +---- spec/foreman/export/supervisord_spec.rb | 16 +++++++++---- .../export/supervisord/app-alpha-2.conf | 4 ++-- .../supervisord/app-env-with-comma.conf | 24 +++++++++++++++++++ .../resources/export/supervisord/app-env.conf | 21 ++++++++++++++++ spec/resources/export/supervisord/app.conf | 4 ++-- 7 files changed, 63 insertions(+), 14 deletions(-) create mode 100644 spec/resources/export/supervisord/app-env-with-comma.conf create mode 100644 spec/resources/export/supervisord/app-env.conf diff --git a/data/export/supervisord/app.conf.erb b/data/export/supervisord/app.conf.erb index fc6a9ef..9acb875 100644 --- a/data/export/supervisord/app.conf.erb +++ b/data/export/supervisord/app.conf.erb @@ -5,7 +5,7 @@ engine.procfile.entries.each do |process| 1.upto(self.concurrency[process.name]) do |num| port = engine.port_for(process, num, self.port) name = if (conc > 1); "#{process.name}-#{num}" else process.name; end - environment = (engine.environment.map{ |var,env| "#{var.upcase}=#{wrap_environment env}" } + ["PORT=#{port}"]) + environment = (engine.environment.map{ |var,env| "#{var.upcase}=#{wrap_environment env}" } + ["PORT=#{wrap_environment port}"]) app_name = "#{app}-#{name}" app_names << app_name %> diff --git a/lib/foreman/export/supervisord.rb b/lib/foreman/export/supervisord.rb index 17a428c..aef2097 100644 --- a/lib/foreman/export/supervisord.rb +++ b/lib/foreman/export/supervisord.rb @@ -24,11 +24,7 @@ class Foreman::Export::Supervisord < Foreman::Export::Base end def wrap_environment env - if env.index(',').nil? - env - else - "\"#{env}\"" - end + "\"#{env}\"" end end diff --git a/spec/foreman/export/supervisord_spec.rb b/spec/foreman/export/supervisord_spec.rb index 75ef4d3..9ef9ef1 100644 --- a/spec/foreman/export/supervisord_spec.rb +++ b/spec/foreman/export/supervisord_spec.rb @@ -73,12 +73,20 @@ describe Foreman::Export::Supervisord, :fakefs do end context "environment export" do - it "returns the original environment if it contains no comma" do - supervisord.wrap_environment("production").should == "production" + it "wraps the original environment with quotes" do + supervisord.wrap_environment("slowqueue,fastqueue").should == '"slowqueue,fastqueue"' end - it "wraps the original environment with quotes if it contains a comma" do - supervisord.wrap_environment("slowqueue,fastqueue").should == '"slowqueue,fastqueue"' + it "correctly translates environment when exporting" do + File.open("/tmp/supervisord_env", "w") { |f| f.puts("QUEUE=fastqueue,slowqueue\nVERBOSE=1") } + + engine = Foreman::Engine.new(procfile,:env => "/tmp/supervisord_env") + supervisor = Foreman::Export::Supervisord.new("/tmp/init", engine, options) + stub(supervisor).say + + supervisor.export + + File.read("/tmp/init/app.conf").should == example_export_file("supervisord/app-env-with-comma.conf") end end diff --git a/spec/resources/export/supervisord/app-alpha-2.conf b/spec/resources/export/supervisord/app-alpha-2.conf index c656237..972117d 100644 --- a/spec/resources/export/supervisord/app-alpha-2.conf +++ b/spec/resources/export/supervisord/app-alpha-2.conf @@ -8,7 +8,7 @@ stdout_logfile=/var/log/app/alpha-1-out.log stderr_logfile=/var/log/app/alpha-1-err.log user=app directory=/tmp/app -environment=PORT=5000 +environment=PORT="5000" [program:app-alpha-2] command=./alpha autostart=true @@ -18,7 +18,7 @@ stdout_logfile=/var/log/app/alpha-2-out.log stderr_logfile=/var/log/app/alpha-2-err.log user=app directory=/tmp/app -environment=PORT=5001 +environment=PORT="5001" [group:app] programs=app-alpha-1,app-alpha-2 diff --git a/spec/resources/export/supervisord/app-env-with-comma.conf b/spec/resources/export/supervisord/app-env-with-comma.conf new file mode 100644 index 0000000..6b50836 --- /dev/null +++ b/spec/resources/export/supervisord/app-env-with-comma.conf @@ -0,0 +1,24 @@ + +[program:app-alpha] +command=./alpha +autostart=true +autorestart=true +stopsignal=QUIT +stdout_logfile=/var/log/app/alpha-1-out.log +stderr_logfile=/var/log/app/alpha-1-err.log +user=app +directory=/tmp/app +environment=QUEUE="fastqueue,slowqueue",VERBOSE="1",PORT="5000" +[program:app-bravo] +command=./bravo +autostart=true +autorestart=true +stopsignal=QUIT +stdout_logfile=/var/log/app/bravo-1-out.log +stderr_logfile=/var/log/app/bravo-1-err.log +user=app +directory=/tmp/app +environment=QUEUE="fastqueue,slowqueue",VERBOSE="1",PORT="5100" + +[group:app] +programs=app-alpha,app-bravo diff --git a/spec/resources/export/supervisord/app-env.conf b/spec/resources/export/supervisord/app-env.conf new file mode 100644 index 0000000..23df258 --- /dev/null +++ b/spec/resources/export/supervisord/app-env.conf @@ -0,0 +1,21 @@ + +[program:app-alpha] +command=./alpha +autostart=true +autorestart=true +stopsignal=QUIT +stdout_logfile=/var/log/app/alpha-1-out.log +stderr_logfile=/var/log/app/alpha-1-err.log +user=app +directory=/tmp/app +environment=FOO="bar",PORT="5000" +[program:app-bravo] +command=./bravo +autostart=true +autorestart=true +stopsignal=QUIT +stdout_logfile=/var/log/app/bravo-1-out.log +stderr_logfile=/var/log/app/bravo-1-err.log +user=app +directory=/tmp/app +environment=FOO="bar",PORT="5100" diff --git a/spec/resources/export/supervisord/app.conf b/spec/resources/export/supervisord/app.conf index 49052f8..abf811a 100644 --- a/spec/resources/export/supervisord/app.conf +++ b/spec/resources/export/supervisord/app.conf @@ -8,7 +8,7 @@ stdout_logfile=/var/log/app/alpha-1-out.log stderr_logfile=/var/log/app/alpha-1-err.log user=app directory=/tmp/app -environment=PORT=5000 +environment=PORT="5000" [program:app-bravo] command=./bravo autostart=true @@ -18,7 +18,7 @@ stdout_logfile=/var/log/app/bravo-1-out.log stderr_logfile=/var/log/app/bravo-1-err.log user=app directory=/tmp/app -environment=PORT=5100 +environment=PORT="5100" [group:app] programs=app-alpha,app-bravo