| Class | BoxGrinder::ApplianceDefinitionHelper |
| In: |
lib/boxgrinder-core/helpers/appliance-definition-helper.rb
lib/boxgrinder-core/helpers/appliance-definition-helper.rb |
| Parent: | Object |
| appliance_configs | [R] | |
| appliance_configs | [R] | |
| appliance_parser | [R] | |
| appliance_parser | [R] |
# 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
# 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
TODO this needs to be rewritten - using kwalify it could be possible to instantiate document structure as objects[, or opencascade hash?]
# 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['files'].each { |key, value| appliance_config.files[key] = value } unless definition['files'].nil?
121: definition['post'].each { |key, value| appliance_config.post[key] = value } unless definition['post'].nil?
122:
123: appliance_config
124: end
TODO this needs to be rewritten - using kwalify it could be possible to instantiate document structure as objects[, or opencascade hash?]
# 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['files'].each { |key, value| appliance_config.files[key] = value } unless definition['files'].nil?
121: definition['post'].each { |key, value| appliance_config.post[key] = value } unless definition['post'].nil?
122:
123: appliance_config
124: 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.
# 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: return 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.
# 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: return 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