summaryrefslogtreecommitdiff
path: root/lib/chef/provider/cron
diff options
context:
space:
mode:
authorkaustubh-d <kausubh@clogeny.com>2013-07-22 01:27:05 -0700
committeradamedx <adamed@opscode.com>2013-08-04 08:27:06 -0700
commitcc0f7bbfc0d293098e97b7cb26f5c5d762ed0304 (patch)
tree86d8766f50747befcad8ff0e368c5df2dd6c180d /lib/chef/provider/cron
parentca583b3ea04400dfcb9bccff6ed943ffa26fdf7c (diff)
downloadchef-cc0f7bbfc0d293098e97b7cb26f5c5d762ed0304.tar.gz
abstract cron functionality for unix.
Diffstat (limited to 'lib/chef/provider/cron')
-rw-r--r--lib/chef/provider/cron/aix.rb48
-rw-r--r--lib/chef/provider/cron/solaris.rb46
-rw-r--r--lib/chef/provider/cron/unix.rb71
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