From 1aa9bb62b6b8cf8ced48167e35e01898702e7f00 Mon Sep 17 00:00:00 2001 From: kaustubh-d Date: Wed, 10 Sep 2014 22:31:35 +0530 Subject: aix service provider for init style --- lib/chef/provider/service/aixinit.rb | 117 +++++++++++++++++++++++++++++++++++ lib/chef/providers.rb | 1 + 2 files changed, 118 insertions(+) create mode 100644 lib/chef/provider/service/aixinit.rb (limited to 'lib/chef') 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 () +# 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' -- cgit v1.2.1