Skip to content

Commit

Permalink
Added Solaris service-installation support for chef-client cookbook.
Browse files Browse the repository at this point in the history
  • Loading branch information
williamsjj authored and jtimberman committed Nov 9, 2011
1 parent 2893f25 commit 88314df
Show file tree
Hide file tree
Showing 4 changed files with 215 additions and 0 deletions.
5 changes: 5 additions & 0 deletions chef-client/attributes/default.rb
Expand Up @@ -42,6 +42,11 @@
default["chef_client"]["run_path"] = "/var/run"
default["chef_client"]["cache_path"] = "/var/chef/cache"
default["chef_client"]["backup_path"] = "/var/chef/backup"
when "openindiana","opensolaris","nexentacore","solaris2"
default["chef_client"]["init_style"] = "smf"
default["chef_client"]["run_path"] = "/var/run/chef"
default["chef_client"]["cache_path"] = "/var/chef/cache"
default["chef_client"]["backup_path"] = "/var/chef/backup"
else
default["chef_client"]["init_style"] = "none"
default["chef_client"]["run_path"] = "/var/run"
Expand Down
29 changes: 29 additions & 0 deletions chef-client/recipes/service.rb
Expand Up @@ -75,6 +75,35 @@
action :enable
end

when "smf"
local_path = ::File.join(Chef::Config[:file_cache_path], "/")
template "/lib/svc/method/chef-client" do
source "solaris/chef-client.erb"
owner "root"
group "root"
mode "0777"
notifies :restart, "service[chef-client]"
end

template (local_path + "chef-client.xml") do
source "solaris/manifest.xml.erb"
owner "root"
group "root"
mode "0644"
notifies :run, "execute[load chef-client manifest]", :immediately
end

execute "load chef-client manifest" do
action :nothing
command "svccfg import #{local_path}chef-client.xml"
notifies :restart, "service[chef-client]"
end

service "chef-client" do
action [:enable, :start]
provider Chef::Provider::Service::Solaris
end

when "upstart"

case node["platform"]
Expand Down
78 changes: 78 additions & 0 deletions chef-client/templates/default/solaris/chef-client.erb
@@ -0,0 +1,78 @@
#!/bin/bash
####################################################################
# COOKBOOK NAME: chef-client
# RECIPE: default
# DESCRIPTION: chef-client start/stop script for Solaris SMF
#
####################################################################
# (C)2011 DigiTar, All Rights Reserved
# Distributed under the BSD License
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of DigiTar nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#
####################################################################

. /lib/svc/share/smf_include.sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/chef-client
NAME=chef-client
DESC=chef-client
PIDFILE=<%= node["chef_client"]["run_path"] %>/client.pid
LOGFILE=<%= node["chef_client"]["log_dir"] %>client.log
CONFIG=<%= node["chef_client"]["conf_dir"] %>client.rb
INTERVAL=<%= node["chef_client"]["interval"] %>
SPLAY=<%= node["chef_client"]["splay"] %>

DAEMON_OPTS="-d -P $PIDFILE -L $LOGFILE -c $CONFIG -i $INTERVAL -s $SPLAY"

if [ ! -d <%= node["chef_client"]["run_path"] %> ]; then
mkdir <%= node["chef_client"]["run_path"] %>
fi

case "$1" in
'start')
$DAEMON $DAEMON_OPTS
;;

'stop')
kill `cat $PIDFILE`
;;

'refresh')
kill -1 `cat $PIDFILE`
;;

'restart')
kill `cat $PIDFILE`
$DAEMON $DAEMON_OPTS
;;

*)
echo $"Usage: $0 (start|stop|restart|refresh)"
exit 1
;;

esac
exit $SMF_EXIT_OK
103 changes: 103 additions & 0 deletions chef-client/templates/default/solaris/manifest.xml.erb
@@ -0,0 +1,103 @@
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">

<service_bundle type='manifest' name='chef-client'>

<service
name='application/management/chef-client'
type='service'
version='1'>

<create_default_instance enabled='false' />

<single_instance />

<dependency
name='milestone'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/milestone/sysconfig' />
</dependency>

<!-- Need / & /usr filesystems mounted, /var mounted read/write -->
<dependency
name='fs-local'
type='service'
grouping='require_all'
restart_on='none'>
<service_fmri value='svc:/system/filesystem/local' />
</dependency>

<dependency
name='name-services'
grouping='optional_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/milestone/name-services' />
</dependency>

<dependency
name='network'
grouping='require_all'
restart_on='restart'
type='service'>
<service_fmri value='svc:/milestone/network' />
</dependency>

<dependency
name='config-file'
grouping='require_all'
restart_on='refresh'
type='path'>
<service_fmri
value='file://localhost/etc/chef/client.rb' />
</dependency>

<exec_method
type='method'
name='start'
exec='/lib/svc/method/chef-client %m'
timeout_seconds='60'>
</exec_method>

<exec_method
type='method'
name='stop'
exec='/lib/svc/method/chef-client %m'
timeout_seconds='60'>
</exec_method>

<exec_method
type='method'
name='refresh'
exec='/lib/svc/method/chef-client %m'
timeout_seconds='60'>
</exec_method>

<exec_method
type='method'
name='restart'
exec='/lib/svc/method/chef-client %m'
timeout_seconds='60'>
</exec_method>

<property_group name='general' type='framework'>
<!-- to start/stop chef-client -->
<propval name='action_authorization' type='astring'
value='solaris.smf.manage.chef-client' />

</property_group>

<template>
<common_name>
<loctext xml:lang='C'>
chef-client Chef Client
</loctext>
</common_name>

</template>

</service>

</service_bundle>

0 comments on commit 88314df

Please sign in to comment.