summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Keiser <john@johnkeiser.com>2015-12-11 13:19:58 -0800
committerJohn Keiser <john@johnkeiser.com>2015-12-15 11:16:20 -0800
commitb743fcdbd172862386d172b42bbbc31cfe2f4239 (patch)
treeaeb3a60c86bbd98c5502b86483848a5cc5122fc3
parent44494c91587ff0313d328d9c4ec016e6fcf5f830 (diff)
downloadchef-jk/package-properties.tar.gz
Use properties in package resourcesjk/package-properties
-rw-r--r--lib/chef/provider/package/aix.rb1
-rw-r--r--lib/chef/provider/package/easy_install.rb1
-rw-r--r--lib/chef/provider/package/pacman.rb2
-rw-r--r--lib/chef/provider/package/paludis.rb3
-rw-r--r--lib/chef/provider/package/portage.rb2
-rw-r--r--lib/chef/provider/package/rpm.rb1
-rw-r--r--lib/chef/provider/package/smartos.rb5
-rw-r--r--lib/chef/provider/package/solaris.rb5
-rw-r--r--lib/chef/provider/package/windows.rb4
-rw-r--r--lib/chef/provider/package/zypper.rb1
-rw-r--r--lib/chef/resource/apt_package.rb15
-rw-r--r--lib/chef/resource/chef_gem.rb28
-rw-r--r--lib/chef/resource/dpkg_package.rb5
-rw-r--r--lib/chef/resource/easy_install_package.rb27
-rw-r--r--lib/chef/resource/freebsd_package.rb3
-rw-r--r--lib/chef/resource/gem_package.rb25
-rw-r--r--lib/chef/resource/homebrew_package.rb15
-rw-r--r--lib/chef/resource/ips_package.rb15
-rw-r--r--lib/chef/resource/macports_package.rb1
-rw-r--r--lib/chef/resource/openbsd_package.rb1
-rw-r--r--lib/chef/resource/package.rb76
-rw-r--r--lib/chef/resource/pacman_package.rb1
-rw-r--r--lib/chef/resource/paludis_package.rb6
-rw-r--r--lib/chef/resource/portage_package.rb1
-rw-r--r--lib/chef/resource/rpm_package.rb14
-rw-r--r--lib/chef/resource/smartos_package.rb1
-rw-r--r--lib/chef/resource/solaris_package.rb1
-rw-r--r--lib/chef/resource/windows_package.rb73
-rw-r--r--lib/chef/resource/yum_package.rb52
-rw-r--r--lib/chef/resource/zypper_package.rb1
-rw-r--r--spec/unit/provider/package/pacman_spec.rb1
-rw-r--r--spec/unit/provider/package/zypper_spec.rb1
-rw-r--r--spec/unit/resource/chef_gem_spec.rb6
33 files changed, 75 insertions, 319 deletions
diff --git a/lib/chef/provider/package/aix.rb b/lib/chef/provider/package/aix.rb
index 5165f4b4ea..80860adba0 100644
--- a/lib/chef/provider/package/aix.rb
+++ b/lib/chef/provider/package/aix.rb
@@ -47,7 +47,6 @@ class Chef
def load_current_resource
@current_resource = Chef::Resource::Package.new(@new_resource.name)
@current_resource.package_name(@new_resource.package_name)
- @new_resource.version(nil)
if @new_resource.source
@package_source_found = ::File.exists?(@new_resource.source)
diff --git a/lib/chef/provider/package/easy_install.rb b/lib/chef/provider/package/easy_install.rb
index 2f7880bf08..0b8e3952f7 100644
--- a/lib/chef/provider/package/easy_install.rb
+++ b/lib/chef/provider/package/easy_install.rb
@@ -67,7 +67,6 @@ class Chef
def load_current_resource
@current_resource = Chef::Resource::Package.new(@new_resource.name)
@current_resource.package_name(@new_resource.package_name)
- @current_resource.version(nil)
# get the currently installed version if installed
package_version = nil
diff --git a/lib/chef/provider/package/pacman.rb b/lib/chef/provider/package/pacman.rb
index 01e3a9cc01..275a0c7aa7 100644
--- a/lib/chef/provider/package/pacman.rb
+++ b/lib/chef/provider/package/pacman.rb
@@ -32,8 +32,6 @@ class Chef
@current_resource = Chef::Resource::Package.new(@new_resource.name)
@current_resource.package_name(@new_resource.package_name)
- @current_resource.version(nil)
-
Chef::Log.debug("#{@new_resource} checking pacman for #{@new_resource.package_name}")
status = shell_out_with_timeout("pacman -Qi #{@new_resource.package_name}")
status.stdout.each_line do |line|
diff --git a/lib/chef/provider/package/paludis.rb b/lib/chef/provider/package/paludis.rb
index 2d6302515b..90f02b80ad 100644
--- a/lib/chef/provider/package/paludis.rb
+++ b/lib/chef/provider/package/paludis.rb
@@ -31,8 +31,6 @@ class Chef
@current_resource = Chef::Resource::Package.new(@new_resource.package_name)
@current_resource.package_name(@new_resource.package_name)
- @current_resource.version(nil)
-
Chef::Log.debug("Checking package status for #{@new_resource.package_name}")
installed = false
re = Regexp.new('(.*)[[:blank:]](.*)[[:blank:]](.*)$')
@@ -48,7 +46,6 @@ class Chef
@current_resource.version(res[2])
else
@candidate_version = res[2]
- @current_resource.version(nil)
end
end
end
diff --git a/lib/chef/provider/package/portage.rb b/lib/chef/provider/package/portage.rb
index 95782a6774..a0d0b1a441 100644
--- a/lib/chef/provider/package/portage.rb
+++ b/lib/chef/provider/package/portage.rb
@@ -35,8 +35,6 @@ class Chef
@current_resource = Chef::Resource::Package.new(@new_resource.name)
@current_resource.package_name(@new_resource.package_name)
- @current_resource.version(nil)
-
category, pkg = %r{^#{PACKAGE_NAME_PATTERN}$}.match(@new_resource.package_name)[1,2]
globsafe_category = category ? Chef::Util::PathHelper.escape_glob(category) : nil
diff --git a/lib/chef/provider/package/rpm.rb b/lib/chef/provider/package/rpm.rb
index 6ce0dd689f..e3217fdf18 100644
--- a/lib/chef/provider/package/rpm.rb
+++ b/lib/chef/provider/package/rpm.rb
@@ -50,7 +50,6 @@ class Chef
@current_resource = Chef::Resource::Package.new(@new_resource.name)
@current_resource.package_name(@new_resource.package_name)
- @new_resource.version(nil)
if @new_resource.source
unless uri_scheme?(@new_resource.source) || ::File.exists?(@new_resource.source)
diff --git a/lib/chef/provider/package/smartos.rb b/lib/chef/provider/package/smartos.rb
index 71b8a9b9e1..d3d2fa54a1 100644
--- a/lib/chef/provider/package/smartos.rb
+++ b/lib/chef/provider/package/smartos.rb
@@ -36,7 +36,6 @@ class Chef
Chef::Log.debug("#{@new_resource} loading current resource")
@current_resource = Chef::Resource::Package.new(@new_resource.name)
@current_resource.package_name(@new_resource.package_name)
- @current_resource.version(nil)
check_package_state(@new_resource.package_name)
@current_resource # modified by check_package_state
end
@@ -50,9 +49,7 @@ class Chef
version = info.stdout[/^#{@new_resource.package_name}-(.+)/, 1]
end
- if !version
- @current_resource.version(nil)
- else
+ if version
@current_resource.version(version)
end
end
diff --git a/lib/chef/provider/package/solaris.rb b/lib/chef/provider/package/solaris.rb
index c0d2beec36..55a34b44dd 100644
--- a/lib/chef/provider/package/solaris.rb
+++ b/lib/chef/provider/package/solaris.rb
@@ -51,7 +51,6 @@ class Chef
def load_current_resource
@current_resource = Chef::Resource::Package.new(@new_resource.name)
@current_resource.package_name(@new_resource.package_name)
- @new_resource.version(nil)
if @new_resource.source
@package_source_found = ::File.exists?(@new_resource.source)
@@ -80,10 +79,6 @@ class Chef
raise Chef::Exceptions::Package, "pkginfo failed - #{status.inspect}!"
end
- unless @current_resource.version.nil?
- @current_resource.version(nil)
- end
-
@current_resource
end
diff --git a/lib/chef/provider/package/windows.rb b/lib/chef/provider/package/windows.rb
index ad2a855f2e..b4391774ca 100644
--- a/lib/chef/provider/package/windows.rb
+++ b/lib/chef/provider/package/windows.rb
@@ -73,7 +73,7 @@ class Chef
@new_resource.installer_type
elsif source_location.nil?
inferred_registry_type
- else
+ else
basename = ::File.basename(source_location)
file_extension = basename.split(".").last.downcase
@@ -149,7 +149,7 @@ class Chef
# @return [Array] current_version(s) as an array
# this package provider does not support package arrays
- # However, There may be multiple versions for a single
+ # However, There may be multiple versions for a single
# package so the first element may be a nested array
def current_version_array
[ current_resource.version ]
diff --git a/lib/chef/provider/package/zypper.rb b/lib/chef/provider/package/zypper.rb
index ac42304ffb..72e8d56154 100644
--- a/lib/chef/provider/package/zypper.rb
+++ b/lib/chef/provider/package/zypper.rb
@@ -63,7 +63,6 @@ class Chef
if is_installed==false
@candidate_version=version
- current_resource.version(nil)
end
if is_installed==true
diff --git a/lib/chef/resource/apt_package.rb b/lib/chef/resource/apt_package.rb
index ca119b50c4..b15a86bddf 100644
--- a/lib/chef/resource/apt_package.rb
+++ b/lib/chef/resource/apt_package.rb
@@ -22,21 +22,10 @@ require 'chef/provider/package/apt'
class Chef
class Resource
class AptPackage < Chef::Resource::Package
-
+ resource_name :apt_package
provides :package, os: "linux", platform_family: [ "debian" ]
- def initialize(name, run_context=nil)
- super
- @default_release = nil
- end
-
- def default_release(arg=nil)
- set_or_return(
- :default_release,
- arg,
- :kind_of => [ String ]
- )
- end
+ property :default_release, String, desired_state: false
end
end
diff --git a/lib/chef/resource/chef_gem.rb b/lib/chef/resource/chef_gem.rb
index 7e9d21ebd2..b2cd9da101 100644
--- a/lib/chef/resource/chef_gem.rb
+++ b/lib/chef/resource/chef_gem.rb
@@ -22,29 +22,13 @@ require 'chef/resource/gem_package'
class Chef
class Resource
class ChefGem < Chef::Resource::Package::GemPackage
+ resource_name :chef_gem
- def initialize(name, run_context=nil)
- super
- @compile_time = Chef::Config[:chef_gem_compile_time]
- @gem_binary = RbConfig::CONFIG['bindir'] + "/gem"
- end
-
- # The chef_gem resources is for installing gems to the current gem environment only for use by Chef cookbooks.
- def gem_binary(arg=nil)
- if arg
- raise ArgumentError, "The chef_gem resource is restricted to the current gem environment, use gem_package to install to other environments."
- end
-
- @gem_binary
- end
-
- def compile_time(arg=nil)
- set_or_return(
- :compile_time,
- arg,
- :kind_of => [ TrueClass, FalseClass ]
- )
- end
+ property :gem_binary, default: "#{RbConfig::CONFIG['bindir']}/gem",
+ callbacks: {
+ "The chef_gem resource is restricted to the current gem environment, use gem_package to install to other environments." => proc { false }
+ }
+ property :compile_time, [ true, false ], default: lazy { Chef::Config[:chef_gem_compile_time] }, desired_state: false
def after_created
# Chef::Resource.run_action: Caveat: this skips Chef::Runner.run_action, where notifications are handled
diff --git a/lib/chef/resource/dpkg_package.rb b/lib/chef/resource/dpkg_package.rb
index 9288c18632..7d58385c6d 100644
--- a/lib/chef/resource/dpkg_package.rb
+++ b/lib/chef/resource/dpkg_package.rb
@@ -21,11 +21,10 @@ require 'chef/resource/package'
class Chef
class Resource
class DpkgPackage < Chef::Resource::Package
- provides :dpkg_package, os: "linux"
-
resource_name :dpkg_package
+ provides :dpkg_package, os: "linux"
- property :source, [String, Array, nil]
+ property :source, [ String, Array, nil ]
end
end
end
diff --git a/lib/chef/resource/easy_install_package.rb b/lib/chef/resource/easy_install_package.rb
index df4cee1ab3..ea646ecc9f 100644
--- a/lib/chef/resource/easy_install_package.rb
+++ b/lib/chef/resource/easy_install_package.rb
@@ -21,30 +21,11 @@ require 'chef/resource/package'
class Chef
class Resource
class EasyInstallPackage < Chef::Resource::Package
+ resource_name :easy_install_package
- def easy_install_binary(arg=nil)
- set_or_return(
- :easy_install_binary,
- arg,
- :kind_of => [ String ]
- )
- end
-
- def python_binary(arg=nil)
- set_or_return(
- :python_install_binary,
- arg,
- :kind_of => [ String ]
- )
- end
-
- def module_name(arg=nil)
- set_or_return(
- :module_name,
- arg,
- :kind_of => [ String ]
- )
- end
+ property :easy_install_binary, String, desired_state: false
+ property :python_binary, String, desired_state: false
+ property :module_name, String, desired_state: false
end
end
diff --git a/lib/chef/resource/freebsd_package.rb b/lib/chef/resource/freebsd_package.rb
index c7c43450ba..e656f1c3e3 100644
--- a/lib/chef/resource/freebsd_package.rb
+++ b/lib/chef/resource/freebsd_package.rb
@@ -29,6 +29,7 @@ class Chef
class FreebsdPackage < Chef::Resource::Package
include Chef::Mixin::ShellOut
+ resource_name :freebsd_package
provides :package, platform: "freebsd"
def after_created
@@ -48,7 +49,7 @@ class Chef
end
def assign_provider
- @provider = if @source.to_s =~ /^ports$/i
+ @provider = if source.to_s =~ /^ports$/i
Chef::Provider::Package::Freebsd::Port
elsif supports_pkgng?
Chef::Provider::Package::Freebsd::Pkgng
diff --git a/lib/chef/resource/gem_package.rb b/lib/chef/resource/gem_package.rb
index b981797876..e1a089e1f2 100644
--- a/lib/chef/resource/gem_package.rb
+++ b/lib/chef/resource/gem_package.rb
@@ -21,24 +21,12 @@ require 'chef/resource/package'
class Chef
class Resource
class GemPackage < Chef::Resource::Package
+ resource_name :gem_package
- def initialize(name, run_context=nil)
- super
- @clear_sources = false
- end
-
- def source(arg=nil)
- set_or_return(:source, arg, :kind_of => [ String, Array ])
- end
-
- def clear_sources(arg=nil)
- set_or_return(:clear_sources, arg, :kind_of => [ TrueClass, FalseClass ])
- end
-
+ property :source, [ String, Array ]
+ property :clear_sources, [ true, false ], default: false, desired_state: false
# Sets a custom gem_binary to run for gem commands.
- def gem_binary(gem_cmd=nil)
- set_or_return(:gem_binary,gem_cmd,:kind_of => [ String ])
- end
+ property :gem_binary, String, desired_state: false
##
# Options for the gem install, either a Hash or a String. When a hash is
@@ -46,10 +34,7 @@ class Chef
# gem will be installed via the gems API. When a String is given, the gem
# will be installed by shelling out to the gem command. Using a Hash of
# options with an explicit gem_binary will result in undefined behavior.
- def options(opts=nil)
- set_or_return(:options,opts,:kind_of => [String,Hash])
- end
-
+ property :options, [ String, Hash, nil ], desired_state: false
end
end
diff --git a/lib/chef/resource/homebrew_package.rb b/lib/chef/resource/homebrew_package.rb
index 048ba6b3aa..e070318c45 100644
--- a/lib/chef/resource/homebrew_package.rb
+++ b/lib/chef/resource/homebrew_package.rb
@@ -24,21 +24,10 @@ require 'chef/resource/package'
class Chef
class Resource
class HomebrewPackage < Chef::Resource::Package
-
+ resource_name :homebrew_package
provides :package, os: "darwin"
- def initialize(name, run_context=nil)
- super
- @homebrew_user = nil
- end
-
- def homebrew_user(arg=nil)
- set_or_return(
- :homebrew_user,
- arg,
- :kind_of => [ String, Integer ]
- )
- end
+ property :homebrew_user, [ String, Integer ]
end
end
diff --git a/lib/chef/resource/ips_package.rb b/lib/chef/resource/ips_package.rb
index 2bf8e1dba8..cee02d52fd 100644
--- a/lib/chef/resource/ips_package.rb
+++ b/lib/chef/resource/ips_package.rb
@@ -22,24 +22,13 @@ require 'chef/provider/package/ips'
class Chef
class Resource
class IpsPackage < ::Chef::Resource::Package
-
+ resource_name :ips_package
provides :package, os: "solaris2"
provides :ips_package, os: "solaris2"
allowed_actions :install, :remove, :upgrade
- def initialize(name, run_context = nil)
- super(name, run_context)
- @accept_license = false
- end
-
- def accept_license(arg=nil)
- set_or_return(
- :purge,
- arg,
- :kind_of => [ TrueClass, FalseClass ]
- )
- end
+ property :accept_license, [ true, false ], default: false, desired_state: false
end
end
end
diff --git a/lib/chef/resource/macports_package.rb b/lib/chef/resource/macports_package.rb
index 5843016897..61d5ed23c4 100644
--- a/lib/chef/resource/macports_package.rb
+++ b/lib/chef/resource/macports_package.rb
@@ -21,6 +21,7 @@ require 'chef/resource/package'
class Chef
class Resource
class MacportsPackage < Chef::Resource::Package
+ resource_name :macports_package
end
end
end
diff --git a/lib/chef/resource/openbsd_package.rb b/lib/chef/resource/openbsd_package.rb
index 9ae8813d69..da3a241216 100644
--- a/lib/chef/resource/openbsd_package.rb
+++ b/lib/chef/resource/openbsd_package.rb
@@ -28,6 +28,7 @@ class Chef
class OpenbsdPackage < Chef::Resource::Package
include Chef::Mixin::ShellOut
+ resource_name :openbsd_package
provides :package, os: "openbsd"
end
end
diff --git a/lib/chef/resource/package.rb b/lib/chef/resource/package.rb
index c73810a118..d190479a29 100644
--- a/lib/chef/resource/package.rb
+++ b/lib/chef/resource/package.rb
@@ -22,79 +22,25 @@ require 'chef/resource'
class Chef
class Resource
class Package < Chef::Resource
- identity_attr :package_name
-
- state_attrs :version, :options
+ resource_name :package
default_action :install
allowed_actions :install, :upgrade, :remove, :purge, :reconfig
- def initialize(name, run_context=nil)
+ def initialize(name, *args)
+ # We capture name here, before it gets coerced to name
+ package_name name
super
- options nil
- package_name name
- response_file nil
- response_file_variables Hash.new
- source nil
- version nil
- timeout nil
- end
-
- def package_name(arg=nil)
- set_or_return(
- :package_name,
- arg,
- :kind_of => [ String, Array ]
- )
end
- def version(arg=nil)
- set_or_return(
- :version,
- arg,
- :kind_of => [ String, Array ]
- )
- end
+ property :package_name, [ String, Array ], identity: true
- def response_file(arg=nil)
- set_or_return(
- :response_file,
- arg,
- :kind_of => [ String ]
- )
- end
-
- def response_file_variables(arg=nil)
- set_or_return(
- :response_file_variables,
- arg,
- :kind_of => [ Hash ]
- )
- end
-
- def source(arg=nil)
- set_or_return(
- :source,
- arg,
- :kind_of => [ String ]
- )
- end
-
- def options(arg=nil)
- set_or_return(
- :options,
- arg,
- :kind_of => [ String ]
- )
- end
-
- def timeout(arg=nil)
- set_or_return(
- :timeout,
- arg,
- :kind_of => [String, Integer]
- )
- end
+ property :version, [ String, Array ]
+ property :options, String
+ property :response_file, String, desired_state: false
+ property :response_file_variables, Hash, default: lazy { {} }, desired_state: false
+ property :source, String, desired_state: false
+ property :timeout, [ String, Integer ], desired_state: false
end
end
diff --git a/lib/chef/resource/pacman_package.rb b/lib/chef/resource/pacman_package.rb
index 54b8efc4c2..8aabf8be77 100644
--- a/lib/chef/resource/pacman_package.rb
+++ b/lib/chef/resource/pacman_package.rb
@@ -21,6 +21,7 @@ require 'chef/resource/package'
class Chef
class Resource
class PacmanPackage < Chef::Resource::Package
+ resource_name :pacman_package
provides :pacman_package, os: "linux"
end
end
diff --git a/lib/chef/resource/paludis_package.rb b/lib/chef/resource/paludis_package.rb
index 56c47bc141..e93e6288b8 100644
--- a/lib/chef/resource/paludis_package.rb
+++ b/lib/chef/resource/paludis_package.rb
@@ -22,14 +22,12 @@ require 'chef/provider/package/paludis'
class Chef
class Resource
class PaludisPackage < Chef::Resource::Package
+ resource_name :paludis_package
provides :paludis_package, os: "linux"
allowed_actions :install, :remove, :upgrade
- def initialize(name, run_context=nil)
- super(name, run_context)
- @timeout = 3600
- end
+ property :timeout, default: 3600
end
end
end
diff --git a/lib/chef/resource/portage_package.rb b/lib/chef/resource/portage_package.rb
index 1af48702fa..2b75f6a651 100644
--- a/lib/chef/resource/portage_package.rb
+++ b/lib/chef/resource/portage_package.rb
@@ -21,6 +21,7 @@ require 'chef/resource/package'
class Chef
class Resource
class PortagePackage < Chef::Resource::Package
+ resource_name :portage_package
def initialize(name, run_context=nil)
super
@provider = Chef::Provider::Package::Portage
diff --git a/lib/chef/resource/rpm_package.rb b/lib/chef/resource/rpm_package.rb
index b8b5144a42..4f6dc4c0a6 100644
--- a/lib/chef/resource/rpm_package.rb
+++ b/lib/chef/resource/rpm_package.rb
@@ -22,20 +22,10 @@ require 'chef/provider/package/rpm'
class Chef
class Resource
class RpmPackage < Chef::Resource::Package
+ resource_name :rpm_package
provides :rpm_package, os: [ "linux", "aix" ]
- def initialize(name, run_context=nil)
- super
- @allow_downgrade = false
- end
-
- def allow_downgrade(arg=nil)
- set_or_return(
- :allow_downgrade,
- arg,
- :kind_of => [ TrueClass, FalseClass ]
- )
- end
+ property :allow_downgrade, [ true, false ], default: false, desired_state: false
end
end
diff --git a/lib/chef/resource/smartos_package.rb b/lib/chef/resource/smartos_package.rb
index b8bd940c24..34e704a856 100644
--- a/lib/chef/resource/smartos_package.rb
+++ b/lib/chef/resource/smartos_package.rb
@@ -22,6 +22,7 @@ require 'chef/provider/package/smartos'
class Chef
class Resource
class SmartosPackage < Chef::Resource::Package
+ resource_name :smartos_package
provides :package, os: "solaris2", platform_family: "smartos"
end
end
diff --git a/lib/chef/resource/solaris_package.rb b/lib/chef/resource/solaris_package.rb
index a98fb8b4fa..4ce38bd098 100644
--- a/lib/chef/resource/solaris_package.rb
+++ b/lib/chef/resource/solaris_package.rb
@@ -23,6 +23,7 @@ require 'chef/provider/package/solaris'
class Chef
class Resource
class SolarisPackage < Chef::Resource::Package
+ resource_name :solaris_package
provides :package, os: "solaris2", platform_family: "nexentacore"
provides :package, os: "solaris2", platform_family: "solaris2", platform_version: "<= 5.10"
end
diff --git a/lib/chef/resource/windows_package.rb b/lib/chef/resource/windows_package.rb
index f11b7b8b3b..4965f3f117 100644
--- a/lib/chef/resource/windows_package.rb
+++ b/lib/chef/resource/windows_package.rb
@@ -26,74 +26,21 @@ class Chef
class WindowsPackage < Chef::Resource::Package
include Chef::Mixin::Uris
+ resource_name :windows_package
provides :windows_package, os: "windows"
provides :package, os: "windows"
allowed_actions :install, :remove
- def initialize(name, run_context=nil)
- super
- @source ||= source(@package_name)
-
- # Unique to this resource
- @installer_type = nil
- @timeout = 600
- # In the past we accepted return code 127 for an unknown reason and 42 because of a bug
- @returns = [ 0 ]
- end
-
- def installer_type(arg=nil)
- set_or_return(
- :installer_type,
- arg,
- :kind_of => [ Symbol ]
- )
- end
-
- def timeout(arg=nil)
- set_or_return(
- :timeout,
- arg,
- :kind_of => [ String, Integer ]
- )
- end
-
- def returns(arg=nil)
- set_or_return(
- :returns,
- arg,
- :kind_of => [ String, Integer, Array ]
- )
- end
-
- def source(arg=nil)
- if arg == nil
- @source
- else
- raise ArgumentError, "Bad type for WindowsPackage resource, use a String" unless arg.is_a?(String)
- if uri_scheme?(arg)
- @source = arg
- else
- @source = Chef::Util::PathHelper.canonical_path(arg, false)
- end
- end
- end
-
- def checksum(arg=nil)
- set_or_return(
- :checksum,
- arg,
- :kind_of => [ String ]
- )
- end
-
- def remote_file_attributes(arg=nil)
- set_or_return(
- :remote_file_attributes,
- arg,
- :kind_of => [ Hash ]
- )
- end
+ # Unique to this resource
+ property :installer_type, Symbol
+ property :timeout, [ String, Integer ], default: 600
+ # In the past we accepted return code 127 for an unknown reason and 42 because of a bug
+ property :returns, [ String, Integer, Array ], default: [ 0 ], desired_state: false
+ property :source, String, name_property: true,
+ coerce: proc { |s| uri_scheme?(s) ? s : Chef::Util::PathHelper.canonical_path(s, false) }
+ property :checksum, String, desired_state: false
+ property :remote_file_attributes, Hash, desired_state: false
end
end
diff --git a/lib/chef/resource/yum_package.rb b/lib/chef/resource/yum_package.rb
index 50ba13ce65..95ab5ef125 100644
--- a/lib/chef/resource/yum_package.rb
+++ b/lib/chef/resource/yum_package.rb
@@ -22,49 +22,25 @@ require 'chef/provider/package/yum'
class Chef
class Resource
class YumPackage < Chef::Resource::Package
+ resource_name :yum_package
provides :package, os: "linux", platform_family: [ "rhel", "fedora" ]
- def initialize(name, run_context=nil)
- super
- @flush_cache = { :before => false, :after => false }
- @allow_downgrade = false
- @yum_binary = nil
- end
-
# Install a specific arch
- def arch(arg=nil)
- set_or_return(
- :arch,
- arg,
- :kind_of => [ String, Array ]
- )
- end
-
- def flush_cache(args={})
- if args.is_a? Array
- args.each { |arg| @flush_cache[arg] = true }
- elsif args.any?
- @flush_cache = args
+ property :arch, [ String, Array ]
+ property :flush_cache, Hash, default: { before: false, after: false }, coerce: proc { |v|
+ # TODO these append rather than set. This is probably wrong behavior, but we're preserving it until we know
+ if v.is_a?(Array)
+ v.each { |arg| flush_cache[arg] = true }
+ flush_cache
+ elsif v.any?
+ v
else
- @flush_cache
+ # TODO calling flush_cache({}) does a get instead of a set. This is probably wrong behavior, but we're preserving it until we know
+ flush_cache
end
- end
-
- def allow_downgrade(arg=nil)
- set_or_return(
- :allow_downgrade,
- arg,
- :kind_of => [ TrueClass, FalseClass ]
- )
- end
-
- def yum_binary(arg=nil)
- set_or_return(
- :yum_binary,
- arg,
- :kind_of => [ String ]
- )
- end
+ }
+ property :allow_downgrade, [ true, false ], default: false
+ property :yum_binary, String
end
end
diff --git a/lib/chef/resource/zypper_package.rb b/lib/chef/resource/zypper_package.rb
index f09a20e2c6..c86546eb46 100644
--- a/lib/chef/resource/zypper_package.rb
+++ b/lib/chef/resource/zypper_package.rb
@@ -21,6 +21,7 @@ require 'chef/resource/package'
class Chef
class Resource
class ZypperPackage < Chef::Resource::Package
+ resource_name :zypper_package
provides :package, platform_family: "suse"
end
end
diff --git a/spec/unit/provider/package/pacman_spec.rb b/spec/unit/provider/package/pacman_spec.rb
index fcb9f8a86c..da27edafeb 100644
--- a/spec/unit/provider/package/pacman_spec.rb
+++ b/spec/unit/provider/package/pacman_spec.rb
@@ -62,7 +62,6 @@ ERR
it "should set the installed version to nil on the current resource if pacman installed version not exists" do
allow(@provider).to receive(:shell_out).and_return(@status)
- expect(@current_resource).to receive(:version).with(nil).and_return(true)
@provider.load_current_resource
end
diff --git a/spec/unit/provider/package/zypper_spec.rb b/spec/unit/provider/package/zypper_spec.rb
index 18ff739bc6..661bca4c1b 100644
--- a/spec/unit/provider/package/zypper_spec.rb
+++ b/spec/unit/provider/package/zypper_spec.rb
@@ -68,7 +68,6 @@ describe Chef::Provider::Package::Zypper do
it "should set the installed version to nil on the current resource if zypper info installed version is (none)" do
allow(provider).to receive(:shell_out).and_return(status)
- expect(current_resource).to receive(:version).with(nil).and_return(true)
provider.load_current_resource
end
diff --git a/spec/unit/resource/chef_gem_spec.rb b/spec/unit/resource/chef_gem_spec.rb
index fe788075fd..df37779d1b 100644
--- a/spec/unit/resource/chef_gem_spec.rb
+++ b/spec/unit/resource/chef_gem_spec.rb
@@ -34,16 +34,12 @@ end
describe Chef::Resource::ChefGem, "gem_binary" do
let(:resource) { Chef::Resource::ChefGem.new("foo") }
- before(:each) do
- expect(RbConfig::CONFIG).to receive(:[]).with('bindir').and_return("/opt/chef/embedded/bin")
- end
-
it "should raise an exception when gem_binary is set" do
expect { resource.gem_binary("/lol/cats/gem") }.to raise_error(ArgumentError)
end
it "should set the gem_binary based on computing it from RbConfig" do
- expect(resource.gem_binary).to eql("/opt/chef/embedded/bin/gem")
+ expect(resource.gem_binary).to eql("#{RbConfig::CONFIG['bindir']}/gem")
end
it "should set the gem_binary based on computing it from RbConfig" do