Skip to content

Commit e231e8d

Browse files
zuazoSean OMeara
authored andcommitted
[COOK-3560] Allow the user to configure runit's timeout (-w) and verbose (-v) settings
Signed-off-by: Sean OMeara <[email protected]>
1 parent 584b40c commit e231e8d

File tree

12 files changed

+182
-10
lines changed

12 files changed

+182
-10
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ Many of these parameters are only used in the `:enable` action.
9999
- **service_name** - *Name attribute*. The name of the service. This
100100
will be used in the directory of the managed service in the
101101
`sv_dir` and `service_dir`.
102+
- **sv_timeout** - Override the default `sv` timeout of 7 seconds.
103+
- **sv_verbose** - Whether to enable `sv` verbose mode. Default is
104+
`false`.
102105
- **sv_templates** - If true, the `:enable` action will create the
103106
service directory with the appropriate templates. Default is
104107
`true`. Set this to `false` if the service has a package that

libraries/provider_runit_service.rb

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -172,34 +172,34 @@ def enable_service
172172
end
173173

174174
def disable_service
175-
shell_out("#{new_resource.sv_bin} down #{service_dir_name}")
175+
shell_out("#{new_resource.sv_bin} #{sv_args}down #{service_dir_name}")
176176
Chef::Log.debug("#{new_resource} down")
177177
FileUtils.rm(service_dir_name)
178178
Chef::Log.debug("#{new_resource} service symlink removed")
179179
end
180180

181181
def start_service
182-
shell_out!("#{new_resource.sv_bin} start #{service_dir_name}")
182+
shell_out!("#{new_resource.sv_bin} #{sv_args}start #{service_dir_name}")
183183
end
184184

185185
def stop_service
186-
shell_out!("#{new_resource.sv_bin} stop #{service_dir_name}")
186+
shell_out!("#{new_resource.sv_bin} #{sv_args}stop #{service_dir_name}")
187187
end
188188

189189
def restart_service
190-
shell_out!("#{new_resource.sv_bin} restart #{service_dir_name}")
190+
shell_out!("#{new_resource.sv_bin} #{sv_args}restart #{service_dir_name}")
191191
end
192192

193193
def restart_log_service
194-
shell_out!("#{new_resource.sv_bin} restart #{service_dir_name}/log")
194+
shell_out!("#{new_resource.sv_bin} #{sv_args}restart #{service_dir_name}/log")
195195
end
196196

197197
def reload_service
198-
shell_out!("#{new_resource.sv_bin} force-reload #{service_dir_name}")
198+
shell_out!("#{new_resource.sv_bin} #{sv_args}force-reload #{service_dir_name}")
199199
end
200200

201201
def reload_log_service
202-
shell_out!("#{new_resource.sv_bin} force-reload #{service_dir_name}/log")
202+
shell_out!("#{new_resource.sv_bin} #{sv_args}force-reload #{service_dir_name}/log")
203203
end
204204

205205
#
@@ -241,19 +241,19 @@ def action_usr2
241241
def runit_send_signal(signal, friendly_name=nil)
242242
friendly_name ||= signal
243243
converge_by("send #{friendly_name} to #{new_resource}") do
244-
shell_out!("#{new_resource.sv_bin} #{signal} #{service_dir_name}")
244+
shell_out!("#{new_resource.sv_bin} #{sv_args}#{signal} #{service_dir_name}")
245245
Chef::Log.info("#{new_resource} sent #{friendly_name}")
246246
new_resource.updated_by_last_action(true)
247247
end
248248
end
249249

250250
def running?
251-
cmd = shell_out("#{new_resource.sv_bin} status #{new_resource.service_name}")
251+
cmd = shell_out("#{new_resource.sv_bin} #{sv_args}status #{new_resource.service_name}")
252252
(cmd.stdout =~ /^run:/ && cmd.exitstatus == 0)
253253
end
254254

255255
def log_running?
256-
cmd = shell_out("#{new_resource.sv_bin} status #{new_resource.service_name}/log")
256+
cmd = shell_out("#{new_resource.sv_bin} #{sv_args}status #{new_resource.service_name}/log")
257257
(cmd.stdout =~ /^run:/ && cmd.exitstatus == 0)
258258
end
259259

@@ -269,6 +269,13 @@ def sv_dir_name
269269
::File.join(new_resource.sv_dir, new_resource.service_name)
270270
end
271271

272+
def sv_args
273+
sv_args = ''
274+
sv_args += "-w '#{new_resource.sv_timeout}' " unless new_resource.sv_timeout.nil?
275+
sv_args += '-v ' if new_resource.sv_verbose
276+
sv_args
277+
end
278+
272279
def service_dir_name
273280
::File.join(new_resource.service_dir, new_resource.service_name)
274281
end

libraries/resource_runit_service.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ def initialize(name, run_context=nil)
6161
@control_template_names = {}
6262
@status_command = "#{@sv_bin} status #{@service_dir}"
6363
@sv_templates = true
64+
@sv_timeout = nil
65+
@sv_verbose = false
6466
@log_size = nil
6567
@log_num = nil
6668
@log_min = nil
@@ -99,6 +101,14 @@ def sv_dir(arg=nil)
99101
set_or_return(:sv_dir, arg, :kind_of => [String, FalseClass])
100102
end
101103

104+
def sv_timeout(arg=nil)
105+
set_or_return(:sv_timeout, arg, :kind_of => [Fixnum])
106+
end
107+
108+
def sv_verbose(arg=nil)
109+
set_or_return(:sv_verbose, arg, :kind_of => [TrueClass, FalseClass])
110+
end
111+
102112
def service_dir(arg=nil)
103113
set_or_return(:service_dir, arg, :kind_of => [String])
104114
end

test/cookbooks/runit_test/files/default/tests/minitest/service_test.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@
5454
file('/etc/service/finisher/finish').must_exist
5555
end
5656

57+
it 'creates a service using sv_timeout' do
58+
service('timer').must_be_running
59+
end
60+
61+
it 'creates a service using sv_verbose' do
62+
service('chatterbox').must_be_running
63+
end
64+
5765
it 'creates a service that uses env files' do
5866
regexp = %r{\$PATH:/opt/chef/embedded/bin}
5967
service('env-files').must_be_running

test/cookbooks/runit_test/recipes/service.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,17 @@
8686
# Create a runsvdir service for a normal user
8787
runit_service "runsvdir-floyd"
8888

89+
# Create a service with different timeout
90+
runit_service "timer" do
91+
sv_timeout 4
92+
check true
93+
end
94+
95+
# Create a service with verbose enabled
96+
runit_service "chatterbox" do
97+
sv_verbose true
98+
end
99+
89100
# # Create a service running by a normal user in its runsvdir
90101
runit_service "floyds-app" do
91102
sv_dir "/home/floyd/sv"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/bin/sh
2+
exec svlogd -tt ./main
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/sh
2+
exec 2>&1
3+
sleep 2
4+
exec nc -l 6714
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/sh
2+
3+
lsof -itcp:6713
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/bin/sh
2+
exec svlogd -tt ./main
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/sh
2+
exec 2>&1
3+
sleep 2
4+
exec nc -l 6713

0 commit comments

Comments
 (0)