使用 Testinfra 和 Ansible 驗證伺服器狀態
Testinfra 是一個功能強大的庫,可用於編寫測試來驗證基礎設施的狀態。另外它與 Ansible 和 Nagios 相結合,提供了一個用於架構即程式碼 (IaC) 的簡單解決方案。
根據設計,Ansible 傳遞機器的期望狀態,以確保 Ansible 劇本或角色的內容部署到目標機器上。但是,如果你需要確保所有基礎架構更改都在 Ansible 中,該怎麼辦?或者想隨時驗證伺服器的狀態?
Testinfra 是一個基礎架構測試框架,它可以輕鬆編寫單元測試來驗證伺服器的狀態。它是一個 Python 庫,使用強大的 pytest 測試引擎。
開始使用 Testinfra
可以使用 Python 包管理器(pip
)和 Python 虛擬環境輕鬆安裝 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 中編寫測試很容易。使用你選擇的程式碼編輯器,將以下內容新增到名為 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
預設情況下,Testinfra 為測試用例提供了一個 host
物件,該物件能訪問不同的輔助模組。例如,第一個測試使用 file
模組來驗證主機上檔案的內容,第二個測試用例使用 service
模組來檢查 systemd 服務的狀態。
要在本機執行這些測試,請執行以下命令:
(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.0
rootdir: /home/cverna/Documents/Python/testinfra
plugins: testinfra-3.0.0
collected 2 items
test_simple.py ..
================================ 2 passed in 0.05 seconds ================================
有關 Testinfra API 的完整列表,你可以參考文件。
Testinfra 和 Ansible
Testinfra 支援的後端之一是 Ansible,這意味著 Testinfra 可以直接使用 Ansible 的清單檔案和清單中定義的一組機器來對它們進行測試。
我們使用以下清單檔案作為示例:
[web]
app-frontend01
app-frontend02
[database]
db-backend01
我們希望確保我們的 Apache Web 伺服器在 app-frontend01
和 app-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
在呼叫測試時,我們使用 Ansible 清單檔案的 [web]
組作為目標計算機,並指定我們要使用 Ansible 作為連線後端。
使用 Ansible 模組
Testinfra 還為 Ansible 提供了一個很好的可用於測試的 API。該 Ansible 模組能夠在測試中執行 Ansible 動作,並且能夠輕鬆檢查動作的狀態。
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"]
預設情況下,Ansible 的檢查模式已啟用,這意味著 Ansible 將報告在遠端主機上執行動作時會發生的變化。
Testinfra 和 Nagios
現在我們可以輕鬆地執行測試來驗證機器的狀態,我們可以使用這些測試來觸發監控系統上的警報。這是捕獲意外的更改的好方法。
Testinfra 提供了與 Nagios 的整合,它是一種流行的監控解決方案。預設情況下,Nagios 使用 NRPE 外掛對遠端主機進行檢查,但使用 Testinfra 可以直接從 Nagios 主控節點上執行測試。
要使 Testinfra 輸出與 Nagios 相容,我們必須在觸發測試時使用 --nagios
標誌。我們還使用 -qq
這個 pytest 標誌來啟用 pytest 的靜默模式,這樣就不會顯示所有測試細節。
(venv) $ py.test --hosts=web --ansible-inventory=inventory --connection=ansible --nagios -qq line test.py
TESTINFRA OK - 1 passed, 0 failed, 0 skipped in 2.55 seconds
Testinfra 是一個功能強大的庫,可用於編寫測試以驗證基礎架構的狀態。 另外與 Ansible 和 Nagios 相結合,提供了一個用於架構即程式碼 (IaC) 的簡單解決方案。 它也是使用 Molecule 開發 Ansible 角色過程中新增測試的關鍵元件。
via: https://opensource.com/article/19/5/using-testinfra-ansible-verify-server-state
作者:Clement Verna 選題:lujun9972 譯者:geekpi 校對:wxy
相關文章
- 使用Lua和OpenResty搭建驗證碼伺服器REST伺服器
- 網站狀態驗證WebBrowser控制元件實現網站Web控制元件
- Go語言WEB框架:使用wego攔截器驗證使用者的登入狀態GoWeb框架
- Struts 驗證框架 配置和使用框架
- 【iCore4 雙核心板_FPGA】例程七:狀態機實驗——狀態機使用FPGA
- 【iCore3 雙核心板_FPGA】例程九:狀態機實驗——狀態機使用FPGA
- 伺服器埠狀態伺服器
- 伺服器狀態碼伺服器
- 【iCore1S 雙核心板_FPGA】例程六:狀態機實驗——狀態機使用FPGA
- ansible2.4安裝和體驗
- C#實現JWT無狀態驗證的實戰應用C#JWT
- MySQL 分析伺服器狀態MySql伺服器
- 使用ansible批量管理遠端伺服器伺服器
- 有狀態和無狀態的區別
- JavaScript驗證碼生成和驗證效果JavaScript
- 按鈕體驗設計:最佳的感受、形式和狀態
- MVC Remote 伺服器驗證MVCREM伺服器
- 如何驗證代理伺服器伺服器
- Spring Boot專案中使用 TrueLicense 生成和驗證License(伺服器許可)Spring Boot伺服器
- 解決mac下安裝 Vagrant+VirtualBox驗證狀態卡死問題Mac
- 使用tinyvalidator實現伺服器端驗證 -Yuri Mednikov伺服器
- JqueryValidate 動態新增驗證jQuery
- Flutter狀態管理provider的使用和封裝FlutterIDE封裝
- 模擬使用者登入,內含驗證碼驗證和request等操作
- mysql 優化:使用show status檢視MySQL伺服器狀態資訊MySql優化伺服器
- nuxt3_使用pinia實現伺服器端渲染狀態管理UX伺服器
- [React]屬性和狀態React
- Angular狀態管理的使用Angular
- 如何使用 Ansible 同步 GitHub 和 GitLabGithubGitlab
- nginx 代理伺服器配置雙向證書驗證Nginx伺服器
- ASP.NET Core如何禁用模型驗證(或者從模型狀態中移除某些屬性)?ASP.NET模型
- 為什麼動態代理IP驗證有效卻無法使用?
- iview表單驗證問題 Select驗證必填失敗,以及表單物件巢狀陣列驗證方法View物件巢狀陣列
- 移動端使用者體驗設計中錯誤狀態設計分析和實踐
- Oracle資料庫的靜默狀態和掛起狀態Oracle資料庫
- K重交叉驗證和網格搜尋驗證
- 【主機】檢視伺服器埠狀態伺服器
- 驗證碼機制之驗證碼重複使用