slugrunner 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Vagrantfile ADDED
@@ -0,0 +1,31 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+ ROOT = File.dirname(File.expand_path(__FILE__))
4
+
5
+ # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
6
+ VAGRANTFILE_API_VERSION = "2"
7
+
8
+ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
9
+ config.vm.box = "phusion-open-ubuntu-12.04-amd64"
10
+ config.vm.box_url = "https://oss-binaries.phusionpassenger.com/vagrant/boxes/ubuntu-12.04.3-amd64-vbox.box"
11
+ config.ssh.forward_agent = true
12
+ if File.directory?("#{ROOT}/../passenger-docker")
13
+ config.vm.synced_folder File.expand_path("#{ROOT}/../passenger-docker"),
14
+ "/vagrant/passenger-docker"
15
+ end
16
+
17
+ config.vm.provider :vmware_fusion do |f, override|
18
+ override.vm.box_url = "https://oss-binaries.phusionpassenger.com/vagrant/boxes/ubuntu-12.04.3-amd64-vmwarefusion.box"
19
+ f.vmx["displayName"] = "baseimage-docker"
20
+ end
21
+
22
+ if Dir.glob("#{File.dirname(__FILE__)}/.vagrant/machines/default/*/id").empty?
23
+ # Add lxc-docker package
24
+ pkg_cmd = "wget -q -O - https://get.docker.io/gpg | apt-key add -;" \
25
+ "echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list;" \
26
+ "apt-get update -qq; apt-get install -q -y --force-yes lxc-docker; "
27
+ # Add vagrant user to the docker group
28
+ pkg_cmd << "usermod -a -G docker vagrant; "
29
+ config.vm.provision :shell, :inline => pkg_cmd
30
+ end
31
+ end
@@ -12,6 +12,7 @@ module Slugrunner
12
12
  opt :delayed_bind, 'Port bind allowance', default: 0
13
13
  opt :ping, 'Notify state updates', type: :string
14
14
  opt :ping_interval, 'Update interval in seconds', default: 30
15
+ opt :env, 'Append to environment', type: :strings
15
16
  opt :bash, 'Run interactive shell', default: false
16
17
  end
17
18
 
@@ -26,6 +27,7 @@ module Slugrunner
26
27
  end
27
28
 
28
29
  runner.shell = opts[:bash]
30
+ runner.extra_env = opts[:env] if opts[:env]
29
31
 
30
32
  if opts[:delayed_bind] > 0
31
33
  runner.bind_delay = opts[:delayed_bind]
@@ -1,6 +1,7 @@
1
1
  # coding: utf-8
2
2
 
3
3
  require 'yaml'
4
+ require 'shellwords'
4
5
  require 'tempfile'
5
6
  require 'socket'
6
7
  require 'timeout'
@@ -12,6 +13,7 @@ module Slugrunner
12
13
  attr_accessor :ping_url
13
14
  attr_accessor :ping_interval
14
15
  attr_accessor :shell
16
+ attr_accessor :extra_env
15
17
 
16
18
  def initialize(slug, process_type, instance_number)
17
19
  @slug = slug
@@ -22,6 +24,7 @@ module Slugrunner
22
24
  @ping_interval = 0
23
25
  @alive = false
24
26
  @shell = false
27
+ @extra_env = []
25
28
  @hostname = "#{@process_type}.#{instance_number}"
26
29
  end
27
30
 
@@ -52,6 +55,7 @@ module Slugrunner
52
55
  fail "Couldn't find command for process type #{@process_type}" unless proc_command
53
56
 
54
57
  command = prepare_env(proc_command)
58
+ puts(command)
55
59
  @child = fork { exec(command) }
56
60
  trap_signals
57
61
 
@@ -166,7 +170,7 @@ module Slugrunner
166
170
  end
167
171
 
168
172
  def prepare_env(cmd)
169
- <<-eos
173
+ blob = <<-eos
170
174
  env - bash -c '
171
175
  cd #{@slug_dir}
172
176
  export HOME=#{@slug_dir}
@@ -176,9 +180,17 @@ module Slugrunner
176
180
  export SLUG_ENV=1
177
181
  PORT=#{ENV['PORT'] || 0}
178
182
  for file in .profile.d/*; do source $file; done
179
- exec #{cmd}
180
- '
181
183
  eos
184
+
185
+ @extra_env.each do |e|
186
+ pair = e.split(/=/, 2)
187
+ next unless pair.length == 2
188
+ escaped = pair.map { |n| Shellwords.escape(n) }
189
+ blob += "export #{escaped[0]}=#{escaped[1]}\n"
190
+ end
191
+
192
+ blob += "exec #{cmd}'"
193
+ blob
182
194
  end
183
195
  end
184
196
  end
@@ -1,3 +1,3 @@
1
1
  module Slugrunner
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slugrunner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-03-05 00:00:00.000000000 Z
12
+ date: 2014-03-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -72,6 +72,7 @@ files:
72
72
  - LICENSE.txt
73
73
  - README.md
74
74
  - Rakefile
75
+ - Vagrantfile
75
76
  - bin/slugrunner
76
77
  - lib/slugrunner.rb
77
78
  - lib/slugrunner/cli.rb