From: Jan Provaznik <[email protected]>
You can run "rake dc:download_repos" to cache repository XML
files. This action is optional (if cache files are not found,
Image Builder tries to download them). XML files are stored in
config/image_descriptor_xmls.
---
src/app/util/repository_manager.rb | 60 +++++++++++++++++++++--------------
src/lib/tasks/dc_tasks.rake | 21 ++++++++++++
2 files changed, 57 insertions(+), 24 deletions(-)
diff --git a/src/app/util/repository_manager.rb
b/src/app/util/repository_manager.rb
index abb2cee..9f8a258 100644
--- a/src/app/util/repository_manager.rb
+++ b/src/app/util/repository_manager.rb
@@ -25,13 +25,6 @@ class RepositoryManager
def initialize(baseurl, id)
@id = id
@baseurl = baseurl
- @repomd_uri = File.join(@baseurl, 'repodata', 'repomd.xml')
- begin
- repoio = open(@repomd_uri)
- rescue
- raise "failed to download repomd file #...@repomd_uri}"
- end
- @repomd = Nokogiri::XML(repoio)
end
def get_packages
@@ -66,8 +59,31 @@ class RepositoryManager
return groups
end
+ def download_xml(type)
+ begin
+ url = get_url(type)
+ rescue
+ return ''
+ end
+
+ xml_data = open(url)
+ if url =~ /\.gz$/
+ return Zlib::GzipReader.new(xml_data).read
+ else
+ return xml_data.read
+ end
+ end
+
private
+ def get_xml(type)
+ begin
+ return
File.open("#{RAILS_ROOT}/config/image_descriptor_xmls/#...@id}.#{type}.xml") {
|f| f.read }
+ rescue
+ return download_xml(type)
+ end
+ end
+
def get_group_packages(group_node)
pkgs = {}
group_node.xpath('packagelist/packagereq').each do |p|
@@ -78,7 +94,7 @@ class RepositoryManager
def get_packages_nodes
unless @packages_nodes
- data = get_xml(get_url('primary'))
+ data = get_xml('primary')
xml = Nokogiri::XML(data)
@packages_nodes = xml.xpath('/xmlns:metadata/xmlns:package')
end
@@ -87,32 +103,28 @@ class RepositoryManager
def get_groups_nodes
unless @groups_nodes
- # if there is no group definition, group list will be empty
- begin
- url = get_url('group')
- rescue
- return []
- end
- data = get_xml(url)
+ data = get_xml('group')
xml = Nokogiri::XML(data)
@groups_nodes = xml.xpath('/comps/group')
end
return @groups_nodes
end
- def get_xml(url)
- xml_data = open(url)
- if url =~ /\.gz$/
- return Zlib::GzipReader.new(xml_data).read
+ def get_url(type)
+ if type == 'repomd'
+ return File.join(@baseurl, 'repodata', 'repomd.xml')
else
- return xml_data
+ location =
repomd.xpath("/xmlns:repomd/xmlns:da...@type=\"#{type}\"]/xmlns:location").first
+ raise "location for #{type} data not found" unless location
+ return File.join(@baseurl, location['href'])
end
end
- def get_url(type)
- location =
@repomd.xpath("/xmlns:repomd/xmlns:da...@type=\"#{type}\"]/xmlns:location").first
- raise "location for #{type} data not found" unless location
- return File.join(@baseurl, location['href'])
+ def repomd
+ unless @repomd
+ @repomd = Nokogiri::XML(get_xml('repomd'))
+ end
+ return @repomd
end
end
diff --git a/src/lib/tasks/dc_tasks.rake b/src/lib/tasks/dc_tasks.rake
index 4c1a9e0..5a2560b 100644
--- a/src/lib/tasks/dc_tasks.rake
+++ b/src/lib/tasks/dc_tasks.rake
@@ -24,4 +24,25 @@ namespace :dc do
)
puts "Granting administrator privileges for #{args.login}..."
end
+
+
+ desc 'Download repository xml files'
+ task :download_repos => :environment do |t, args|
+ require 'util/repository_manager'
+
+ base_dir = "#{RAILS_ROOT}/config/image_descriptor_xmls"
+ Dir.mkdir(base_dir) unless File.directory?(base_dir)
+
+ mgr = RepositoryManager.new
+ mgr.repositories.keys.each do |repid|
+ rep = mgr.get_repository(repid)
+
+ %w(repomd primary group).each do |type|
+ path = "#{base_dir}/#{repid}.#{type}.xml"
+ puts "Downloading #{type} file for #{repid} repository -> #{path}"
+ File.open(path , "w") { |f| f.write rep.download_xml(type) }
+ end
+ end
+ end
+
end
--
1.7.0.1
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel