class Chef::Provider::Package::SnapTM

Public Instance Methods

get_installed_package_by_name(name) click to toggle source
# File lib/chef/provider/package/snap_tm.rb, line 66
def get_installed_package_by_name(name)
  cmd = shell_out("snap info #{name}")
  installed = cmd.stdout.lines.detect { |l| l.start_with? "installed:" }
  return {} unless installed

  {
    "name" => name,
    "version" => installed.split.at(1),
  }
end
get_latest_package_version(name, channel) click to toggle source
# File lib/chef/provider/package/snap_tm.rb, line 58
def get_latest_package_version(name, channel)
  cmd = shell_out("snap info #{name}")
  latest = cmd.stdout.lines.detect { |l| l.start_with? "  latest/#{new_resource.channel}:" }
  return unless latest

  latest.split.at(1)
end
install_package(names, versions) click to toggle source
# File lib/chef/provider/package/snap_tm.rb, line 27
def install_package(names, versions)
  if new_resource.source
    install_snap_from_source(names, new_resource.source)
  else
    Array(names).each do |snap|
      snap_options = new_resource.options

      snapctl([
        "install",
        "--channel=#{new_resource.channel}",
        snap_options&.map { |opt| "--#{opt}" },
        snap,
      ].flatten.compact)
    end
  end
end
remove_package(names, versions) click to toggle source
# File lib/chef/provider/package/snap_tm.rb, line 44
def remove_package(names, versions)
  Array(names).each do |snap|
    snapctl([
      "remove",
      snap,
    ])
  end
end
snapctl(*args) click to toggle source
# File lib/chef/provider/package/snap_tm.rb, line 53
def snapctl(*args)
  # Deferred execution can result in exit code 10
  shell_out!("snap", *args, returns: [0, 10])
end