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