[katello-devel] [lzap at fedoraproject.org: [katello-commits] [katello] tdl validation - model code]

Lukas Zapletal lzap at redhat.com
Mon Nov 28 15:49:52 UTC 2011


Will add i18n calls I forgot, thanks!

On Mon, Nov 28, 2011 at 07:34:21AM -0800, Michael McCune wrote:
> can do, comments below:
> 
> On 11/28/2011 04:56 AM, Lukas Zapletal wrote:
> >Hello,
> >
> >there is new method in system_template model object called validate_tdl
> >now. It should be used before exporting the TDL manifest.
> >
> >I have implemented this for our CLI, Mike could you please add a task of
> >adding some validation hook to the UI code as well? Should be piece of
> >cake.
> >
> >Thanks
> >
> >LZ
> >
> >----- Forwarded message from lzap<lzap at fedoraproject.org>  -----
> >
> >Date: Mon, 28 Nov 2011 12:32:54 +0000 (UTC)
> >From: lzap<lzap at fedoraproject.org>
> >To: katello-commits at lists.fedorahosted.org
> >Subject: [katello-commits] [katello] tdl validation - model code
> >
> >commit bbe56ee30775cc215e39778ed9a720e1c4067def
> >Author: Lukas Zapletal<lzap+git at redhat.com>
> >Date:   Mon Nov 28 10:11:15 2011 +0100
> >
> >     tdl validation - model code
> >
> >  src/app/models/errors.rb                |   17 +++++++++++
> >  src/app/models/system_template.rb       |   49 ++++++++++++++++++++++++++-----
> >  src/spec/models/system_template_spec.rb |   14 +++++++++
> >  3 files changed, 72 insertions(+), 8 deletions(-)
> >---
> >diff --git a/src/app/models/errors.rb b/src/app/models/errors.rb
> >index b11c6d3..4808a4a 100644
> >--- a/src/app/models/errors.rb
> >+++ b/src/app/models/errors.rb
> >@@ -29,4 +29,21 @@ module Errors
> >    class ConflictException<  StandardError; end
> >
> >    class CurrentOrganizationNotFoundException<  ActiveRecord::RecordNotFound; end
> >+
> >+  class TemplateValidationException<  StandardError
> >+    attr_accessor :errors
> >+
> >+    def initialize(msg, errors = [])
> >+      @errors = errors
> >+      super(msg)
> >+    end
> >+
> >+    def message
> >+      if @errors.nil?
> >+        "#{to_s}: No errors"
> 
> should this string be localized as well as all the other error messages?
> 
> >+      else
> >+        "#{to_s}: #{errors.join(', ')}"
> >+      end
> >+    end
> >+  end
> >  end
> >diff --git a/src/app/models/system_template.rb b/src/app/models/system_template.rb
> >index b97072e..95f25c2 100644
> >--- a/src/app/models/system_template.rb
> >+++ b/src/app/models/system_template.rb
> >@@ -114,26 +114,63 @@ class SystemTemplate<  ActiveRecord::Base
> >      self.export_as_hash.to_json
> >    end
> >
> >+  # Validates if this template can be exported in TDL:
> >+  # - at least one product is present (1)
> >+  # - exactly one distribution is present (2)
> >+  # - ueber certificate for it's organization has been generated (3)
> >+  #
> >+  # Throws exception when template does not pass all validations.
> >+  def validate_tdl
> >+    verrors = []
> >+
> 
> see above, if these errors are going to show up in the UI should we
> not localize them?
> 
> >+    # (1)
> >+    verrors<<  "At least one product must be present to export a TDL" if self.products.count<  1
> >+
> >+    # (2)
> >+    verrors<<  "Exactly one distribution must be present to export a TDL" if self.distributions.count != 1
> >+
> >+    # (3)
> >+    begin
> >+      Candlepin::Owner.get_ueber_cert(environment.organization.cp_key)
> >+    rescue RestClient::ResourceNotFound
> >+      verrors<<  "Uebercert for #{environment.organization.name} has not been generated."
> >+    end
> >+
> >+    raise Errors::TemplateValidationException.new("Template cannot be exported", verrors) if verrors.count>  0
> >+    true
> >+  end
> >+
> >    # Returns template in XML TDL format:
> >    # https://github.com/aeolusproject/imagefactory/blob/master/Documentation/TDL.xsd
> >+  #
> >+  # Method validate_tdl MUST be called before exporting, this method expects
> >+  # validated system template.
> >    def export_as_tdl
> >
> >+    xm = Builder::XmlMarkup.new
> >+    xm.instruct!
> >+
> >+    begin
> >+      validate_tdl
> >+    rescue Errors::TemplateValidationException =>  e
> >+      xm.comment! "Template is not complete and will likely fail."
> >+      e.errors.each do |e|
> >+        xm.comment! " - #{e}"
> >+      end
> >+    end
> >+
> >      begin
> >        uebercert = Candlepin::Owner.get_ueber_cert(environment.organization.cp_key)
> >      rescue RestClient::ResourceNotFound =>  e
> >        uebercert = nil
> >-      Rails.logger.info "Uebercert for #{environment.organization.name} has not been generated. Using empty cert and key fields."
> >      end
> >
> >-    xm = Builder::XmlMarkup.new
> >-    xm.instruct!
> >      xm.template {
> >        # mandatory tags
> >        xm.name self.name
> >        if self.distributions.count == 1
> >          xm.os {
> >            distro = self.distributions.first
> >-          # TODO this will probably need a "mapping" table (Pulp->Aeolus Family-Version)
> >            family, version = Mapping::ImageFactoryNaming.translate(distro.family, distro.version)
> >            xm.name family
> >            xm.version version
> >@@ -146,10 +183,6 @@ class SystemTemplate<  ActiveRecord::Base
> >            # TODO root password is hardcoded for now
> >            xm.rootpw "redhat"
> >          }
> >-      elsif self.distributions.count<  1
> >-        Rails.logger.info "Template '%s' is missing distribution" % self.name
> >-      else
> >-        Rails.logger.info "Template '%s' contains more than one distribution" % self.name
> >        end
> >        # optional tags
> >        xm.description self.description unless self.description.nil?
> >diff --git a/src/spec/models/system_template_spec.rb b/src/spec/models/system_template_spec.rb
> >index 9429508..16d9ac4 100644
> >--- a/src/spec/models/system_template_spec.rb
> >+++ b/src/spec/models/system_template_spec.rb
> >@@ -595,7 +595,21 @@ describe SystemTemplate do
> >          subject.xpath("/template/os/install/url").text.should == "https://localhost/pulp/ks/ACME_Corporation/Dev/isos/xxx/"
> >        end
> >
> >+      it "should be valid" do
> >+        @tpl1.validate_tdl.should be_true
> >+      end
> >+
> >        it_should_behave_like "valid tdl"
> >+
> >+      it "should not be valid without a product" do
> >+        @tpl1.products.clear
> >+        expect { @tpl1.validate_tdl }.to raise_error(Errors::TemplateValidationException)
> >+      end
> >+
> >+      it "should not be valid without a distribution" do
> >+        @tpl1.distributions.clear
> >+        expect { @tpl1.validate_tdl }.to raise_error(Errors::TemplateValidationException)
> >+      end
> >      end
> >    end
> >
> >_______________________________________________
> >katello-commits mailing list
> >katello-commits at lists.fedorahosted.org
> >https://fedorahosted.org/mailman/listinfo/katello-commits
> >
> >----- End forwarded message -----
> >
> 
> -- 
> Mike McCune
> mmccune AT redhat.com
> Red Hat Engineering       | Portland, OR
> Systems Management        | 650.254.4248
> 
> _______________________________________________
> katello-devel mailing list
> katello-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/katello-devel

-- 
Later,

 Lukas Zapletal | E32E400A
 RHN Satellite Engineering
 Red Hat Czech s.r.o. Brno




More information about the katello-devel mailing list