我有这个 serverspec 测试:
describe package("python-pip") do
it { should be_installed.with_version("6.1.1") }
end
它失败了,我在输出中注意到 serverspec 正在检查rpm
默认安装的软件包。然后我在 serverspec 文档中注意到您可以by()
用来指定包管理器,所以我尝试了这个:
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 似乎已经具有我正在寻找的功能。有什么我想念的吗?
编辑
马特的回答帮助我更好地理解了一些事情,比如如何rpm -q
和yum list installed
工作以及如何使用 serverspec 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
是我使用or时打印出来的包名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 问题,我认为是导致需要问这个问题的原因。在这种情况下,当 Matt 指出搜索系统包 with 与 withrpm
相同时yum
,它几乎解释了我真正需要知道的内容。
所以我意识到这不是一个好问题,但我不确定我是否应该删除它,因为也许它可以帮助其他人,但也因为我感谢我得到的帮助并希望用积分来奖励它。