class Puppet::Provider::Package::Windows::Package

Constants

REG_DISPLAY_VALUE_NAMES

Attributes

name[R]
version[R]

Public Class Methods

each() { |pkg| ... } click to toggle source

Enumerate each package. The appropriate package subclass will be yielded.

   # File lib/puppet/provider/package/windows/package.rb
24 def self.each(&block)
25   with_key do |key, values|
26     name = key.name.match(/^.+\\([^\\]+)$/).captures[0]
27 
28     [MsiPackage, ExePackage].find do |klass|
29       pkg = klass.from_registry(name, values)
30       if pkg
31         yield pkg
32       end
33     end
34   end
35 end
get_display_name(values) click to toggle source
    # File lib/puppet/provider/package/windows/package.rb
 94 def self.get_display_name(values)
 95   return if values.nil?
 96   return values['DisplayName'] if values['DisplayName'] && values['DisplayName'].length > 0
 97   return values['QuietDisplayName'] if values['QuietDisplayName'] && values['QuietDisplayName'].length > 0
 98 
 99   ''
100 end
installer_class(resource) click to toggle source

Get the class that knows how to install this resource

   # File lib/puppet/provider/package/windows/package.rb
61 def self.installer_class(resource)
62   fail(_("The source parameter is required when using the Windows provider.")) unless resource[:source]
63 
64   case resource[:source]
65   when /\.msi"?\Z/i
66     # REMIND: can we install from URL?
67     # REMIND: what about msp, etc
68     MsiPackage
69   when /\.exe"?\Z/i
70     fail(_("The source does not exist: '%{source}'") % { source: resource[:source] }) unless
71       Puppet::FileSystem.exist?(resource[:source]) || resource[:source].start_with?('http://', 'https://')
72     ExePackage
73   else
74     fail(_("Don't know how to install '%{source}'") % { source: resource[:source] })
75   end
76 end
munge(value) click to toggle source
   # File lib/puppet/provider/package/windows/package.rb
78 def self.munge(value)
79   quote(replace_forward_slashes(value))
80 end
new(name, version) click to toggle source
    # File lib/puppet/provider/package/windows/package.rb
102 def initialize(name, version)
103   @name = name
104   @version = version
105 end
quote(value) click to toggle source
   # File lib/puppet/provider/package/windows/package.rb
90 def self.quote(value)
91   value.include?(' ') ? %Q["#{value.gsub(/"/, '\"')}"] : value
92 end
reg_value_names_to_load() click to toggle source
   # File lib/puppet/provider/package/windows/package.rb
16 def self.reg_value_names_to_load
17   REG_DISPLAY_VALUE_NAMES |
18   MsiPackage::REG_VALUE_NAMES |
19   ExePackage::REG_VALUE_NAMES
20 end
replace_forward_slashes(value) click to toggle source
   # File lib/puppet/provider/package/windows/package.rb
82 def self.replace_forward_slashes(value)
83   if value.include?('/')
84     value = value.tr('/', "\\")
85     Puppet.debug('Package source parameter contained /s - replaced with \\s')
86   end
87   value
88 end
with_key() { |key, values_by_name(key, reg_value_names_to_load)| ... } click to toggle source

Yield each registry key and its values associated with an installed package. This searches both per-machine and current user contexts, as well as packages associated with 64 and 32-bit installers.

   # File lib/puppet/provider/package/windows/package.rb
41 def self.with_key(&block)
42   %w[HKEY_LOCAL_MACHINE HKEY_CURRENT_USER].each do |hive|
43     [KEY64, KEY32].each do |mode|
44       mode |= KEY_READ
45       begin
46         open(hive, 'Software\Microsoft\Windows\CurrentVersion\Uninstall', mode) do |uninstall|
47           each_key(uninstall) do |name, wtime|
48             open(hive, "#{uninstall.keyname}\\#{name}", mode) do |key|
49               yield key, values_by_name(key, reg_value_names_to_load)
50             end
51           end
52         end
53       rescue Puppet::Util::Windows::Error => e
54         raise e unless e.code == Puppet::Util::Windows::Error::ERROR_FILE_NOT_FOUND
55       end
56     end
57   end
58 end