diff options
author | kaustubh-d <kausubh@clogeny.com> | 2013-07-22 01:27:05 -0700 |
---|---|---|
committer | adamedx <adamed@opscode.com> | 2013-08-04 08:27:06 -0700 |
commit | cc0f7bbfc0d293098e97b7cb26f5c5d762ed0304 (patch) | |
tree | 86d8766f50747befcad8ff0e368c5df2dd6c180d /lib/chef/provider/cron | |
parent | ca583b3ea04400dfcb9bccff6ed943ffa26fdf7c (diff) | |
download | chef-cc0f7bbfc0d293098e97b7cb26f5c5d762ed0304.tar.gz |
abstract cron functionality for unix.
Diffstat (limited to 'lib/chef/provider/cron')
-rw-r--r-- | lib/chef/provider/cron/aix.rb | 48 | ||||
-rw-r--r-- | lib/chef/provider/cron/solaris.rb | 46 | ||||
-rw-r--r-- | lib/chef/provider/cron/unix.rb | 71 |
3 files changed, 125 insertions, 40 deletions
diff --git a/lib/chef/provider/cron/aix.rb b/lib/chef/provider/cron/aix.rb new file mode 100644 index 0000000000..473700bf2f --- /dev/null +++ b/lib/chef/provider/cron/aix.rb @@ -0,0 +1,48 @@ +# +# Author:: Kaustubh Deorukhkar (<kaustubh@clogeny.com>) +# Copyright:: Copyright (c) 2013 Opscode, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require "chef/provider/cron/unix" + +class Chef + class Provider + class Cron + class Aix < Chef::Provider::Cron::Unix + + private + + # For AIX we ignore env vars/[ :mailto, :path, :shell, :home ] + def get_crontab_entry + if env_vars_are_set? + raise Chef::Exceptions::Cron, "Aix cron entry does not support environment variables. Please set them in script and use script in cron." + end + + newcron = "" + newcron << "# Chef Name: #{new_resource.name}\n" + newcron << "#{@new_resource.minute} #{@new_resource.hour} #{@new_resource.day} #{@new_resource.month} #{@new_resource.weekday}" + + newcron << " #{@new_resource.command}\n" + newcron + end + + def env_vars_are_set? + @new_resource.environment.length > 0 || !@new_resource.mailto.nil? || !@new_resource.path.nil? || !@new_resource.shell.nil? || !@new_resource.home.nil? + end + end + end + end +end diff --git a/lib/chef/provider/cron/solaris.rb b/lib/chef/provider/cron/solaris.rb index e0811ba0ac..6861820676 100644 --- a/lib/chef/provider/cron/solaris.rb +++ b/lib/chef/provider/cron/solaris.rb @@ -1,15 +1,13 @@ # -# Author:: Bryan McLellan (btm@loftninjas.org) -# Author:: Toomas Pelberg (toomasp@gmx.net) -# Copyright:: Copyright (c) 2009 Bryan McLellan -# Copyright:: Copyright (c) 2010 Toomas Pelberg +# Author:: Kaustubh Deorukhkar (<kaustubh@clogeny.com>) +# Copyright:: Copyright (c) 2013 Opscode, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, @@ -18,39 +16,7 @@ # limitations under the License. # -require 'chef/log' -require 'chef/provider' +require "chef/provider/cron/unix" -class Chef - class Provider - class Cron - class Solaris < Chef::Provider::Cron - - private - - def read_crontab - crontab = nil - status = popen4("crontab -l #{@new_resource.user}") do |pid, stdin, stdout, stderr| - crontab = stdout.read - end - if status.exitstatus > 1 - raise Chef::Exceptions::Cron, "Error determining state of #{@new_resource.name}, exit: #{status.exitstatus}" - end - crontab - end - - def write_crontab(crontab) - tempcron = Tempfile.new("chef-cron") - tempcron << crontab - tempcron.flush - tempcron.chmod(0644) - status = run_command(:command => "/usr/bin/crontab #{tempcron.path}",:user => @new_resource.user) - tempcron.close! - if status.exitstatus > 0 - raise Chef::Exceptions::Cron, "Error updating state of #{@new_resource.name}, exit: #{status.exitstatus}" - end - end - end - end - end -end +# Just to create an alias so 'Chef::Provider::Cron::Solaris' is exposed and accessible to existing consumers of class. +Chef::Provider::Cron::Solaris = Chef::Provider::Cron::Unix
\ No newline at end of file diff --git a/lib/chef/provider/cron/unix.rb b/lib/chef/provider/cron/unix.rb new file mode 100644 index 0000000000..017a9f12ca --- /dev/null +++ b/lib/chef/provider/cron/unix.rb @@ -0,0 +1,71 @@ +# +# Author:: Bryan McLellan (btm@loftninjas.org) +# Author:: Toomas Pelberg (toomasp@gmx.net) +# Copyright:: Copyright (c) 2009 Bryan McLellan +# Copyright:: Copyright (c) 2010 Toomas Pelberg +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require 'chef/log' +require 'chef/provider' + +class Chef + class Provider + class Cron + class Unix < Chef::Provider::Cron + + private + + def read_crontab + crontab = nil + status = popen4("crontab -l #{@new_resource.user}") do |pid, stdin, stdout, stderr| + crontab = stdout.read + end + if status.exitstatus > 1 + raise Chef::Exceptions::Cron, "Error determining state of #{@new_resource.name}, exit: #{status.exitstatus}" + end + crontab + end + + def write_crontab(crontab) + tempcron = Tempfile.new("chef-cron") + tempcron << crontab + tempcron.flush + tempcron.chmod(0644) + exit_status = 0 + error_message = "" + begin + status = run_command(:command => "/usr/bin/crontab #{tempcron.path}",:user => @new_resource.user) + exit_status = status.exitstatus + rescue Chef::Exceptions::Exec => e + Chef::Log.debug(e.message) + exit_status = 1 + error_message = e.message + rescue ArgumentError => e + # usually raised on invalid user. + Chef::Log.debug(e.message) + exit_status = 1 + error_message = e.message + end + tempcron.close! + if exit_status > 0 + raise Chef::Exceptions::Cron, "Error updating state of #{@new_resource.name}, exit: #{exit_status}, message: #{error_message}" + end + end + + end + end + end +end |