2017-02-23 6 views
3

서버 스펙에 문제가 있습니다. 우분투에 설치된 패키지 버전을 확인하려고합니다. 패키지를 확인Serverspec에서 패키지 버전을 올바르게 확인하지 않습니다.

describe 'java packages' do 
    it 'package openjdk-9-jre should be installed with the correct version' do 
    expect(package('openjdk-9-jre')).to be_installed.with_version('9~b114-0ubuntu1') 
    end 
end 

Serverspec 실행 때 dpkg-query 명령하지만, 틸다 문자를 탈출 작동하지 않습니다 :

은이 코드를 사용합니다. serverspec 실행은 :

dpkg-query -f '${Status} ${Version}' -W openjdk-9-jre | grep -E '^(install|hold) ok installed 9\\~b114-0ubuntu1$' 

대신

dpkg-query -f '${Status} ${Version}' -W openjdk-9-jre | grep -E '^(install|hold) ok installed 9~b114-0ubuntu1$' 

는이 문제를 어떻게 해결할 수

?

답변

4

문제가있는 곳은 https://github.com/mizzy/specinfra/blob/92ccc19714ead956589127c40e3cd65faf38cb8b/lib/specinfra/command/debian/base/package.rb#L6입니다.

Specinfra가 with_version 체인의 문자를 #{Regexp.escape(version)) 대신 #{Regexp.escape(escape(version))}으로 이스케이프합니다. Specinfra/Serverspec 기여 정책으로 인해 Specinfra에 대한 PR을 수정해야합니다. 나는 이것을 할 일 목록에 넣고 끝낼 때 알려줍니다. 왜냐하면 최신의 Specinfra 포크를 유지하고 코드베이스를 알기 때문에 기여자이기 때문입니다.

그동안 command 일치 해결 방법을 사용해야합니다.

describe 'java packages' do 
    it 'package openjdk-9-jre should be installed with the correct version' do 
    describe command("dpkg-query -f '${Status} ${Version}' -W openjdk-9-jre") do 
     its(:stdout) { is_expected.to match('^(install|hold) ok installed 9\~b114\-0ubuntu1$') } 
    end 
    end 
end 

Specinfra PR이 고정 될 경우 https://github.com/mizzy/specinfra/pull/608

+0

좋은, 감사 그것은 한 위대한 것입니다. :) – esio

+0

이것은 ServerSpec의 https://github.com/mizzy/serverspec/pull/316/files에서 수정되었으며 저에게 효과적 인 것처럼 보입니다. '> ='을 할 수 있는지 또는> 또는 <만 지원하는지 확실하지 않습니다. – dragon788

+0

@ dragon788 제가 고칠 곳의 PR에 대한 답을 적어주세요. –