summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkaustubh-d <kaustubh@clogeny.com>2014-09-10 22:31:35 +0530
committerkaustubh-d <kaustubh@clogeny.com>2014-09-10 22:31:35 +0530
commit1aa9bb62b6b8cf8ced48167e35e01898702e7f00 (patch)
tree04b914bc3b3c7d71ff57ca275ff3ff00935873ec
parent549f629d1b23010ebd9dd811babca7f174fd6af1 (diff)
downloadchef-1aa9bb62b6b8cf8ced48167e35e01898702e7f00.tar.gz
aix service provider for init style
-rw-r--r--lib/chef/provider/service/aixinit.rb117
-rw-r--r--lib/chef/providers.rb1
2 files changed, 118 insertions, 0 deletions
diff --git a/lib/chef/provider/service/aixinit.rb b/lib/chef/provider/service/aixinit.rb
new file mode 100644
index 0000000000..365e82b000
--- /dev/null
+++ b/lib/chef/provider/service/aixinit.rb
@@ -0,0 +1,117 @@
+#
+# Author:: kaustubh (<kaustubh@clogeny.com>)
+# Copyright:: Copyright (c) 2014 Chef Software, 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/service/init'
+
+class Chef
+ class Provider
+ class Service
+ class AixInit < Chef::Provider::Service::Init
+ RC_D_SCRIPT_NAME = /\/etc\/rc.d\/rc2.d\/([SK])(\d\d)/i
+
+ def initialize(new_resource, run_context)
+ super
+ @init_command = "/etc/rc.d/init.d/#{@new_resource.service_name}"
+ end
+
+ def load_current_resource
+ super
+ @priority_success = true
+ @rcd_status = nil
+
+ set_current_resource_attributes
+ @current_resource
+ end
+
+ def action_enable
+ if @new_resource.priority.nil?
+ priority_ok = true
+ else
+ priority_ok = @current_resource.priority == @new_resource.priority
+ end
+ if @current_resource.enabled and priority_ok
+ Chef::Log.debug("#{@new_resource} already enabled - nothing to do")
+ else
+ converge_by("enable service #{@new_resource}") do
+ enable_service
+ Chef::Log.info("#{@new_resource} enabled")
+ end
+ end
+ load_new_resource_state
+ @new_resource.enabled(true)
+ end
+
+ def enable_service
+ Dir.glob("/etc/rc.d/rc2.d/[SK][0-9][0-9]#{@new_resource.service_name}*").each { |f| File.delete(f)}
+
+ if @new_resource.priority.is_a? Integer
+ create_symlink(2,'S',@new_resource.priority)
+
+ elsif @new_resource.priority.is_a? Hash
+ @new_resource.priority.each do |level,o|
+ create_symlink(level,(o[0] == :start ? 'S' : 'K'),o[1])
+ end
+ else
+ create_symlink(2,'S',20)
+ end
+ end
+
+ def disable_service
+ Dir.glob("/etc/rc.d/rc2.d/[SK][0-9][0-9]#{@new_resource.service_name}*").each { |f| File.delete(f) }
+
+ if @new_resource.priority.is_a? Integer
+ create_symlink(2, 'K',100 - @new_resource.priority)
+ elsif @new_resource.priority.is_a? Hash
+ @new_resource.priority.each do |level,o|
+ create_symlink(level, 'K', 100 - o[1]) if o[0] == :stop
+ end
+ else
+ create_symlink(2, 'K', 20)
+ end
+ end
+
+ def create_symlink(run_level, status, priority)
+ File.symlink("/etc/rc.d/init.d/#{@new_resource.service_name}", "/etc/rc.d/rc#{run_level}.d/#{status}#{priority}#{@new_resource.service_name}")
+ end
+
+ def set_current_resource_attributes
+ # assuming run level 2 for aix
+ is_enabled = false
+ files = Dir.glob("/etc/rc.d/rc2.d/[SK][0-9][0-9]#{@new_resource.service_name}*")
+
+ priority = {}
+
+ files.each do |file|
+ if RC_D_SCRIPT_NAME =~ file
+ priority[2] = [($1 == "S" ? :start : :stop), $2]
+ if $1 == "S"
+ is_enabled = true
+ end
+ end
+ end
+
+ if is_enabled && files.length == 1
+ priority = priority[2][:start]
+ end
+ @current_resource.enabled(is_enabled)
+ @current_resource.priority(priority)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/chef/providers.rb b/lib/chef/providers.rb
index 3c9e94e6f7..e63ef94856 100644
--- a/lib/chef/providers.rb
+++ b/lib/chef/providers.rb
@@ -85,6 +85,7 @@ require 'chef/provider/service/upstart'
require 'chef/provider/service/windows'
require 'chef/provider/service/solaris'
require 'chef/provider/service/macosx'
+require 'chef/provider/service/aixinit'
require 'chef/provider/user/dscl'
require 'chef/provider/user/pw'