foreman-systemd 0.78.0

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.
Files changed (107) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +64 -0
  3. data/bin/foreman +7 -0
  4. data/bin/foreman-runner +41 -0
  5. data/data/example/Procfile +4 -0
  6. data/data/example/Procfile.without_colon +2 -0
  7. data/data/example/error +7 -0
  8. data/data/example/log/neverdie.log +4 -0
  9. data/data/example/spawnee +14 -0
  10. data/data/example/spawner +7 -0
  11. data/data/example/ticker +14 -0
  12. data/data/example/utf8 +11 -0
  13. data/data/export/bluepill/master.pill.erb +28 -0
  14. data/data/export/daemon/master.conf.erb +14 -0
  15. data/data/export/daemon/process.conf.erb +8 -0
  16. data/data/export/daemon/process_master.conf.erb +2 -0
  17. data/data/export/launchd/launchd.plist.erb +33 -0
  18. data/data/export/runit/log/run.erb +7 -0
  19. data/data/export/runit/run.erb +4 -0
  20. data/data/export/supervisord/app.conf.erb +28 -0
  21. data/data/export/systemd/master.target.erb +6 -0
  22. data/data/export/systemd/process.service.erb +16 -0
  23. data/data/export/systemd/process_master.target.erb +4 -0
  24. data/data/export/upstart/master.conf.erb +2 -0
  25. data/data/export/upstart/process.conf.erb +14 -0
  26. data/data/export/upstart/process_master.conf.erb +2 -0
  27. data/lib/foreman.rb +17 -0
  28. data/lib/foreman/cli.rb +161 -0
  29. data/lib/foreman/distribution.rb +9 -0
  30. data/lib/foreman/engine.rb +441 -0
  31. data/lib/foreman/engine/cli.rb +104 -0
  32. data/lib/foreman/env.rb +29 -0
  33. data/lib/foreman/export.rb +36 -0
  34. data/lib/foreman/export/base.rb +156 -0
  35. data/lib/foreman/export/bluepill.rb +12 -0
  36. data/lib/foreman/export/daemon.rb +28 -0
  37. data/lib/foreman/export/inittab.rb +42 -0
  38. data/lib/foreman/export/launchd.rb +22 -0
  39. data/lib/foreman/export/runit.rb +34 -0
  40. data/lib/foreman/export/supervisord.rb +16 -0
  41. data/lib/foreman/export/systemd.rb +32 -0
  42. data/lib/foreman/export/upstart.rb +43 -0
  43. data/lib/foreman/helpers.rb +45 -0
  44. data/lib/foreman/process.rb +80 -0
  45. data/lib/foreman/procfile.rb +92 -0
  46. data/lib/foreman/version.rb +5 -0
  47. data/man/foreman.1 +278 -0
  48. data/spec/foreman/cli_spec.rb +107 -0
  49. data/spec/foreman/engine_spec.rb +112 -0
  50. data/spec/foreman/export/base_spec.rb +19 -0
  51. data/spec/foreman/export/bluepill_spec.rb +37 -0
  52. data/spec/foreman/export/daemon_spec.rb +97 -0
  53. data/spec/foreman/export/inittab_spec.rb +40 -0
  54. data/spec/foreman/export/launchd_spec.rb +31 -0
  55. data/spec/foreman/export/runit_spec.rb +36 -0
  56. data/spec/foreman/export/supervisord_spec.rb +36 -0
  57. data/spec/foreman/export/systemd_spec.rb +91 -0
  58. data/spec/foreman/export/upstart_spec.rb +118 -0
  59. data/spec/foreman/export_spec.rb +24 -0
  60. data/spec/foreman/helpers_spec.rb +26 -0
  61. data/spec/foreman/process_spec.rb +71 -0
  62. data/spec/foreman/procfile_spec.rb +43 -0
  63. data/spec/foreman_spec.rb +16 -0
  64. data/spec/helper_spec.rb +19 -0
  65. data/spec/resources/Procfile +5 -0
  66. data/spec/resources/bin/echo +2 -0
  67. data/spec/resources/bin/env +2 -0
  68. data/spec/resources/bin/test +2 -0
  69. data/spec/resources/bin/utf8 +2 -0
  70. data/spec/resources/export/bluepill/app-concurrency.pill +49 -0
  71. data/spec/resources/export/bluepill/app.pill +81 -0
  72. data/spec/resources/export/daemon/app-alpha-1.conf +7 -0
  73. data/spec/resources/export/daemon/app-alpha-2.conf +7 -0
  74. data/spec/resources/export/daemon/app-alpha.conf +2 -0
  75. data/spec/resources/export/daemon/app-bravo-1.conf +7 -0
  76. data/spec/resources/export/daemon/app-bravo.conf +2 -0
  77. data/spec/resources/export/daemon/app.conf +14 -0
  78. data/spec/resources/export/inittab/inittab.concurrency +4 -0
  79. data/spec/resources/export/inittab/inittab.default +6 -0
  80. data/spec/resources/export/launchd/launchd-a.default +29 -0
  81. data/spec/resources/export/launchd/launchd-b.default +29 -0
  82. data/spec/resources/export/launchd/launchd-c.default +30 -0
  83. data/spec/resources/export/runit/app-alpha-1/log/run +7 -0
  84. data/spec/resources/export/runit/app-alpha-1/run +4 -0
  85. data/spec/resources/export/runit/app-alpha-2/log/run +7 -0
  86. data/spec/resources/export/runit/app-alpha-2/run +4 -0
  87. data/spec/resources/export/runit/app-bravo-1/log/run +7 -0
  88. data/spec/resources/export/runit/app-bravo-1/run +4 -0
  89. data/spec/resources/export/supervisord/app-alpha-1.conf +46 -0
  90. data/spec/resources/export/supervisord/app-alpha-2.conf +24 -0
  91. data/spec/resources/export/systemd/concurrency/app-alpha-1.service +14 -0
  92. data/spec/resources/export/systemd/concurrency/app-alpha-2.service +14 -0
  93. data/spec/resources/export/systemd/concurrency/app-alpha.target +3 -0
  94. data/spec/resources/export/systemd/concurrency/app.target +6 -0
  95. data/spec/resources/export/systemd/standard/app-alpha-1.service +14 -0
  96. data/spec/resources/export/systemd/standard/app-alpha.target +3 -0
  97. data/spec/resources/export/systemd/standard/app-bravo-1.service +14 -0
  98. data/spec/resources/export/systemd/standard/app-bravo.target +3 -0
  99. data/spec/resources/export/systemd/standard/app.target +6 -0
  100. data/spec/resources/export/upstart/app-alpha-1.conf +11 -0
  101. data/spec/resources/export/upstart/app-alpha-2.conf +11 -0
  102. data/spec/resources/export/upstart/app-alpha.conf +2 -0
  103. data/spec/resources/export/upstart/app-bravo-1.conf +11 -0
  104. data/spec/resources/export/upstart/app-bravo.conf +2 -0
  105. data/spec/resources/export/upstart/app.conf +2 -0
  106. data/spec/spec_helper.rb +166 -0
  107. metadata +164 -0
@@ -0,0 +1,14 @@
1
+ [Unit]
2
+ StopWhenUnneeded=true
3
+
4
+ [Service]
5
+ User=app
6
+ WorkingDirectory=/tmp/app
7
+ Environment=PORT=5000
8
+ ExecStart=/bin/bash -lc './alpha'
9
+ Restart=always
10
+ StandardInput=null
11
+ StandardOutput=syslog
12
+ StandardError=syslog
13
+ SyslogIdentifier=%n
14
+ KillMode=process
@@ -0,0 +1,14 @@
1
+ [Unit]
2
+ StopWhenUnneeded=true
3
+
4
+ [Service]
5
+ User=app
6
+ WorkingDirectory=/tmp/app
7
+ Environment=PORT=5001
8
+ ExecStart=/bin/bash -lc './alpha'
9
+ Restart=always
10
+ StandardInput=null
11
+ StandardOutput=syslog
12
+ StandardError=syslog
13
+ SyslogIdentifier=%n
14
+ KillMode=process
@@ -0,0 +1,3 @@
1
+ [Unit]
2
+ StopWhenUnneeded=true
3
+ Wants=app-alpha-1.service app-alpha-2.service
@@ -0,0 +1,6 @@
1
+ [Unit]
2
+ StopWhenUnneeded=true
3
+ Wants=app-alpha.target
4
+
5
+ [Install]
6
+ WantedBy=multi-user.target
@@ -0,0 +1,14 @@
1
+ [Unit]
2
+ StopWhenUnneeded=true
3
+
4
+ [Service]
5
+ User=app
6
+ WorkingDirectory=/tmp/app
7
+ Environment=PORT=5000
8
+ ExecStart=/bin/bash -lc './alpha'
9
+ Restart=always
10
+ StandardInput=null
11
+ StandardOutput=syslog
12
+ StandardError=syslog
13
+ SyslogIdentifier=%n
14
+ KillMode=process
@@ -0,0 +1,3 @@
1
+ [Unit]
2
+ StopWhenUnneeded=true
3
+ Wants=app-alpha-1.service
@@ -0,0 +1,14 @@
1
+ [Unit]
2
+ StopWhenUnneeded=true
3
+
4
+ [Service]
5
+ User=app
6
+ WorkingDirectory=/tmp/app
7
+ Environment=PORT=5100
8
+ ExecStart=/bin/bash -lc './bravo'
9
+ Restart=always
10
+ StandardInput=null
11
+ StandardOutput=syslog
12
+ StandardError=syslog
13
+ SyslogIdentifier=%n
14
+ KillMode=process
@@ -0,0 +1,3 @@
1
+ [Unit]
2
+ StopWhenUnneeded=true
3
+ Wants=app-bravo-1.service
@@ -0,0 +1,6 @@
1
+ [Unit]
2
+ StopWhenUnneeded=true
3
+ Wants=app-alpha.target app-bravo.target app-foo_bar.target app-foo-bar.target
4
+
5
+ [Install]
6
+ WantedBy=multi-user.target
@@ -0,0 +1,11 @@
1
+ start on starting app-alpha
2
+ stop on stopping app-alpha
3
+ respawn
4
+
5
+ env PORT=5000
6
+
7
+ setuid app
8
+
9
+ chdir /tmp/app
10
+
11
+ exec ./alpha
@@ -0,0 +1,11 @@
1
+ start on starting app-alpha
2
+ stop on stopping app-alpha
3
+ respawn
4
+
5
+ env PORT=5001
6
+
7
+ setuid app
8
+
9
+ chdir /tmp/app
10
+
11
+ exec ./alpha
@@ -0,0 +1,2 @@
1
+ start on starting app
2
+ stop on stopping app
@@ -0,0 +1,11 @@
1
+ start on starting app-bravo
2
+ stop on stopping app-bravo
3
+ respawn
4
+
5
+ env PORT=5100
6
+
7
+ setuid app
8
+
9
+ chdir /tmp/app
10
+
11
+ exec ./bravo
@@ -0,0 +1,2 @@
1
+ start on starting app
2
+ stop on stopping app
@@ -0,0 +1,2 @@
1
+ start on runlevel [2345]
2
+ stop on runlevel [!2345]
@@ -0,0 +1,166 @@
1
+ require "codeclimate-test-reporter"
2
+ CodeClimate::TestReporter.start
3
+
4
+ require "simplecov"
5
+ SimpleCov.start do
6
+ add_filter "/spec/"
7
+ end
8
+
9
+ require "rspec"
10
+ require "timecop"
11
+ require "fakefs/safe"
12
+ require "fakefs/spec_helpers"
13
+
14
+ $:.unshift File.expand_path("../../lib", __FILE__)
15
+
16
+ def mock_export_error(message)
17
+ expect { yield }.to raise_error(Foreman::Export::Exception, message)
18
+ end
19
+
20
+ def mock_error(subject, message)
21
+ mock_exit do
22
+ mock(subject).puts("ERROR: #{message}")
23
+ yield
24
+ end
25
+ end
26
+
27
+ def make_pipe
28
+ IO.method(:pipe).arity.zero? ? IO.pipe : IO.pipe("BINARY")
29
+ end
30
+
31
+ def foreman(args)
32
+ capture_stdout do
33
+ begin
34
+ Foreman::CLI.start(args.split(" "))
35
+ rescue SystemExit
36
+ end
37
+ end
38
+ end
39
+
40
+ def forked_foreman(args)
41
+ rd, wr = make_pipe
42
+ Process.spawn("bundle exec bin/foreman #{args}", :out => wr, :err => wr)
43
+ wr.close
44
+ rd.read
45
+ end
46
+
47
+ def fork_and_capture(&blk)
48
+ rd, wr = make_pipe
49
+ pid = fork do
50
+ rd.close
51
+ wr.sync = true
52
+ $stdout.reopen wr
53
+ $stderr.reopen wr
54
+ blk.call
55
+ $stdout.flush
56
+ $stdout.close
57
+ end
58
+ wr.close
59
+ Process.wait pid
60
+ buffer = ""
61
+ until rd.eof?
62
+ buffer += rd.gets
63
+ end
64
+ end
65
+
66
+ def fork_and_get_exitstatus(args)
67
+ pid = Process.spawn("bundle exec bin/foreman #{args}", :out => "/dev/null", :err => "/dev/null")
68
+ Process.wait(pid)
69
+ $?.exitstatus
70
+ end
71
+
72
+ def mock_exit(&block)
73
+ expect(block).to raise_error(SystemExit)
74
+ end
75
+
76
+ def write_foreman_config(app)
77
+ File.open("/etc/foreman/#{app}.conf", "w") do |file|
78
+ file.puts %{#{app}_processes="alpha bravo"}
79
+ file.puts %{#{app}_alpha="1"}
80
+ file.puts %{#{app}_bravo="2"}
81
+ end
82
+ end
83
+
84
+ def write_procfile(procfile="Procfile", alpha_env="")
85
+ File.open(procfile, "w") do |file|
86
+ file.puts "alpha: ./alpha" + " #{alpha_env}".rstrip
87
+ file.puts "\n"
88
+ file.puts "bravo:\t./bravo"
89
+ file.puts "foo_bar:\t./foo_bar"
90
+ file.puts "foo-bar:\t./foo-bar"
91
+ end
92
+ File.expand_path(procfile)
93
+ end
94
+
95
+ def write_env(env=".env", options={"FOO"=>"bar"})
96
+ File.open(env, "w") do |file|
97
+ options.each do |key, val|
98
+ file.puts "#{key}=#{val}"
99
+ end
100
+ end
101
+ end
102
+
103
+ def without_fakefs
104
+ FakeFS.deactivate!
105
+ ret = yield
106
+ FakeFS.activate!
107
+ ret
108
+ end
109
+
110
+ def load_export_templates_into_fakefs(type)
111
+ without_fakefs do
112
+ Dir[File.expand_path("../../data/export/#{type}/**/*", __FILE__)].inject({}) do |hash, file|
113
+ next(hash) if File.directory?(file)
114
+ hash.update(file => File.read(file))
115
+ end
116
+ end.each do |filename, contents|
117
+ FileUtils.mkdir_p File.dirname(filename)
118
+ File.open(filename, "w") do |f|
119
+ f.puts contents
120
+ end
121
+ end
122
+ end
123
+
124
+ def resource_path(filename)
125
+ File.expand_path("../resources/#{filename}", __FILE__)
126
+ end
127
+
128
+ def example_export_file(filename)
129
+ FakeFS.deactivate!
130
+ data = File.read(File.expand_path(resource_path("export/#{filename}"), __FILE__))
131
+ FakeFS.activate!
132
+ data
133
+ end
134
+
135
+ def preserving_env
136
+ old_env = ENV.to_hash
137
+ begin
138
+ yield
139
+ ensure
140
+ ENV.clear
141
+ ENV.update(old_env)
142
+ end
143
+ end
144
+
145
+ def normalize_space(s)
146
+ s.gsub(/\n[\n\s]*/, "\n")
147
+ end
148
+
149
+ def capture_stdout
150
+ old_stdout = $stdout.dup
151
+ rd, wr = make_pipe
152
+ $stdout = wr
153
+ yield
154
+ wr.close
155
+ rd.read
156
+ ensure
157
+ $stdout = old_stdout
158
+ end
159
+
160
+ RSpec.configure do |config|
161
+ config.treat_symbols_as_metadata_keys_with_true_values = true
162
+ config.color = true
163
+ config.order = 'rand'
164
+ config.include FakeFS::SpecHelpers, :fakefs
165
+ config.mock_with :rr
166
+ end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: foreman-systemd
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.78.0
5
+ platform: ruby
6
+ authors:
7
+ - Adrian Serafin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-09-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.19.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.19.1
27
+ description: Process manager for applications with multiple components
28
+ email: adrian@softmad.pl
29
+ executables:
30
+ - foreman
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - README.md
35
+ - bin/foreman
36
+ - bin/foreman-runner
37
+ - data/example/Procfile
38
+ - data/example/Procfile.without_colon
39
+ - data/example/error
40
+ - data/example/log/neverdie.log
41
+ - data/example/spawnee
42
+ - data/example/spawner
43
+ - data/example/ticker
44
+ - data/example/utf8
45
+ - data/export/bluepill/master.pill.erb
46
+ - data/export/daemon/master.conf.erb
47
+ - data/export/daemon/process.conf.erb
48
+ - data/export/daemon/process_master.conf.erb
49
+ - data/export/launchd/launchd.plist.erb
50
+ - data/export/runit/log/run.erb
51
+ - data/export/runit/run.erb
52
+ - data/export/supervisord/app.conf.erb
53
+ - data/export/systemd/master.target.erb
54
+ - data/export/systemd/process.service.erb
55
+ - data/export/systemd/process_master.target.erb
56
+ - data/export/upstart/master.conf.erb
57
+ - data/export/upstart/process.conf.erb
58
+ - data/export/upstart/process_master.conf.erb
59
+ - lib/foreman.rb
60
+ - lib/foreman/cli.rb
61
+ - lib/foreman/distribution.rb
62
+ - lib/foreman/engine.rb
63
+ - lib/foreman/engine/cli.rb
64
+ - lib/foreman/env.rb
65
+ - lib/foreman/export.rb
66
+ - lib/foreman/export/base.rb
67
+ - lib/foreman/export/bluepill.rb
68
+ - lib/foreman/export/daemon.rb
69
+ - lib/foreman/export/inittab.rb
70
+ - lib/foreman/export/launchd.rb
71
+ - lib/foreman/export/runit.rb
72
+ - lib/foreman/export/supervisord.rb
73
+ - lib/foreman/export/systemd.rb
74
+ - lib/foreman/export/upstart.rb
75
+ - lib/foreman/helpers.rb
76
+ - lib/foreman/process.rb
77
+ - lib/foreman/procfile.rb
78
+ - lib/foreman/version.rb
79
+ - man/foreman.1
80
+ - spec/foreman/cli_spec.rb
81
+ - spec/foreman/engine_spec.rb
82
+ - spec/foreman/export/base_spec.rb
83
+ - spec/foreman/export/bluepill_spec.rb
84
+ - spec/foreman/export/daemon_spec.rb
85
+ - spec/foreman/export/inittab_spec.rb
86
+ - spec/foreman/export/launchd_spec.rb
87
+ - spec/foreman/export/runit_spec.rb
88
+ - spec/foreman/export/supervisord_spec.rb
89
+ - spec/foreman/export/systemd_spec.rb
90
+ - spec/foreman/export/upstart_spec.rb
91
+ - spec/foreman/export_spec.rb
92
+ - spec/foreman/helpers_spec.rb
93
+ - spec/foreman/process_spec.rb
94
+ - spec/foreman/procfile_spec.rb
95
+ - spec/foreman_spec.rb
96
+ - spec/helper_spec.rb
97
+ - spec/resources/Procfile
98
+ - spec/resources/bin/echo
99
+ - spec/resources/bin/env
100
+ - spec/resources/bin/test
101
+ - spec/resources/bin/utf8
102
+ - spec/resources/export/bluepill/app-concurrency.pill
103
+ - spec/resources/export/bluepill/app.pill
104
+ - spec/resources/export/daemon/app-alpha-1.conf
105
+ - spec/resources/export/daemon/app-alpha-2.conf
106
+ - spec/resources/export/daemon/app-alpha.conf
107
+ - spec/resources/export/daemon/app-bravo-1.conf
108
+ - spec/resources/export/daemon/app-bravo.conf
109
+ - spec/resources/export/daemon/app.conf
110
+ - spec/resources/export/inittab/inittab.concurrency
111
+ - spec/resources/export/inittab/inittab.default
112
+ - spec/resources/export/launchd/launchd-a.default
113
+ - spec/resources/export/launchd/launchd-b.default
114
+ - spec/resources/export/launchd/launchd-c.default
115
+ - spec/resources/export/runit/app-alpha-1/log/run
116
+ - spec/resources/export/runit/app-alpha-1/run
117
+ - spec/resources/export/runit/app-alpha-2/log/run
118
+ - spec/resources/export/runit/app-alpha-2/run
119
+ - spec/resources/export/runit/app-bravo-1/log/run
120
+ - spec/resources/export/runit/app-bravo-1/run
121
+ - spec/resources/export/supervisord/app-alpha-1.conf
122
+ - spec/resources/export/supervisord/app-alpha-2.conf
123
+ - spec/resources/export/systemd/concurrency/app-alpha-1.service
124
+ - spec/resources/export/systemd/concurrency/app-alpha-2.service
125
+ - spec/resources/export/systemd/concurrency/app-alpha.target
126
+ - spec/resources/export/systemd/concurrency/app.target
127
+ - spec/resources/export/systemd/standard/app-alpha-1.service
128
+ - spec/resources/export/systemd/standard/app-alpha.target
129
+ - spec/resources/export/systemd/standard/app-bravo-1.service
130
+ - spec/resources/export/systemd/standard/app-bravo.target
131
+ - spec/resources/export/systemd/standard/app.target
132
+ - spec/resources/export/upstart/app-alpha-1.conf
133
+ - spec/resources/export/upstart/app-alpha-2.conf
134
+ - spec/resources/export/upstart/app-alpha.conf
135
+ - spec/resources/export/upstart/app-bravo-1.conf
136
+ - spec/resources/export/upstart/app-bravo.conf
137
+ - spec/resources/export/upstart/app.conf
138
+ - spec/spec_helper.rb
139
+ homepage: https://github.com/aserafin/foreman
140
+ licenses:
141
+ - MIT
142
+ metadata: {}
143
+ post_install_message:
144
+ rdoc_options: []
145
+ require_paths:
146
+ - lib
147
+ required_ruby_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ requirements: []
158
+ rubyforge_project:
159
+ rubygems_version: 2.5.1
160
+ signing_key:
161
+ specification_version: 4
162
+ summary: Process manager for applications with multiple components
163
+ test_files: []
164
+ has_rdoc: