2016-06-15 3 views
1

Использование serverspec-2.36.0 Я не могу проверить какой-либо пакет, установленный pip на виртуальной машине OS X El Capitan.Serverspec не проверяет какой-либо пакет, установленный в пункте назначения на OS X

Тестирование команды, выполняемой Serverspec, дает правильные результаты.

Следующий пример предназначен для ansible, установленного с pip install ansible --user на пользователе vagrant.

  • Мои ansible_spec.rb:

    require 'spec_helper' 
    
    describe command('whoami') do 
        let(:disable_sudo) { true } 
        its(:stdout) { should match 'vagrant' } 
    end 
    
    describe package('ansible') do 
        let(:disable_sudo) { true } 
        it { should be_installed.by('pip') } 
    end 
    
  • Результат:

    Command "whoami" 
        stdout 
        should match "vagrant" 
    
    Package "ansible" 
        should be installed by "pip" (FAILED - 1) 
    

    Детали второй задачи:

    Failures: 
    
        1) Package "ansible" should be installed by "pip" 
        On host `osx-01' 
        Failure/Error: it { should be_installed.by('pip') } 
         expected Package "ansible" to be installed by "pip" 
         /bin/sh -c pip\ list\ \|\ grep\ -iw\ --\ \\\^ansible 
    
        # ./spec/ansible_spec.rb:10:in `block (2 levels) in <top (required)>' 
    
  • я войти в машину и запустить:

    $ whoami 
    vagrant 
    $ pip list | grep -iw -- ^ansible 
    ansible (2.1.0.0) 
    $ /bin/sh -c pip\ list\ \|\ grep\ -iw\ --\ \\\^ansible 
    ansible (2.1.0.0) 
    

Я невежественны в отношении как: причина и следующие возможные шаги по устранению неполадок.


поиска неисправностей

  • Я добавил задачу проверить which python (внутри Serverspec) и он терпит неудачу с:

    1) Command "which python" stdout should match "/usr/local/bin/python" 
        On host `ansible-osx-devops-environment-01' 
        Failure/Error: its(:stdout) { should match '/usr/local/bin/python' } 
        expected "" to match "/usr/local/bin/python" 
        env PATH="/usr/local/bin" /bin/sh -c which\ python 
    
        # ./spec/ansible_spec.rb:11:in `block (2 levels) in <top (required)>' 
    
+1

Эти обратные косые черты предназначены для экранирования, а фактическая команда - это список «pip» | grep -iw -^ansible' (https://github.com/mizzy/specinfra/blob/513a2c41c0d0f59ffd76f2308dffeabcfa8aadc8/lib/specinfra/command/base/package.rb#L40). Тем не менее, тот же результат. Интересным побочным эффектом является то, что команда также вернет ложный успех, скажем, 'ansible-lint', несмотря на отсутствие' ansible'. Во всяком случае, это звучит скорее как бродячая проблема, чем проблема servserspec. –

+0

Хорошо замеченный '-w'! И это фактически предотвратит когда-либо обнаружение 'ansible-lint'. – techraf

+0

Да, извините, я не мог помочь, но из-за этого я собираюсь сделать PR для Specinfra. Вероятно, это происходит и для других поставщиков пакетов. Кстати, вы пробовали это: https://github.com/jvoorhis/vagrant-serverspec? Я никогда не использовал его, но он, безусловно, выглядит многообещающим. –

ответ

0

По причинам, моего понимания Serverspec не смог найти родной Python OS X (в /usr/bin/python) или тот, который установлен с Homebrew (в /usr/local/bin/python).

В качестве обходного пути я добавил:

set :path, '/usr/local/bin:$PATH' 

к spec_helper.rb.

 Смежные вопросы

  • Нет связанных вопросов^_^