Chef/Vagrant/Serverspec: спецификации, обеспечивающие сбой при установке пакетов, но они установлены

Из документов кажется, что использование 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 VM, я могу использовать 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,

2 ответа

Решение

Ответ на вопрос состоит из двух частей, одна из которых посвящена тому, как работает Serverspec, а другая - тому, как различные дистрибутивы Linux обрабатывают пакеты.

1) Пользователи Serverspec не должны принимать какое-либо поведение, которое буквально не подразумевается под именем package ресурс. Приложения, которые устанавливаются любым другим способом, кроме системного менеджера пакетов, не будут выбраны, а их успешная установка должна быть проверена другими способами. Это может включать, как в вопросе, тестирование на наличие двоичного файла.

2) Когда разработчик установил приложение с менеджером пакетов, он должен знать, что менеджеры пакетов в разных дистрибутивах Linux иногда (часто?) Имеют разные имена для одного и того же пакета. Классический пример этого apache2 в системах Debian и httpd в системах RedHat. В конкретном случае, упомянутом в вопросе, vim признан на CentOS как vim-enhanced даже если yum принимает vim как имя при установке (спасибо @matt-schuchard за указание на то, что они связаны).

Также хотел бы поблагодарить @Karen B за то, что помог мне прийти к этим выводам в комментариях к вопросу.

Вы не устанавливаете ag через пакет, так что это не "хак", чтобы это не сработало.

Другие вопросы по тегам