new format: https://github.com/clalancette/oz/blob/master/examples/f14x86_64.tdl --- src/app/models/template.rb | 13 +++++- src/app/util/image_descriptor_xml.rb | 74 +++++++++++++++++++++------------ 2 files changed, 57 insertions(+), 30 deletions(-)
diff --git a/src/app/models/template.rb b/src/app/models/template.rb index b84409c..f4dc905 100644 --- a/src/app/models/template.rb +++ b/src/app/models/template.rb @@ -67,9 +67,11 @@ class Template < ActiveRecord::Base def update_xml xml.name = self.name xml.description = self.summary - xml.platform = self.platform - xml.platform_version = self.platform_version - xml.architecture = self.architecture + platform = {} + platform['name'] = self.platform.capitalize + platform['version'] = self.platform_version + platform['arch'] = self.architecture + xml.platform = platform write_attribute(:xml, xml.to_xml) end
@@ -146,4 +148,9 @@ class Template < ActiveRecord::Base def warehouse_bucket 'templates' end + + def warehouse_url + baseurl = YAML.load_file("#{RAILS_ROOT}/config/image_warehouse.yml")['baseurl'] + "/templates/" + self.uuid ? baseurl + self.uuid : baseurl + end end diff --git a/src/app/util/image_descriptor_xml.rb b/src/app/util/image_descriptor_xml.rb index 70f2e34..3a4bbae 100644 --- a/src/app/util/image_descriptor_xml.rb +++ b/src/app/util/image_descriptor_xml.rb @@ -28,9 +28,9 @@ class ImageDescriptorXML @doc = Nokogiri::XML(xmlstr) # create at least root node if it doesn't exist unless @doc.root - @doc.root = Nokogiri::XML::Node.new('image', @doc) + @doc.root = Nokogiri::XML::Node.new('template', @doc) end - @root = @doc.root.at_xpath('/image') + @root = @doc.root.at_xpath('/template') end
def name=(str) @@ -42,45 +42,65 @@ class ImageDescriptorXML return get_node_text('name') end
+ def description=(str) + node = get_or_create_node('description') + node.content = str + end + + def description + return get_node_text('description') + end + def platform - node = @root.at_xpath('/image/os') + node = @root.at_xpath('/template/os') return node ? node['name'] : nil end
- def platform=(str) + def platform=(platform_hash) # FIXME: we remove all repos because we don't know which one is for # platform # update: we don't add platform repo, image builder chooses right one from OS # name, but we add all other repos #recreate_repo_nodes - get_or_create_node('os')['name'] = str + platform_node = get_or_create_node('os') + platform_node.xpath('.//*').remove + platform_hash.each do |key, value| + snode = Nokogiri::XML::Node.new(key, @doc) + platform_node << snode + snode.content = value + end + install_node = Nokogiri::XML::Node.new('install', @doc) + install_node.set_attribute('type', 'url') + platform_node << install_node + url_node = Nokogiri::XML::Node.new('url', @doc) + # TODO: change when more than one os is supported by conductor + # url_node.content = "http://download.fedoraproject.org/pub/fedora/linux/releases/13/Fedora/x86_64..." + url_node.content = YAML.load_file("#{RAILS_ROOT}/config/image_descriptor_package_repositories.yml")['baseurl'] + install_node << url_node end
def platform_version - node = @root.at_xpath('/image/os') - return node ? node['version'] : nil - end - - def platform_version=(str) - get_or_create_node('os')['version'] = str + node = @root.at_xpath('/image/os/version') + return node ? node.content : nil end
def architecture - node = @root.at_xpath('/image/os') - return node ? node['architecture'] : nil + node = @root.at_xpath('/template/os/arch') + return node ? node.content : nil end
def architecture=(str) get_or_create_node('os')['architecture'] = str end
- def description=(str) - node = get_or_create_node('description') - node.content = str - end - - def description - return get_node_text('description') + def services=(services) + service_node = get_or_create_node('services') + service_node.xpath('.//service').remove + platform_hash.each do |key, value| + snode = Nokogiri::XML::Node.new(key, @doc) + platform_node << snode + snode.content = value + end end
def services=(services) @@ -97,7 +117,7 @@ class ImageDescriptorXML def services unless @services @services = [] - @root.xpath('/image/services/service').each do |s| + @root.xpath('/template/services/service').each do |s| services << s.text end end @@ -109,13 +129,13 @@ class ImageDescriptorXML end
def packages - @root.xpath('/image/packages/package').map do |s| + @root.xpath('/template/packages/package').map do |s| s.at_xpath('.//name').text end end
def groups - @root.xpath('/image/groups/group').map do |s| + @root.xpath('/template/groups/group').map do |s| s.at_xpath('.//name').text end end @@ -138,7 +158,7 @@ class ImageDescriptorXML end
def remove_package(package) - @root.xpath('/image/packages/package').each do |s| + @root.xpath('/template/packages/package').each do |s| if name = s.at_xpath('.//name') and name.text.to_s == package s.remove end @@ -146,11 +166,11 @@ class ImageDescriptorXML end
def clear_packages - @root.xpath('/image/packages').each { |s| s.remove } + @root.xpath('/template/packages').each { |s| s.remove } end
def clear_groups - @root.xpath('/image/groups').each { |s| s.remove } + @root.xpath('/template/groups').each { |s| s.remove } end
private @@ -180,7 +200,7 @@ class ImageDescriptorXML end
def get_node_text(path) - node = @root.at_xpath('/image/' + path) + node = @root.at_xpath('/template/' + path) return node ? node.text : nil end
aeolus-devel@lists.fedorahosted.org