boxgrinder-core 0.3.9 → 0.3.10
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 +6 -0
- data/Manifest +0 -44
- data/boxgrinder-core.gemspec +9 -10
- data/lib/boxgrinder-core/helpers/appliance-config-helper.rb +33 -16
- data/lib/boxgrinder-core/models/appliance-config.rb +19 -0
- data/lib/boxgrinder-core/schemas/appliance_schema_0.8.0.yaml +1 -1
- data/lib/boxgrinder-core/schemas/appliance_schema_0.9.0.yaml +1 -1
- data/lib/boxgrinder-core/schemas/appliance_schema_0.9.6.yaml +1 -1
- data/rubygem-boxgrinder-core.spec +7 -1
- data/spec/helpers/appliance-config-helper-spec.rb +72 -0
- metadata +6 -8
    
        data/CHANGELOG
    CHANGED
    
    | @@ -1,3 +1,9 @@ | |
| 1 | 
            +
            v0.3.10
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * [BGBUILD-324] Add wildcard to packages schema
         | 
| 4 | 
            +
            * [BGBUILD-320] Support variable substitution in any string value field of appliance definition
         | 
| 5 | 
            +
            * [BGBUILD-327] Resolve appliance definition variables in ENV if they are not defined
         | 
| 6 | 
            +
             | 
| 1 7 | 
             
            v0.3.9
         | 
| 2 8 |  | 
| 3 9 | 
             
            * [BGBUILD-312] Discover which user to switch to after root dependent sections have been executed
         | 
    
        data/Manifest
    CHANGED
    
    | @@ -1,44 +0,0 @@ | |
| 1 | 
            -
            CHANGELOG
         | 
| 2 | 
            -
            LICENSE
         | 
| 3 | 
            -
            Manifest
         | 
| 4 | 
            -
            README
         | 
| 5 | 
            -
            Rakefile
         | 
| 6 | 
            -
            boxgrinder-core.gemspec
         | 
| 7 | 
            -
            lib/boxgrinder-core.rb
         | 
| 8 | 
            -
            lib/boxgrinder-core/appliance-parser.rb
         | 
| 9 | 
            -
            lib/boxgrinder-core/appliance-validator.rb
         | 
| 10 | 
            -
            lib/boxgrinder-core/errors.rb
         | 
| 11 | 
            -
            lib/boxgrinder-core/helpers/appliance-config-helper.rb
         | 
| 12 | 
            -
            lib/boxgrinder-core/helpers/appliance-definition-helper.rb
         | 
| 13 | 
            -
            lib/boxgrinder-core/helpers/appliance-transformation-helper.rb
         | 
| 14 | 
            -
            lib/boxgrinder-core/helpers/exec-helper.rb
         | 
| 15 | 
            -
            lib/boxgrinder-core/helpers/log-helper.rb
         | 
| 16 | 
            -
            lib/boxgrinder-core/models/appliance-config.rb
         | 
| 17 | 
            -
            lib/boxgrinder-core/models/config.rb
         | 
| 18 | 
            -
            lib/boxgrinder-core/models/task.rb
         | 
| 19 | 
            -
            lib/boxgrinder-core/schemas/appliance_schema_0.8.0.yaml
         | 
| 20 | 
            -
            lib/boxgrinder-core/schemas/appliance_schema_0.9.0.yaml
         | 
| 21 | 
            -
            lib/boxgrinder-core/schemas/appliance_schema_0.9.6.yaml
         | 
| 22 | 
            -
            rubygem-boxgrinder-core.spec
         | 
| 23 | 
            -
            spec/appliance-parser-spec.rb
         | 
| 24 | 
            -
            spec/appliance-validator-spec.rb
         | 
| 25 | 
            -
            spec/helpers/appliance-config-helper-spec.rb
         | 
| 26 | 
            -
            spec/helpers/appliance-definition-helper-spec.rb
         | 
| 27 | 
            -
            spec/helpers/appliance-transformation-helper-spec.rb
         | 
| 28 | 
            -
            spec/helpers/exec-helper-spec.rb
         | 
| 29 | 
            -
            spec/helpers/log-helper-spec.rb
         | 
| 30 | 
            -
            spec/models/appliance-config-spec.rb
         | 
| 31 | 
            -
            spec/models/config-spec.rb
         | 
| 32 | 
            -
            spec/rspec/ls/one
         | 
| 33 | 
            -
            spec/rspec/ls/two
         | 
| 34 | 
            -
            spec/rspec/src/appliances/0.8.x.appl
         | 
| 35 | 
            -
            spec/rspec/src/appliances/0.9.x-invalid.appl
         | 
| 36 | 
            -
            spec/rspec/src/appliances/0.9.x.appl
         | 
| 37 | 
            -
            spec/rspec/src/appliances/comments.appl
         | 
| 38 | 
            -
            spec/rspec/src/appliances/ephemeral-repo.appl
         | 
| 39 | 
            -
            spec/rspec/src/appliances/full.appl
         | 
| 40 | 
            -
            spec/rspec/src/appliances/invalid-yaml.appl
         | 
| 41 | 
            -
            spec/rspec/src/appliances/legacy.appl
         | 
| 42 | 
            -
            spec/rspec/src/appliances/repo.appl
         | 
| 43 | 
            -
            spec/rspec/src/config/empty
         | 
| 44 | 
            -
            spec/rspec/src/config/valid
         | 
    
        data/boxgrinder-core.gemspec
    CHANGED
    
    | @@ -1,25 +1,24 @@ | |
| 1 1 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 2 2 |  | 
| 3 3 | 
             
            Gem::Specification.new do |s|
         | 
| 4 | 
            -
              s.name =  | 
| 5 | 
            -
              s.version = "0.3. | 
| 4 | 
            +
              s.name = "boxgrinder-core"
         | 
| 5 | 
            +
              s.version = "0.3.10"
         | 
| 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 =  | 
| 10 | 
            -
              s.description =  | 
| 11 | 
            -
              s.email =  | 
| 9 | 
            +
              s.date = "2011-12-19"
         | 
| 10 | 
            +
              s.description = "Core library for BoxGrinder"
         | 
| 11 | 
            +
              s.email = "info@boxgrinder.org"
         | 
| 12 12 | 
             
              s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "lib/boxgrinder-core.rb", "lib/boxgrinder-core/appliance-parser.rb", "lib/boxgrinder-core/appliance-validator.rb", "lib/boxgrinder-core/errors.rb", "lib/boxgrinder-core/helpers/appliance-config-helper.rb", "lib/boxgrinder-core/helpers/appliance-definition-helper.rb", "lib/boxgrinder-core/helpers/appliance-transformation-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/schemas/appliance_schema_0.8.0.yaml", "lib/boxgrinder-core/schemas/appliance_schema_0.9.0.yaml", "lib/boxgrinder-core/schemas/appliance_schema_0.9.6.yaml"]
         | 
| 13 13 | 
             
              s.files = ["CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "boxgrinder-core.gemspec", "lib/boxgrinder-core.rb", "lib/boxgrinder-core/appliance-parser.rb", "lib/boxgrinder-core/appliance-validator.rb", "lib/boxgrinder-core/errors.rb", "lib/boxgrinder-core/helpers/appliance-config-helper.rb", "lib/boxgrinder-core/helpers/appliance-definition-helper.rb", "lib/boxgrinder-core/helpers/appliance-transformation-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/schemas/appliance_schema_0.8.0.yaml", "lib/boxgrinder-core/schemas/appliance_schema_0.9.0.yaml", "lib/boxgrinder-core/schemas/appliance_schema_0.9.6.yaml", "rubygem-boxgrinder-core.spec", "spec/appliance-parser-spec.rb", "spec/appliance-validator-spec.rb", "spec/helpers/appliance-config-helper-spec.rb", "spec/helpers/appliance-definition-helper-spec.rb", "spec/helpers/appliance-transformation-helper-spec.rb", "spec/helpers/exec-helper-spec.rb", "spec/helpers/log-helper-spec.rb", "spec/models/appliance-config-spec.rb", "spec/models/config-spec.rb", "spec/rspec/ls/one", "spec/rspec/ls/two", "spec/rspec/src/appliances/0.8.x.appl", "spec/rspec/src/appliances/0.9.x-invalid.appl", "spec/rspec/src/appliances/0.9.x.appl", "spec/rspec/src/appliances/comments.appl", "spec/rspec/src/appliances/ephemeral-repo.appl", "spec/rspec/src/appliances/full.appl", "spec/rspec/src/appliances/invalid-yaml.appl", "spec/rspec/src/appliances/legacy.appl", "spec/rspec/src/appliances/repo.appl", "spec/rspec/src/config/empty", "spec/rspec/src/config/valid"]
         | 
| 14 | 
            -
              s.homepage =  | 
| 14 | 
            +
              s.homepage = "http://boxgrinder.org"
         | 
| 15 15 | 
             
              s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Boxgrinder-core", "--main", "README"]
         | 
| 16 16 | 
             
              s.require_paths = ["lib"]
         | 
| 17 | 
            -
              s.rubyforge_project =  | 
| 18 | 
            -
              s.rubygems_version =  | 
| 19 | 
            -
              s.summary =  | 
| 17 | 
            +
              s.rubyforge_project = "BoxGrinder"
         | 
| 18 | 
            +
              s.rubygems_version = "1.8.11"
         | 
| 19 | 
            +
              s.summary = "Core library for BoxGrinder"
         | 
| 20 20 |  | 
| 21 21 | 
             
              if s.respond_to? :specification_version then
         | 
| 22 | 
            -
                current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
         | 
| 23 22 | 
             
                s.specification_version = 3
         | 
| 24 23 |  | 
| 25 24 | 
             
                if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
         | 
| @@ -22,6 +22,8 @@ require 'set' | |
| 22 22 | 
             
            module BoxGrinder
         | 
| 23 23 | 
             
              class ApplianceConfigHelper
         | 
| 24 24 |  | 
| 25 | 
            +
                VAR_SUBSTITUTION_MAX_DEPTH = 20
         | 
| 26 | 
            +
             | 
| 25 27 | 
             
                def initialize(appliance_configs)
         | 
| 26 28 | 
             
                  @appliance_configs = appliance_configs.reverse
         | 
| 27 29 | 
             
                end
         | 
| @@ -39,6 +41,7 @@ module BoxGrinder | |
| 39 41 | 
             
                  merge_packages
         | 
| 40 42 | 
             
                  merge_files
         | 
| 41 43 | 
             
                  merge_post_operations
         | 
| 44 | 
            +
                  substitute_variables
         | 
| 42 45 |  | 
| 43 46 | 
             
                  @appliance_config
         | 
| 44 47 | 
             
                end
         | 
| @@ -90,6 +93,33 @@ module BoxGrinder | |
| 90 93 | 
             
                  end
         | 
| 91 94 | 
             
                end
         | 
| 92 95 |  | 
| 96 | 
            +
                # Get all leaf text values in the appliance definition, then substitute any
         | 
| 97 | 
            +
                # variable values.
         | 
| 98 | 
            +
                def substitute_variables
         | 
| 99 | 
            +
                  @appliance_config.all_values.each do |value|
         | 
| 100 | 
            +
                    substitute(value.clone, value, 0)
         | 
| 101 | 
            +
                  end
         | 
| 102 | 
            +
                end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                # Replace variables with values. This will occur recursively upto a limited
         | 
| 105 | 
            +
                # depth if the resolved values themselves contain variables.
         | 
| 106 | 
            +
                def substitute(init, value, depth)
         | 
| 107 | 
            +
                  if depth > VAR_SUBSTITUTION_MAX_DEPTH
         | 
| 108 | 
            +
                    raise SystemStackError, "Maximal recursive depth (#{VAR_SUBSTITUTION_MAX_DEPTH})
         | 
| 109 | 
            +
                      reached for resolving variable #{init}, reached #{value} before stopping."
         | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
                  original = value.clone
         | 
| 112 | 
            +
                  value.gsub!(/(#(.*?)#)+?/) do
         | 
| 113 | 
            +
                   # 1. Match pre-defined variable, or variable defined in appliance definition.
         | 
| 114 | 
            +
                   next @appliance_config.variables[$2] if @appliance_config.variables.has_key?($2)
         | 
| 115 | 
            +
                   # 2. Match from environment variables.
         | 
| 116 | 
            +
                   next ENV[$2] unless ENV[$2].nil?
         | 
| 117 | 
            +
                   # 3. No match, replace the original string.
         | 
| 118 | 
            +
                   $1
         | 
| 119 | 
            +
                  end
         | 
| 120 | 
            +
                  substitute(init, value, depth+1) unless original == value
         | 
| 121 | 
            +
                end
         | 
| 122 | 
            +
             | 
| 93 123 | 
             
                def merge_hardware
         | 
| 94 124 | 
             
                  merge_cpus
         | 
| 95 125 | 
             
                  merge_partitions
         | 
| @@ -162,25 +192,12 @@ module BoxGrinder | |
| 162 192 | 
             
                  @appliance_config.repos.clear
         | 
| 163 193 |  | 
| 164 194 | 
             
                  @appliance_configs.each do |appliance_config|
         | 
| 165 | 
            -
                     | 
| 166 | 
            -
                      repo['name'] = substitute_vars(repo['name'])
         | 
| 167 | 
            -
                      ['baseurl', 'mirrorlist'].each do |type|
         | 
| 168 | 
            -
                        repo[type] = substitute_vars(repo[type]) unless repo[type].nil?
         | 
| 169 | 
            -
                      end
         | 
| 170 | 
            -
             | 
| 195 | 
            +
                    appliance_config.repos.each do |repo|
         | 
| 171 196 | 
             
                      @appliance_config.repos << repo
         | 
| 172 197 | 
             
                    end
         | 
| 173 198 | 
             
                  end
         | 
| 174 199 | 
             
                end
         | 
| 175 200 |  | 
| 176 | 
            -
                def substitute_vars(str)
         | 
| 177 | 
            -
                  return if str.nil?
         | 
| 178 | 
            -
                  @appliance_config.variables.keys.each do |var|
         | 
| 179 | 
            -
                    str = str.gsub("##{var}#", @appliance_config.variables[var])
         | 
| 180 | 
            -
                  end
         | 
| 181 | 
            -
                  str
         | 
| 182 | 
            -
                end
         | 
| 183 | 
            -
             | 
| 184 201 | 
             
                def merge_packages
         | 
| 185 202 | 
             
                  @appliance_config.packages.clear
         | 
| 186 203 |  | 
| @@ -202,7 +219,7 @@ module BoxGrinder | |
| 202 219 | 
             
                    next if included.include?(appliance_config)
         | 
| 203 220 | 
             
                    appliance_config.files.each do |dir, files|
         | 
| 204 221 | 
             
                      @appliance_config.files[dir] = [] if @appliance_config.files[dir].nil?
         | 
| 205 | 
            -
                      files.each { |f| @appliance_config.files[dir] <<  | 
| 222 | 
            +
                      files.each { |f| @appliance_config.files[dir] << f }
         | 
| 206 223 | 
             
                    end
         | 
| 207 224 | 
             
                    included << appliance_config
         | 
| 208 225 | 
             
                  end
         | 
| @@ -217,7 +234,7 @@ module BoxGrinder | |
| 217 234 | 
             
                    next if included.include?(appliance_config)
         | 
| 218 235 | 
             
                    appliance_config.post.each do |platform, cmds|
         | 
| 219 236 | 
             
                      @appliance_config.post[platform] = [] if @appliance_config.post[platform].nil?
         | 
| 220 | 
            -
                      cmds.each { |cmd| @appliance_config.post[platform] <<  | 
| 237 | 
            +
                      cmds.each { |cmd| @appliance_config.post[platform] << cmd }
         | 
| 221 238 | 
             
                    end
         | 
| 222 239 | 
             
                    included << appliance_config
         | 
| 223 240 | 
             
                  end
         | 
| @@ -94,6 +94,25 @@ module BoxGrinder | |
| 94 94 | 
             
                  self
         | 
| 95 95 | 
             
                end
         | 
| 96 96 |  | 
| 97 | 
            +
                def all_values(input=nil)
         | 
| 98 | 
            +
                  avoid	= ['@variables']
         | 
| 99 | 
            +
                  input = (self.instance_variables - avoid).
         | 
| 100 | 
            +
                    collect{ |v| self.instance_variable_get(v) } if input.nil?
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                  vars = input.inject([]) do |arr, var|
         | 
| 103 | 
            +
                    case var
         | 
| 104 | 
            +
                      when Hash
         | 
| 105 | 
            +
                        arr.concat(all_values(var.values))
         | 
| 106 | 
            +
                      when Array
         | 
| 107 | 
            +
                        arr.concat(all_values(var))
         | 
| 108 | 
            +
                      when String
         | 
| 109 | 
            +
                        arr.push var
         | 
| 110 | 
            +
                      end
         | 
| 111 | 
            +
                    arr
         | 
| 112 | 
            +
                    end
         | 
| 113 | 
            +
                  vars
         | 
| 114 | 
            +
                end
         | 
| 115 | 
            +
             | 
| 97 116 | 
             
                # Returns default filesystem type for current OS
         | 
| 98 117 | 
             
                def default_filesystem_type
         | 
| 99 118 | 
             
                  fs = 'ext4'
         | 
| @@ -60,7 +60,7 @@ mapping: | |
| 60 60 | 
             
                    type: seq
         | 
| 61 61 | 
             
                    sequence:
         | 
| 62 62 | 
             
                      - type: str # Now allowing spaces due to group labels (these map to real groups with no spaces, but confuses users) https://issues.jboss.org/browse/BGBUILD-220
         | 
| 63 | 
            -
                        pattern: /^[ | 
| 63 | 
            +
                        pattern: /^[\*\w\-+.@#\s]+$/ #fedora packaging standard http://bit.ly/h0JN9u (plus a few more, disallow symbols)
         | 
| 64 64 | 
             
                        length: { min: 1 }
         | 
| 65 65 | 
             
                  "excludes": *pkg
         | 
| 66 66 | 
             
              "default_repos":
         | 
| @@ -57,7 +57,7 @@ mapping: | |
| 57 57 | 
             
                type: seq
         | 
| 58 58 | 
             
                sequence:
         | 
| 59 59 | 
             
                  - type: str # Now allowing spaces due to group labels (these map to real groups with no spaces, but confuses users) https://issues.jboss.org/browse/BGBUILD-220
         | 
| 60 | 
            -
                    pattern: /^[ | 
| 60 | 
            +
                    pattern: /^[\*\w\-+.@#\s]+$/ #fedora packaging standard http://bit.ly/h0JN9u (plus a few more, disallow symbols)
         | 
| 61 61 | 
             
                    length: { min: 1 }
         | 
| 62 62 | 
             
              "default_repos":
         | 
| 63 63 | 
             
                type: bool
         | 
| @@ -57,7 +57,7 @@ mapping: | |
| 57 57 | 
             
                type: seq
         | 
| 58 58 | 
             
                sequence:
         | 
| 59 59 | 
             
                  - type: str # Now allowing spaces due to group labels (these map to real groups with no spaces, but confuses users) https://issues.jboss.org/browse/BGBUILD-220
         | 
| 60 | 
            -
                    pattern: /^[ | 
| 60 | 
            +
                    pattern: /^[\*\w\-+.@#\s]+$/ #fedora packaging standard http://bit.ly/h0JN9u (plus a few more, disallow symbols)
         | 
| 61 61 | 
             
                    length: { min: 1 }
         | 
| 62 62 | 
             
              "default_repos":
         | 
| 63 63 | 
             
                type: bool
         | 
| @@ -5,7 +5,7 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Summary: Core library for BoxGrinder
         | 
| 7 7 | 
             
            Name: rubygem-%{gemname}
         | 
| 8 | 
            -
            Version: 0.3. | 
| 8 | 
            +
            Version: 0.3.10
         | 
| 9 9 | 
             
            Release: 1%{?dist}
         | 
| 10 10 | 
             
            Group: Development/Languages
         | 
| 11 11 | 
             
            License: LGPLv3+
         | 
| @@ -76,6 +76,12 @@ popd | |
| 76 76 | 
             
            %{gemdir}/doc/%{gemname}-%{version}
         | 
| 77 77 |  | 
| 78 78 | 
             
            %changelog
         | 
| 79 | 
            +
            * Thu Dec 1 2011 Marc Savy <mgoldman@redhat.com> - 0.3.10
         | 
| 80 | 
            +
            - Upstream release: 0.3.10
         | 
| 81 | 
            +
            - [BGBUILD-324] Add wildcard to packages schema
         | 
| 82 | 
            +
            - [BGBUILD-320] Support variable substitution in any string value field of appliance definition
         | 
| 83 | 
            +
            - [BGBUILD-327] Resolve appliance definition variables in ENV if they are not defined
         | 
| 84 | 
            +
             | 
| 79 85 | 
             
            * Fri Oct 14 2011 Marc Savy <msavy@redhat.com> - 0.3.9-1
         | 
| 80 86 | 
             
            - Upstream release: 0.3.9
         | 
| 81 87 | 
             
            - [BGBUILD-312] Discover which user to switch to after root dependent sections have been executed
         | 
| @@ -405,6 +405,7 @@ module BoxGrinder | |
| 405 405 |  | 
| 406 406 | 
             
                  @helper.merge_variables
         | 
| 407 407 | 
             
                  @helper.merge_repos
         | 
| 408 | 
            +
                  @helper.substitute_variables
         | 
| 408 409 |  | 
| 409 410 | 
             
                  config = @helper.instance_variable_get(:@appliance_config)
         | 
| 410 411 | 
             
                  config.repos.size.should == 1
         | 
| @@ -425,6 +426,7 @@ module BoxGrinder | |
| 425 426 |  | 
| 426 427 | 
             
                  @helper.merge_variables
         | 
| 427 428 | 
             
                  @helper.merge_post_operations
         | 
| 429 | 
            +
                  @helper.substitute_variables
         | 
| 428 430 |  | 
| 429 431 | 
             
                  config = @helper.instance_variable_get(:@appliance_config)
         | 
| 430 432 | 
             
                  config.post.size.should == 2
         | 
| @@ -447,12 +449,82 @@ module BoxGrinder | |
| 447 449 |  | 
| 448 450 | 
             
                  @helper.merge_variables
         | 
| 449 451 | 
             
                  @helper.merge_post_operations
         | 
| 452 | 
            +
                  @helper.substitute_variables
         | 
| 450 453 |  | 
| 451 454 | 
             
                  config = @helper.instance_variable_get(:@appliance_config)
         | 
| 452 455 | 
             
                  config.post.size.should == 1
         | 
| 453 456 | 
             
                  config.post['base'].should == [@arch, @base_arch, '12', 'fedora', 'AAA', 'BBB']
         | 
| 454 457 | 
             
                end
         | 
| 455 458 |  | 
| 459 | 
            +
                it "should allow variable substitution for any string value" do
         | 
| 460 | 
            +
                  config_a = ApplianceConfig.new
         | 
| 461 | 
            +
                  config_a.name = 'a'
         | 
| 462 | 
            +
                  config_a.os.name = "fedora-#CUSTOM_B#"
         | 
| 463 | 
            +
                  config_a.summary = "boxgrinder-#CUSTOM_A#"
         | 
| 464 | 
            +
                  config_a.os.version = '12'
         | 
| 465 | 
            +
                  config_a.variables['CUSTOM_A'] = "AAA"
         | 
| 466 | 
            +
                  config_a.variables['CUSTOM_B'] = "BBB"
         | 
| 467 | 
            +
                  config_a.init_arch
         | 
| 468 | 
            +
             | 
| 469 | 
            +
                  prepare_helper([config_a])
         | 
| 470 | 
            +
                  @helper.instance_variable_set(:@appliance_config, config_a.clone)
         | 
| 471 | 
            +
             | 
| 472 | 
            +
                  @helper.merge_variables
         | 
| 473 | 
            +
                  @helper.merge_post_operations
         | 
| 474 | 
            +
                  @helper.substitute_variables
         | 
| 475 | 
            +
             | 
| 476 | 
            +
                  config = @helper.instance_variable_get(:@appliance_config)
         | 
| 477 | 
            +
                  config.os.name.should == "fedora-BBB"
         | 
| 478 | 
            +
                  config.summary.should == "boxgrinder-AAA"
         | 
| 479 | 
            +
                end
         | 
| 480 | 
            +
             | 
| 481 | 
            +
                it "should allow recursive variable substitution" do
         | 
| 482 | 
            +
                  config_a = ApplianceConfig.new
         | 
| 483 | 
            +
                  config_a.name = 'a'
         | 
| 484 | 
            +
                  config_a.os.name = "fedora-#CUSTOM_B#"
         | 
| 485 | 
            +
                  config_a.summary = "boxgrinder-#CUSTOM_A#"
         | 
| 486 | 
            +
                  config_a.os.version = '#CUSTOM_A#'
         | 
| 487 | 
            +
                  config_a.variables['CUSTOM_A'] = "#CUSTOM_B#"
         | 
| 488 | 
            +
                  config_a.variables['CUSTOM_B'] = "ni-ni-ni"
         | 
| 489 | 
            +
                  config_a.post['base'] = ['#ARCH#', '#BASE_ARCH#', '#OS_VERSION#', '#OS_NAME#', '#CUSTOM_A#', '#CUSTOM_B#']
         | 
| 490 | 
            +
                  config_a.init_arch
         | 
| 491 | 
            +
             | 
| 492 | 
            +
                  prepare_helper([config_a])
         | 
| 493 | 
            +
                  @helper.instance_variable_set(:@appliance_config, config_a.clone)
         | 
| 494 | 
            +
             | 
| 495 | 
            +
                  @helper.merge_variables
         | 
| 496 | 
            +
                  @helper.merge_post_operations
         | 
| 497 | 
            +
                  @helper.substitute_variables
         | 
| 498 | 
            +
             | 
| 499 | 
            +
                  config = @helper.instance_variable_get(:@appliance_config)
         | 
| 500 | 
            +
                  config.os.name.should == "fedora-ni-ni-ni"
         | 
| 501 | 
            +
                  config.summary.should == "boxgrinder-ni-ni-ni"
         | 
| 502 | 
            +
                  config.post['base'].should == [@arch, @base_arch, 'ni-ni-ni', 'fedora-ni-ni-ni', 'ni-ni-ni', 'ni-ni-ni']
         | 
| 503 | 
            +
                end
         | 
| 504 | 
            +
             | 
| 505 | 
            +
                it "should fall back onto ENV if no variable is explicitly defined in the appliance" do
         | 
| 506 | 
            +
                  config_a = ApplianceConfig.new
         | 
| 507 | 
            +
                  config_a.name = 'a'
         | 
| 508 | 
            +
                  config_a.os.name = "fedora-#CUSTOM_B#"
         | 
| 509 | 
            +
                  config_a.os.version = '#CUSTOM_A#'
         | 
| 510 | 
            +
                  ENV['CUSTOM_A'] = 'shrubbery'
         | 
| 511 | 
            +
                  config_a.variables['CUSTOM_B'] = "ni-ni-ni"
         | 
| 512 | 
            +
                  config_a.post['base'] = ['#ARCH#', '#BASE_ARCH#', '#OS_VERSION#', '#OS_NAME#', '#CUSTOM_A#',
         | 
| 513 | 
            +
                                           '#CUSTOM_B#', '#CUSTOM_A#-#NOT_DEF#', '#NOT_DEF#-#CUSTOM_A#', "##"]
         | 
| 514 | 
            +
                  config_a.init_arch
         | 
| 515 | 
            +
             | 
| 516 | 
            +
                  prepare_helper([config_a])
         | 
| 517 | 
            +
                  @helper.instance_variable_set(:@appliance_config, config_a.clone)
         | 
| 518 | 
            +
             | 
| 519 | 
            +
                  @helper.merge_variables
         | 
| 520 | 
            +
                  @helper.merge_post_operations
         | 
| 521 | 
            +
                  @helper.substitute_variables
         | 
| 522 | 
            +
             | 
| 523 | 
            +
                  config = @helper.instance_variable_get(:@appliance_config)
         | 
| 524 | 
            +
                  config.post['base'].should == [@arch, @base_arch, 'shrubbery', 'fedora-ni-ni-ni', 'shrubbery',
         | 
| 525 | 
            +
                                                 'ni-ni-ni', 'shrubbery-#NOT_DEF#', '#NOT_DEF#-shrubbery', '##']
         | 
| 526 | 
            +
                end
         | 
| 527 | 
            +
             | 
| 456 528 | 
             
                describe ".merge_default_repos" do
         | 
| 457 529 | 
             
                  it "should set default_repos option to true when not specified" do
         | 
| 458 530 | 
             
                    config_a = ApplianceConfig.new
         | 
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: boxgrinder-core
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash:  | 
| 5 | 
            -
              prerelease:  | 
| 4 | 
            +
              hash: 7
         | 
| 5 | 
            +
              prerelease: 
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 0
         | 
| 8 8 | 
             
              - 3
         | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 0.3. | 
| 9 | 
            +
              - 10
         | 
| 10 | 
            +
              version: 0.3.10
         | 
| 11 11 | 
             
            platform: ruby
         | 
| 12 12 | 
             
            authors: 
         | 
| 13 13 | 
             
            - Marek Goldmann
         | 
| @@ -15,8 +15,7 @@ autorequire: | |
| 15 15 | 
             
            bindir: bin
         | 
| 16 16 | 
             
            cert_chain: []
         | 
| 17 17 |  | 
| 18 | 
            -
            date: 2011- | 
| 19 | 
            -
            default_executable: 
         | 
| 18 | 
            +
            date: 2011-12-19 00:00:00 Z
         | 
| 20 19 | 
             
            dependencies: 
         | 
| 21 20 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 22 21 | 
             
              name: hashery
         | 
| @@ -136,7 +135,6 @@ files: | |
| 136 135 | 
             
            - spec/rspec/src/appliances/repo.appl
         | 
| 137 136 | 
             
            - spec/rspec/src/config/empty
         | 
| 138 137 | 
             
            - spec/rspec/src/config/valid
         | 
| 139 | 
            -
            has_rdoc: true
         | 
| 140 138 | 
             
            homepage: http://boxgrinder.org
         | 
| 141 139 | 
             
            licenses: []
         | 
| 142 140 |  | 
| @@ -172,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 172 170 | 
             
            requirements: []
         | 
| 173 171 |  | 
| 174 172 | 
             
            rubyforge_project: BoxGrinder
         | 
| 175 | 
            -
            rubygems_version: 1. | 
| 173 | 
            +
            rubygems_version: 1.8.11
         | 
| 176 174 | 
             
            signing_key: 
         | 
| 177 175 | 
             
            specification_version: 3
         | 
| 178 176 | 
             
            summary: Core library for BoxGrinder
         |