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 |   42 +++++++++++++++++++++--------------
 src/lib/tasks/dc_tasks.rake        |   21 ++++++++++++++++++
 2 files changed, 46 insertions(+), 17 deletions(-)

diff --git a/src/app/util/repository_manager.rb 
b/src/app/util/repository_manager.rb
index abb2cee..6770faf 100644
--- a/src/app/util/repository_manager.rb
+++ b/src/app/util/repository_manager.rb
@@ -66,8 +66,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 +101,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,28 +110,13 @@ 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
-      else
-        return xml_data
-      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
diff --git a/src/lib/tasks/dc_tasks.rake b/src/lib/tasks/dc_tasks.rake
index 4c1a9e0..6fa9e9d 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(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

Reply via email to