Class BoxGrinder::ApplianceDefinitionHelper
In: lib/boxgrinder-core/helpers/appliance-definition-helper.rb
lib/boxgrinder-core/helpers/appliance-definition-helper.rb
Parent: Object

Methods

Attributes

appliance_configs  [R] 
appliance_configs  [R] 
appliance_parser  [R] 
appliance_parser  [R] 

Public Class methods

[Source]

    # File lib/boxgrinder-core/helpers/appliance-definition-helper.rb, line 25
25:     def initialize(options = {})
26:       @log = options[:log] || LogHelper.new
27:       @appliance_configs = []
28:       @appliance_parser = ApplianceParser.new(:log => @log)
29:     end

[Source]

    # File lib/boxgrinder-core/helpers/appliance-definition-helper.rb, line 25
25:     def initialize(options = {})
26:       @log = options[:log] || LogHelper.new
27:       @appliance_configs = []
28:       @appliance_parser = ApplianceParser.new(:log => @log)
29:     end

Public Instance methods

TODO this needs to be rewritten - using kwalify it could be possible to instantiate document structure as objects[, or opencascade hash?]

[Source]

     # File lib/boxgrinder-core/helpers/appliance-definition-helper.rb, line 72
 72:     def parse_yaml(definition)
 73:       return definition if definition.is_a?(ApplianceConfig)
 74:       raise "Provided definition is not a Hash." unless definition.is_a?(Hash)
 75: 
 76:       appliance_config = ApplianceConfig.new
 77: 
 78:       appliance_config.name = definition['name'] unless definition['name'].nil?
 79:       appliance_config.summary = definition['summary'] unless definition['summary'].nil?
 80: 
 81:       definition['variables'].each { |key, value| appliance_config.variables[key] = value } unless definition['variables'].nil?
 82: 
 83:       @log.debug "Adding packages to appliance..."
 84: 
 85:       appliance_config.packages = definition['packages'] unless definition['packages'].nil?
 86: 
 87:       @log.debug "#{appliance_config.packages.size} package(s) added to appliance." if appliance_config.packages
 88: 
 89:       appliance_config.appliances = definition['appliances'] unless definition['appliances'].nil?
 90:       appliance_config.repos = definition['repos'] unless definition['repos'].nil?
 91: 
 92:       appliance_config.version = definition['version'] unless definition['version'].nil?
 93:       appliance_config.release = definition['release'] unless definition['release'].nil?
 94: 
 95:       unless definition['default_repos'].nil?
 96:         appliance_config.default_repos = definition['default_repos']
 97:         raise "default_repos should be set to true or false" unless appliance_config.default_repos.is_a?(TrueClass) or appliance_config.default_repos.is_a?(FalseClass)
 98:       end
 99: 
100:       unless definition['os'].nil?
101:         appliance_config.os.name = definition['os']['name'] unless definition['os']['name'].nil?
102:         appliance_config.os.version = definition['os']['version'] unless definition['os']['version'].nil?
103:         appliance_config.os.password = definition['os']['password'] unless definition['os']['password'].nil?
104:         appliance_config.os.pae = definition['os']['pae'] unless definition['os']['pae'].nil?
105:       end
106: 
107:       unless definition['hardware'].nil?
108:         appliance_config.hardware.arch = definition['hardware']['arch'] unless definition['hardware']['arch'].nil?
109:         appliance_config.hardware.cpus = definition['hardware']['cpus'] unless definition['hardware']['cpus'].nil?
110:         appliance_config.hardware.memory = definition['hardware']['memory'] unless definition['hardware']['memory'].nil?
111:         appliance_config.hardware.network = definition['hardware']['network'] unless definition['hardware']['network'].nil?
112: 
113:         unless definition['hardware']['partitions'].nil?
114:           definition['hardware']['partitions'].each do |key, part|
115:             appliance_config.hardware.partitions[key] = part
116:           end if definition['hardware']['partitions'].is_a?(Hash)
117:         end
118:       end
119: 
120:       definition['post'].each { |key, value| appliance_config.post[key] = value } unless definition['post'].nil?
121: 
122:       appliance_config
123:     end

TODO this needs to be rewritten - using kwalify it could be possible to instantiate document structure as objects[, or opencascade hash?]

[Source]

     # File lib/boxgrinder-core/helpers/appliance-definition-helper.rb, line 72
 72:     def parse_yaml(definition)
 73:       return definition if definition.is_a?(ApplianceConfig)
 74:       raise "Provided definition is not a Hash." unless definition.is_a?(Hash)
 75: 
 76:       appliance_config = ApplianceConfig.new
 77: 
 78:       appliance_config.name = definition['name'] unless definition['name'].nil?
 79:       appliance_config.summary = definition['summary'] unless definition['summary'].nil?
 80: 
 81:       definition['variables'].each { |key, value| appliance_config.variables[key] = value } unless definition['variables'].nil?
 82: 
 83:       @log.debug "Adding packages to appliance..."
 84: 
 85:       appliance_config.packages = definition['packages'] unless definition['packages'].nil?
 86: 
 87:       @log.debug "#{appliance_config.packages.size} package(s) added to appliance." if appliance_config.packages
 88: 
 89:       appliance_config.appliances = definition['appliances'] unless definition['appliances'].nil?
 90:       appliance_config.repos = definition['repos'] unless definition['repos'].nil?
 91: 
 92:       appliance_config.version = definition['version'] unless definition['version'].nil?
 93:       appliance_config.release = definition['release'] unless definition['release'].nil?
 94: 
 95:       unless definition['default_repos'].nil?
 96:         appliance_config.default_repos = definition['default_repos']
 97:         raise "default_repos should be set to true or false" unless appliance_config.default_repos.is_a?(TrueClass) or appliance_config.default_repos.is_a?(FalseClass)
 98:       end
 99: 
100:       unless definition['os'].nil?
101:         appliance_config.os.name = definition['os']['name'] unless definition['os']['name'].nil?
102:         appliance_config.os.version = definition['os']['version'] unless definition['os']['version'].nil?
103:         appliance_config.os.password = definition['os']['password'] unless definition['os']['password'].nil?
104:         appliance_config.os.pae = definition['os']['pae'] unless definition['os']['pae'].nil?
105:       end
106: 
107:       unless definition['hardware'].nil?
108:         appliance_config.hardware.arch = definition['hardware']['arch'] unless definition['hardware']['arch'].nil?
109:         appliance_config.hardware.cpus = definition['hardware']['cpus'] unless definition['hardware']['cpus'].nil?
110:         appliance_config.hardware.memory = definition['hardware']['memory'] unless definition['hardware']['memory'].nil?
111:         appliance_config.hardware.network = definition['hardware']['network'] unless definition['hardware']['network'].nil?
112: 
113:         unless definition['hardware']['partitions'].nil?
114:           definition['hardware']['partitions'].each do |key, part|
115:             appliance_config.hardware.partitions[key] = part
116:           end if definition['hardware']['partitions'].is_a?(Hash)
117:         end
118:       end
119: 
120:       definition['post'].each { |key, value| appliance_config.post[key] = value } unless definition['post'].nil?
121: 
122:       appliance_config
123:     end

Reads definition provided as string. This string can be a YAML document. In this case definition is parsed and an ApplianceConfig object is returned. In other cases it tries to search for a file with provided name.

[Source]

    # File lib/boxgrinder-core/helpers/appliance-definition-helper.rb, line 37
37:     def read_definitions(definition, content_type = nil)
38:       @appliance_parser.load_schemas
39:       if File.exists?(definition)
40:         definition_file_extension = File.extname(definition)
41: 
42:         appliance_config =
43:             case definition_file_extension
44:               when '.appl', '.yml', '.yaml'
45:                 parse_yaml(@appliance_parser.parse_definition(definition))
46:               else
47:                 unless content_type.nil?
48:                   case content_type
49:                     when 'application/x-yaml', 'text/yaml'
50:                       parse_yaml(@appliance_parser.parse_definition(definition))
51:                   end
52:                 end
53:             end
54: 
55:         raise 'Unsupported file format for appliance definition file.' if appliance_config.nil?
56: 
57:         @appliance_configs << appliance_config
58:         appliances = []
59: 
60:         @appliance_configs.each { |config| appliances << config.name }
61: 
62:         appliance_config.appliances.reverse.each do |appliance_name|
63:           read_definitions("#{File.dirname(definition)}/#{appliance_name}#{definition_file_extension}") unless appliances.include?(appliance_name)
64:         end unless appliance_config.appliances.nil? or !appliance_config.appliances.is_a?(Array)
65:       else
66:         # Assuming that the definition is provided as string
67:         @appliance_configs << parse_yaml(@appliance_parser.parse_definition(definition, false))
68:       end
69:     end

Reads definition provided as string. This string can be a YAML document. In this case definition is parsed and an ApplianceConfig object is returned. In other cases it tries to search for a file with provided name.

[Source]

    # File lib/boxgrinder-core/helpers/appliance-definition-helper.rb, line 37
37:     def read_definitions(definition, content_type = nil)
38:       @appliance_parser.load_schemas
39:       if File.exists?(definition)
40:         definition_file_extension = File.extname(definition)
41: 
42:         appliance_config =
43:             case definition_file_extension
44:               when '.appl', '.yml', '.yaml'
45:                 parse_yaml(@appliance_parser.parse_definition(definition))
46:               else
47:                 unless content_type.nil?
48:                   case content_type
49:                     when 'application/x-yaml', 'text/yaml'
50:                       parse_yaml(@appliance_parser.parse_definition(definition))
51:                   end
52:                 end
53:             end
54: 
55:         raise 'Unsupported file format for appliance definition file.' if appliance_config.nil?
56: 
57:         @appliance_configs << appliance_config
58:         appliances = []
59: 
60:         @appliance_configs.each { |config| appliances << config.name }
61: 
62:         appliance_config.appliances.reverse.each do |appliance_name|
63:           read_definitions("#{File.dirname(definition)}/#{appliance_name}#{definition_file_extension}") unless appliances.include?(appliance_name)
64:         end unless appliance_config.appliances.nil? or !appliance_config.appliances.is_a?(Array)
65:       else
66:         # Assuming that the definition is provided as string
67:         @appliance_configs << parse_yaml(@appliance_parser.parse_definition(definition, false))
68:       end
69:     end

[Validate]