class Bixby::Provision::Packager::Yum

Constants

REPOS
YUM_REPOS_D

Public Class Methods

register_plugin(mod, method=nil, name=nil) click to toggle source
# File lib/bixby/provision/dsl/packager/yum.rb, line 12
def self.register_plugin(mod, method=nil, name=nil)
  if name.nil? then
    name = mod.name.split(/::/).last.downcase
  end
  if method.nil? then
    method = "install_#{name}".to_sym
  end
  logger.debug "[yum] registered plugin: #{name}"
  REPOS[name] = method
  include(mod)
end

Public Instance Methods

install(*packages) click to toggle source
# File lib/bixby/provision/dsl/packager/yum.rb, line 42
def install(*packages)
  packages.flatten!

  # only install missing packages
  installed = query_installed_packages(packages)
  needed = packages.find_all{ |s| !installed.include? s }
  return if needed.empty?

  logged_sudo("yum -q -y install " + needed.join(" "))
end
install_repo(name, opts={}) click to toggle source
# File lib/bixby/provision/dsl/packager/yum.rb, line 33
def install_repo(name, opts={})
  name.downcase!
  if REPOS.include? name then
    return self.send(REPOS[name], opts)
  elsif name =~ /^https?.*\.repo$/ then
    return install_repo_url(name, opts)
  end
end
installed?(package) click to toggle source
# File lib/bixby/provision/dsl/packager/yum.rb, line 53
def installed?(package)
  query_installed_packages(package).include? package
end
refresh() click to toggle source
# File lib/bixby/provision/dsl/packager/yum.rb, line 24
def refresh
  sudo("yum -q clean all")
  sudo("yum -q -y check-update")
end
upgrade_system() click to toggle source
# File lib/bixby/provision/dsl/packager/yum.rb, line 29
def upgrade_system
  logged_sudo('yum -q -y upgrade')
end

Private Instance Methods

install_repo_url(url, opts) click to toggle source
# File lib/bixby/provision/dsl/packager/yum.rb, line 76
def install_repo_url(url, opts)
  logger.info "installing repo from #{url}"

  dest = File.join(YUM_REPOS_D, File.basename(url))
  if File.exists? dest then
    logger.debug "repo already exists"
    return false
  end

  self.proxy.sys.package "wget"

  t = tempfile(true)
  if logged_systemu("wget -q #{url} -O #{t.path}").fail? then
    # TODO raise
  end

  logged_sudo("mv -f #{t.path} #{dest}").success?
end
query_installed_packages(packages) click to toggle source

Query RPM DB for presence of given packages. Returns a hash for easy lookup

@param [Array<String>] packages

@return [Hash<String, 1>]

# File lib/bixby/provision/dsl/packager/yum.rb, line 65
def query_installed_packages(packages)
  packages = [ packages ] if not packages.kind_of? Array
  packages.flatten!

  installed = {}
  systemu("rpm -qa --queryformat '%{NAME}\n' " + packages.join(" ")).
    stdout.split(/\n/).each{ |s| installed[s] = 1 }

  return installed
end