私はこの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 installed
by()
rpm -q
rpm
yum 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.noarch
rpm -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
、それは私が本当に知る必要があることをかなり説明してくれました。
ですから、これは素晴らしい質問ではないことを認識していますが、他の誰かを助けるかもしれないので削除する必要があるかどうかはわかりませんが、私が得た助けに感謝し、ポイントで報酬を与えたいからです.