Class: Chef::Provider::Package::Windows::MSI

Inherits:
Object
  • Object
show all
Includes:
Mixin::ShellOut, ReservedNames::Win32::API::Installer
Defined in:
lib/chef/provider/package/windows/msi.rb

Constant Summary

Constants included from Mixin::ShellOut

Mixin::ShellOut::DEPRECATED_OPTIONS

Instance Method Summary collapse

Methods included from Mixin::ShellOut

#run_command_compatible_options, #shell_out, #shell_out!, #shell_out_with_systems_locale, #shell_out_with_systems_locale!

Methods included from ReservedNames::Win32::API::Installer

#get_installed_version, #get_product_property, #open_package

Constructor Details

#initialize(resource) ⇒ MSI

Returns a new instance of MSI.



32
33
34
# File 'lib/chef/provider/package/windows/msi.rb', line 32

def initialize(resource)
  @new_resource = resource
end

Instance Method Details

#expand_options(options) ⇒ Object

From Chef::Provider::Package



37
38
39
# File 'lib/chef/provider/package/windows/msi.rb', line 37

def expand_options(options)
  options ? " #{options}" : ""
end

#install_package(name, version) ⇒ Object



54
55
56
57
58
# File 'lib/chef/provider/package/windows/msi.rb', line 54

def install_package(name, version)
  # We could use MsiConfigureProduct here, but we'll start off with msiexec
  Chef::Log.debug("#{@new_resource} installing MSI package '#{@new_resource.source}'")
  shell_out!("msiexec /qn /i \"#{@new_resource.source}\" #{expand_options(@new_resource.options)}", {:timeout => @new_resource.timeout, :returns => @new_resource.returns})
end

#installed_versionObject

Returns a version if the package is installed or nil if it is not.



42
43
44
45
46
47
# File 'lib/chef/provider/package/windows/msi.rb', line 42

def installed_version
  Chef::Log.debug("#{@new_resource} getting product code for package at #{@new_resource.source}")
  product_code = get_product_property(@new_resource.source, "ProductCode")
  Chef::Log.debug("#{@new_resource} checking package status and version for #{product_code}")
  get_installed_version(product_code)
end

#package_versionObject



49
50
51
52
# File 'lib/chef/provider/package/windows/msi.rb', line 49

def package_version
  Chef::Log.debug("#{@new_resource} getting product version for package at #{@new_resource.source}")
  get_product_property(@new_resource.source, "ProductVersion")
end

#remove_package(name, version) ⇒ Object



60
61
62
63
64
# File 'lib/chef/provider/package/windows/msi.rb', line 60

def remove_package(name, version)
  # We could use MsiConfigureProduct here, but we'll start off with msiexec
  Chef::Log.debug("#{@new_resource} removing MSI package '#{@new_resource.source}'")
  shell_out!("msiexec /qn /x \"#{@new_resource.source}\" #{expand_options(@new_resource.options)}", {:timeout => @new_resource.timeout, :returns => @new_resource.returns})
end