From: Jason Guiditta <jguiditt(a)redhat.com>
Update factory-related yml to allow using content from multiple repos.
Patch implements this by altering the current yml setup to:
- Allow multiple package repos per platform.
- Add custom repos to generated TDL.
---
src/app/util/image_descriptor_xml.rb | 21 ++++++++++++++++++++
src/app/util/repository_manager.rb | 5 ++-
.../util/repository_manager/abstract_repository.rb | 4 ++-
.../image_descriptor_package_repositories.yml | 11 ++++++++++
src/features/support/custom.rb | 2 +-
5 files changed, 39 insertions(+), 4 deletions(-)
diff --git a/src/app/util/image_descriptor_xml.rb b/src/app/util/image_descriptor_xml.rb
index c1c7724..dd2f33c 100644
--- a/src/app/util/image_descriptor_xml.rb
+++ b/src/app/util/image_descriptor_xml.rb
@@ -80,6 +80,27 @@ class ImageDescriptorXML
rep = repository_manager.repositories.find {|r| r.id == platform_id}
url_node.content = rep.yumurl if rep
install_node << url_node
+ custom_repositories(platform_id)
+ end
+
+ def custom_repositories(platform)
+ repos = repository_manager.repositories.find_all {|r| r.platform_id == platform
&& r.install == false}.flatten
+ if repos.size > 0
+ repo_block = get_or_create_node('repositories')
+ repo_block.xpath('.//*').remove
+ @root << repo_block
+ repos.each do |r|
+ repo_node = Nokogiri::XML::Node.new('repository', @doc)
+ repo_node['name'] = 'custom'
+ repo_block << repo_node
+ url_node = Nokogiri::XML::Node.new('url', repo_node)
+ url_node.content = r.baseurl
+ signed_node = Nokogiri::XML::Node.new('signed', repo_node)
+ signed_node.content = 'false'
+ repo_node << url_node
+ repo_node << signed_node
+ end
+ end
end
def platform_version
diff --git a/src/app/util/repository_manager.rb b/src/app/util/repository_manager.rb
index 6440417..0a33ad2 100644
--- a/src/app/util/repository_manager.rb
+++ b/src/app/util/repository_manager.rb
@@ -104,7 +104,8 @@ class RepositoryManager
def get_selected_repositories(repos)
return @repositories if repos.blank?
repos.map do |repo|
- @repositories.find {|r| r.id == repo} or raise "repository '#{repo}'
not found"
- end
+ @repositories.find_all {|r| r.platform_id == repo} or raise "repository
'#{repo}' not found"
+ end.flatten
+ @repositories
end
end
diff --git a/src/app/util/repository_manager/abstract_repository.rb
b/src/app/util/repository_manager/abstract_repository.rb
index 7b73926..63496f2 100644
--- a/src/app/util/repository_manager/abstract_repository.rb
+++ b/src/app/util/repository_manager/abstract_repository.rb
@@ -1,5 +1,5 @@
class AbstractRepository
- attr_reader :id, :name, :baseurl, :yumurl, :type
+ attr_reader :id, :name, :baseurl, :yumurl, :type, :platform_id, :install
def initialize(conf)
@id = conf['id']
@@ -7,6 +7,8 @@ class AbstractRepository
@baseurl = conf['baseurl']
@yumurl = conf['yumurl'] || conf['baseurl']
@type = conf['type']
+ @platform_id = conf['platform_id']
+ @install = conf['install'] || false
end
def search_package(what)
diff --git a/src/config/image_descriptor_package_repositories.yml
b/src/config/image_descriptor_package_repositories.yml
index fd1a747..6285ff1 100644
--- a/src/config/image_descriptor_package_repositories.yml
+++ b/src/config/image_descriptor_package_repositories.yml
@@ -3,12 +3,23 @@
name: Fedora
baseurl:
http://download.fedoraproject.org/pub/fedora/linux/releases/13/Fedora/x86...
type: xml
+ install: true
+ platform_id: fedora13
-
id: fedora14
name: Fedora
baseurl:
http://download.fedoraproject.org/pub/fedora/linux/releases/14/Fedora/x86...
type: xml
+ install: true
+ platform_id: fedora14
+
+-
+ id: aeolus-custom
+ name: Aeolus-custom
+ baseurl:
http://repos.fedorapeople.org/repos/aeolus/demo/webapp/
+ type: xml
+ platform_id: fedora14
# you can define multiple repositories, as array, for example:
#
diff --git a/src/features/support/custom.rb b/src/features/support/custom.rb
index 4927e1c..89a2006 100644
--- a/src/features/support/custom.rb
+++ b/src/features/support/custom.rb
@@ -38,7 +38,7 @@ RepositoryManager.class_eval do
[{
'baseurl' => 'http://pulptest',
'yumurl' => 'http://pulptest',
- 'type' => 'pulp',
+ 'type' => 'pulp'
}]
end
end
--
1.7.4.4