foreman_god 0.0.2 → 0.0.3
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.
- data/lib/foreman_god/god_config.rb +13 -6
- data/lib/foreman_god/version.rb +1 -1
- data/spec/god_config_spec.rb +13 -5
- metadata +2 -2
@@ -5,6 +5,7 @@ require 'foreman/engine'
|
|
5
5
|
require 'thor/core_ext/hash_with_indifferent_access'
|
6
6
|
require 'god'
|
7
7
|
require 'foreman_god'
|
8
|
+
require 'etc'
|
8
9
|
|
9
10
|
module God
|
10
11
|
module Conditions
|
@@ -47,7 +48,10 @@ module ForemanGod
|
|
47
48
|
class GodConfig
|
48
49
|
attr_reader :dir_name, :options, :engine
|
49
50
|
|
50
|
-
|
51
|
+
# Defaults to the owner of Procfile, but may be overridden with the user option in .foreman
|
52
|
+
attr_reader :user_name
|
53
|
+
|
54
|
+
def initialize dir, override_options={}
|
51
55
|
@dir_name = File.basename(File.absolute_path(dir))
|
52
56
|
if @dir_name == 'current'
|
53
57
|
@dir_name = File.basename(File.dirname(File.absolute_path(dir)))
|
@@ -57,6 +61,7 @@ module ForemanGod
|
|
57
61
|
temp_options = {}
|
58
62
|
temp_options = (::YAML::load_file(options_file) || {}) if File.exists? options_file
|
59
63
|
@options = Thor::CoreExt::HashWithIndifferentAccess.new(temp_options)
|
64
|
+
@options.merge! override_options
|
60
65
|
|
61
66
|
|
62
67
|
@engine = Foreman::Engine.new(@options)
|
@@ -71,16 +76,15 @@ module ForemanGod
|
|
71
76
|
end
|
72
77
|
|
73
78
|
@engine.load_procfile(File.join(dir, "Procfile"))
|
79
|
+
|
80
|
+
procfile_owner = Etc.getpwuid(File.stat(File.join(dir, "Procfile")).uid).name
|
81
|
+
@user_name = @options[:user] || procfile_owner
|
74
82
|
end
|
75
83
|
|
76
84
|
def app_name
|
77
85
|
@options[:app] || @dir_name
|
78
86
|
end
|
79
87
|
|
80
|
-
def user_name
|
81
|
-
@options[:user]
|
82
|
-
end
|
83
|
-
|
84
88
|
def log_path
|
85
89
|
@options[:log] || 'log'
|
86
90
|
end
|
@@ -133,7 +137,10 @@ module ForemanGod
|
|
133
137
|
|
134
138
|
w.start = wrap_command(process.expanded_command(env))
|
135
139
|
|
136
|
-
|
140
|
+
if user_name && (Etc.getlogin != user_name)
|
141
|
+
# Only set the uid if the user is different from the current user
|
142
|
+
w.uid = user_name
|
143
|
+
end
|
137
144
|
|
138
145
|
# w.gid = ?
|
139
146
|
|
data/lib/foreman_god/version.rb
CHANGED
data/spec/god_config_spec.rb
CHANGED
@@ -10,7 +10,6 @@ describe GodConfig do
|
|
10
10
|
it "should load basic properties" do
|
11
11
|
config.dir_name.should == 'simple'
|
12
12
|
config.app_name.should == 'simple'
|
13
|
-
config.user_name.should == nil
|
14
13
|
config.options.should == {}
|
15
14
|
end
|
16
15
|
|
@@ -27,7 +26,8 @@ describe GodConfig do
|
|
27
26
|
watch.env.should == {'PORT' => '5000'}
|
28
27
|
watch.start.should == 'ruby ../simple_loop.rb -p 5000'
|
29
28
|
watch.log.should == '/dev/null'
|
30
|
-
|
29
|
+
|
30
|
+
watch.uid.should == nil # The user name is the same as the current user
|
31
31
|
|
32
32
|
end
|
33
33
|
|
@@ -42,11 +42,16 @@ describe GodConfig do
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
+
it "should default to using the owner of Procfile as the user" do
|
46
|
+
user_name = Etc.getpwuid(File.stat('samples/simple/Procfile').uid).name
|
47
|
+
config.user_name.should == user_name
|
48
|
+
end
|
49
|
+
|
45
50
|
end
|
46
51
|
|
47
52
|
context "configuration" do
|
48
|
-
let(:config) { GodConfig.new(sample('configuration')) }
|
49
53
|
let(:user) { Etc.getlogin }
|
54
|
+
let(:config) { GodConfig.new(sample('configuration')) }
|
50
55
|
|
51
56
|
it "should load basic properties" do
|
52
57
|
config.dir_name.should == 'configuration'
|
@@ -56,7 +61,7 @@ describe GodConfig do
|
|
56
61
|
end
|
57
62
|
|
58
63
|
it "should watch" do
|
59
|
-
config
|
64
|
+
config = GodConfig.new(sample('configuration'), user: user) # we need to override the user here
|
60
65
|
|
61
66
|
config.watch
|
62
67
|
God.watches.values.count.should == 3
|
@@ -70,7 +75,10 @@ describe GodConfig do
|
|
70
75
|
watch.env.should == {'PORT' => '5000', 'MY_VAR' => '12345', 'ANOTHER_VAR' => 'yes'}
|
71
76
|
watch.start.should == 'ruby ../simple_loop.rb -p 5000'
|
72
77
|
watch.log.should == File.absolute_path('samples/configuration/configured-app-loop-1.log')
|
73
|
-
|
78
|
+
|
79
|
+
# We cannot easily test watch.uid in a single-user setup
|
80
|
+
pending "Test watch.uid"
|
81
|
+
#watch.uid.should == user
|
74
82
|
end
|
75
83
|
end
|
76
84
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_god
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
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: 2012-11-
|
12
|
+
date: 2012-11-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: foreman
|