Class BoxGrinder::ApplianceParser
In: lib/boxgrinder-core/appliance-parser.rb
lib/boxgrinder-core/appliance-parser.rb
Parent: Object

Methods

Public Class methods

[Source]

    # File lib/boxgrinder-core/appliance-parser.rb, line 27
27:     def initialize(options = {})
28:       @log = options[:log] || LogHelper.new
29:       @schemas = {}
30:     end

[Source]

    # File lib/boxgrinder-core/appliance-parser.rb, line 27
27:     def initialize(options = {})
28:       @log = options[:log] || LogHelper.new
29:       @schemas = {}
30:     end

Public Instance methods

[Source]

    # File lib/boxgrinder-core/appliance-parser.rb, line 32
32:     def load_schemas
33:       Dir.glob("#{File.dirname(__FILE__)}/schemas/{*.yaml,*.yml}").each do |f|
34:         schema = Kwalify::Yaml.load_file(f)
35:         @schemas[schema['version']] = schema
36:       end
37:     end

[Source]

    # File lib/boxgrinder-core/appliance-parser.rb, line 32
32:     def load_schemas
33:       Dir.glob("#{File.dirname(__FILE__)}/schemas/{*.yaml,*.yml}").each do |f|
34:         schema = Kwalify::Yaml.load_file(f)
35:         @schemas[schema['version']] = schema
36:       end
37:     end

[Source]

    # File lib/boxgrinder-core/appliance-parser.rb, line 70
70:     def parse(schema_document, appliance_definition)
71:       validator = ApplianceValidator.new(schema_document)
72:       parser = Kwalify::Yaml::Parser.new(validator)
73: 
74:       begin
75:         parsed = parser.parse(appliance_definition)
76:       rescue Kwalify::KwalifyError => e
77:         raise ApplianceValidationError, "The appliance definition couldn't be parsed. [line #{e.linenum}, col #{e.column}] [#{e.path}] Most probably you try to specify partition mount point starting with backslash (/), please quote it like this: \"/foo\"." if e.message =~ /document end expected \(maybe invalid tab char found\)/
78:         raise ApplianceValidationError, "The appliance definition couldn't be parsed. #{e}"
79:       end
80: 
81:       [parsed, parser.errors]
82:     end

[Source]

    # File lib/boxgrinder-core/appliance-parser.rb, line 70
70:     def parse(schema_document, appliance_definition)
71:       validator = ApplianceValidator.new(schema_document)
72:       parser = Kwalify::Yaml::Parser.new(validator)
73: 
74:       begin
75:         parsed = parser.parse(appliance_definition)
76:       rescue Kwalify::KwalifyError => e
77:         raise ApplianceValidationError, "The appliance definition couldn't be parsed. [line #{e.linenum}, col #{e.column}] [#{e.path}] Most probably you try to specify partition mount point starting with backslash (/), please quote it like this: \"/foo\"." if e.message =~ /document end expected \(maybe invalid tab char found\)/
78:         raise ApplianceValidationError, "The appliance definition couldn't be parsed. #{e}"
79:       end
80: 
81:       [parsed, parser.errors]
82:     end

[Source]

    # File lib/boxgrinder-core/appliance-parser.rb, line 39
39:     def parse_definition(appliance_definition, file = true)
40:       if file
41:         @log.info "Validating appliance definition from #{appliance_definition} file..."
42:         appliance_definition = File.read(appliance_definition)
43:       else
44:         @log.info "Validating appliance definition from string..."
45:       end
46: 
47:       failures = {}
48:       schema_versions = @schemas.keys.sort.reverse
49: 
50:       schema_versions.each do |schema_version|
51:         @schemas[schema_version].delete('version')
52:         appliance_config, errors = parse(@schemas[schema_version], appliance_definition)
53: 
54:         if errors.empty?
55:           @log.info "Appliance definition is valid."
56:           return ApplianceTransformationHelper.new(schema_versions.first, :log => @log).transform(appliance_config, schema_version)
57:         end
58: 
59:         failures[schema_version] = errors
60:       end
61: 
62:       # If all schemas fail then we assume they are using the latest schema..
63:       failures[schema_versions.first].each do |error|
64:         @log.error "Error: [line #{error.linenum}, col #{error.column}] [#{error.path}] #{error.message}"
65:       end
66: 
67:       raise ApplianceValidationError, "The appliance definition was invalid according to schema #{schema_versions.first}. See log for details."
68:     end

[Source]

    # File lib/boxgrinder-core/appliance-parser.rb, line 39
39:     def parse_definition(appliance_definition, file = true)
40:       if file
41:         @log.info "Validating appliance definition from #{appliance_definition} file..."
42:         appliance_definition = File.read(appliance_definition)
43:       else
44:         @log.info "Validating appliance definition from string..."
45:       end
46: 
47:       failures = {}
48:       schema_versions = @schemas.keys.sort.reverse
49: 
50:       schema_versions.each do |schema_version|
51:         @schemas[schema_version].delete('version')
52:         appliance_config, errors = parse(@schemas[schema_version], appliance_definition)
53: 
54:         if errors.empty?
55:           @log.info "Appliance definition is valid."
56:           return ApplianceTransformationHelper.new(schema_versions.first, :log => @log).transform(appliance_config, schema_version)
57:         end
58: 
59:         failures[schema_version] = errors
60:       end
61: 
62:       # If all schemas fail then we assume they are using the latest schema..
63:       failures[schema_versions.first].each do |error|
64:         @log.error "Error: [line #{error.linenum}, col #{error.column}] [#{error.path}] #{error.message}"
65:       end
66: 
67:       raise ApplianceValidationError, "The appliance definition was invalid according to schema #{schema_versions.first}. See log for details."
68:     end

[Validate]