From: Martyn Taylor <mtaylor(a)redhat.com>
---
lib/aeolus_image.rb | 3 +-
lib/aeolus_image/model/image.rb | 41 +++++++++++++++++++++++++++-
lib/aeolus_image/model/target_image.rb | 4 +++
lib/aeolus_image/model/template.rb | 15 ++++++++++
lib/aeolus_image/model/warehouse_client.rb | 1 +
lib/aeolus_image/model/warehouse_model.rb | 2 +-
6 files changed, 63 insertions(+), 3 deletions(-)
create mode 100644 lib/aeolus_image/model/template.rb
diff --git a/lib/aeolus_image.rb b/lib/aeolus_image.rb
index 7abd8f8..87a4848 100644
--- a/lib/aeolus_image.rb
+++ b/lib/aeolus_image.rb
@@ -12,4 +12,5 @@ require File.join(File.dirname(__FILE__), 'aeolus_image/model',
'warehouse_model
require File.join(File.dirname(__FILE__), 'aeolus_image/model', 'image')
require File.join(File.dirname(__FILE__), 'aeolus_image/model',
'image_build')
require File.join(File.dirname(__FILE__), 'aeolus_image/model',
'provider_image')
-require File.join(File.dirname(__FILE__), 'aeolus_image/model',
'target_image')
\ No newline at end of file
+require File.join(File.dirname(__FILE__), 'aeolus_image/model',
'target_image')
+require File.join(File.dirname(__FILE__), 'aeolus_image/model',
'template')
\ No newline at end of file
diff --git a/lib/aeolus_image/model/image.rb b/lib/aeolus_image/model/image.rb
index 73c1b24..244ba5c 100644
--- a/lib/aeolus_image/model/image.rb
+++ b/lib/aeolus_image/model/image.rb
@@ -1,6 +1,8 @@
module Aeolus
module Image
class Image < WarehouseModel
+ OS = Struct.new(:name, :version, :arch)
+
@bucket_name = 'images'
def initialize(attrs)
@@ -13,6 +15,18 @@ module Aeolus
self.class.send(sym, k.to_sym) unless respond_to?(:"#{k}=")
send(:"#{k}=", v)
end
+ @xml_body = Nokogiri::XML @body
+ end
+
+ def template_xml
+ unless @template_xml
+ begin
+ @template_xml = Nokogiri::XML
image_builds.first.target_images.first.template.body
+ rescue
+ @template_xml = Nokogiri::XML "<template></template>"
+ end
+ end
+ @template_xml
end
def latest_build
@@ -22,6 +36,31 @@ module Aeolus
def image_builds
ImageBuild.find_all_by_image_uuid(self.uuid)
end
+
+ #TODO: We should get the image fields from the object body once we have it
defined.
+ def name
+ unless @name
+ @name = @xml_body.xpath("/image/name").text
+ if @name.empty?
+ @name = template_xml.xpath("/template/name").text
+ end
+ end
+ @name
+ end
+
+ def os
+ unless @os
+ OS.new(template_xml.xpath("/template/name").text,
template_xml.xpath("/template/os/version"),
template_xml.xpath("/template/os/arch"))
+ end
+ @os
+ end
+
+ def description
+ unless @description
+ template_xml.xpath("/template/description").text
+ end
+ @description
+ end
end
end
-end
+end
\ No newline at end of file
diff --git a/lib/aeolus_image/model/target_image.rb
b/lib/aeolus_image/model/target_image.rb
index 1167fd4..3705dc4 100644
--- a/lib/aeolus_image/model/target_image.rb
+++ b/lib/aeolus_image/model/target_image.rb
@@ -22,6 +22,10 @@ module Aeolus
def provider_images
ProviderImage.all.select{|pi| pi.target_image and (pi.target_image.uuid ==
self.uuid)}
end
+
+ def template
+ Template.new(@template)
+ end
end
end
end
diff --git a/lib/aeolus_image/model/template.rb b/lib/aeolus_image/model/template.rb
new file mode 100644
index 0000000..b7d66c1
--- /dev/null
+++ b/lib/aeolus_image/model/template.rb
@@ -0,0 +1,15 @@
+module Aeolus
+ module Image
+ class Template < WarehouseModel
+ @bucket_name = 'templates'
+
+ def initialize(attrs)
+ attrs.each do |k,v|
+ sym = :attr_accessor
+ self.class.send(sym, k.to_sym) unless respond_to?(:"#{k}=")
+ send(:"#{k}=", v)
+ end
+ end
+ end
+ end
+end
\ No newline at end of file
diff --git a/lib/aeolus_image/model/warehouse_client.rb
b/lib/aeolus_image/model/warehouse_client.rb
index fcad944..6b7dc1c 100644
--- a/lib/aeolus_image/model/warehouse_client.rb
+++ b/lib/aeolus_image/model/warehouse_client.rb
@@ -44,6 +44,7 @@ module Aeolus
next if att.match('-')
attrs[att] = (@connection.do_request("#{@path}/#{att}", :plain
=> true) rescue nil)
end
+ attrs[:body] = body
attrs
end
diff --git a/lib/aeolus_image/model/warehouse_model.rb
b/lib/aeolus_image/model/warehouse_model.rb
index bc502d6..a3e5324 100644
--- a/lib/aeolus_image/model/warehouse_model.rb
+++ b/lib/aeolus_image/model/warehouse_model.rb
@@ -42,7 +42,7 @@ module Aeolus
end
def first
- obj = bucket_objects.first
+ obj = bucket_objects.first
obj ? self.new(obj.attrs(obj.attr_list)) : nil
end
--
1.7.6