1

私はこのserverspecテストを持っています:

  describe package("python-pip") do
    it { should be_installed.with_version("6.1.1") }
  end

失敗していて、serverspecがrpmデフォルトでインストールされたパッケージをチェックしていることに出力で気づきました。by()次に、パッケージマネージャーを指定するために使用できるserverspecドキュメントで気づいたので、これを試しました:

  describe package("python-pip") do
    it { should be_installed.by("yum").with_version("6.1.1") }
  end

ただし、これも失敗し、次のエラーが発生しました。

check_is_installed_by_yum is not implemented in Specinfra::Command::Redhat::Base::Package

ここでそのクラスのドキュメントを確認したところ、次のリストが含まれていないことに気付きましたyum

check_is_installed_by_cpan、check_is_installed_by_gem、check_is_installed_by_npm、check_is_installed_by_pear、check_is_installed_by_pecl、check_is_installed_by_pip、check_is_installed_by_rvm

だから今、私はではdescribe commandなくにフォールバックする必要がありdescribe packageます:

  describe command("yum list installed | grep python27-pip") do
    its(:exit_status) { should eq 0 }
  end

serverspec には私が探している機能がすでに備わっているように見えるので、これはハッキリしています。足りないものはありますか?

編集

Matt の回答は、serverspec がどのようrpm -qに機能し、どのように使用されることを意図していたかなど、いくつかのことをよりよく理解するのに役立ちました(インストールされたパッケージと同じパッケージのみを示したと思いましたが、両方ともインストールされたすべてのパッケージをリストしているようです)。それを知っているので、次のように変更することでテストに合格しました。yum list installedby()rpm -qrpmyum list

  describe package("python27-pip-6.1.1-1.21.amzn1.noarch") do
    it { should be_installed }
  end

python27-pip-6.1.1-1.21.amzn1.noarchrpm -qaまたはを使用したときに出力されるパッケージの名前ですyum list installed。ただし、その名前全体を知っていて、ここで使用する必要があるのは少し面倒です。メソッドを使用して上記で実行しようとしていた方法と同様の方法があることを願っていますwith_version()

編集2

これで、次のようにテストを記述できることがわかりました。

  describe package("python27-pip") do
    it { should be_installed.with_version("6.1.1-1.21.amzn1.noarch") }
  end

だから、私が理解していなかったいくつかの Linux-y のことがあり、それがこの質問をする必要につながったのだと思います。rpmそういうわけで、Matt が でシステム パッケージを検索することは で検索するのと同じであると指摘したときyum、それは私が本当に知る必要があることをかなり説明してくれました。

ですから、これは素晴らしい質問ではないことを認識していますが、他の誰かを助けるかもしれないので削除する必要があるかどうかはわかりませんが、私が得た助けに感謝し、ポイントで報酬を与えたいからです.

4

1 に答える 1

1

手始めに、ここを見てください(RHEL / CentOS / SL / OLを使用していると仮定すると、 orではyumありません):zypperdnf

https://github.com/mizzy/specinfra/blob/master/lib/specinfra/command/redhat/base/package.rb

ドキュメントを確認するのは良い考えでしたが、specinfra/serverspec に貢献しているため、たまたま知っている利用可能なプロバイダー チェーンが他にもたくさんあります。残念ながら、どれもyum.

とのwith_version間のバージョン チェック チェーンには基本的に違いがないため、specinfra には yum プロバイダー チェーンのコマンドがありません。rpmyum

文字通りではyumなくによってインストールされる必要がrpmあり、package メソッドへのチェーンを使用したい場合は、specinfra への PR が必要になります。別のstackoverflowの質問で発見された問題について、すでにspecinfraにPRを行っているので、いつでもこれを打ち負かすことができます。

最後に、ここにあなたのブロックがあります:

describe package("python-pip") do
  it { should be_installed.with_version("6.1.1") }
end

意図したとおりに完全に機能するはずです (のバージョン 6.1.1python-pipがインストールされているかどうかを確認します)。そうでない場合は、テスト、サーバー構成、または specinfra/serverspec に問題があります。そのテストからの出力を追加することをお勧めします。これも調査する価値があるためです。

于 2016-06-16T16:37:39.683 に答える