specinfra 1.11.0 → 1.12.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.
- checksums.yaml +4 -4
- data/lib/specinfra/backend/exec.rb +23 -21
- data/lib/specinfra/configuration.rb +9 -0
- data/lib/specinfra/helper/detect_os.rb +11 -4
- data/lib/specinfra/version.rb +1 -1
- data/spec/backend/exec/build_command_spec.rb +30 -25
- data/spec/configuration_spec.rb +5 -0
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: f67f6404a72167028cc78c1347bd67da39f57205
         | 
| 4 | 
            +
              data.tar.gz: d6fe99bbcc3f6b80d18319bb85b472ee0dd37abf
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d73b47ee671274ed47e26b7d1a4b1dad79a7dd701fdc0af0fee4ba067425d30fd8608c29b7412884cd53b583733fc0d111545ed2cfd7021613bfd090a2b53a90
         | 
| 7 | 
            +
              data.tar.gz: 647c9fbd5a46351fc3ff195d21ddc9f9dde50b5e6631429ec4c71aa46ee16711aa2a932af0a0dd7578a3f1fa7a2ee83313de7d030b32931f770341e23f09dc3a
         | 
| @@ -181,6 +181,7 @@ module SpecInfra | |
| 181 181 |  | 
| 182 182 | 
             
                  def check_os
         | 
| 183 183 | 
             
                    return SpecInfra.configuration.os if SpecInfra.configuration.os
         | 
| 184 | 
            +
                    arch = run_command('uname -m').stdout.strip
         | 
| 184 185 | 
             
                    # Fedora also has an /etc/redhat-release so the Fedora check must
         | 
| 185 186 | 
             
                    # come before the RedHat check
         | 
| 186 187 | 
             
                    if run_command('ls /etc/fedora-release').success?
         | 
| @@ -194,19 +195,20 @@ module SpecInfra | |
| 194 195 | 
             
                      if line =~ /release (\d[\d.]*)/
         | 
| 195 196 | 
             
                        release = $1
         | 
| 196 197 | 
             
                      end
         | 
| 198 | 
            +
             | 
| 197 199 | 
             
                      if release =~ /7./
         | 
| 198 | 
            -
                        { :family => 'RedHat7', :release => release }
         | 
| 200 | 
            +
                        { :family => 'RedHat7', :release => release, :arch => arch }
         | 
| 199 201 | 
             
                      else
         | 
| 200 | 
            -
                        { :family => 'RedHat', :release => release }
         | 
| 202 | 
            +
                        { :family => 'RedHat', :release => release, :arch => arch }
         | 
| 201 203 | 
             
                      end
         | 
| 202 204 | 
             
                    elsif run_command('ls /etc/system-release').success?
         | 
| 203 | 
            -
                      { :family => 'RedHat', :release => nil } # Amazon Linux
         | 
| 205 | 
            +
                      { :family => 'RedHat', :release => nil, :arch => arch } # Amazon Linux
         | 
| 204 206 | 
             
                    elsif run_command('ls /etc/SuSE-release').success?
         | 
| 205 207 | 
             
                      line = run_command('cat /etc/SuSE-release').stdout
         | 
| 206 208 | 
             
                      if line =~ /SUSE Linux Enterprise Server (\d+)/
         | 
| 207 209 | 
             
                        release = $1
         | 
| 208 210 | 
             
                      end
         | 
| 209 | 
            -
                      { :family => 'SuSE', :release => release }
         | 
| 211 | 
            +
                      { :family => 'SuSE', :release => release, :arch => arch }
         | 
| 210 212 | 
             
                    elsif run_command('ls /etc/debian_version').success?
         | 
| 211 213 | 
             
                      lsb_release = run_command("lsb_release -ir")
         | 
| 212 214 | 
             
                      if lsb_release.success?
         | 
| @@ -225,37 +227,37 @@ module SpecInfra | |
| 225 227 | 
             
                      end
         | 
| 226 228 | 
             
                      distro ||= 'Debian'
         | 
| 227 229 | 
             
                      release ||= nil
         | 
| 228 | 
            -
                      { :family => distro.strip, :release => release }
         | 
| 230 | 
            +
                      { :family => distro.strip, :release => release, :arch => arch }
         | 
| 229 231 | 
             
                    elsif run_command('ls /etc/gentoo-release').success?
         | 
| 230 | 
            -
                      { :family => 'Gentoo', :release => nil }
         | 
| 232 | 
            +
                      { :family => 'Gentoo', :release => nil, :arch => arch }
         | 
| 231 233 | 
             
                    elsif run_command('ls /usr/lib/setup/Plamo-*').success?
         | 
| 232 | 
            -
                      { :family => 'Plamo', :release => nil }
         | 
| 234 | 
            +
                      { :family => 'Plamo', :release => nil, :arch => arch }
         | 
| 233 235 | 
             
                    elsif run_command('uname -s').stdout =~ /AIX/i
         | 
| 234 | 
            -
                      { :family => 'AIX', :release => nil }
         | 
| 235 | 
            -
                    elsif ( | 
| 236 | 
            -
                      if  | 
| 237 | 
            -
                        { :family => 'Solaris10', :release => nil }
         | 
| 236 | 
            +
                      { :family => 'AIX', :release => nil, :arch => arch }
         | 
| 237 | 
            +
                    elsif ( uname = run_command('uname -sr').stdout) && uname =~ /SunOS/i
         | 
| 238 | 
            +
                      if uname =~ /5.10/
         | 
| 239 | 
            +
                        { :family => 'Solaris10', :release => nil, :arch => arch }
         | 
| 238 240 | 
             
                      elsif run_command('grep -q "Oracle Solaris 11" /etc/release').success?
         | 
| 239 | 
            -
                        { :family => 'Solaris11', :release => nil }
         | 
| 241 | 
            +
                        { :family => 'Solaris11', :release => nil, :arch => arch }
         | 
| 240 242 | 
             
                      elsif run_command('grep -q SmartOS /etc/release').success?
         | 
| 241 | 
            -
                        { :family => 'SmartOS', :release => nil }
         | 
| 243 | 
            +
                        { :family => 'SmartOS', :release => nil, :arch => arch }
         | 
| 242 244 | 
             
                      else
         | 
| 243 | 
            -
                        { :family => 'Solaris', :release => nil }
         | 
| 245 | 
            +
                        { :family => 'Solaris', :release => nil, :arch => arch }
         | 
| 244 246 | 
             
                      end
         | 
| 245 247 | 
             
                    elsif run_command('uname -s').stdout =~ /Darwin/i
         | 
| 246 248 | 
             
                      { :family => 'Darwin', :release => nil }
         | 
| 247 | 
            -
                    elsif ( | 
| 248 | 
            -
                      if  | 
| 249 | 
            -
                        { :family => 'FreeBSD10', :release => nil }
         | 
| 249 | 
            +
                    elsif ( uname = run_command('uname -sr').stdout ) && uname =~ /FreeBSD/i
         | 
| 250 | 
            +
                      if uname =~ /10./
         | 
| 251 | 
            +
                        { :family => 'FreeBSD10', :release => nil, :arch => arch }
         | 
| 250 252 | 
             
                      else
         | 
| 251 | 
            -
                        { :family => 'FreeBSD', :release => nil }
         | 
| 253 | 
            +
                        { :family => 'FreeBSD', :release => nil, :arch => arch }
         | 
| 252 254 | 
             
                      end
         | 
| 253 255 | 
             
                    elsif run_command('uname -sr').stdout =~ /Arch/i
         | 
| 254 | 
            -
                      { :family => 'Arch', :release => nil }
         | 
| 256 | 
            +
                      { :family => 'Arch', :release => nil, :arch => arch }
         | 
| 255 257 | 
             
                    elsif run_command('uname -s').stdout =~ /OpenBSD/i
         | 
| 256 | 
            -
                      { :family => 'OpenBSD', :release => nil }
         | 
| 258 | 
            +
                      { :family => 'OpenBSD', :release => nil, :arch => arch }
         | 
| 257 259 | 
             
                    else
         | 
| 258 | 
            -
                      { :family => 'Base', :release => nil }
         | 
| 260 | 
            +
                      { :family => 'Base', :release => nil, :arch => arch }
         | 
| 259 261 | 
             
                    end
         | 
| 260 262 | 
             
                  end
         | 
| 261 263 |  | 
| @@ -19,6 +19,15 @@ module SpecInfra | |
| 19 19 | 
             
                    VALID_OPTIONS_KEYS.inject({}) { |o, k| o.merge!(k => send(k)) }
         | 
| 20 20 | 
             
                  end
         | 
| 21 21 |  | 
| 22 | 
            +
                  # Define os method explicitly to avoid stack level
         | 
| 23 | 
            +
                  # too deep caused by Helpet::DetectOS#os
         | 
| 24 | 
            +
                  def os
         | 
| 25 | 
            +
                    if @os.nil? && defined?(RSpec) && RSpec.configuration.respond_to?(:os)
         | 
| 26 | 
            +
                      @os = RSpec.configuration.os
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
                    @os
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
             | 
| 22 31 | 
             
                  def method_missing(meth, val=nil)
         | 
| 23 32 | 
             
                    key = meth.to_s
         | 
| 24 33 | 
             
                    key.gsub!(/=$/, '')
         | 
| @@ -2,17 +2,24 @@ module SpecInfra | |
| 2 2 | 
             
              module Helper
         | 
| 3 3 | 
             
                module DetectOS
         | 
| 4 4 | 
             
                  def commands
         | 
| 5 | 
            +
                    self.class.const_get('SpecInfra').const_get('Command').const_get(os[:family]).new
         | 
| 6 | 
            +
                  end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def os
         | 
| 5 9 | 
             
                    property[:os_by_host] = {} if ! property[:os_by_host]
         | 
| 6 10 | 
             
                    host = SpecInfra.configuration.ssh ? SpecInfra.configuration.ssh.host : 'localhost'
         | 
| 7 11 |  | 
| 8 12 | 
             
                    if property[:os_by_host][host]
         | 
| 9 | 
            -
                       | 
| 13 | 
            +
                      os_by_host = property[:os_by_host][host]
         | 
| 10 14 | 
             
                    else
         | 
| 11 15 | 
             
                      # Set command object explicitly to avoid `stack too deep`
         | 
| 12 | 
            -
                       | 
| 13 | 
            -
                       | 
| 16 | 
            +
                      raise "crash me" if caller.length > 500
         | 
| 17 | 
            +
                      os_by_host = backend(SpecInfra::Command::Base.new).check_os
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                      property[:os_by_host][host] = os_by_host
         | 
| 14 20 | 
             
                    end
         | 
| 15 | 
            -
             | 
| 21 | 
            +
             | 
| 22 | 
            +
                    os_by_host
         | 
| 16 23 | 
             
                  end
         | 
| 17 24 | 
             
                end
         | 
| 18 25 | 
             
              end
         | 
    
        data/lib/specinfra/version.rb
    CHANGED
    
    
| @@ -35,56 +35,61 @@ describe 'check_os' do | |
| 35 35 | 
             
              context 'test ubuntu with lsb_release command' do
         | 
| 36 36 | 
             
                subject { backend.check_os }
         | 
| 37 37 | 
             
                it do
         | 
| 38 | 
            -
                  mock_success_response = double(
         | 
| 39 | 
            -
                    :run_command_response,
         | 
| 40 | 
            -
                    :success? => true,
         | 
| 41 | 
            -
                    :stdout => "Distributor ID:\tUbuntu\nRelease:\t12.04\n"
         | 
| 42 | 
            -
                  )
         | 
| 43 | 
            -
                  mock_failure_response = double :run_command_response, :success? => false
         | 
| 44 38 | 
             
                  backend.should_receive(:run_command).at_least(1).times do |args|
         | 
| 45 39 | 
             
                    if ['ls /etc/debian_version', 'lsb_release -ir'].include? args
         | 
| 46 | 
            -
                       | 
| 40 | 
            +
                      double(
         | 
| 41 | 
            +
                        :run_command_response,
         | 
| 42 | 
            +
                        :success? => true,
         | 
| 43 | 
            +
                        :stdout => "Distributor ID:\tUbuntu\nRelease:\t12.04\n"
         | 
| 44 | 
            +
                      )
         | 
| 45 | 
            +
                    elsif args == 'uname -m'
         | 
| 46 | 
            +
                      double :run_command_response, :success? => true, :stdout => "x86_64\n"
         | 
| 47 47 | 
             
                    else
         | 
| 48 | 
            -
                       | 
| 48 | 
            +
                      double :run_command_response, :success? => false
         | 
| 49 49 | 
             
                    end
         | 
| 50 50 | 
             
                  end
         | 
| 51 | 
            -
                  should eq({:family => 'Ubuntu', :release => '12.04'})
         | 
| 51 | 
            +
                  should eq({:family => 'Ubuntu', :release => '12.04', :arch => 'x86_64' })
         | 
| 52 52 | 
             
                end
         | 
| 53 53 | 
             
              end
         | 
| 54 54 |  | 
| 55 55 | 
             
              context 'test ubuntu with /etc/lsb-release' do
         | 
| 56 56 | 
             
                subject { backend.check_os }
         | 
| 57 57 | 
             
                it do
         | 
| 58 | 
            -
                   | 
| 59 | 
            -
                     | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 58 | 
            +
                  backend.should_receive(:run_command).at_least(1).times do |args|
         | 
| 59 | 
            +
                    if ['ls /etc/debian_version', 'cat /etc/lsb-release'].include? args
         | 
| 60 | 
            +
                      double(
         | 
| 61 | 
            +
                        :run_command_response,
         | 
| 62 | 
            +
                        :success? => true,
         | 
| 63 | 
            +
                        :stdout => <<-EOF
         | 
| 64 | 
            +
            DISTRIB_ID=Ubuntu
         | 
| 62 65 | 
             
            DISTRIB_RELEASE=12.04
         | 
| 63 66 | 
             
            DISTRIB_CODENAME=precise
         | 
| 64 67 | 
             
            DISTRIB_DESCRIPTION="Ubuntu 12.04.2 LTS"
         | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
                    if ['ls /etc/debian_version', 'cat /etc/lsb-release'].include? args
         | 
| 70 | 
            -
                      mock_success_response
         | 
| 68 | 
            +
            EOF
         | 
| 69 | 
            +
                      )
         | 
| 70 | 
            +
                    elsif args == 'uname -m'
         | 
| 71 | 
            +
                      double :run_command_response, :success? => true, :stdout => "x86_64\n"
         | 
| 71 72 | 
             
                    else
         | 
| 72 | 
            -
                       | 
| 73 | 
            +
                      double :run_command_response, :success? => false
         | 
| 73 74 | 
             
                    end
         | 
| 74 75 | 
             
                  end
         | 
| 75 | 
            -
                  should eq({:family => 'Ubuntu', :release => '12.04'})
         | 
| 76 | 
            +
                  should eq({:family => 'Ubuntu', :release => '12.04', :arch => 'x86_64' })
         | 
| 76 77 | 
             
                end
         | 
| 77 78 | 
             
              end
         | 
| 78 79 |  | 
| 79 80 | 
             
              context 'test debian (no lsb_release or lsb-release)' do
         | 
| 80 81 | 
             
                subject { backend.check_os }
         | 
| 81 82 | 
             
                it do
         | 
| 82 | 
            -
                  mock_success_response = double :run_command_response, :success? => true
         | 
| 83 | 
            -
                  mock_failure_response = double :run_command_response, :success? => false
         | 
| 84 83 | 
             
                  backend.should_receive(:run_command).at_least(1).times do |args|
         | 
| 85 | 
            -
                    args == 'ls /etc/debian_version' | 
| 84 | 
            +
                    if args == 'ls /etc/debian_version'
         | 
| 85 | 
            +
                      double :run_command_response, :success? => true
         | 
| 86 | 
            +
                    elsif args == 'uname -m'
         | 
| 87 | 
            +
                      double :run_command_response, :success? => true, :stdout => "x86_64\n"
         | 
| 88 | 
            +
                    else
         | 
| 89 | 
            +
                      double :run_command_response, :success? => false
         | 
| 90 | 
            +
                    end
         | 
| 86 91 | 
             
                  end
         | 
| 87 | 
            -
                  should eq({:family => 'Debian', :release => nil})
         | 
| 92 | 
            +
                  should eq({:family => 'Debian', :release => nil, :arch => 'x86_64' })
         | 
| 88 93 | 
             
                end
         | 
| 89 94 | 
             
              end
         | 
| 90 95 | 
             
            end
         | 
    
        data/spec/configuration_spec.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: specinfra
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.12.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Gosuke Miyashita
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014-05- | 
| 11 | 
            +
            date: 2014-05-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         |