Class | BoxGrinder::ApplianceParser |
In: |
lib/boxgrinder-core/appliance-parser.rb
lib/boxgrinder-core/appliance-parser.rb |
Parent: | Object |
# File lib/boxgrinder-core/appliance-parser.rb, line 27 27: def initialize(options = {}) 28: @log = options[:log] || LogHelper.new 29: @schemas = {} 30: end
# File lib/boxgrinder-core/appliance-parser.rb, line 27 27: def initialize(options = {}) 28: @log = options[:log] || LogHelper.new 29: @schemas = {} 30: end
# 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
# 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
# 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
# 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
# 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
# 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