summaryrefslogtreecommitdiff
path: root/lib/chef/provider
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2014-10-24 10:45:43 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2014-10-24 10:45:43 -0700
commit97aaf5bbcdfd0810722b123bdc67e883a7ca8077 (patch)
tree25663bf1d4f53664b96844251091b51273ad84c7 /lib/chef/provider
parentcb1bcb1f08816f551f96e713624718f58da3c9b3 (diff)
downloadchef-97aaf5bbcdfd0810722b123bdc67e883a7ca8077.tar.gz
Chef-12 RC Provider Resolver
makes resource and provider class resolution more dynamic. begins deprecation of Chef::Platform static mapping.
Diffstat (limited to 'lib/chef/provider')
-rw-r--r--lib/chef/provider/breakpoint.rb2
-rw-r--r--lib/chef/provider/cookbook_file.rb2
-rw-r--r--lib/chef/provider/deploy/revision.rb2
-rw-r--r--lib/chef/provider/deploy/timestamped.rb2
-rw-r--r--lib/chef/provider/directory.rb2
-rw-r--r--lib/chef/provider/dsc_script.rb3
-rw-r--r--lib/chef/provider/erl_call.rb2
-rw-r--r--lib/chef/provider/execute.rb2
-rw-r--r--lib/chef/provider/file.rb2
-rw-r--r--lib/chef/provider/git.rb2
-rw-r--r--lib/chef/provider/group/pw.rb3
-rw-r--r--lib/chef/provider/http_request.rb2
-rw-r--r--lib/chef/provider/link.rb2
-rw-r--r--lib/chef/provider/log.rb2
-rw-r--r--lib/chef/provider/package/aix.rb2
-rw-r--r--lib/chef/provider/package/apt.rb2
-rw-r--r--lib/chef/provider/package/dpkg.rb2
-rw-r--r--lib/chef/provider/package/easy_install.rb2
-rw-r--r--lib/chef/provider/package/freebsd.rb154
-rw-r--r--lib/chef/provider/package/homebrew.rb4
-rw-r--r--lib/chef/provider/package/ips.rb2
-rw-r--r--lib/chef/provider/package/macports.rb3
-rw-r--r--lib/chef/provider/package/pacman.rb2
-rw-r--r--lib/chef/provider/package/paludis.rb4
-rw-r--r--lib/chef/provider/package/rpm.rb2
-rw-r--r--lib/chef/provider/package/rubygems.rb3
-rw-r--r--lib/chef/provider/package/smartos.rb2
-rw-r--r--lib/chef/provider/package/solaris.rb2
-rw-r--r--lib/chef/provider/package/yum.rb2
-rw-r--r--lib/chef/provider/remote_directory.rb4
-rw-r--r--lib/chef/provider/route.rb2
-rw-r--r--lib/chef/provider/ruby_block.rb2
-rw-r--r--lib/chef/provider/script.rb6
-rw-r--r--lib/chef/provider/service/arch.rb6
-rw-r--r--lib/chef/provider/service/debian.rb64
-rw-r--r--lib/chef/provider/service/freebsd.rb5
-rw-r--r--lib/chef/provider/service/gentoo.rb3
-rw-r--r--lib/chef/provider/service/init.rb2
-rw-r--r--lib/chef/provider/service/insserv.rb22
-rw-r--r--lib/chef/provider/service/invokercd.rb6
-rw-r--r--lib/chef/provider/service/macosx.rb2
-rw-r--r--lib/chef/provider/service/redhat.rb12
-rw-r--r--lib/chef/provider/service/simple.rb2
-rw-r--r--lib/chef/provider/service/solaris.rb2
-rw-r--r--lib/chef/provider/service/systemd.rb7
-rw-r--r--lib/chef/provider/service/upstart.rb7
-rw-r--r--lib/chef/provider/service/windows.rb4
-rw-r--r--lib/chef/provider/subversion.rb2
-rw-r--r--lib/chef/provider/template.rb1
-rw-r--r--lib/chef/provider/user/pw.rb3
-rw-r--r--lib/chef/provider/whyrun_safe_ruby_block.rb2
51 files changed, 180 insertions, 204 deletions
diff --git a/lib/chef/provider/breakpoint.rb b/lib/chef/provider/breakpoint.rb
index 224e2758eb..663d558f66 100644
--- a/lib/chef/provider/breakpoint.rb
+++ b/lib/chef/provider/breakpoint.rb
@@ -20,6 +20,8 @@ class Chef
class Provider
class Breakpoint < Chef::Provider
+ provides :breakpoint
+
def load_current_resource
end
diff --git a/lib/chef/provider/cookbook_file.rb b/lib/chef/provider/cookbook_file.rb
index 26d6ebf1d9..b501a9b41d 100644
--- a/lib/chef/provider/cookbook_file.rb
+++ b/lib/chef/provider/cookbook_file.rb
@@ -24,6 +24,8 @@ class Chef
class Provider
class CookbookFile < Chef::Provider::File
+ provides :cookbook_file
+
extend Chef::Deprecation::Warnings
include Chef::Deprecation::Provider::CookbookFile
add_deprecation_warnings_for(Chef::Deprecation::Provider::CookbookFile.instance_methods)
diff --git a/lib/chef/provider/deploy/revision.rb b/lib/chef/provider/deploy/revision.rb
index c98c1e5c75..62aa0e87f6 100644
--- a/lib/chef/provider/deploy/revision.rb
+++ b/lib/chef/provider/deploy/revision.rb
@@ -27,6 +27,8 @@ class Chef
class Provider
class Deploy
class Revision < Chef::Provider::Deploy
+ provides :deploy_revision
+ provides :deploy_branch
def all_releases
sorted_releases
diff --git a/lib/chef/provider/deploy/timestamped.rb b/lib/chef/provider/deploy/timestamped.rb
index ce921161e0..ba3f6683f0 100644
--- a/lib/chef/provider/deploy/timestamped.rb
+++ b/lib/chef/provider/deploy/timestamped.rb
@@ -20,6 +20,8 @@ class Chef
class Provider
class Deploy
class Timestamped < Chef::Provider::Deploy
+ provides :timestamped_deploy
+ provides :deploy
protected
diff --git a/lib/chef/provider/directory.rb b/lib/chef/provider/directory.rb
index 067737b9d4..c9c3d466b9 100644
--- a/lib/chef/provider/directory.rb
+++ b/lib/chef/provider/directory.rb
@@ -27,6 +27,8 @@ class Chef
class Provider
class Directory < Chef::Provider::File
+ provides :directory
+
def whyrun_supported?
true
end
diff --git a/lib/chef/provider/dsc_script.rb b/lib/chef/provider/dsc_script.rb
index a70f4b5048..5db50e74b3 100644
--- a/lib/chef/provider/dsc_script.rb
+++ b/lib/chef/provider/dsc_script.rb
@@ -24,6 +24,9 @@ require 'chef/util/path_helper'
class Chef
class Provider
class DscScript < Chef::Provider
+
+ provides :dsc_script, os: "windows"
+
def initialize(dsc_resource, run_context)
super(dsc_resource, run_context)
@dsc_resource = dsc_resource
diff --git a/lib/chef/provider/erl_call.rb b/lib/chef/provider/erl_call.rb
index cdd494a243..f5855bcce6 100644
--- a/lib/chef/provider/erl_call.rb
+++ b/lib/chef/provider/erl_call.rb
@@ -25,6 +25,8 @@ class Chef
class ErlCall < Chef::Provider
include Chef::Mixin::Command
+ provides :erl_call
+
def initialize(node, new_resource)
super(node, new_resource)
end
diff --git a/lib/chef/provider/execute.rb b/lib/chef/provider/execute.rb
index 54632c0684..48b2a344d1 100644
--- a/lib/chef/provider/execute.rb
+++ b/lib/chef/provider/execute.rb
@@ -23,6 +23,8 @@ class Chef
class Provider
class Execute < Chef::Provider
+ provides :execute
+
def load_current_resource
true
end
diff --git a/lib/chef/provider/file.rb b/lib/chef/provider/file.rb
index 256248f240..a9390cc45c 100644
--- a/lib/chef/provider/file.rb
+++ b/lib/chef/provider/file.rb
@@ -54,6 +54,8 @@ class Chef
include Chef::Deprecation::Provider::File
add_deprecation_warnings_for(Chef::Deprecation::Provider::File.instance_methods)
+ provides :file
+
attr_reader :deployment_strategy
attr_accessor :needs_creating
diff --git a/lib/chef/provider/git.rb b/lib/chef/provider/git.rb
index 2ef119e839..8418f22933 100644
--- a/lib/chef/provider/git.rb
+++ b/lib/chef/provider/git.rb
@@ -25,6 +25,8 @@ class Chef
class Provider
class Git < Chef::Provider
+ provides :git
+
def whyrun_supported?
true
end
diff --git a/lib/chef/provider/group/pw.rb b/lib/chef/provider/group/pw.rb
index 79a4160807..c39c20da67 100644
--- a/lib/chef/provider/group/pw.rb
+++ b/lib/chef/provider/group/pw.rb
@@ -21,9 +21,6 @@ class Chef
class Group
class Pw < Chef::Provider::Group
- implements :group,
- :on_platforms => :freebsd
-
def load_current_resource
super
end
diff --git a/lib/chef/provider/http_request.rb b/lib/chef/provider/http_request.rb
index ba54b10195..61aff434ed 100644
--- a/lib/chef/provider/http_request.rb
+++ b/lib/chef/provider/http_request.rb
@@ -23,6 +23,8 @@ class Chef
class Provider
class HttpRequest < Chef::Provider
+ provides :http_request
+
attr_accessor :http
def whyrun_supported?
diff --git a/lib/chef/provider/link.rb b/lib/chef/provider/link.rb
index 639dc4f3ff..417d6a21b0 100644
--- a/lib/chef/provider/link.rb
+++ b/lib/chef/provider/link.rb
@@ -28,6 +28,8 @@ class Chef
class Provider
class Link < Chef::Provider
+ provides :link
+
include Chef::Mixin::EnforceOwnershipAndPermissions
include Chef::Mixin::FileClass
diff --git a/lib/chef/provider/log.rb b/lib/chef/provider/log.rb
index 9379ceeefa..40eaf0aa28 100644
--- a/lib/chef/provider/log.rb
+++ b/lib/chef/provider/log.rb
@@ -25,6 +25,8 @@ class Chef
# Chef log provider, allows logging to chef's logs from recipes
class ChefLog < Chef::Provider
+ provides :log
+
def whyrun_supported?
true
end
diff --git a/lib/chef/provider/package/aix.rb b/lib/chef/provider/package/aix.rb
index da3e6d1684..88de4679ba 100644
--- a/lib/chef/provider/package/aix.rb
+++ b/lib/chef/provider/package/aix.rb
@@ -26,6 +26,8 @@ class Chef
class Package
class Aix < Chef::Provider::Package
+ provides :bff_package, os: "aix"
+
include Chef::Mixin::GetSourceFromPackage
def define_resource_requirements
diff --git a/lib/chef/provider/package/apt.rb b/lib/chef/provider/package/apt.rb
index 0d91d0d1f0..eb2c038eaa 100644
--- a/lib/chef/provider/package/apt.rb
+++ b/lib/chef/provider/package/apt.rb
@@ -25,6 +25,8 @@ class Chef
class Package
class Apt < Chef::Provider::Package
+ provides :apt_package, os: "linux"
+
attr_accessor :is_virtual_package
def load_current_resource
diff --git a/lib/chef/provider/package/dpkg.rb b/lib/chef/provider/package/dpkg.rb
index a1f1c797b1..3a9cecc660 100644
--- a/lib/chef/provider/package/dpkg.rb
+++ b/lib/chef/provider/package/dpkg.rb
@@ -30,6 +30,8 @@ class Chef
DPKG_INSTALLED = /^Status: install ok installed/
DPKG_VERSION = /^Version: (.+)$/
+ provides :dpkg_package, os: "linux"
+
include Chef::Mixin::GetSourceFromPackage
def define_resource_requirements
diff --git a/lib/chef/provider/package/easy_install.rb b/lib/chef/provider/package/easy_install.rb
index 2af8a72e61..90727b738d 100644
--- a/lib/chef/provider/package/easy_install.rb
+++ b/lib/chef/provider/package/easy_install.rb
@@ -25,6 +25,8 @@ class Chef
class Package
class EasyInstall < Chef::Provider::Package
+ provides :easy_install_package
+
def install_check(name)
check = false
diff --git a/lib/chef/provider/package/freebsd.rb b/lib/chef/provider/package/freebsd.rb
deleted file mode 100644
index f5ec0cec47..0000000000
--- a/lib/chef/provider/package/freebsd.rb
+++ /dev/null
@@ -1,154 +0,0 @@
-#
-# Authors:: Bryan McLellan (btm@loftninjas.org)
-# Matthew Landauer (matthew@openaustralia.org)
-# Copyright:: Copyright (c) 2009 Bryan McLellan, Matthew Landauer
-# 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/package'
-require 'chef/mixin/shell_out'
-require 'chef/resource/package'
-require 'chef/mixin/get_source_from_package'
-
-class Chef
- class Provider
- class Package
- class Freebsd < Chef::Provider::Package
- include Chef::Mixin::ShellOut
-
- include Chef::Mixin::GetSourceFromPackage
-
- implements :package,
- :freebsd_package,
- :on_platforms => :freebsd
-
-
- def initialize(*args)
- super
- @current_resource = Chef::Resource::Package.new(@new_resource.name)
- end
-
- def current_installed_version
- pkg_info = shell_out!("pkg_info -E \"#{package_name}*\"", :env => nil, :returns => [0,1])
- pkg_info.stdout[/^#{Regexp.escape(package_name)}-(.+)/, 1]
- end
-
- def port_path
- case @new_resource.package_name
- # When the package name starts with a '/' treat it as the full path to the ports directory
- when /^\//
- @new_resource.package_name
- # Otherwise if the package name contains a '/' not at the start (like 'www/wordpress') treat as a relative
- # path from /usr/ports
- when /\//
- "/usr/ports/#{@new_resource.package_name}"
- # Otherwise look up the path to the ports directory using 'whereis'
- else
- whereis = shell_out!("whereis -s #{@new_resource.package_name}", :env => nil)
- unless path = whereis.stdout[/^#{Regexp.escape(@new_resource.package_name)}:\s+(.+)$/, 1]
- raise Chef::Exceptions::Package, "Could not find port with the name #{@new_resource.package_name}"
- end
- path
- end
- end
-
- def ports_makefile_variable_value(variable)
- make_v = shell_out!("make -V #{variable}", :cwd => port_path, :env => nil, :returns => [0,1])
- make_v.stdout.strip.split($\).first # $\ is the line separator, i.e., newline
- end
-
- def ports_candidate_version
- ports_makefile_variable_value("PORTVERSION")
- end
-
- def file_candidate_version_path
- Dir["#{@new_resource.source}/#{@current_resource.package_name}*"][-1].to_s
- end
-
- def file_candidate_version
- file_candidate_version_path.split(/-/).last.split(/.tbz/).first
- end
-
- def load_current_resource
- @current_resource.package_name(@new_resource.package_name)
-
- @current_resource.version(current_installed_version)
- Chef::Log.debug("#{@new_resource} current version is #{@current_resource.version}") if @current_resource.version
-
- case @new_resource.source
- when /^http/, /^ftp/
- @candidate_version = "0.0.0"
- when /^\//
- @candidate_version = file_candidate_version
- else
- @candidate_version = ports_candidate_version
- end
-
- Chef::Log.debug("#{@new_resource} ports candidate version is #{@candidate_version}") if @candidate_version
-
- @current_resource
- end
-
- def latest_link_name
- ports_makefile_variable_value("LATEST_LINK")
- end
-
- # The name of the package (without the version number) as understood by pkg_add and pkg_info
- def package_name
- if ::File.exist?("/usr/ports/Makefile")
- if ports_makefile_variable_value("PKGNAME") =~ /^(.+)-[^-]+$/
- $1
- else
- raise Chef::Exceptions::Package, "Unexpected form for PKGNAME variable in #{port_path}/Makefile"
- end
- else
- @new_resource.package_name
- end
- end
-
- def install_package(name, version)
- unless @current_resource.version
- case @new_resource.source
- when /^ports$/
- shell_out!("make -DBATCH install", :timeout => 1200, :env => nil, :cwd => port_path).status
- when /^http/, /^ftp/
- if @new_resource.source =~ /\/$/
- shell_out!("pkg_add -r #{package_name}", :env => { "PACKAGESITE" => @new_resource.source, 'LC_ALL' => nil }).status
- else
- shell_out!("pkg_add -r #{package_name}", :env => { "PACKAGEROOT" => @new_resource.source, 'LC_ALL' => nil }).status
- end
- Chef::Log.debug("#{@new_resource} installed from: #{@new_resource.source}")
- when /^\//
- shell_out!("pkg_add #{file_candidate_version_path}", :env => { "PKG_PATH" => @new_resource.source , 'LC_ALL'=>nil}).status
- Chef::Log.debug("#{@new_resource} installed from: #{@new_resource.source}")
- else
- shell_out!("pkg_add -r #{latest_link_name}", :env => nil).status
- end
- end
- end
-
- def remove_package(name, version)
- # a version is mandatory
- if version
- shell_out!("pkg_delete #{package_name}-#{version}", :env => nil).status
- else
- shell_out!("pkg_delete #{package_name}-#{@current_resource.version}", :env => nil).status
- end
- end
-
- end
- end
- end
-end
diff --git a/lib/chef/provider/package/homebrew.rb b/lib/chef/provider/package/homebrew.rb
index a9aeea1415..822f4c8a42 100644
--- a/lib/chef/provider/package/homebrew.rb
+++ b/lib/chef/provider/package/homebrew.rb
@@ -25,7 +25,11 @@ class Chef
class Provider
class Package
class Homebrew < Chef::Provider::Package
+
+ provides :homebrew_package, os: "mac_os_x"
+
include Chef::Mixin::HomebrewUser
+
def load_current_resource
self.current_resource = Chef::Resource::Package.new(new_resource.name)
current_resource.package_name(new_resource.package_name)
diff --git a/lib/chef/provider/package/ips.rb b/lib/chef/provider/package/ips.rb
index 4090507303..87022d770a 100644
--- a/lib/chef/provider/package/ips.rb
+++ b/lib/chef/provider/package/ips.rb
@@ -27,6 +27,8 @@ class Chef
class Package
class Ips < Chef::Provider::Package
+ provides :ips_package, os: "solaris2"
+
attr_accessor :virtual
def define_resource_requirements
diff --git a/lib/chef/provider/package/macports.rb b/lib/chef/provider/package/macports.rb
index 05247e6d31..cd142eca42 100644
--- a/lib/chef/provider/package/macports.rb
+++ b/lib/chef/provider/package/macports.rb
@@ -2,6 +2,9 @@ class Chef
class Provider
class Package
class Macports < Chef::Provider::Package
+
+ provides :macports_package, os: "mac_os_x"
+
def load_current_resource
@current_resource = Chef::Resource::Package.new(@new_resource.name)
@current_resource.package_name(@new_resource.package_name)
diff --git a/lib/chef/provider/package/pacman.rb b/lib/chef/provider/package/pacman.rb
index a9ff0edf7f..85c0208d76 100644
--- a/lib/chef/provider/package/pacman.rb
+++ b/lib/chef/provider/package/pacman.rb
@@ -25,6 +25,8 @@ class Chef
class Package
class Pacman < Chef::Provider::Package
+ provides :pacman_package, os: "linux"
+
def load_current_resource
@current_resource = Chef::Resource::Package.new(@new_resource.name)
@current_resource.package_name(@new_resource.package_name)
diff --git a/lib/chef/provider/package/paludis.rb b/lib/chef/provider/package/paludis.rb
index f363b38e50..407e0d0110 100644
--- a/lib/chef/provider/package/paludis.rb
+++ b/lib/chef/provider/package/paludis.rb
@@ -24,6 +24,8 @@ class Chef
class Package
class Paludis < Chef::Provider::Package
+ provides :paludis_package, os: "linux"
+
def load_current_resource
@current_resource = Chef::Resource::Package.new(@new_resource.package_name)
@current_resource.package_name(@new_resource.package_name)
@@ -45,7 +47,7 @@ class Chef
@current_resource.version(res[2])
else
@candidate_version = res[2]
- @current_resource.version(nil)
+ @current_resource.version(nil)
end
end
end
diff --git a/lib/chef/provider/package/rpm.rb b/lib/chef/provider/package/rpm.rb
index c0a6444252..131587e066 100644
--- a/lib/chef/provider/package/rpm.rb
+++ b/lib/chef/provider/package/rpm.rb
@@ -25,6 +25,8 @@ class Chef
class Package
class Rpm < Chef::Provider::Package
+ provides :rpm_package, os: [ "linux", "aix" ]
+
include Chef::Mixin::GetSourceFromPackage
def define_resource_requirements
diff --git a/lib/chef/provider/package/rubygems.rb b/lib/chef/provider/package/rubygems.rb
index 6c7e1c066e..3c0ca40693 100644
--- a/lib/chef/provider/package/rubygems.rb
+++ b/lib/chef/provider/package/rubygems.rb
@@ -359,6 +359,9 @@ class Chef
Chef::Log.logger
end
+ provides :chef_gem
+ provides :gem_package
+
include Chef::Mixin::GetSourceFromPackage
def initialize(new_resource, run_context=nil)
diff --git a/lib/chef/provider/package/smartos.rb b/lib/chef/provider/package/smartos.rb
index 19a6b9efef..7cef91953a 100644
--- a/lib/chef/provider/package/smartos.rb
+++ b/lib/chef/provider/package/smartos.rb
@@ -29,6 +29,8 @@ class Chef
class SmartOS < Chef::Provider::Package
attr_accessor :is_virtual_package
+ provides :smartos_package, os: "solaris2", platform_family: "smartos"
+
def load_current_resource
Chef::Log.debug("#{@new_resource} loading current resource")
@current_resource = Chef::Resource::Package.new(@new_resource.name)
diff --git a/lib/chef/provider/package/solaris.rb b/lib/chef/provider/package/solaris.rb
index 19f844b66a..53dd00dd07 100644
--- a/lib/chef/provider/package/solaris.rb
+++ b/lib/chef/provider/package/solaris.rb
@@ -27,6 +27,8 @@ class Chef
include Chef::Mixin::GetSourceFromPackage
+ provides :solaris_package, os: "solaris2"
+
# def initialize(*args)
# super
# @current_resource = Chef::Resource::Package.new(@new_resource.name)
diff --git a/lib/chef/provider/package/yum.rb b/lib/chef/provider/package/yum.rb
index e77319c254..505f5fd6a3 100644
--- a/lib/chef/provider/package/yum.rb
+++ b/lib/chef/provider/package/yum.rb
@@ -29,6 +29,8 @@ class Chef
class Package
class Yum < Chef::Provider::Package
+ provides :yum_package, os: "linux"
+
class RPMUtils
class << self
diff --git a/lib/chef/provider/remote_directory.rb b/lib/chef/provider/remote_directory.rb
index 5bd1cb5493..9a7416e318 100644
--- a/lib/chef/provider/remote_directory.rb
+++ b/lib/chef/provider/remote_directory.rb
@@ -32,6 +32,8 @@ class Chef
class Provider
class RemoteDirectory < Chef::Provider::Directory
+ provides :remote_directory
+
include Chef::Mixin::FileClass
def action_create
@@ -63,7 +65,7 @@ class Chef
def ls(path)
files = Dir.glob(::File.join(Chef::Util::PathHelper.escape_glob(path), '**', '*'),
::File::FNM_DOTMATCH)
-
+
# Remove current directory and previous directory
files.reject! do |name|
basename = Pathname.new(name).basename().to_s
diff --git a/lib/chef/provider/route.rb b/lib/chef/provider/route.rb
index 208a4f4139..72a5029a94 100644
--- a/lib/chef/provider/route.rb
+++ b/lib/chef/provider/route.rb
@@ -24,6 +24,8 @@ require 'ipaddr'
class Chef::Provider::Route < Chef::Provider
include Chef::Mixin::Command
+ provides :route
+
attr_accessor :is_running
MASK = {'0.0.0.0' => '0',
diff --git a/lib/chef/provider/ruby_block.rb b/lib/chef/provider/ruby_block.rb
index b0d94a3f8d..eb93fd5708 100644
--- a/lib/chef/provider/ruby_block.rb
+++ b/lib/chef/provider/ruby_block.rb
@@ -20,6 +20,8 @@
class Chef
class Provider
class RubyBlock < Chef::Provider
+ provides :ruby_block
+
def whyrun_supported?
true
end
diff --git a/lib/chef/provider/script.rb b/lib/chef/provider/script.rb
index 4aacf4f524..1615517553 100644
--- a/lib/chef/provider/script.rb
+++ b/lib/chef/provider/script.rb
@@ -22,6 +22,12 @@ require 'chef/provider/execute'
class Chef
class Provider
class Script < Chef::Provider::Execute
+ provides :bash
+ provides :csh
+ provides :perl
+ provides :python
+ provides :ruby
+ provides :script
def initialize(new_resource, run_context)
super
diff --git a/lib/chef/provider/service/arch.rb b/lib/chef/provider/service/arch.rb
index 9be5fb6fe3..888fb3fdf5 100644
--- a/lib/chef/provider/service/arch.rb
+++ b/lib/chef/provider/service/arch.rb
@@ -20,6 +20,12 @@ require 'chef/provider/service/init'
class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
+ provides :service, platform_family: "arch"
+
+ def self.supports?(resource, action)
+ ::File.exist?("/etc/rc.d/#{resource.service_name}")
+ end
+
def initialize(new_resource, run_context)
super
@init_command = "/etc/rc.d/#{@new_resource.service_name}"
diff --git a/lib/chef/provider/service/debian.rb b/lib/chef/provider/service/debian.rb
index 1ebef90349..25b1960b26 100644
--- a/lib/chef/provider/service/debian.rb
+++ b/lib/chef/provider/service/debian.rb
@@ -25,13 +25,19 @@ class Chef
UPDATE_RC_D_ENABLED_MATCHES = /\/rc[\dS].d\/S|not installed/i
UPDATE_RC_D_PRIORITIES = /\/rc([\dS]).d\/([SK])(\d\d)/i
+ provides :service, platform_family: "debian"
+
+ def self.supports?(resource, action)
+ Chef::Platform::ServiceHelpers.service_resource_providers.include?(:debian)
+ end
+
def load_current_resource
super
@priority_success = true
@rcd_status = nil
- @current_resource.priority(get_priority)
- @current_resource.enabled(service_currently_enabled?(@current_resource.priority))
- @current_resource
+ current_resource.priority(get_priority)
+ current_resource.enabled(service_currently_enabled?(current_resource.priority))
+ current_resource
end
def define_resource_requirements
@@ -47,7 +53,7 @@ class Chef
requirements.assert(:all_actions) do |a|
a.assertion { @priority_success }
- a.failure_message Chef::Exceptions::Service, "/usr/sbin/update-rc.d -n -f #{@current_resource.service_name} failed - #{@rcd_status.inspect}"
+ a.failure_message Chef::Exceptions::Service, "/usr/sbin/update-rc.d -n -f #{current_resource.service_name} failed - #{@rcd_status.inspect}"
# This can happen if the service is not yet installed,so we'll fake it.
a.whyrun ["Unable to determine priority of service, assuming service would have been correctly installed earlier in the run.",
"Assigning temporary priorities to continue.",
@@ -59,7 +65,7 @@ class Chef
"3"=>[:start, "20"],
"4"=>[:start, "20"],
"5"=>[:start, "20"]}
- @current_resource.priority(temp_priorities)
+ current_resource.priority(temp_priorities)
end
end
end
@@ -67,7 +73,7 @@ class Chef
def get_priority
priority = {}
- @rcd_status = popen4("/usr/sbin/update-rc.d -n -f #{@current_resource.service_name} remove") do |pid, stdin, stdout, stderr|
+ @rcd_status = popen4("/usr/sbin/update-rc.d -n -f #{current_resource.service_name} remove") do |pid, stdin, stdout, stderr|
[stdout, stderr].each do |iop|
iop.each_line do |line|
@@ -99,7 +105,7 @@ class Chef
def service_currently_enabled?(priority)
enabled = false
priority.each { |runlevel, arguments|
- Chef::Log.debug("#{@new_resource} runlevel #{runlevel}, action #{arguments[0]}, priority #{arguments[1]}")
+ Chef::Log.debug("#{new_resource} runlevel #{runlevel}, action #{arguments[0]}, priority #{arguments[1]}")
# if we are in a update-rc.d default startup runlevel && we start in this runlevel
if %w[ 1 2 3 4 5 S ].include?(runlevel) && arguments[0] == :start
enabled = true
@@ -111,63 +117,63 @@ class Chef
# Override method from parent to ensure priority is up-to-date
def action_enable
- if @new_resource.priority.nil?
+ if new_resource.priority.nil?
priority_ok = true
else
- priority_ok = @current_resource.priority == @new_resource.priority
+ 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")
+ 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
+ converge_by("enable service #{new_resource}") do
enable_service
- Chef::Log.info("#{@new_resource} enabled")
+ Chef::Log.info("#{new_resource} enabled")
end
end
load_new_resource_state
- @new_resource.enabled(true)
+ new_resource.enabled(true)
end
def enable_service
- if @new_resource.priority.is_a? Integer
- shell_out!("/usr/sbin/update-rc.d -f #{@new_resource.service_name} remove")
- shell_out!("/usr/sbin/update-rc.d #{@new_resource.service_name} defaults #{@new_resource.priority} #{100 - @new_resource.priority}")
- elsif @new_resource.priority.is_a? Hash
+ if new_resource.priority.is_a? Integer
+ shell_out!("/usr/sbin/update-rc.d -f #{new_resource.service_name} remove")
+ shell_out!("/usr/sbin/update-rc.d #{new_resource.service_name} defaults #{new_resource.priority} #{100 - new_resource.priority}")
+ elsif new_resource.priority.is_a? Hash
# we call the same command regardless of we're enabling or disabling
# users passing a Hash are responsible for setting their own start priorities
set_priority
else # No priority, go with update-rc.d defaults
- shell_out!("/usr/sbin/update-rc.d -f #{@new_resource.service_name} remove")
- shell_out!("/usr/sbin/update-rc.d #{@new_resource.service_name} defaults")
+ shell_out!("/usr/sbin/update-rc.d -f #{new_resource.service_name} remove")
+ shell_out!("/usr/sbin/update-rc.d #{new_resource.service_name} defaults")
end
end
def disable_service
- if @new_resource.priority.is_a? Integer
+ if new_resource.priority.is_a? Integer
# Stop processes in reverse order of start using '100 - start_priority'
- shell_out!("/usr/sbin/update-rc.d -f #{@new_resource.service_name} remove")
- shell_out!("/usr/sbin/update-rc.d -f #{@new_resource.service_name} stop #{100 - @new_resource.priority} 2 3 4 5 .")
- elsif @new_resource.priority.is_a? Hash
+ shell_out!("/usr/sbin/update-rc.d -f #{new_resource.service_name} remove")
+ shell_out!("/usr/sbin/update-rc.d -f #{new_resource.service_name} stop #{100 - new_resource.priority} 2 3 4 5 .")
+ elsif new_resource.priority.is_a? Hash
# we call the same command regardless of we're enabling or disabling
# users passing a Hash are responsible for setting their own stop priorities
set_priority
else
# no priority, using '100 - 20 (update-rc.d default)' to stop in reverse order of start
- shell_out!("/usr/sbin/update-rc.d -f #{@new_resource.service_name} remove")
- shell_out!("/usr/sbin/update-rc.d -f #{@new_resource.service_name} stop 80 2 3 4 5 .")
+ shell_out!("/usr/sbin/update-rc.d -f #{new_resource.service_name} remove")
+ shell_out!("/usr/sbin/update-rc.d -f #{new_resource.service_name} stop 80 2 3 4 5 .")
end
end
def set_priority
args = ""
- @new_resource.priority.each do |level, o|
+ new_resource.priority.each do |level, o|
action = o[0]
priority = o[1]
args += "#{action} #{priority} #{level} . "
end
- shell_out!("/usr/sbin/update-rc.d -f #{@new_resource.service_name} remove")
- shell_out!("/usr/sbin/update-rc.d #{@new_resource.service_name} #{args}")
+ shell_out!("/usr/sbin/update-rc.d -f #{new_resource.service_name} remove")
+ shell_out!("/usr/sbin/update-rc.d #{new_resource.service_name} #{args}")
end
end
end
diff --git a/lib/chef/provider/service/freebsd.rb b/lib/chef/provider/service/freebsd.rb
index e0d9696f61..e4a456ac25 100644
--- a/lib/chef/provider/service/freebsd.rb
+++ b/lib/chef/provider/service/freebsd.rb
@@ -27,8 +27,9 @@ class Chef
attr_reader :enabled_state_found
- implements :service,
- :on_platforms => [:freebsd, :netbsd]
+ provides :service, os: [ "freebsd", "netbsd" ]
+
+ include Chef::Mixin::ShellOut
def initialize(new_resource, run_context)
super
diff --git a/lib/chef/provider/service/gentoo.rb b/lib/chef/provider/service/gentoo.rb
index e2dff10994..3dab920f06 100644
--- a/lib/chef/provider/service/gentoo.rb
+++ b/lib/chef/provider/service/gentoo.rb
@@ -22,6 +22,9 @@ require 'chef/mixin/command'
require 'chef/util/path_helper'
class Chef::Provider::Service::Gentoo < Chef::Provider::Service::Init
+
+ provides :service, platform_family: "gentoo"
+
def load_current_resource
@new_resource.supports[:status] = true
diff --git a/lib/chef/provider/service/init.rb b/lib/chef/provider/service/init.rb
index 5d8bb5bb38..ab40a720f6 100644
--- a/lib/chef/provider/service/init.rb
+++ b/lib/chef/provider/service/init.rb
@@ -26,6 +26,8 @@ class Chef
attr_accessor :init_command
+ provides :service, os: "!windows"
+
def initialize(new_resource, run_context)
super
@init_command = "/etc/init.d/#{@new_resource.service_name}"
diff --git a/lib/chef/provider/service/insserv.rb b/lib/chef/provider/service/insserv.rb
index 1ee817707a..df5a162a45 100644
--- a/lib/chef/provider/service/insserv.rb
+++ b/lib/chef/provider/service/insserv.rb
@@ -24,26 +24,32 @@ class Chef
class Service
class Insserv < Chef::Provider::Service::Init
+ provides :service, os: "linux"
+
+ def self.supports?(resource, action)
+ Chef::Platform::ServiceHelpers.service_resource_providers.include?(:insserv)
+ end
+
def load_current_resource
super
- # Look for a /etc/rc.*/SnnSERVICE link to signifiy that the service would be started in a runlevel
- if Dir.glob("/etc/rc**/S*#{Chef::Util::PathHelper.escape_glob(@current_resource.service_name)}").empty?
- @current_resource.enabled false
+ # Look for a /etc/rc.*/SnnSERVICE link to signify that the service would be started in a runlevel
+ if Dir.glob("/etc/rc**/S*#{Chef::Util::PathHelper.escape_glob(current_resource.service_name)}").empty?
+ current_resource.enabled false
else
- @current_resource.enabled true
+ current_resource.enabled true
end
- @current_resource
+ current_resource
end
def enable_service()
- shell_out!("/sbin/insserv -r -f #{@new_resource.service_name}")
- shell_out!("/sbin/insserv -d -f #{@new_resource.service_name}")
+ shell_out!("/sbin/insserv -r -f #{new_resource.service_name}")
+ shell_out!("/sbin/insserv -d -f #{new_resource.service_name}")
end
def disable_service()
- shell_out!("/sbin/insserv -r -f #{@new_resource.service_name}")
+ shell_out!("/sbin/insserv -r -f #{new_resource.service_name}")
end
end
end
diff --git a/lib/chef/provider/service/invokercd.rb b/lib/chef/provider/service/invokercd.rb
index e6afa7272a..c7472211bc 100644
--- a/lib/chef/provider/service/invokercd.rb
+++ b/lib/chef/provider/service/invokercd.rb
@@ -23,6 +23,12 @@ class Chef
class Service
class Invokercd < Chef::Provider::Service::Init
+ provides :service, platform_family: "debian"
+
+ def self.supports?(resource, action)
+ Chef::Platform::ServiceHelpers.service_resource_providers.include?(:invokerc)
+ end
+
def initialize(new_resource, run_context)
super
@init_command = "/usr/sbin/invoke-rc.d #{@new_resource.service_name}"
diff --git a/lib/chef/provider/service/macosx.rb b/lib/chef/provider/service/macosx.rb
index ad1535327b..10ad1aa29d 100644
--- a/lib/chef/provider/service/macosx.rb
+++ b/lib/chef/provider/service/macosx.rb
@@ -26,6 +26,8 @@ class Chef
class Service
class Macosx < Chef::Provider::Service::Simple
+ provides :service, os: "darwin"
+
def self.gather_plist_dirs
locations = %w{/Library/LaunchAgents
/Library/LaunchDaemons
diff --git a/lib/chef/provider/service/redhat.rb b/lib/chef/provider/service/redhat.rb
index 7a7b2a1c40..90744ae268 100644
--- a/lib/chef/provider/service/redhat.rb
+++ b/lib/chef/provider/service/redhat.rb
@@ -26,11 +26,17 @@ class Chef
CHKCONFIG_ON = /\d:on/
CHKCONFIG_MISSING = /No such/
+ provides :service, platform_family: [ "rhel", "fedora", "suse" ]
+
+ def self.supports?(resource, action)
+ Chef::Platform::ServiceHelpers.service_resource_providers.include?(:redhat)
+ end
+
def initialize(new_resource, run_context)
super
- @init_command = "/sbin/service #{@new_resource.service_name}"
- @new_resource.supports[:status] = true
- @service_missing = false
+ @init_command = "/sbin/service #{@new_resource.service_name}"
+ @new_resource.supports[:status] = true
+ @service_missing = false
end
def define_resource_requirements
diff --git a/lib/chef/provider/service/simple.rb b/lib/chef/provider/service/simple.rb
index bd51d15f84..ee403ee163 100644
--- a/lib/chef/provider/service/simple.rb
+++ b/lib/chef/provider/service/simple.rb
@@ -25,6 +25,8 @@ class Chef
class Service
class Simple < Chef::Provider::Service
+ # this must be subclassed to be useful so does not directly implement :service
+
attr_reader :status_load_success
def load_current_resource
diff --git a/lib/chef/provider/service/solaris.rb b/lib/chef/provider/service/solaris.rb
index f0584dcf6d..eaea6bb1ab 100644
--- a/lib/chef/provider/service/solaris.rb
+++ b/lib/chef/provider/service/solaris.rb
@@ -26,6 +26,8 @@ class Chef
class Solaris < Chef::Provider::Service
attr_reader :maintenance
+ provides :service, os: "solaris2"
+
def initialize(new_resource, run_context=nil)
super
@init_command = "/usr/sbin/svcadm"
diff --git a/lib/chef/provider/service/systemd.rb b/lib/chef/provider/service/systemd.rb
index 31feee65d4..311751ab9a 100644
--- a/lib/chef/provider/service/systemd.rb
+++ b/lib/chef/provider/service/systemd.rb
@@ -20,6 +20,13 @@ require 'chef/resource/service'
require 'chef/provider/service/simple'
class Chef::Provider::Service::Systemd < Chef::Provider::Service::Simple
+
+ provides :service, os: "linux"
+
+ def self.supports?(resource, action)
+ Chef::Platform::ServiceHelpers.service_resource_providers.include?(:systemd)
+ end
+
def load_current_resource
@current_resource = Chef::Resource::Service.new(@new_resource.name)
@current_resource.service_name(@new_resource.service_name)
diff --git a/lib/chef/provider/service/upstart.rb b/lib/chef/provider/service/upstart.rb
index 670bf9e5f8..41bd850d6a 100644
--- a/lib/chef/provider/service/upstart.rb
+++ b/lib/chef/provider/service/upstart.rb
@@ -27,6 +27,13 @@ class Chef
class Upstart < Chef::Provider::Service::Simple
UPSTART_STATE_FORMAT = /\w+ \(?(\w+)\)?[\/ ](\w+)/
+ provides :service, os: "linux"
+
+ def self.supports?(resource, action)
+ Chef::Platform::ServiceHelpers.service_resource_providers.include?(:upstart) &&
+ Chef::Platform::ServiceHelpers.config_for_service(resource.service_name).include?(:upstart)
+ end
+
# Upstart does more than start or stop a service, creating multiple 'states' [1] that a service can be in.
# In chef, when we ask a service to start, we expect it to have started before performing the next step
# since we have top down dependencies. Which is to say we may follow witha resource next that requires
diff --git a/lib/chef/provider/service/windows.rb b/lib/chef/provider/service/windows.rb
index d31aad4c9d..4b1d2079ec 100644
--- a/lib/chef/provider/service/windows.rb
+++ b/lib/chef/provider/service/windows.rb
@@ -25,6 +25,10 @@ end
class Chef::Provider::Service::Windows < Chef::Provider::Service
+ provides :service, os: "windows"
+
+ include Chef::Mixin::ShellOut
+
#Win32::Service.get_start_type
AUTO_START = 'auto start'
MANUAL = 'demand start'
diff --git a/lib/chef/provider/subversion.rb b/lib/chef/provider/subversion.rb
index 6cf31c8ec8..f4a0e6fc13 100644
--- a/lib/chef/provider/subversion.rb
+++ b/lib/chef/provider/subversion.rb
@@ -27,6 +27,8 @@ class Chef
class Provider
class Subversion < Chef::Provider
+ provides :subversion
+
SVN_INFO_PATTERN = /^([\w\s]+): (.+)$/
include Chef::Mixin::Command
diff --git a/lib/chef/provider/template.rb b/lib/chef/provider/template.rb
index 48cc45f3a8..1e759074b9 100644
--- a/lib/chef/provider/template.rb
+++ b/lib/chef/provider/template.rb
@@ -25,6 +25,7 @@ require 'chef/deprecation/warnings'
class Chef
class Provider
class Template < Chef::Provider::File
+ provides :template
extend Chef::Deprecation::Warnings
include Chef::Deprecation::Provider::Template
diff --git a/lib/chef/provider/user/pw.rb b/lib/chef/provider/user/pw.rb
index 0dc80103da..fe71e93561 100644
--- a/lib/chef/provider/user/pw.rb
+++ b/lib/chef/provider/user/pw.rb
@@ -23,9 +23,6 @@ class Chef
class User
class Pw < Chef::Provider::User
- implements :user,
- :on_platforms => :freebsd
-
def load_current_resource
super
raise Chef::Exceptions::User, "Could not find binary /usr/sbin/pw for #{@new_resource}" unless ::File.exists?("/usr/sbin/pw")
diff --git a/lib/chef/provider/whyrun_safe_ruby_block.rb b/lib/chef/provider/whyrun_safe_ruby_block.rb
index e5f35debd7..3b95752cc4 100644
--- a/lib/chef/provider/whyrun_safe_ruby_block.rb
+++ b/lib/chef/provider/whyrun_safe_ruby_block.rb
@@ -19,6 +19,8 @@
class Chef
class Provider
class WhyrunSafeRubyBlock < Chef::Provider::RubyBlock
+ provides :whyrun_safe_ruby_block
+
def action_run
@new_resource.block.call
@new_resource.updated_by_last_action(true)