upstart-exporter 2.0.1 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -0
- data/lib/upstart-exporter.rb +1 -0
- data/lib/upstart-exporter/expanded_exporter.rb +48 -13
- data/lib/upstart-exporter/exporter_helpers.rb +14 -2
- data/lib/upstart-exporter/options/global.rb +2 -1
- data/lib/upstart-exporter/templates.rb +5 -4
- data/lib/upstart-exporter/version.rb +1 -1
- data/spec/lib/upstart-exporter/expanded_exporter_spec.rb +41 -0
- data/spec/lib/upstart-exporter/templates_spec.rb +8 -6
- data/spec/lib/upstart-exporter_spec.rb +2 -1
- data/spec/support/procfile.rb +1 -1
- metadata +4 -4
data/.travis.yml
CHANGED
data/lib/upstart-exporter.rb
CHANGED
@@ -12,29 +12,36 @@ class Upstart::Exporter
|
|
12
12
|
@options = options
|
13
13
|
@commands = @config['commands']
|
14
14
|
@env = @config['env'] || {}
|
15
|
-
@dir = @config['working_directory'] || ''
|
16
15
|
end
|
17
16
|
|
18
17
|
def export
|
19
|
-
@commands.each do |command,
|
20
|
-
if count =
|
18
|
+
@commands.each do |command, cmd_options|
|
19
|
+
if count = cmd_options['count']
|
21
20
|
count.times do |counter|
|
22
|
-
export_cmd("#{command}_#{counter}",
|
21
|
+
export_cmd("#{command}_#{counter}", cmd_options)
|
23
22
|
end
|
24
23
|
else
|
25
|
-
export_cmd(command,
|
24
|
+
export_cmd(command, cmd_options)
|
26
25
|
end
|
27
26
|
end
|
28
27
|
end
|
29
28
|
|
30
29
|
private
|
31
30
|
|
32
|
-
def export_cmd(command,
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
31
|
+
def export_cmd(command, cmd_options)
|
32
|
+
cmd_options = {
|
33
|
+
'working_directory' => working_directory(cmd_options),
|
34
|
+
'log' => log(cmd_options),
|
35
|
+
'kill_timeout' => kill_timeout(cmd_options)
|
36
|
+
}.merge(cmd_options)
|
37
|
+
|
38
|
+
script = cmd_options['command']
|
39
|
+
script = add_env_command(script, cmd_options)
|
40
|
+
script = add_dir_command(script, cmd_options)
|
41
|
+
script = add_log_command(script, cmd_options)
|
42
|
+
|
43
|
+
export_cmd_helper(command, script, cmd_options)
|
44
|
+
export_cmd_upstart_conf(command, cmd_options)
|
38
45
|
end
|
39
46
|
|
40
47
|
def add_env_command(script, command)
|
@@ -51,7 +58,7 @@ class Upstart::Exporter
|
|
51
58
|
end
|
52
59
|
|
53
60
|
def add_dir_command(script, command)
|
54
|
-
dir = command['working_directory']
|
61
|
+
dir = command['working_directory']
|
55
62
|
if dir.empty?
|
56
63
|
script
|
57
64
|
else
|
@@ -59,6 +66,15 @@ class Upstart::Exporter
|
|
59
66
|
end
|
60
67
|
end
|
61
68
|
|
69
|
+
def add_log_command(script, command)
|
70
|
+
log = command['log']
|
71
|
+
if log.empty?
|
72
|
+
script
|
73
|
+
else
|
74
|
+
"#{script} >> #{log} 2>&1"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
62
78
|
def respawn_options(cmd_options)
|
63
79
|
if cmd_options.has_key?('respawn')
|
64
80
|
cmd_options['respawn']
|
@@ -87,6 +103,18 @@ class Upstart::Exporter
|
|
87
103
|
"stopping #{app_name}"
|
88
104
|
end
|
89
105
|
|
106
|
+
def working_directory(cmd_options)
|
107
|
+
command_option(cmd_options, 'working_directory')
|
108
|
+
end
|
109
|
+
|
110
|
+
def log(cmd_options)
|
111
|
+
command_option(cmd_options, 'log')
|
112
|
+
end
|
113
|
+
|
114
|
+
def kill_timeout(cmd_options)
|
115
|
+
command_option(cmd_options, 'kill_timeout')
|
116
|
+
end
|
117
|
+
|
90
118
|
def export_cmd_upstart_conf(cmd_name, cmd_options)
|
91
119
|
cmd_upstart_conf_content = Templates.command(
|
92
120
|
:app_name => app_name,
|
@@ -97,11 +125,18 @@ class Upstart::Exporter
|
|
97
125
|
:cmd_name => cmd_name,
|
98
126
|
:helper_cmd_conf => helper_cmd_conf(cmd_name),
|
99
127
|
:respawn => respawn(cmd_options),
|
100
|
-
:respawn_limit => respawn_limit(cmd_options)
|
128
|
+
:respawn_limit => respawn_limit(cmd_options),
|
129
|
+
:kill_timeout => kill_timeout(cmd_options)
|
101
130
|
)
|
102
131
|
File.open(upstart_cmd_conf(cmd_name), 'w') do |f|
|
103
132
|
f.write(cmd_upstart_conf_content)
|
104
133
|
end
|
105
134
|
end
|
135
|
+
|
136
|
+
private
|
137
|
+
|
138
|
+
def command_option(cmd_options, key)
|
139
|
+
cmd_options[key.to_s] || @config[key.to_s] || @options[key.to_sym] || ''
|
140
|
+
end
|
106
141
|
end
|
107
142
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class Upstart::Exporter
|
2
2
|
module ExporterHelpers
|
3
|
-
def export_cmd_helper(cmd_name, cmd)
|
4
|
-
helper_script_cont = Templates.helper
|
3
|
+
def export_cmd_helper(cmd_name, cmd, binds={})
|
4
|
+
helper_script_cont = Templates.helper append_cmd(cmd, binds)
|
5
5
|
File.open(helper_cmd_conf(cmd_name), 'w') do |f|
|
6
6
|
f.write(helper_script_cont)
|
7
7
|
end
|
@@ -22,5 +22,17 @@ class Upstart::Exporter
|
|
22
22
|
def helper_cmd_conf(cmd_name)
|
23
23
|
File.join(@options[:helper_dir], "#{app_cmd(cmd_name)}.sh")
|
24
24
|
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def append_cmd(cmd, binds)
|
29
|
+
return binds unless cmd
|
30
|
+
|
31
|
+
parts = cmd.split /\s*(&&|\|\|)\s*/
|
32
|
+
parts.last.gsub!(/\A(exec\s*|\s*)/, "exec ")
|
33
|
+
cmd = parts.join(" ")
|
34
|
+
|
35
|
+
binds.merge(:cmd => cmd)
|
36
|
+
end
|
25
37
|
end
|
26
38
|
end
|
@@ -25,9 +25,9 @@ module Upstart
|
|
25
25
|
|
26
26
|
HELPER_TPL = <<-HEREDOC
|
27
27
|
#!/bin/bash
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
|
29
|
+
[[ -r /etc/profile.d/rbenv.sh ]] && source /etc/profile.d/rbenv.sh
|
30
|
+
|
31
31
|
{{cmd}}
|
32
32
|
HEREDOC
|
33
33
|
|
@@ -52,6 +52,7 @@ start on {{start_on}}
|
|
52
52
|
stop on {{stop_on}}
|
53
53
|
{{respawn}}
|
54
54
|
{{respawn_limit}}
|
55
|
+
kill timeout {{kill_timeout}}
|
55
56
|
|
56
57
|
script
|
57
58
|
touch /var/log/{{app_name}}/{{cmd_name}}.log
|
@@ -65,7 +66,7 @@ HEREDOC
|
|
65
66
|
def self.interpolate(str, substitutes)
|
66
67
|
str_copy = str.dup
|
67
68
|
substitutes.each do |k, v|
|
68
|
-
str_copy.gsub!("{{#{k}}}", v)
|
69
|
+
str_copy.gsub!("{{#{k}}}", v.to_s)
|
69
70
|
end
|
70
71
|
str_copy
|
71
72
|
end
|
@@ -56,4 +56,45 @@ describe Upstart::Exporter::ExpandedExporter do
|
|
56
56
|
|
57
57
|
described_class.export(options)
|
58
58
|
end
|
59
|
+
|
60
|
+
it 'passes all calculated binds to the helper exporter' do
|
61
|
+
options = {
|
62
|
+
:version => 2,
|
63
|
+
:app_name => 'appname',
|
64
|
+
:working_directory => "/",
|
65
|
+
:log => "public.log",
|
66
|
+
:commands => {
|
67
|
+
'working_directory' => '/var/log',
|
68
|
+
'commands' => {
|
69
|
+
'rm1' => {
|
70
|
+
'command' => 'rm *',
|
71
|
+
'log' => 'private.log'
|
72
|
+
},
|
73
|
+
'rm2' => {
|
74
|
+
'command' => 'rm -rf *',
|
75
|
+
'working_directory' => '/home'
|
76
|
+
},
|
77
|
+
'rm3' => {
|
78
|
+
'command' => 'rm -f vmlinuz',
|
79
|
+
}
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}.merge(@defaults)
|
83
|
+
Upstart::Exporter::Templates.should_receive(:helper) do |options|
|
84
|
+
options.should include('working_directory' => '/var/log') # propagated from 'commands'
|
85
|
+
options.should include('log' => 'private.log') # redefined by command
|
86
|
+
options.should include(:cmd => "cd '/var/log' && exec rm * >> private.log 2>&1")
|
87
|
+
end
|
88
|
+
Upstart::Exporter::Templates.should_receive(:helper) do |options|
|
89
|
+
options.should include('working_directory' => '/home') # redefined by command
|
90
|
+
options.should include('log' => 'public.log') # propagated from the very top level
|
91
|
+
options.should include(:cmd => "cd '/home' && exec rm -rf * >> public.log 2>&1")
|
92
|
+
end
|
93
|
+
Upstart::Exporter::Templates.should_receive(:helper) do |options|
|
94
|
+
options.should include('working_directory' => '/var/log') # propagated from 'commands'
|
95
|
+
options.should include('log' => 'public.log') # propagated from the very top level
|
96
|
+
options.should include(:cmd => "cd '/var/log' && exec rm -f vmlinuz >> public.log 2>&1")
|
97
|
+
end
|
98
|
+
described_class.export(options)
|
99
|
+
end
|
59
100
|
end
|
@@ -21,8 +21,8 @@ end script
|
|
21
21
|
HEREDOC
|
22
22
|
|
23
23
|
described_class.app(
|
24
|
-
:run_user => 'SOMEUSER',
|
25
|
-
:run_group => 'SOMEGROUP',
|
24
|
+
:run_user => 'SOMEUSER',
|
25
|
+
:run_group => 'SOMEGROUP',
|
26
26
|
:app_name => 'SOMEAPP',
|
27
27
|
:start_on => '12',
|
28
28
|
:stop_on => '13'
|
@@ -35,13 +35,13 @@ HEREDOC
|
|
35
35
|
|
36
36
|
conf = <<-HEREDOC
|
37
37
|
#!/bin/bash
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
|
39
|
+
[[ -r /etc/profile.d/rbenv.sh ]] && source /etc/profile.d/rbenv.sh
|
40
|
+
|
41
41
|
SOME COMMAND
|
42
42
|
HEREDOC
|
43
43
|
|
44
|
-
described_class.helper(
|
44
|
+
described_class.helper('cmd' => 'SOME COMMAND').should == conf
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -54,6 +54,7 @@ start on starting SOMEAPP
|
|
54
54
|
stop on stopping SOMEAPP
|
55
55
|
respawn
|
56
56
|
respawn limit 5 10
|
57
|
+
kill timeout 24
|
57
58
|
|
58
59
|
script
|
59
60
|
touch /var/log/SOMEAPP/SOMECMD.log
|
@@ -72,6 +73,7 @@ HEREDOC
|
|
72
73
|
:respawn_limit => 'respawn limit 5 10',
|
73
74
|
:start_on => 'starting SOMEAPP',
|
74
75
|
:stop_on => 'stopping SOMEAPP',
|
76
|
+
:kill_timeout => 24,
|
75
77
|
:helper_cmd_conf => 'HELPERPATH').should == conf
|
76
78
|
end
|
77
79
|
end
|
@@ -32,7 +32,7 @@ describe Upstart::Exporter do
|
|
32
32
|
it 'created scripts, folders and sh helpers should have valid content' do
|
33
33
|
exporter.export
|
34
34
|
|
35
|
-
File.read('/h/p-app-ls_cmd.sh').should == tpl.helper(:cmd => ' ls')
|
35
|
+
File.read('/h/p-app-ls_cmd.sh').should == tpl.helper(:cmd => 'exec ls')
|
36
36
|
File.read('/u/p-app.conf').should == tpl.app(:run_user => 'u',
|
37
37
|
:run_group => 'g',
|
38
38
|
:app_name => 'p-app',
|
@@ -46,6 +46,7 @@ describe Upstart::Exporter do
|
|
46
46
|
:stop_on => 'stopping p-app',
|
47
47
|
:respawn => 'respawn',
|
48
48
|
:respawn_limit => '',
|
49
|
+
:kill_timeout => 30,
|
49
50
|
:helper_cmd_conf => '/h/p-app-ls_cmd.sh')
|
50
51
|
end
|
51
52
|
end
|
data/spec/support/procfile.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: upstart-exporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
-
- 0
|
9
8
|
- 1
|
10
|
-
|
9
|
+
- 1
|
10
|
+
version: 2.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ilya Averyanov
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2014-
|
19
|
+
date: 2014-02-14 00:00:00 +04:00
|
20
20
|
default_executable:
|
21
21
|
dependencies: []
|
22
22
|
|