加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

使用Testinfra和Ansible验证服务器状态

发布时间:2019-06-07 17:48:21 所属栏目:Windows 来源:Clement Verna
导读:Testinfra 是一个功能强大的库,可用于编写测试来验证基础设施的状态。另外它与 Ansible 和 Nagios 相结合,提供了一个用于架构即代码 (IaC) 的简单解决方案。 根据设计,Ansible 传递机器的期望状态,以确保 Ansible 剧本或角色的内容部署到目标机器上。
副标题[/!--empirenews.page--]

/uploads/allimg/c190606/155b21412QH0-1B35.jpg

Testinfra 是一个功能强大的库,可用于编写测试来验证基础设施的状态。另外它与 Ansible 和 Nagios 相结合,提供了一个用于架构即代码 (IaC) 的简单解决方案。

根据设计,Ansible 传递机器的期望状态,以确保 Ansible 剧本或角色的内容部署到目标机器上。但是,如果你需要确保所有基础架构更改都在 Ansible 中,该怎么办?或者想随时验证服务器的状态?

Testinfra 是一个基础架构测试框架,它可以轻松编写单元测试来验证服务器的状态。它是一个 Python 库,使用强大的 pytest 测试引擎。

开始使用 Testinfra

可以使用 Python 包管理器(pip)和 Python 虚拟环境轻松安装 Testinfra。

  1. $ python3 -m venv venv
  2. $ source venv/bin/activate
  3. (venv) $ pip install testinfra

Testinfra 也可以通过 Fedora 和 CentOS 的 EPEL 仓库中使用。例如,在 CentOS 7 上,你可以使用以下命令安装它:

  1. $ yum install -y epel-release
  2. $ yum install -y python-testinfra

一个简单的测试脚本

在 Testinfra 中编写测试很容易。使用你选择的代码编辑器,将以下内容添加到名为 test_simple.py 的文件中:

  1. import testinfra
  2.  
  3. def test_os_release(host):
  4. assert host.file("/etc/os-release").contains("Fedora")
  5.  
  6. def test_sshd_inactive(host):
  7. assert host.service("sshd").is_running is False

默认情况下,Testinfra 为测试用例提供了一个 host 对象,该对象能访问不同的辅助模块。例如,第一个测试使用 file 模块来验证主机上文件的内容,第二个测试用例使用 service 模块来检查 systemd 服务的状态。

要在本机运行这些测试,请执行以下命令:

  1. (venv)$ pytest test_simple.py
  2. ================================ test session starts ================================
  3. platform linux -- Python 3.7.3, pytest-4.4.1, py-1.8.0, pluggy-0.9.0
  4. rootdir: /home/cverna/Documents/Python/testinfra
  5. plugins: testinfra-3.0.0
  6. collected 2 items
  7. test_simple.py ..
  8.  
  9. ================================ 2 passed in 0.05 seconds ================================

有关 Testinfra API 的完整列表,你可以参考文档。

Testinfra 和 Ansible

Testinfra 支持的后端之一是 Ansible,这意味着 Testinfra 可以直接使用 Ansible 的清单文件和清单中定义的一组机器来对它们进行测试。

我们使用以下清单文件作为示例:

  1. [web]
  2. app-frontend01
  3. app-frontend02
  4.  
  5. [database]
  6. db-backend01

我们希望确保我们的 Apache Web 服务器在 app-frontend01app-frontend02 上运行。让我们在名为 test_web.py 的文件中编写测试:

  1. def check_httpd_service(host):
  2. """Check that the httpd service is running on the host"""
  3. assert host.service("httpd").is_running

要使用 Testinfra 和 Ansible 运行此测试,请使用以下命令:

  1. (venv) $ pip install ansible
  2. (venv) $ py.test --hosts=web --ansible-inventory=inventory --connection=ansible test_web.py

在调用测试时,我们使用 Ansible 清单文件的 [web] 组作为目标计算机,并指定我们要使用 Ansible 作为连接后端。

使用 Ansible 模块

Testinfra 还为 Ansible 提供了一个很好的可用于测试的 API。该 Ansible 模块能够在测试中运行 Ansible 动作,并且能够轻松检查动作的状态。

  1. def check_ansible_play(host):
  2. """
  3. Verify that a package is installed using Ansible
  4. package module
  5. """
  6. assert not host.ansible("package", "name=httpd state=present")["changed"]

默认情况下,Ansible 的检查模式已启用,这意味着 Ansible 将报告在远程主机上执行动作时会发生的变化。

Testinfra 和 Nagios

现在我们可以轻松地运行测试来验证机器的状态,我们可以使用这些测试来触发监控系统上的警报。这是捕获意外的更改的好方法。

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读