溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用Testinfra和Ansible驗證服務(wù)器狀態(tài)

發(fā)布時間:2021-08-21 11:45:54 來源:億速云 閱讀:179 作者:chen 欄目:系統(tǒng)運維

本篇內(nèi)容介紹了“如何使用Testinfra和Ansible驗證服務(wù)器狀態(tài)”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!


Testinfra 是一個功能強大的庫,可用于編寫測試來驗證基礎(chǔ)設(shè)施的狀態(tài)。另外它與 Ansible 和 Nagios 相結(jié)合,提供了一個用于架構(gòu)即代碼 (IaC) 的簡單解決方案。

根據(jù)設(shè)計,Ansible 傳遞機器的期望狀態(tài),以確保 Ansible 劇本或角色的內(nèi)容部署到目標(biāo)機器上。但是,如果你需要確保所有基礎(chǔ)架構(gòu)更改都在 Ansible 中,該怎么辦?或者想隨時驗證服務(wù)器的狀態(tài)?

Testinfra 是一個基礎(chǔ)架構(gòu)測試框架,它可以輕松編寫單元測試來驗證服務(wù)器的狀態(tài)。它是一個 Python 庫,使用強大的 pytest 測試引擎。

開始使用 Testinfra

可以使用 Python 包管理器(pip)和 Python 虛擬環(huán)境輕松安裝 Testinfra。

$ python3 -m venv venv$ source venv/bin/activate(venv) $ pip install testinfra

Testinfra 也可以通過 Fedora 和 CentOS 的 EPEL 倉庫中使用。例如,在 CentOS 7 上,你可以使用以下命令安裝它:

$ yum install -y epel-release$ yum install -y python-testinfra
一個簡單的測試腳本

在 Testinfra 中編寫測試很容易。使用你選擇的代碼編輯器,將以下內(nèi)容添加到名為 test_simple.py 的文件中:

import testinfra def test_os_release(host):    assert host.file("/etc/os-release").contains("Fedora") def test_sshd_inactive(host):    assert host.service("sshd").is_running is False

默認(rèn)情況下,Testinfra 為測試用例提供了一個 host 對象,該對象能訪問不同的輔助模塊。例如,***個測試使用 file 模塊來驗證主機上文件的內(nèi)容,第二個測試用例使用 service 模塊來檢查 systemd 服務(wù)的狀態(tài)。

要在本機運行這些測試,請執(zhí)行以下命令:

(venv)$ pytest test_simple.py================================ test session starts ================================platform linux -- Python 3.7.3, pytest-4.4.1, py-1.8.0, pluggy-0.9.0rootdir: /home/cverna/Documents/Python/testinfraplugins: testinfra-3.0.0collected 2 itemstest_simple.py .. ================================ 2 passed in 0.05 seconds ================================

有關(guān) Testinfra API 的完整列表,你可以參考文檔。

Testinfra 和 Ansible

Testinfra 支持的后端之一是 Ansible,這意味著 Testinfra 可以直接使用 Ansible 的清單文件和清單中定義的一組機器來對它們進行測試。

我們使用以下清單文件作為示例:

[web]app-frontend01app-frontend02 [database]db-backend01

我們希望確保我們的 Apache Web 服務(wù)器在 app-frontend01app-frontend02 上運行。讓我們在名為 test_web.py 的文件中編寫測試:

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

要使用 Testinfra 和 Ansible 運行此測試,請使用以下命令:

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

在調(diào)用測試時,我們使用 Ansible 清單文件的 [web] 組作為目標(biāo)計算機,并指定我們要使用 Ansible 作為連接后端。

使用 Ansible 模塊

Testinfra 還為 Ansible 提供了一個很好的可用于測試的 API。該 Ansible 模塊能夠在測試中運行 Ansible 動作,并且能夠輕松檢查動作的狀態(tài)。

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

默認(rèn)情況下,Ansible 的檢查模式已啟用,這意味著 Ansible 將報告在遠程主機上執(zhí)行動作時會發(fā)生的變化。

Testinfra 和 Nagios

現(xiàn)在我們可以輕松地運行測試來驗證機器的狀態(tài),我們可以使用這些測試來觸發(fā)監(jiān)控系統(tǒng)上的警報。這是捕獲意外的更改的好方法。

Testinfra 提供了與 Nagios 的集成,它是一種流行的監(jiān)控解決方案。默認(rèn)情況下,Nagios 使用 NRPE 插件對遠程主機進行檢查,但使用 Testinfra 可以直接從 Nagios 主控節(jié)點上運行測試。

要使 Testinfra 輸出與 Nagios 兼容,我們必須在觸發(fā)測試時使用 --nagios 標(biāo)志。我們還使用 -qq 這個 pytest 標(biāo)志來啟用 pytest 的靜默模式,這樣就不會顯示所有測試細節(jié)。

(venv) $ py.test --hosts=web --ansible-inventory=inventory --connection=ansible --nagios -qq line test.pyTESTINFRA OK - 1 passed, 0 failed, 0 skipped in 2.55 seconds

Testinfra 是一個功能強大的庫,可用于編寫測試以驗證基礎(chǔ)架構(gòu)的狀態(tài)。 另外與 Ansible 和 Nagios 相結(jié)合,提供了一個用于架構(gòu)即代碼 (IaC) 的簡單解決方案。 它也是使用 Molecule 開發(fā) Ansible 角色過程中添加測試的關(guān)鍵組件。

“如何使用Testinfra和Ansible驗證服務(wù)器狀態(tài)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI