diff --git a/libraries/consul_service.rb b/libraries/consul_service.rb index a7608e3f..0da2b834 100644 --- a/libraries/consul_service.rb +++ b/libraries/consul_service.rb @@ -90,6 +90,7 @@ def service_options(service) service.restart_on_update(false) service.options(:systemd, template: 'consul:systemd.service.erb') service.options(:sysvinit, template: 'consul:sysvinit.service.erb') + service.options(:upstart, template: 'consul:upstart.service.erb', executable: new_resource.program) if node.platform_family?('rhel') && node.platform_version.to_i == 6 service.provider(:sysvinit) diff --git a/templates/default/upstart.service.erb b/templates/default/upstart.service.erb new file mode 100644 index 00000000..8a9cb382 --- /dev/null +++ b/templates/default/upstart.service.erb @@ -0,0 +1,52 @@ +# <%= @name %> generated by poise-service for <%= @new_resource.to_s %> + +description "<%= @name %>" + +start on runlevel [2345] +stop on runlevel [!2345] + +respawn +respawn limit 10 5 +umask 022 +chdir <%= @directory %> +<%- @environment.each do |key, val| -%> +env <%= key %>="<%= val %>" +<%- end -%> +<%- if @upstart_features[:setuid] -%> +setuid <%= @user %> +<%- end -%> +<%- if @upstart_features[:kill_signal] -%> +kill signal <%= @stop_signal %> +<%- end -%> +<%- if @upstart_features[:reload_signal] -%> +reload signal <%= @reload_signal %> +<%- end -%> + +<%- if @upstart_features[:setuid] -%> +exec <%= @command %> +<%- else -%> +script +exec /opt/chef/embedded/bin/ruby <) +if Process.euid != ent.uid || Process.egid != ent.gid + Process.initgroups(ent.name, ent.gid) + Process::GID.change_privilege(ent.gid) if Process.egid != ent.gid + Process::UID.change_privilege(ent.uid) if Process.euid != ent.uid +end +ENV["HOME"] = Dir.home(<%= @user.inspect %>) rescue nil +exec(*<%= Shellwords.split(@command).inspect %>) +EOH +end script +<%- end -%> +<%- if !@upstart_features[:kill_signal] && @stop_signal != 'TERM' -%> +pre-stop script + PID=`initctl status <%= @name %> | sed 's/^.*process \([0-9]*\)$/\1/'` + if [ -n "$PID" ]; then + kill -<%= @stop_signal %> "$PID" + fi +end script +<%- end -%> +post-start script + while ! <%= @options[:executable] %> info ; sleep 1; done +end script diff --git a/test/integration/default/serverspec/default_spec.rb b/test/integration/default/serverspec/default_spec.rb index a55bf297..6ccdbb04 100644 --- a/test/integration/default/serverspec/default_spec.rb +++ b/test/integration/default/serverspec/default_spec.rb @@ -1,6 +1,9 @@ require 'spec_helper' -describe file('/opt/consul/0.6.4/consul') do +consul_version = '0.6.4' +consul_executable = "/opt/consul/#{consul_version}/consul" + +describe file(consul_executable) do it { should be_file } it { should be_executable } end @@ -61,3 +64,15 @@ it { should be_mode 755 } end + +if os[:family] == 'ubuntu' + describe file('/etc/init/consul.conf' ) do + its(:content) do + should include(<<-EOT) +post-start script + while ! #{consul_executable} info ; sleep 1; done +end script + EOT + end + end +end \ No newline at end of file