Из документов кажется, что использование Serverspec для проверки того, что пакеты установлены, должно быть довольно простым, но у меня есть некоторые интересные проблемы с vim
и ag
(the_silver_searcher
).
Я использую Test Kitchen с плагином kitchen-vagrant
и имею две платформы: ubuntu-1404
и centos-72
. Все мои спецификации подходят для Ubuntu, а две из них не подходят для Centos: vim
и ag
.
вим
Код Chef, который обрабатывает эту установку, очень прост:
package "vim"
А вот и спецификация:
describe "Vim" do
describe package("vim") do
it { should be_installed }
end
end
Опять же, очень прямолинейно. Однако в моей сборке Centos происходит сбой с этой ошибкой:
2) Vim Package "vim" should be installed
Failure/Error: it { should be_installed }
expected Package "vim" to be installed
/bin/sh -c rpm\ -q\ vim
package vim is not installed
Тем не менее, если я войду на сервер, он определенно установлен:
▶ kitchen login all-centos-72
Last login: Sat Jul 2 17:53:30 2016 from 10.0.2.2
[vagrant@all-centos-72 ~]$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 10 2014 06:55:55)
[vagrant@all-centos-72 ~]$ which vim
/usr/bin/vim
[vagrant@all-centos-72 ~]$ sudo yum install -y vim
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: distro.ibiblio.org
* extras: mirror.us.leaseweb.net
* updates: mirror.eboundhost.com
Package 2:vim-enhanced-7.4.160-1.el7.x86_64 already installed and latest version
Nothing to do
возраст
ag
сложнее, поскольку для установки требуется сборка из исходного кода на Centos, тогда как в Ubuntu это доступно с apt-get
. Вот соответствующая часть рецепта:
bash "install Development Tools" do
code "yum -y groupinstall \"Development Tools\""
end
package %w(pcre-devel xz-devel)
target_dir = File.join("/", "usr", "local", "the_silver_searcher")
git "clone the ag repo" do
repo "https://github.com/ggreer/the_silver_searcher/"
revision "master"
destination target_dir
end
bash "install ag" do
not_if system("hash ag")
cwd target_dir
code <<-EOF
./build.sh
make install
EOF
end
А вот и спецификация:
describe "The Silver Searcher" do
if host_inventory["platform"] == "ubuntu"
describe package("silversearcher-ag") do
it { should be_installed }
end
else
describe package("the_silver_searcher") do
it { should be_installed }
end
end
end
Ошибка Centos:
1) The Silver Searcher Package "the_silver_searcher" should be installed
Failure/Error: it { should be_installed }
expected Package "the_silver_searcher" to be installed
/bin/sh -c rpm\ -q\ the_silver_searcher
package the_silver_searcher is not installed
Точно так же, если я войду в виртуальную машину Centos, я могу использовать ag
:
[vagrant@all-centos-72 ~]$ ag --version
ag version 0.32.0
[vagrant@all-centos-72 ~]$ which ag
/usr/local/bin/ag
Эти команды также работают, если я переключаюсь на пользователя root
.
Я пытался обмануть систему, по-разному написав свои спецификации для платформы Centos:
describe command("ag") do
its(:stderr) { should match /Usage: ag/ }
end
Вышеупомянутое также не работает, хотя ввод ag
при входе в систему (статус выхода 1
) действительно создает этот контент использования. Моя последняя попытка была:
describe file("/usr/local/bin/ag") do
it { should exist }
end
Это работает, но кажется супер хакерским и, как будто в этом нет необходимости.
У кого-нибудь есть рекомендации здесь? Есть ли что-то, что я упускаю/делаю неправильно с этими пакетами? Сначала я думал, что проблема ag
была только потому, что она была установлена из исходного кода, а не менеджером пакетов, но vim
была установлена с помощью менеджера пакетов и по-прежнему имеет ту же проблему, что и ag
.
rpm -q vim
(команда, которую пытается выполнить сопоставительis_installed
), что она выведет? Какой код выхода у команды? Что касается примера с ag, это не удастся, потому что вы строите из исходного кода, а не используете ресурсpackage
, поэтому, как вы обнаружили, вам придется тестировать с альтернативными сопоставителями. - person Karen B   schedule 04.07.2016ag
, это позор, но, думаю, этого следовало ожидать, так что этоvim
вещь, которую я действительно не понимаю. На ваш вопрос: запуск этой команды на сервере Centos вручную выдает то же сообщение, что и бегун спецификации:package vim is not installed
. Статус выхода1
. Любая идея, почему это было бы? - person sixty4bit   schedule 04.07.2016Package 2:vim-enhanced-7.4.160-1.el7.x86_64 already installed and latest version
показывает, что имя пакета на самом делеvim-enhanced
. Прошли годы с тех пор, как мне приходилось иметь дело с yum/CentOS/RHEL, но похоже, что на самом деле нет пакетаvim
. Либо в вашей системе уже был установленvim-enhanced
другим способом, либо происходит какой-то псевдоним. В любом случае попробуйте установить пакет какvim-enhanced
и протестировать его в спецификации сервера для CentOS. - person Karen B   schedule 04.07.2016vim
. Что касаетсяag
, в ходе обсуждения в выпуске GitHub, который я открыл, я нашел способ заставить работать установку через диспетчер пакетов и теперь могу использовать ресурс пакета Serverspec для тестирования. Если вы хотите переформулировать свой последний комментарий как ответ (с примечанием о необходимости обхода ресурса пакета, если что-то не было установлено с помощью диспетчера пакетов), я отмечу это правильно! - person sixty4bit   schedule 04.07.2016yum
позволяет вам получить пакет какvim
, даже если он установлен в системе какvim-enhanced
, что позволило мне зайти так далеко в моей путанице/проблеме. - person sixty4bit   schedule 04.07.2016yum
перенаправлял ваш запросvim
наvim-enhanced
, что является функциейyum
. Я думаю, что это будет делать то же самое, например, для запроса наgvim
. - person Matt Schuchard   schedule 06.07.2016