class Chef::Provider::Package::Powershell
Public Instance Methods
build_candidate_versions()
click to toggle source
Returns array of available available online
# File lib/chef/provider/package/powershell.rb, line 81 def build_candidate_versions versions = [] new_resource.package_name.each_with_index do |name, index| version = if new_resource.version && !new_resource.version[index].nil? powershell_out(build_powershell_package_command("Find-Package '#{name}'", new_resource.version[index]), timeout: new_resource.timeout).stdout.strip else powershell_out(build_powershell_package_command("Find-Package '#{name}'"), timeout: new_resource.timeout).stdout.strip end if version.empty? version = nil end versions.push(version) end versions end
build_current_versions()
click to toggle source
Returns version array of installed version on the system
# File lib/chef/provider/package/powershell.rb, line 98 def build_current_versions version_list = [] new_resource.package_name.each_with_index do |name, index| version = if new_resource.version && !new_resource.version[index].nil? powershell_out(build_powershell_package_command("Get-Package '#{name}'", new_resource.version[index]), timeout: new_resource.timeout).stdout.strip else powershell_out(build_powershell_package_command("Get-Package '#{name}'"), timeout: new_resource.timeout).stdout.strip end if version.empty? version = nil end version_list.push(version) end version_list end
build_powershell_package_command(command, version = nil)
click to toggle source
# File lib/chef/provider/package/powershell.rb, line 114 def build_powershell_package_command(command, version = nil) command = [command] unless command.is_a?(Array) cmdlet_name = command.first command.unshift("(") # PowerShell Gallery requires tls 1.2 command.unshift("if ([Net.ServicePointManager]::SecurityProtocol -lt [Net.SecurityProtocolType]::Tls12) { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 };") # -WarningAction SilentlyContinue is used to suppress the warnings from stdout %w{-Force -ForceBootstrap -WarningAction SilentlyContinue}.each do |arg| command.push(arg) end command.push("-RequiredVersion #{version}") if version command.push("-Source #{new_resource.source}") if new_resource.source && cmdlet_name =~ Regexp.union(/Install-Package/, /Find-Package/) command.push("-SkipPublisherCheck") if new_resource.skip_publisher_check && cmdlet_name !~ /Find-Package/ if new_resource.options && cmdlet_name !~ Regexp.union(/Get-Package/, /Find-Package/) new_resource.options.each do |arg| command.push(arg) unless command.include?(arg) end end command.push(").Version") command.join(" ") end
candidate_version()
click to toggle source
# File lib/chef/provider/package/powershell.rb, line 50 def candidate_version @candidate_version ||= build_candidate_versions end
check_resource_semantics!()
click to toggle source
# File lib/chef/provider/package/powershell.rb, line 136 def check_resource_semantics! # This validation method from Chef::Provider::Package does not apply here, so no-op it. end
define_resource_requirements()
click to toggle source
Calls superclass method
Chef::Provider::Package#define_resource_requirements
# File lib/chef/provider/package/powershell.rb, line 37 def define_resource_requirements super if powershell_version < 5 raise "Minimum installed PowerShell Version required is 5" end requirements.assert(:install) do |a| a.assertion { candidates_exist_for_all_uninstalled? } a.failure_message(Chef::Exceptions::Package, "No candidate version available for #{packages_missing_candidates.join(", ")}") a.whyrun("Assuming a repository that offers #{packages_missing_candidates.join(", ")} would have been configured") end end
install_package(names, versions)
click to toggle source
Installs the package specified with the version passed else latest version will be installed
# File lib/chef/provider/package/powershell.rb, line 55 def install_package(names, versions) names.each_with_index do |name, index| cmd = powershell_out(build_powershell_package_command("Install-Package '#{name}'", versions[index]), timeout: new_resource.timeout) next if cmd.nil? raise Chef::Exceptions::PowershellCmdletException, "Failed to install package due to catalog signing error, use skip_publisher_check to force install" if /SkipPublisherCheck/.match?(cmd.stderr) end end
load_current_resource()
click to toggle source
# File lib/chef/provider/package/powershell.rb, line 30 def load_current_resource @current_resource = Chef::Resource::PowershellPackage.new(new_resource.name) current_resource.package_name(new_resource.package_name) current_resource.version(build_current_versions) current_resource end
remove_package(names, versions)
click to toggle source
Removes the package for the version passed and if no version is passed, then all installed versions of the package are removed
# File lib/chef/provider/package/powershell.rb, line 64 def remove_package(names, versions) names.each_with_index do |name, index| if versions && !versions[index].nil? powershell_out(build_powershell_package_command("Uninstall-Package '#{name}'", versions[index]), timeout: new_resource.timeout) else version = "0" until version.empty? version = powershell_out(build_powershell_package_command("Uninstall-Package '#{name}'"), timeout: new_resource.timeout).stdout.strip unless version.empty? logger.info("Removed package '#{name}' with version #{version}") end end end end end