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
25 def self.each(&block)
26   with_key do |key, values|
27     name = key.name.match(/^.+\\([^\\]+)$/).captures[0]
28 
29     [MsiPackage, ExePackage].find do |klass|
30       pkg = klass.from_registry(name, values)
31       if pkg
32         yield pkg
33       end
34     end
35   end
36 end
get_display_name(values) click to toggle source
    # File lib/puppet/provider/package/windows/package.rb
 95 def self.get_display_name(values)
 96   return if values.nil?
 97   return values['DisplayName'] if values['DisplayName'] && values['DisplayName'].length > 0
 98   return values['QuietDisplayName'] if values['QuietDisplayName'] && values['QuietDisplayName'].length > 0
 99 
100   ''
101 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
62 def self.installer_class(resource)
63   fail(_("The source parameter is required when using the Windows provider.")) unless resource[:source]
64 
65   case resource[:source]
66   when /\.msi"?\Z/i
67     # REMIND: can we install from URL?
68     # REMIND: what about msp, etc
69     MsiPackage
70   when /\.exe"?\Z/i
71     fail(_("The source does not exist: '%{source}'") % { source: resource[:source] }) unless
72       Puppet::FileSystem.exist?(resource[:source]) || resource[:source].start_with?('http://', 'https://')
73     ExePackage
74   else
75     fail(_("Don't know how to install '%{source}'") % { source: resource[:source] })
76   end
77 end
munge(value) click to toggle source
   # File lib/puppet/provider/package/windows/package.rb
79 def self.munge(value)
80   quote(replace_forward_slashes(value))
81 end
new(name, version) click to toggle source
    # File lib/puppet/provider/package/windows/package.rb
103 def initialize(name, version)
104   @name = name
105   @version = version
106 end
quote(value) click to toggle source
   # File lib/puppet/provider/package/windows/package.rb
91 def self.quote(value)
92   value.include?(' ') ? %Q["#{value.gsub(/"/, '\"')}"] : value
93 end
reg_value_names_to_load() click to toggle source
   # File lib/puppet/provider/package/windows/package.rb
17 def self.reg_value_names_to_load
18   REG_DISPLAY_VALUE_NAMES |
19   MsiPackage::REG_VALUE_NAMES |
20   ExePackage::REG_VALUE_NAMES
21 end
replace_forward_slashes(value) click to toggle source
   # File lib/puppet/provider/package/windows/package.rb
83 def self.replace_forward_slashes(value)
84   if value.include?('/')
85     value = value.tr('/', "\\")
86     Puppet.debug('Package source parameter contained /s - replaced with \\s')
87   end
88   value
89 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
42 def self.with_key(&block)
43   %w[HKEY_LOCAL_MACHINE HKEY_CURRENT_USER].each do |hive|
44     [KEY64, KEY32].each do |mode|
45       mode |= KEY_READ
46       begin
47         open(hive, 'Software\Microsoft\Windows\CurrentVersion\Uninstall', mode) do |uninstall|
48           each_key(uninstall) do |name, wtime|
49             open(hive, "#{uninstall.keyname}\\#{name}", mode) do |key|
50               yield key, values_by_name(key, reg_value_names_to_load)
51             end
52           end
53         end
54       rescue Puppet::Util::Windows::Error => e
55         raise e unless e.code == Puppet::Util::Windows::Error::ERROR_FILE_NOT_FOUND
56       end
57     end
58   end
59 end