- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
从文档看来,使用 Serverspec 来验证软件包是否已安装应该非常简单,但我在使用 vim
和 ag
时遇到了一些有趣的问题(the_silver_searcher
)。
我正在使用带有 kitchen-vagrant
插件的 Test Kitchen,并且有两个平台:ubuntu-1404
和 centos-72
。我的所有规范都通过了 Ubuntu,其中两个在 Centos 上失败了:vim
和 ag
。
vi
处理此安装的 Chef 代码非常简单:
打包“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
获得。这是 Recipe 的相关部分:
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
这行得通,但感觉 super hacky,好像没有必要。
有人在这里有推荐吗?这些包裹有什么我遗漏/做错了吗?我最初认为 ag
问题是唯一的 因为它是从源代码而不是包管理器安装的,但是 vim
是 使用包管理器安装,但仍然存在与 ag
相同的问题。
最佳答案
问题的答案分为两部分,一部分涉及 Serverspec 的工作方式,另一部分涉及各种 Linux 发行版如何处理包。
1) Serverspec 用户不应该假设任何不是由 package
资源名称字面上暗示的行为。通过系统包管理器以外的任何方式安装的应用程序将不会被拾取,并且应通过其他方式测试它们是否成功安装。正如问题中所述,这可能包括测试二进制文件是否存在。
2) 当开发人员安装了带有包管理器的应用程序时,他/她必须意识到不同 Linux 发行版上的包管理器有时(经常?)对同一个包有不同的名称。一个典型的例子是 Debian 系统上的 apache2
与 RedHat 系统上的 httpd
。在问题中提到的特定情况下,vim
在 CentOS 上被识别为 vim-enhanced
即使 yum
接受 vim
作为安装时的名称(感谢@matt-schuchard 指出它们是链接的)。
还想感谢@Karen B 在对问题的评论中帮助我得出这些结论。
关于ruby - Chef/Vagrant/Serverspec : specs ensuring that packages are installed fail, 但已安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38163142/
我正在尝试使用 rspec、serverspec 和 docker-api gems 测试 Dockerfile。在大多数情况下,我的测试都通过了,但所有使用 command 方法的测试都失败了,无论
我对 serverspec 有疑问。我正在尝试检查 ubuntu 上已安装的软件包版本。 我使用这段代码: describe 'java packages' do it 'package open
我想检查现有目录是否为空(不包含任何文件或子目录)。 我尝试了以下方法: describe file('/path/to/file') do it { should be_empty } en
我相信这个问题可能与 serverspec service test returns incorrect failure 重复,但我包含了更多关于我的执行环境的信息。 我针对 AWS 上的 RHEL6
我的 serverspec 示例,使用 serverspec-init 进行设置,然后我生成了这个简单的测试文件 ./spec/altspf01/sample_spec.rb require 'spe
我在 serverspec 配方中进行了以下测试 - 哈希只是 Chef 中描述的整个资源(我希望在某个时候将其通过管道传输) # Test Folder Permissons # hash take
Serverspec 站点的高级提示部分显示了使用相同测试集测试多个主机的示例。我自己构建了一个示例 ( https://gist.github.com/neilhwatson/81249ad3938
我正在使用 Terraform 自动构建基于 AWS EC2 的 docker 主机,然后使用其远程 exec 选项下载 docker 文件,构建并运行它。 我希望将其与 Serverspec 集成,
我的要求是我需要运行安装在其他用户中的实用程序,我必须检查从该 session 返回的输出并验证它。示例: 我以 srijava 用户身份安装了 java 现在在 Serverspec 中,我编写了测
我正在使用 Test-Kitchen与 serverspec总线。我正在尝试测试 redis服务正在运行到我的厨房实例中。 这是我的 serverspec 测试。 describe "myapp::r
在一本 Recipe 上,我定义了一个 Rds::Checks 类,它共享为 bash/execute 资源和 Guards 构建 unix 命令的方法。文件 libraries/checks.rb
我在使用 ServerSpec 对我的 Chef 说明书运行集成测试时遇到了问题。当我今天尝试运行测试时,没有做任何更改,我收到以下错误: tl;博士 /tmp/busser/suites/serve
我被测试驱动的基础设施错误所困扰。我目前的项目使用的是Azure,包括SQL Azure、Azure表、云服务和移动服务。配置整个环境有些复杂。现在我正在寻找一个测试框架,我可以用它来验证环境配置是否
我有这个 serverspec 测试: describe package("python-pip") do it { should be_installed.with_version("6
当使用 chef generate cookbook hello 命令时,生成的 serverspec spec_helper.rb 文件将不适用于 Test-Kitchen 1.4.1 和 wind
从文档看来,使用 Serverspec 来验证软件包是否已安装应该非常简单,但我在使用 vim 和 ag 时遇到了一些有趣的问题(the_silver_searcher)。 我正在使用带有 kitch
考虑一下,我有两本 Recipe A 和 B,每本都有自己的集成测试,使用 serverspec 测试和 kitchen。如果我只想针对自己的测试套件测试一本 Recipe ,一切都可以正常工作。现在
我是一名优秀的程序员,十分优秀!