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