boxgrinder-core 0.1.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +14 -0
- data/Manifest +4 -1
- data/boxgrinder-core.gemspec +4 -4
- data/lib/boxgrinder-core.rb +0 -2
- data/lib/boxgrinder-core/helpers/appliance-config-helper.rb +13 -16
- data/lib/boxgrinder-core/helpers/appliance-helper.rb +64 -35
- data/lib/boxgrinder-core/helpers/exec-helper.rb +3 -0
- data/lib/boxgrinder-core/helpers/log-helper.rb +2 -3
- data/lib/boxgrinder-core/models/appliance-config.rb +6 -11
- data/lib/boxgrinder-core/models/config.rb +36 -45
- data/lib/boxgrinder-core/validators/appliance-config-validator.rb +0 -1
- data/rubygem-boxgrinder-core.spec +18 -1
- data/spec/helpers/appliance-config-helper-spec.rb +197 -113
- data/spec/helpers/appliance-helper-spec.rb +160 -45
- data/spec/helpers/log-helper-spec.rb +2 -2
- data/spec/models/config-spec.rb +56 -0
- data/spec/rspec/src/appliances/ephemeral-repo.appl +2 -3
- data/spec/rspec/src/appliances/full.appl +2 -3
- data/spec/rspec/src/appliances/invalid_yaml.appl +1 -0
- data/spec/rspec/src/appliances/repo.appl +2 -3
- data/spec/rspec/src/config/empty +0 -0
- data/spec/rspec/src/config/valid +4 -0
- metadata +9 -7
- data/lib/boxgrinder-core/defaults.rb +0 -58
    
        data/CHANGELOG
    CHANGED
    
    | @@ -1,3 +1,17 @@ | |
| 1 | 
            +
            v0.2.0
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * [BGBUILD-133] Support a consolidated configuration file
         | 
| 4 | 
            +
            * [BGBUILD-68] Global .boxgrinder/config or rc style file for config
         | 
| 5 | 
            +
            * [BGBUILD-127] Use appliance definition object instead of a file when using BG as a library
         | 
| 6 | 
            +
            * [BGBUILD-79] Allow to use BoxGrinder Build as a library
         | 
| 7 | 
            +
            * [BGBUILD-93] Add Red Hat Enterprise Linux 6 support
         | 
| 8 | 
            +
            * [BGBUILD-101] Don't use 'includes' subsection when specifying packages
         | 
| 9 | 
            +
            * [BGBUILD-60] Post section merging pattern for appliances depending on the same appliance
         | 
| 10 | 
            +
            * [BGBUILD-151] Overriding hardware partitions via inclusion in Appliance Definition File causes build failure
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            v0.1.6
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            * [BGBUILD-100] Enable boxgrinder_build to create a Fedora image with encrypted partition(s)
         | 
| 1 15 |  | 
| 2 16 | 
             
            v0.1.5
         | 
| 3 17 |  | 
    
        data/Manifest
    CHANGED
    
    | @@ -5,7 +5,6 @@ README | |
| 5 5 | 
             
            Rakefile
         | 
| 6 6 | 
             
            boxgrinder-core.gemspec
         | 
| 7 7 | 
             
            lib/boxgrinder-core.rb
         | 
| 8 | 
            -
            lib/boxgrinder-core/defaults.rb
         | 
| 9 8 | 
             
            lib/boxgrinder-core/helpers/appliance-config-helper.rb
         | 
| 10 9 | 
             
            lib/boxgrinder-core/helpers/appliance-helper.rb
         | 
| 11 10 | 
             
            lib/boxgrinder-core/helpers/exec-helper.rb
         | 
| @@ -20,10 +19,14 @@ spec/helpers/appliance-config-helper-spec.rb | |
| 20 19 | 
             
            spec/helpers/appliance-helper-spec.rb
         | 
| 21 20 | 
             
            spec/helpers/exec-helper-spec.rb
         | 
| 22 21 | 
             
            spec/helpers/log-helper-spec.rb
         | 
| 22 | 
            +
            spec/models/config-spec.rb
         | 
| 23 23 | 
             
            spec/rspec/ls/one
         | 
| 24 24 | 
             
            spec/rspec/ls/two
         | 
| 25 25 | 
             
            spec/rspec/rspec-config-helper.rb
         | 
| 26 26 | 
             
            spec/rspec/src/appliances/ephemeral-repo.appl
         | 
| 27 27 | 
             
            spec/rspec/src/appliances/full.appl
         | 
| 28 | 
            +
            spec/rspec/src/appliances/invalid_yaml.appl
         | 
| 28 29 | 
             
            spec/rspec/src/appliances/repo.appl
         | 
| 30 | 
            +
            spec/rspec/src/config/empty
         | 
| 31 | 
            +
            spec/rspec/src/config/valid
         | 
| 29 32 | 
             
            spec/validators/appliance-config-validator-spec.rb
         | 
    
        data/boxgrinder-core.gemspec
    CHANGED
    
    | @@ -2,15 +2,15 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            Gem::Specification.new do |s|
         | 
| 4 4 | 
             
              s.name = %q{boxgrinder-core}
         | 
| 5 | 
            -
              s.version = "0. | 
| 5 | 
            +
              s.version = "0.2.0"
         | 
| 6 6 |  | 
| 7 7 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
         | 
| 8 8 | 
             
              s.authors = ["Marek Goldmann"]
         | 
| 9 | 
            -
              s.date = %q{ | 
| 9 | 
            +
              s.date = %q{2011-02-09}
         | 
| 10 10 | 
             
              s.description = %q{Core library for BoxGrinder}
         | 
| 11 11 | 
             
              s.email = %q{info@boxgrinder.org}
         | 
| 12 | 
            -
              s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "lib/boxgrinder-core.rb", "lib/boxgrinder-core/ | 
| 13 | 
            -
              s.files = ["CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "boxgrinder-core.gemspec", "lib/boxgrinder-core.rb", "lib/boxgrinder-core/ | 
| 12 | 
            +
              s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "lib/boxgrinder-core.rb", "lib/boxgrinder-core/helpers/appliance-config-helper.rb", "lib/boxgrinder-core/helpers/appliance-helper.rb", "lib/boxgrinder-core/helpers/exec-helper.rb", "lib/boxgrinder-core/helpers/log-helper.rb", "lib/boxgrinder-core/models/appliance-config.rb", "lib/boxgrinder-core/models/config.rb", "lib/boxgrinder-core/models/task.rb", "lib/boxgrinder-core/validators/appliance-config-validator.rb", "lib/boxgrinder-core/validators/errors.rb"]
         | 
| 13 | 
            +
              s.files = ["CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "boxgrinder-core.gemspec", "lib/boxgrinder-core.rb", "lib/boxgrinder-core/helpers/appliance-config-helper.rb", "lib/boxgrinder-core/helpers/appliance-helper.rb", "lib/boxgrinder-core/helpers/exec-helper.rb", "lib/boxgrinder-core/helpers/log-helper.rb", "lib/boxgrinder-core/models/appliance-config.rb", "lib/boxgrinder-core/models/config.rb", "lib/boxgrinder-core/models/task.rb", "lib/boxgrinder-core/validators/appliance-config-validator.rb", "lib/boxgrinder-core/validators/errors.rb", "rubygem-boxgrinder-core.spec", "spec/helpers/appliance-config-helper-spec.rb", "spec/helpers/appliance-helper-spec.rb", "spec/helpers/exec-helper-spec.rb", "spec/helpers/log-helper-spec.rb", "spec/models/config-spec.rb", "spec/rspec/ls/one", "spec/rspec/ls/two", "spec/rspec/rspec-config-helper.rb", "spec/rspec/src/appliances/ephemeral-repo.appl", "spec/rspec/src/appliances/full.appl", "spec/rspec/src/appliances/invalid_yaml.appl", "spec/rspec/src/appliances/repo.appl", "spec/rspec/src/config/empty", "spec/rspec/src/config/valid", "spec/validators/appliance-config-validator-spec.rb"]
         | 
| 14 14 | 
             
              s.homepage = %q{http://www.jboss.org/boxgrinder}
         | 
| 15 15 | 
             
              s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Boxgrinder-core", "--main", "README"]
         | 
| 16 16 | 
             
              s.require_paths = ["lib"]
         | 
    
        data/lib/boxgrinder-core.rb
    CHANGED
    
    
| @@ -23,7 +23,7 @@ module BoxGrinder | |
| 23 23 | 
             
              class ApplianceConfigHelper
         | 
| 24 24 |  | 
| 25 25 | 
             
                def initialize(appliance_configs)
         | 
| 26 | 
            -
                  @appliance_configs | 
| 26 | 
            +
                  @appliance_configs = appliance_configs.reverse
         | 
| 27 27 | 
             
                end
         | 
| 28 28 |  | 
| 29 29 | 
             
                def merge(appliance_config)
         | 
| @@ -125,6 +125,7 @@ module BoxGrinder | |
| 125 125 | 
             
                        end
         | 
| 126 126 | 
             
                      end
         | 
| 127 127 |  | 
| 128 | 
            +
                      partitions[root]['passphrase'] = partition['passphrase'] unless partition['passphrase'].nil?
         | 
| 128 129 | 
             
                      partitions[root]['options'] = partition['options'] unless partition['options'].nil?
         | 
| 129 130 | 
             
                    end
         | 
| 130 131 | 
             
                  end
         | 
| @@ -133,14 +134,13 @@ module BoxGrinder | |
| 133 134 | 
             
                end
         | 
| 134 135 |  | 
| 135 136 | 
             
                def default_filesystem_type
         | 
| 136 | 
            -
                  fs = ' | 
| 137 | 
            +
                  fs = 'ext4'
         | 
| 137 138 |  | 
| 138 139 | 
             
                  case @appliance_config.os.name
         | 
| 139 | 
            -
                    when ' | 
| 140 | 
            -
             | 
| 140 | 
            +
                    when 'rhel', 'centos'
         | 
| 141 141 | 
             
                      case @appliance_config.os.version
         | 
| 142 | 
            -
                        when ' | 
| 143 | 
            -
                          fs = ' | 
| 142 | 
            +
                        when '5'
         | 
| 143 | 
            +
                          fs = 'ext3'
         | 
| 144 144 | 
             
                      end
         | 
| 145 145 | 
             
                  end
         | 
| 146 146 |  | 
| @@ -155,8 +155,6 @@ module BoxGrinder | |
| 155 155 | 
             
                  merge_field('os.name') { |name| @appliance_config.os.name = name.to_s }
         | 
| 156 156 | 
             
                  merge_field('os.version') { |version| @appliance_config.os.version = version.to_s }
         | 
| 157 157 | 
             
                  merge_field('os.password') { |password| @appliance_config.os.password = password.to_s }
         | 
| 158 | 
            -
             | 
| 159 | 
            -
                  @appliance_config.os.password = APPLIANCE_DEFAULTS[:os][:password] if @appliance_config.os.password.nil?
         | 
| 160 158 | 
             
                end
         | 
| 161 159 |  | 
| 162 160 | 
             
                def prepare_appliances
         | 
| @@ -191,16 +189,11 @@ module BoxGrinder | |
| 191 189 | 
             
                end
         | 
| 192 190 |  | 
| 193 191 | 
             
                def merge_packages
         | 
| 194 | 
            -
                  @appliance_config.packages. | 
| 195 | 
            -
                  @appliance_config.packages.excludes.clear
         | 
| 192 | 
            +
                  @appliance_config.packages.clear
         | 
| 196 193 |  | 
| 197 194 | 
             
                  @appliance_configs.each do |appliance_config|
         | 
| 198 | 
            -
                    appliance_config.packages. | 
| 199 | 
            -
                      @appliance_config.packages | 
| 200 | 
            -
                    end
         | 
| 201 | 
            -
             | 
| 202 | 
            -
                    appliance_config.packages.excludes.each do |package|
         | 
| 203 | 
            -
                      @appliance_config.packages.excludes << package
         | 
| 195 | 
            +
                    appliance_config.packages.each do |package|
         | 
| 196 | 
            +
                      @appliance_config.packages << package
         | 
| 204 197 | 
             
                    end
         | 
| 205 198 | 
             
                  end
         | 
| 206 199 | 
             
                end
         | 
| @@ -208,11 +201,15 @@ module BoxGrinder | |
| 208 201 | 
             
                def merge_post_operations
         | 
| 209 202 | 
             
                  @appliance_config.post.each_value { |cmds| cmds.clear }
         | 
| 210 203 |  | 
| 204 | 
            +
                  included = []
         | 
| 205 | 
            +
             | 
| 211 206 | 
             
                  @appliance_configs.each do |appliance_config|
         | 
| 207 | 
            +
                    next if included.include?(appliance_config)
         | 
| 212 208 | 
             
                    appliance_config.post.each do |platform, cmds|
         | 
| 213 209 | 
             
                      @appliance_config.post[platform] = [] if @appliance_config.post[platform].nil?
         | 
| 214 210 | 
             
                      cmds.each { |cmd| @appliance_config.post[platform] << substitute_vars(cmd) }
         | 
| 215 211 | 
             
                    end
         | 
| 212 | 
            +
                    included << appliance_config
         | 
| 216 213 | 
             
                  end
         | 
| 217 214 | 
             
                end
         | 
| 218 215 |  | 
| @@ -25,49 +25,77 @@ module BoxGrinder | |
| 25 25 | 
             
                  @log = options[:log] || Logger.new(STDOUT)
         | 
| 26 26 | 
             
                end
         | 
| 27 27 |  | 
| 28 | 
            -
                 | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 28 | 
            +
                # Reads definition provided as string. This string can be a YAML document. In this case
         | 
| 29 | 
            +
                # definition is parsed and an ApplianceConfig object is returned. In other cases it tries to search
         | 
| 30 | 
            +
                # for a file with provided name.
         | 
| 31 | 
            +
                def read_definitions(definition, content_type = nil)
         | 
| 32 32 | 
             
                  configs = []
         | 
| 33 33 |  | 
| 34 | 
            -
                   | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
                         | 
| 41 | 
            -
                           | 
| 42 | 
            -
                             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 34 | 
            +
                  if File.exists?(definition)
         | 
| 35 | 
            +
                    @log.debug "Reading definition from '#{definition}' file..."
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    definition_file_extension = File.extname(definition)
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    appliance_config =
         | 
| 40 | 
            +
                        case definition_file_extension
         | 
| 41 | 
            +
                          when '.appl', '.yml', '.yaml'
         | 
| 42 | 
            +
                            read_yaml_file(definition)
         | 
| 43 | 
            +
                          when '.xml'
         | 
| 44 | 
            +
                            read_xml_file(definition)
         | 
| 45 | 
            +
                          else
         | 
| 46 | 
            +
                            unless content_type.nil?
         | 
| 47 | 
            +
                              case content_type
         | 
| 48 | 
            +
                                when 'application/x-yaml', 'text/yaml'
         | 
| 49 | 
            +
                                  read_yaml_file(definition)
         | 
| 50 | 
            +
                                when 'application/xml', 'text/xml', 'application/x-xml'
         | 
| 51 | 
            +
                                  read_xml_file(definition)
         | 
| 52 | 
            +
                              end
         | 
| 47 53 | 
             
                            end
         | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 54 | 
            +
                        end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    raise 'Unsupported file format for appliance definition file.' if appliance_config.nil?
         | 
| 50 57 |  | 
| 51 | 
            -
             | 
| 58 | 
            +
                    configs << appliance_config
         | 
| 52 59 |  | 
| 53 | 
            -
             | 
| 60 | 
            +
                    appliance_config.appliances.reverse.each do |appliance_name|
         | 
| 61 | 
            +
                      configs << read_definitions("#{File.dirname(definition)}/#{appliance_name}#{definition_file_extension}").first
         | 
| 62 | 
            +
                    end unless appliance_config.appliances.nil? or !appliance_config.appliances.is_a?(Array)
         | 
| 63 | 
            +
                  else
         | 
| 64 | 
            +
                    @log.debug "Reading definition..."
         | 
| 54 65 |  | 
| 55 | 
            -
             | 
| 56 | 
            -
                    configs <<  | 
| 57 | 
            -
                  end | 
| 66 | 
            +
                    appliance_config = read_yaml(definition)
         | 
| 67 | 
            +
                    configs << appliance_config
         | 
| 68 | 
            +
                  end
         | 
| 58 69 |  | 
| 59 70 | 
             
                  [configs.flatten, appliance_config]
         | 
| 60 71 | 
             
                end
         | 
| 61 72 |  | 
| 62 | 
            -
                def read_yaml( | 
| 73 | 
            +
                def read_yaml(content)
         | 
| 74 | 
            +
                  begin
         | 
| 75 | 
            +
                    definition = YAML.load(content)
         | 
| 76 | 
            +
                    raise "Not a valid YAML content." if definition.nil? or definition == false
         | 
| 77 | 
            +
                  rescue
         | 
| 78 | 
            +
                    raise "Provided definition could not be read."
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  parse_yaml(definition)
         | 
| 82 | 
            +
                end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                def read_yaml_file(file)
         | 
| 63 85 | 
             
                  begin
         | 
| 64 86 | 
             
                    definition = YAML.load_file(file)
         | 
| 65 | 
            -
                    raise if definition.nil? or definition == false
         | 
| 87 | 
            +
                    raise "Not a valid YAML file." if definition.nil? or definition == false
         | 
| 66 88 | 
             
                  rescue
         | 
| 67 89 | 
             
                    raise "File '#{file}' could not be read."
         | 
| 68 90 | 
             
                  end
         | 
| 69 91 |  | 
| 92 | 
            +
                  parse_yaml(definition)
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                # TODO this needs to be rewritten
         | 
| 96 | 
            +
                def parse_yaml(definition)
         | 
| 70 97 | 
             
                  return definition if definition.is_a?(ApplianceConfig)
         | 
| 98 | 
            +
                  raise "Provided definition is not a Hash." unless definition.is_a?(Hash)
         | 
| 71 99 |  | 
| 72 100 | 
             
                  appliance_config = ApplianceConfig.new
         | 
| 73 101 |  | 
| @@ -76,6 +104,7 @@ module BoxGrinder | |
| 76 104 |  | 
| 77 105 | 
             
                  definition['variables'].each { |key, value| appliance_config.variables[key] = value } unless definition['variables'].nil?
         | 
| 78 106 |  | 
| 107 | 
            +
                  appliance_config.packages = definition['packages'] unless definition['packages'].nil?
         | 
| 79 108 | 
             
                  appliance_config.appliances = definition['appliances'] unless definition['appliances'].nil?
         | 
| 80 109 | 
             
                  appliance_config.repos = definition['repos'] unless definition['repos'].nil?
         | 
| 81 110 |  | 
| @@ -84,12 +113,7 @@ module BoxGrinder | |
| 84 113 |  | 
| 85 114 | 
             
                  unless definition['default_repos'].nil?
         | 
| 86 115 | 
             
                    appliance_config.default_repos = definition['default_repos']
         | 
| 87 | 
            -
                    raise " | 
| 88 | 
            -
                  end
         | 
| 89 | 
            -
             | 
| 90 | 
            -
                  unless definition['packages'].nil?
         | 
| 91 | 
            -
                    appliance_config.packages.includes = definition['packages']['includes'] unless definition['packages']['includes'].nil?
         | 
| 92 | 
            -
                    appliance_config.packages.excludes = definition['packages']['excludes'] unless definition['packages']['excludes'].nil?
         | 
| 116 | 
            +
                    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)
         | 
| 93 117 | 
             
                  end
         | 
| 94 118 |  | 
| 95 119 | 
             
                  unless definition['os'].nil?
         | 
| @@ -103,7 +127,12 @@ module BoxGrinder | |
| 103 127 | 
             
                    appliance_config.hardware.cpus = definition['hardware']['cpus'] unless definition['hardware']['cpus'].nil?
         | 
| 104 128 | 
             
                    appliance_config.hardware.memory = definition['hardware']['memory'] unless definition['hardware']['memory'].nil?
         | 
| 105 129 | 
             
                    appliance_config.hardware.network = definition['hardware']['network'] unless definition['hardware']['network'].nil?
         | 
| 106 | 
            -
             | 
| 130 | 
            +
             | 
| 131 | 
            +
                    unless definition['hardware']['partitions'].nil?
         | 
| 132 | 
            +
                      definition['hardware']['partitions'].each do |key, part|
         | 
| 133 | 
            +
                        appliance_config.hardware.partitions[key] = part
         | 
| 134 | 
            +
                      end if definition['hardware']['partitions'].is_a?(Hash)
         | 
| 135 | 
            +
                    end
         | 
| 107 136 | 
             
                  end
         | 
| 108 137 |  | 
| 109 138 | 
             
                  definition['post'].each { |key, value| appliance_config.post[key] = value } unless definition['post'].nil?
         | 
| @@ -111,8 +140,8 @@ module BoxGrinder | |
| 111 140 | 
             
                  appliance_config
         | 
| 112 141 | 
             
                end
         | 
| 113 142 |  | 
| 114 | 
            -
                def  | 
| 115 | 
            -
                  raise "Reading XML files is not supported right now. File '#{file}' could not be read"
         | 
| 143 | 
            +
                def read_xml_file(file)
         | 
| 144 | 
            +
                  raise "Reading XML files is not supported right now. File '#{file}' could not be read."
         | 
| 116 145 | 
             
                end
         | 
| 117 146 | 
             
              end
         | 
| 118 147 | 
             
            end
         | 
| @@ -17,7 +17,6 @@ | |
| 17 17 | 
             
            # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
         | 
| 18 18 |  | 
| 19 19 | 
             
            require 'logger'
         | 
| 20 | 
            -
            require 'boxgrinder-core/defaults'
         | 
| 21 20 | 
             
            require 'fileutils'
         | 
| 22 21 |  | 
| 23 22 | 
             
            Logger.const_set(:TRACE, 0)
         | 
| @@ -53,8 +52,8 @@ module BoxGrinder | |
| 53 52 | 
             
                }
         | 
| 54 53 |  | 
| 55 54 | 
             
                def initialize(options = {})
         | 
| 56 | 
            -
                  location      = options[:location] ||  | 
| 57 | 
            -
                  threshold     = options[: | 
| 55 | 
            +
                  location      = options[:location] || 'log/boxgrinder.log'
         | 
| 56 | 
            +
                  threshold     = options[:level].nil? ? :info : options[:level].to_sym
         | 
| 58 57 | 
             
                  type          = options[:type] || [:stdout, :file]
         | 
| 59 58 |  | 
| 60 59 | 
             
                  unless type.is_a?(Array)
         | 
| @@ -17,7 +17,6 @@ | |
| 17 17 | 
             
            # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
         | 
| 18 18 |  | 
| 19 19 | 
             
            require 'rubygems'
         | 
| 20 | 
            -
            require 'boxgrinder-core/defaults'
         | 
| 21 20 | 
             
            require 'hashery/opencascade'
         | 
| 22 21 |  | 
| 23 22 | 
             
            module BoxGrinder
         | 
| @@ -32,21 +31,18 @@ module BoxGrinder | |
| 32 31 |  | 
| 33 32 | 
             
                  @os.name             = nil
         | 
| 34 33 | 
             
                  @os.version          = nil
         | 
| 35 | 
            -
                  @os.password         =  | 
| 34 | 
            +
                  @os.password         = 'boxgrinder'
         | 
| 36 35 |  | 
| 37 36 | 
             
                  @hardware            = OpenCascade.new
         | 
| 38 37 |  | 
| 39 | 
            -
                  @hardware.cpus       =  | 
| 40 | 
            -
                  @hardware.memory     =  | 
| 41 | 
            -
                  @hardware.network    =  | 
| 42 | 
            -
                  @hardware.partitions =  | 
| 38 | 
            +
                  @hardware.cpus       = 1
         | 
| 39 | 
            +
                  @hardware.memory     = 256
         | 
| 40 | 
            +
                  @hardware.network    = 'NAT'
         | 
| 41 | 
            +
                  @hardware.partitions = {"/" => { 'size' => 1 }}
         | 
| 43 42 |  | 
| 44 43 | 
             
                  @post                = {}
         | 
| 45 44 |  | 
| 46 | 
            -
                  @packages            =  | 
| 47 | 
            -
                  @packages.includes   = []
         | 
| 48 | 
            -
                  @packages.excludes   = []
         | 
| 49 | 
            -
             | 
| 45 | 
            +
                  @packages            = []
         | 
| 50 46 | 
             
                  @appliances          = []
         | 
| 51 47 | 
             
                  @repos               = []
         | 
| 52 48 |  | 
| @@ -58,7 +54,6 @@ module BoxGrinder | |
| 58 54 | 
             
                attr_reader :os
         | 
| 59 55 | 
             
                attr_reader :hardware
         | 
| 60 56 | 
             
                attr_reader :path
         | 
| 61 | 
            -
                attr_reader :file
         | 
| 62 57 | 
             
                attr_reader :post
         | 
| 63 58 |  | 
| 64 59 | 
             
                attr_accessor :packages
         | 
| @@ -16,55 +16,46 @@ | |
| 16 16 | 
             
            # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
         | 
| 17 17 | 
             
            # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
         | 
| 18 18 |  | 
| 19 | 
            -
            require ' | 
| 20 | 
            -
            require ' | 
| 19 | 
            +
            require 'rubygems'
         | 
| 20 | 
            +
            require 'hashery/opencascade'
         | 
| 21 | 
            +
            require 'yaml'
         | 
| 21 22 |  | 
| 22 23 | 
             
            module BoxGrinder
         | 
| 23 | 
            -
              class Config
         | 
| 24 | 
            -
                def initialize
         | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
                   | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
                   | 
| 48 | 
            -
             | 
| 49 | 
            -
                  if File.exists?( @config_file )
         | 
| 50 | 
            -
                    @data = YAML.load_file( @config_file )
         | 
| 51 | 
            -
                    @data['gpg_password'].gsub!(/\$/, "\\$") unless @data['gpg_password'].nil? or @data['gpg_password'].length == 0
         | 
| 52 | 
            -
                    @dir.rpms_cache = @data['rpms_cache'] || @dir.rpms_cache
         | 
| 53 | 
            -
                    @dir.src_cache  = @data['src_cache']  || @dir.src_cache
         | 
| 54 | 
            -
                  end
         | 
| 24 | 
            +
              class Config < OpenCascade
         | 
| 25 | 
            +
                def initialize(values = {})
         | 
| 26 | 
            +
                  super({})
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  merge!(
         | 
| 29 | 
            +
                      :file => ENV['BG_CONFIG_FILE'] || "#{ENV['HOME']}/.boxgrinder/config",
         | 
| 30 | 
            +
                      :name => 'BoxGrinder Build',
         | 
| 31 | 
            +
                      :platform => :none,
         | 
| 32 | 
            +
                      :delivery => :none,
         | 
| 33 | 
            +
                      :force => false,
         | 
| 34 | 
            +
                      :log_level => :info,
         | 
| 35 | 
            +
                      :dir => {
         | 
| 36 | 
            +
                          :root => Dir.pwd,
         | 
| 37 | 
            +
                          :build => 'build',
         | 
| 38 | 
            +
                          :cache => '/var/cache/boxgrinder' # required for appliance-creator
         | 
| 39 | 
            +
                      },
         | 
| 40 | 
            +
                      :os_config => {},
         | 
| 41 | 
            +
                      :platform_config => {},
         | 
| 42 | 
            +
                      :delivery_config => {},
         | 
| 43 | 
            +
                      :additional_plugins => []
         | 
| 44 | 
            +
                  )
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  merge!(values.inject({}) { |memo, (k, v)| memo[k.to_sym] = v; memo })
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  deep_merge(self, YAML.load_file(self.file)) if File.exists?(self.file)
         | 
| 55 49 | 
             
                end
         | 
| 56 50 |  | 
| 57 | 
            -
                def  | 
| 58 | 
            -
                   | 
| 51 | 
            +
                def deep_merge(first, second)
         | 
| 52 | 
            +
                  second.each_key do |k|
         | 
| 53 | 
            +
                    if first[k.to_sym].is_a?(Hash) and second[k].is_a?(Hash)
         | 
| 54 | 
            +
                      deep_merge(first[k.to_sym], second[k])
         | 
| 55 | 
            +
                    else
         | 
| 56 | 
            +
                      first[k.to_sym] = second[k]
         | 
| 57 | 
            +
                    end
         | 
| 58 | 
            +
                  end if second
         | 
| 59 59 | 
             
                end
         | 
| 60 | 
            -
             | 
| 61 | 
            -
                attr_accessor :name
         | 
| 62 | 
            -
                attr_accessor :version
         | 
| 63 | 
            -
                attr_accessor :release
         | 
| 64 | 
            -
                attr_accessor :config_file
         | 
| 65 | 
            -
                attr_reader :files
         | 
| 66 | 
            -
             | 
| 67 | 
            -
                attr_reader :data
         | 
| 68 | 
            -
                attr_reader :dir
         | 
| 69 60 | 
             
              end
         | 
| 70 61 | 
             
            end
         |