Использование 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)>'
Эти обратные косые черты предназначены для экранирования, а фактическая команда - это список «pip» | grep -iw -^ansible' (https://github.com/mizzy/specinfra/blob/513a2c41c0d0f59ffd76f2308dffeabcfa8aadc8/lib/specinfra/command/base/package.rb#L40). Тем не менее, тот же результат. Интересным побочным эффектом является то, что команда также вернет ложный успех, скажем, 'ansible-lint', несмотря на отсутствие' ansible'. Во всяком случае, это звучит скорее как бродячая проблема, чем проблема servserspec. –
Хорошо замеченный '-w'! И это фактически предотвратит когда-либо обнаружение 'ansible-lint'. – techraf
Да, извините, я не мог помочь, но из-за этого я собираюсь сделать PR для Specinfra. Вероятно, это происходит и для других поставщиков пакетов. Кстати, вы пробовали это: https://github.com/jvoorhis/vagrant-serverspec? Я никогда не использовал его, но он, безусловно, выглядит многообещающим. –