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 78
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_command("Find-Package '#{name}'", new_resource.version[index]), timeout: new_resource.timeout).stdout.strip
              else
                powershell_out(build_powershell_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 95
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_command("Get-Package '#{name}'", new_resource.version[index]), timeout: new_resource.timeout).stdout.strip
              else
                powershell_out(build_powershell_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_command(command, version = nil) click to toggle source
# File lib/chef/provider/package/powershell.rb, line 111
def build_powershell_command(command, version = nil)
  command = [command] unless command.is_a?(Array)
  command.unshift("(")
  %w{-Force -ForceBootstrap}.each do |arg|
    command.push(arg)
  end
  command.push("-RequiredVersion #{version}") if version
  command.push("-Source #{new_resource.source}") if new_resource.source && command[1] =~ Regexp.union(/Install-Package/, /Find-Package/)
  command.push(").Version")
  command.join(" ")
end
candidate_version() click to toggle source
# File lib/chef/provider/package/powershell.rb, line 49
def candidate_version
  @candidate_version ||= build_candidate_versions
end
check_resource_semantics!() click to toggle source
# File lib/chef/provider/package/powershell.rb, line 123
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
# File lib/chef/provider/package/powershell.rb, line 37
def define_resource_requirements
  super
  if powershell_out("$PSVersionTable.PSVersion.Major").stdout.strip.to_i < 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 54
def install_package(names, versions)
  names.each_with_index do |name, index|
    powershell_out(build_powershell_command("Install-Package '#{name}'", versions[index]), timeout: new_resource.timeout)
  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 61
def remove_package(names, versions)
  names.each_with_index do |name, index|
    if versions && !versions[index].nil?
      powershell_out(build_powershell_command("Uninstall-Package '#{name}'", versions[index]), timeout: new_resource.timeout)
    else
      version = "0"
      until version.empty?
        version = powershell_out(build_powershell_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