From 1a97c007a0af1cadd2bbcc1486955d50302174b6 Mon Sep 17 00:00:00 2001 From: Seth Chisamore Date: Wed, 20 Jul 2011 09:29:59 -0400 Subject: [PATCH] [COOK-635] Allow configuration of path to chef-client binary in init script --- chef-client/attributes/default.rb | 10 +++++--- chef-client/recipes/service.rb | 25 ++++++++++++++++++- .../templates/arch/rc.d/chef-client.erb | 2 +- .../default/debian/init.d/chef-client.erb | 2 +- .../default/debian/init/chef-client.conf.erb | 4 +-- .../default/redhat/init.d/chef-client.erb | 6 ++--- .../default/redhat/sysconfig/chef-client.erb | 2 +- 7 files changed, 38 insertions(+), 13 deletions(-) diff --git a/chef-client/attributes/default.rb b/chef-client/attributes/default.rb index da7ba3b6c..46ff00fa4 100644 --- a/chef-client/attributes/default.rb +++ b/chef-client/attributes/default.rb @@ -1,9 +1,10 @@ # -# Author:: Joshua Timberman +# Author:: Joshua Timberman () +# Author:: Seth Chisamore () # Cookbook Name:: chef # Attributes:: default # -# Copyright 2008-2010, Opscode, Inc +# Copyright 2008-2011, Opscode, Inc # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -19,8 +20,9 @@ default["chef_client"]["interval"] = "1800" default["chef_client"]["splay"] = "20" -default["chef_client"]["log_dir"] = "/var/log/chef" -default["chef_client"]["conf_dir"] = "/etc/chef" +default["chef_client"]["log_dir"] = "/var/log/chef" +default["chef_client"]["conf_dir"] = "/etc/chef" +default["chef_client"]["bin"] = "/usr/bin/chef-client" default["chef_client"]["server_url"] = "http://localhost:4000" default["chef_client"]["validation_client_name"] = "chef-validator" diff --git a/chef-client/recipes/service.rb b/chef-client/recipes/service.rb index af49ac515..41074cf95 100644 --- a/chef-client/recipes/service.rb +++ b/chef-client/recipes/service.rb @@ -24,8 +24,22 @@ "default" => "root" ) +# COOK-635 account for alternate gem paths +# try to use the bin provided by the node attribute +if ::File.executable?(node["chef_client"]["bin"]) + client_bin = node["chef_client"]["bin"] +# search for the bin in some sane paths +elsif (chef_in_sane_path=Chef::Client::SANE_PATHS.map{|p| p="#{p}/chef-client";p if ::File.executable?(p)}.compact.first) && chef_in_sane_path + client_bin = chef_in_sane_path +# last ditch search for a bin in PATH +elsif (chef_in_path=%x{which chef-client}.chomp) && ::File.executable?(chef_in_path) + client_bin = chef_in_path +else + raise "Could not locate the chef-client bin in any known path. Please set the proper path by overriding node['chef_client']['bin'] in a role." +end + %w{run_path cache_path backup_path log_dir}.each do |key| - directory node['chef_client'][key] do + directory node["chef_client"][key] do recursive true owner "root" group root_group @@ -44,6 +58,9 @@ template "/etc/init.d/chef-client" do source "#{dist_dir}/init.d/chef-client.erb" mode 0755 + variables( + :client_bin => client_bin + ) notifies :restart, "service[chef-client]", :delayed end @@ -74,6 +91,9 @@ template "#{upstart_job_dir}/chef-client#{upstart_job_suffix}" do source "debian/init/chef-client.conf.erb" mode 0644 + variables( + :client_bin => client_bin + ) notifies :restart, "service[chef-client]", :delayed end @@ -87,6 +107,9 @@ template "/etc/rc.d/chef-client" do source "rc.d/chef-client.erb" mode 0755 + variables( + :client_bin => client_bin + ) notifies :restart, "service[chef-client]", :delayed end diff --git a/chef-client/templates/arch/rc.d/chef-client.erb b/chef-client/templates/arch/rc.d/chef-client.erb index 87b265d0c..84f731491 100644 --- a/chef-client/templates/arch/rc.d/chef-client.erb +++ b/chef-client/templates/arch/rc.d/chef-client.erb @@ -15,7 +15,7 @@ # limitations under the License. # -daemon_bin="/usr/bin/chef-client" +daemon_bin="<%= @client_bin %>" daemon_name=$(basename $daemon_bin) PIDF="<%= node["chef_client"]["run_path"] %>/$daemon_name.pid" diff --git a/chef-client/templates/default/debian/init.d/chef-client.erb b/chef-client/templates/default/debian/init.d/chef-client.erb index d0cebd1be..e45c9579c 100644 --- a/chef-client/templates/default/debian/init.d/chef-client.erb +++ b/chef-client/templates/default/debian/init.d/chef-client.erb @@ -15,7 +15,7 @@ # description: starts up chef-client in daemon mode. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin -DAEMON=/usr/bin/chef-client +DAEMON=<%= @client_bin %> NAME=chef-client DESC=chef-client PIDFILE=<%= node["chef_client"]["run_path"] %>/client.pid diff --git a/chef-client/templates/default/debian/init/chef-client.conf.erb b/chef-client/templates/default/debian/init/chef-client.conf.erb index cd2ed4ba7..6b7eac1c4 100644 --- a/chef-client/templates/default/debian/init/chef-client.conf.erb +++ b/chef-client/templates/default/debian/init/chef-client.conf.erb @@ -11,7 +11,7 @@ respawn respawn limit 5 30 pre-start script - test -x /usr/bin/chef-client || { stop; exit 0; } + test -x <%= @client_bin %> || { stop; exit 0; } end script -exec /usr/bin/chef-client -i <%= node["chef_client"]["interval"] %> -L <%= node["chef_client"]["log_dir"] %>/client.log +exec <%= @client_bin %> -i <%= node["chef_client"]["interval"] %> -L <%= node["chef_client"]["log_dir"] %>/client.log diff --git a/chef-client/templates/default/redhat/init.d/chef-client.erb b/chef-client/templates/default/redhat/init.d/chef-client.erb index 083f6048e..9a0d481ea 100644 --- a/chef-client/templates/default/redhat/init.d/chef-client.erb +++ b/chef-client/templates/default/redhat/init.d/chef-client.erb @@ -18,7 +18,7 @@ # Source function library . /etc/init.d/functions -exec="/usr/bin/chef-client" +exec="<%= @client_bin %>" prog="chef-client" [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog @@ -35,7 +35,7 @@ start() { [ -x $exec ] || exit 5 [ -f $config ] || exit 6 echo -n $"Starting $prog: " - daemon chef-client -d -c "$config" -L "$logfile" -P "$pidfile" -i "$interval" -s "$splay" "$options" + daemon $exec -d -c "$config" -L "$logfile" -P "$pidfile" -i "$interval" -s "$splay" "$options" retval=$? echo [ $retval -eq 0 ] && touch $lockfile @@ -44,7 +44,7 @@ start() { stop() { echo -n $"Stopping $prog: " - killproc -p $pidfile chef-client + killproc -p $pidfile $exec retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile diff --git a/chef-client/templates/default/redhat/sysconfig/chef-client.erb b/chef-client/templates/default/redhat/sysconfig/chef-client.erb index 00c4028dd..d6ee493f8 100644 --- a/chef-client/templates/default/redhat/sysconfig/chef-client.erb +++ b/chef-client/templates/default/redhat/sysconfig/chef-client.erb @@ -1,6 +1,6 @@ # Configuration file for the chef-client service -CONFIG=<%= node["chef_client"]["log_dir"] %>/client.rb +CONFIG=<%= node["chef_client"]["conf_dir"] %>/client.rb PIDFILE=<%= node["chef_client"]["run_path"] %>/client.pid #LOCKFILE=/var/lock/subsys/chef-client LOGFILE=<%= node["chef_client"]["log_dir"] %>/client.log