我有这个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
我查看了该课程here的文档并注意到此列表,其中不包含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的回答帮助我更好地理解了一些事情,例如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
或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我不明白的东西,我认为这是导致这个问题需要被问到的原因。在这种情况下,当Matt指出使用rpm
搜索系统包与yum
相同时,它几乎解释了我真正需要知道的内容。
所以我意识到这不是一个很好的问题,但我不确定是否应该删除它,因为也许它可以帮助别人,但也因为我感谢我得到的帮助,并希望用分数奖励它。
答案 0 :(得分:1)
对于初学者,请看一下(假设您使用的是RHEL / CentOS / SL / OL,因为您说yum
而不是zypper
或dnf
):
https://github.com/mizzy/specinfra/blob/master/lib/specinfra/command/redhat/base/package.rb
检查文档是一个好主意,但有一些其他提供商链可供我碰巧知道,因为我参与了specinfra / serverspec。不幸的是,没有yum
。
由于with_version
和rpm
之间的版本检查链yum
基本上没有区别,因此specinfra没有针对yum提供商链的命令。
如果你真的要求它由yum
而不是rpm
安装,并且想要使用一个链到package方法,那么这将需要PR来指定。我已经要为另一个stackoverflow问题中发现的问题对specinfra做一个公关,所以我也可以一直打开这个问题。
最后,你的阻止在这里:
describe package("python-pip") do
it { should be_installed.with_version("6.1.1") }
end
应该绝对按预期工作(检查是否安装了python-pip
版本6.1.1)。如果不是,那么测试,服务器配置或specinfra / serverspec都会出现问题。我建议添加该测试的输出,因为这也是值得探索的途径。