From: Jan Provaznik <jprovazn(a)redhat.com>
https://bugzilla.redhat.com/show_bug.cgi?id=761139
If template is invalid, imagefactory returns general 'internal server error',
so a user doesn't know why the build failed. This patch adds template validation
(it's also used in UI)
---
src/app/controllers/api/images_controller.rb | 3 +++
src/config/locales/en.yml | 1 +
src/spec/controllers/api/images_controller_spec.rb | 15 ++++++++++++++-
3 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/src/app/controllers/api/images_controller.rb
b/src/app/controllers/api/images_controller.rb
index 18d0908..74c875b 100644
--- a/src/app/controllers/api/images_controller.rb
+++ b/src/app/controllers/api/images_controller.rb
@@ -49,6 +49,9 @@ module Api
if req[:type] == :failed
raise(Aeolus::Conductor::API::InsufficientParametersSupplied.new(400,
t("api.error_messages.specify_a_type_build_or_import")))
elsif req[:type] == :build
+ errors = TemplateXML.validate(req[:params][:template])
+ raise Aeolus::Conductor::API::ParameterDataIncorrect.new(400,
t("api.error_messages.invalid_template", :errors => errors.join(",
"))) if errors.any?
+
@targetnotfound=false
@badtarget=""
req[:params][:targets].split(",").each do |t|
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
index c77e229..50f5b6f 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -1196,6 +1196,7 @@ en:
image_not_found_on_provider: "Could not find Image %{image} on provider"
in_grabbing_target_images: "In grabbing list of target images: %{error}"
invalid_parameters_for_account_and_target_image: "Invalid parameters for
Account: %{account} TargetImage: %{targetimage}"
+ invalid_template: "Invalid template: %{errors}"
no_image_build_or_target_image: "Invalid Parameters: No Image, Build or
TargetImage provided in request"
no_matching_target_image: Could not find any matching Target Images
no_provider_account_given: No provider account given
diff --git a/src/spec/controllers/api/images_controller_spec.rb
b/src/spec/controllers/api/images_controller_spec.rb
index d3fb24f..67ddf15 100644
--- a/src/spec/controllers/api/images_controller_spec.rb
+++ b/src/spec/controllers/api/images_controller_spec.rb
@@ -211,11 +211,24 @@ describe Api::ImagesController do
context "when trying to build image" do
before(:each) do
+ tpl =%q{<template>
+ <name>Fedora 15 Template</name>
+ <os>
+ <name>Fedora</name>
+ <version>15</version>
+ <arch>x86_64</arch>
+ <install type='url'>
+
<
url>http://download.fedoraproject.org/pub/fedora/linux/releases/15/Fed...
+ </install>
+ <rootpw>p@ssw0rd</rootpw>
+ </os>
+ <description>A Fedora 15 Image Factory
Template</description>
+ </template>}
xml = Nokogiri::XML::Builder.new do
image {
targets "mock"
tdl {
- template "templ"
+ parent.add_child(Nokogiri::XML(tpl).root)
target "mock"
}
}
--
1.7.6