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