From 88314dffd3fb1b590bcf69a078af8120fa6f00e7 Mon Sep 17 00:00:00 2001 From: "Jason J. W. Williams" Date: Fri, 29 Jul 2011 15:28:17 -0600 Subject: [PATCH] Added Solaris service-installation support for chef-client cookbook. --- chef-client/attributes/default.rb | 5 + chef-client/recipes/service.rb | 29 +++++ .../templates/default/solaris/chef-client.erb | 78 +++++++++++++ .../default/solaris/manifest.xml.erb | 103 ++++++++++++++++++ 4 files changed, 215 insertions(+) create mode 100644 chef-client/templates/default/solaris/chef-client.erb create mode 100644 chef-client/templates/default/solaris/manifest.xml.erb diff --git a/chef-client/attributes/default.rb b/chef-client/attributes/default.rb index 46ff00fa4..ca4e141c5 100644 --- a/chef-client/attributes/default.rb +++ b/chef-client/attributes/default.rb @@ -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" diff --git a/chef-client/recipes/service.rb b/chef-client/recipes/service.rb index 41074cf95..37b2d48bc 100644 --- a/chef-client/recipes/service.rb +++ b/chef-client/recipes/service.rb @@ -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"] diff --git a/chef-client/templates/default/solaris/chef-client.erb b/chef-client/templates/default/solaris/chef-client.erb new file mode 100644 index 000000000..9f686694f --- /dev/null +++ b/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 \ No newline at end of file diff --git a/chef-client/templates/default/solaris/manifest.xml.erb b/chef-client/templates/default/solaris/manifest.xml.erb new file mode 100644 index 000000000..02e5a1346 --- /dev/null +++ b/chef-client/templates/default/solaris/manifest.xml.erb @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file