class Repositories

Public Instance Methods

deploy() click to toggle source
# File lib/dust/recipes/repositories.rb, line 3
def deploy
  return unless @node.collect_facts

  delete_old_repositories
  deploy_repositories

  # fetch new stuff
  @node.update_repos if options.restart? or options.reload?
end

Private Instance Methods

add_ppa(repo) click to toggle source
# File lib/dust/recipes/repositories.rb, line 98
def add_ppa(repo)
  if @node['lsbdistrelease'].to_f >= 12.10
    return false unless @node.install_package('software-properties-common', :indent => 2)
  else
    return false unless @node.install_package('python-software-properties', :indent => 2)
  end

  msg = @node.messages.add('running add-apt-repository', :indent => 2)
  cmd = "add-apt-repository -y ppa:#{repo['ppa']}"
  if repo['keyserver']
    @node.messages.add("using custom keyserver '#{repo['keyserver']}'").ok
    cmd << " -k #{repo['keyserver']}"
  end
  msg.parse_result(@node.exec(cmd)[:exit_code])
end
add_repo_key(name, repo) click to toggle source
# File lib/dust/recipes/repositories.rb, line 124
def add_repo_key(name, repo)
  # add the repository key
  if repo['key']
    msg = @node.messages.add("adding #{name} repository key")

    # if the key is a .deb, download and install it
    if repo['key'].match /\.deb$/
      ret = @node.exec('mktemp --tmpdir dust.XXXXXXXXXX')
      if ret[:exit_code] != 0
        msg.failed('could not create temporary file on server')
        return false
      end

      tmpfile = ret[:stdout].chomp

      msg.parse_result(@node.exec("wget -q -O #{tmpfile} '#{repo['key']}' && dpkg -i #{tmpfile}")[:exit_code])

    # if not, just download and add the key
    else
      msg.parse_result(@node.exec("wget -q -O- '#{repo['key']}' |apt-key add -")[:exit_code])
    end
  end
end
delete_old_repositories() click to toggle source

deletes all .list files under /etc/apt/sources.list.d

# File lib/dust/recipes/repositories.rb, line 17
def delete_old_repositories
  msg = @node.messages.add('deleting old repositories')
  @node.rm('/etc/apt/sources.list.d/*.list', :quiet => true) if @node.uses_apt?
  msg.ok
end
deploy_repositories() click to toggle source
# File lib/dust/recipes/repositories.rb, line 23
def deploy_repositories
  @config.each do |name, repo|

    # if repo is present but not a hash use defaults
    repo = {} unless repo.is_a? Hash

    merge_with_default_settings(repo)

    # the default repository in /etc/apt/sources.list (debian)
    if name == 'default'
      msg = @node.messages.add('deploying default repository')
      sources = generate_default_repo(repo)
      msg.parse_result(@node.write('/etc/apt/sources.list', sources, :quiet => true))
    else
      if repo['ppa']
        @node.messages.add("adding ppa repository '#{name}'\n")
        add_ppa(repo)
      else
        msg = @node.messages.add("adding repository '#{name}' to sources")
        sources = generate_repo(repo)
        msg.parse_result(@node.write("/etc/apt/sources.list.d/#{name}.list", sources, :quiet => true))
        add_repo_key(name, repo)
      end
    end
  end
end
generate_default_repo(repo) click to toggle source
# File lib/dust/recipes/repositories.rb, line 65
def generate_default_repo(repo)
  sources = ''
  sources << "deb #{repo['url']} #{repo['release']} #{repo['components']}\n"
  sources << "deb-src #{repo['url']} #{repo['release']} #{repo['components']}\n\n"

  # security
  if @node.is_debian?
    sources << "deb http://security.debian.org/ #{repo['release']}/updates #{repo['components']}\n"
    sources << "deb-src http://security.debian.org/ #{repo['release']}/updates #{repo['components']}\n\n"
  elsif @node.is_ubuntu?
    sources << "deb http://security.ubuntu.com/ubuntu/ #{repo['release']}-security #{repo['components']}\n"
    sources << "deb-src http://security.ubuntu.com/ubuntu/ #{repo['release']}-security #{repo['components']}\n\n"
  end

  # updates
  sources << "deb #{repo['url']} #{repo['release']}-updates #{repo['components']}\n"
  sources << "deb-src #{repo['url']} #{repo['release']}-updates #{repo['components']}\n\n"

  # proposed
  if @node.is_ubuntu?
    sources << "deb #{repo['url']} #{repo['release']}-proposed #{repo['components']}\n"
    sources << "deb-src #{repo['url']} #{repo['release']}-proposed #{repo['components']}\n\n"
  end

  # backports is enabled per default in ubuntu oneiric
  if @node.is_ubuntu?
    sources << "deb #{repo['url']} #{repo['release']}-backports #{repo['components']}\n"
    sources << "deb-src #{repo['url']} #{repo['release']}-backports #{repo['components']}\n\n"
  end

  sources
end
generate_repo(repo) click to toggle source
# File lib/dust/recipes/repositories.rb, line 114
def generate_repo(repo)
  # add url to sources.list
  sources = ''
  Array(repo['release']).each do |release|
    sources << "deb #{repo['url']} #{release} #{repo['components']}\n" if repo['binary']
    sources << "deb-src #{repo['url']} #{release} #{repo['components']}\n" if repo['source']
  end
  sources
end
merge_with_default_settings(repo) click to toggle source

merge repo configuration with default settings

# File lib/dust/recipes/repositories.rb, line 51
def merge_with_default_settings(repo)
  # setting defaults
  repo['url'] ||= 'http://ftp.debian.org/debian/' if @node.is_debian?
  repo['url'] ||= 'http://archive.ubuntu.com/ubuntu/' if @node.is_ubuntu?

  repo['release'] ||= @node['lsbdistcodename']
  repo['components'] ||= [ 'main' ]
  repo['components'] = Array(repo['components']).join(' ')

  # ||= doesn't work for booleans
  repo['source'] = repo['source'].nil? ? true : repo['source']
  repo['binary'] = repo['binary'].nil? ? true : repo['binary']
end