成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何借助Molecule測試Ansible角色

譯文
開發 測試
開發人員總是在測試,需要不斷的反饋來促進開發。如果獲得變更方面的反饋很費時間,表明你的步驟可能太龐大,難以發現錯誤。小步驟和快速反饋是TDD(測試驅動型開發)的精髓。但是你如何將這個方法應用于開發特定的playbook或角色呢?

[[252388]]

【51CTO.com快譯】測試技術在軟件開發中扮演著重要角色,我們談論基礎設施即代碼(IaC)時也一樣。

開發人員總是在測試,需要不斷的反饋來促進開發。如果獲得變更方面的反饋很費時間,表明你的步驟可能太龐大,難以發現錯誤。小步驟和快速反饋是TDD(測試驅動型開發)的精髓。但是你如何將這個方法應用于開發特定的playbook或角色呢?

開發自動化時,典型的工作流程會從新的虛擬機開始。我使用Vagrant來闡述這個想法,但你可以使用libvirt、Docker、VirtualBox、VMware、私有云或公共云中的實例,或者數據中心虛擬機管理程序中配置的虛擬機(比如oVirt、Xen或VMware)。

決定使用哪個虛擬機時,應兼顧反饋速度和與你的實際目標環境的相似性。

Vagrant的最小起點是:

  1. vagrant init centos/7 # or any other box 

然后將Ansible配置添加到你的Vagrantfile:

  1. config.vm.provision "ansible" do |ansible|  
  2. ansible.playbook = "playbook.yml"  
  3. end 

***,你的工作流程將是這樣:

1. vagrant up。

2. 編輯playbook。

3. vagrant provision。

4. vagrant ssh,以驗證虛擬機狀態。

5. 重復步驟2至4。

偶爾會銷毀并再次啟動虛擬機(vagrant destroy -f; vagrant up),以提高你playbook的可靠性(即為了測試你的自動化是不是端到端運行)。

雖然這是很好的工作流程,但你仍在完成連接到虛擬機,并驗證一切都按預期運行的所有棘手工作。

如果測試未自動化,你沒有自動化基礎架構時會面臨類似那樣的問題。

幸好,像Testinfra和Goss這樣的工具有助于自動化這些驗證。

我將著重介紹Testinfra,因為它是用Python編寫的,是Molecule的默認驗證器。想法很簡單:使用Python自動化你的驗證。

  1. def test_nginx_is_installed(host):  
  2. nginx = host.package("nginx" 
  3. assert nginx.is_installed  
  4. assert nginx.version.startswith("1.2" 
  5. def test_nginx_running_and_enabled(host):  
  6. nginx = host.service("nginx" 
  7. assert nginx.is_running  
  8. assert nginx.is_enabled 

在開發環境中,該腳本將使用SSH(就像Ansible)連接到目標主機以執行上述驗證(包存在/版本和服務狀態):

  1. py.test --connection=ssh --hosts=server 

簡而言之,在基礎架構自動化開發過程中,面臨的挑戰是配置新的基礎架構,針對它們執行playbook,驗證你的變更體現了你在playbooks中聲明的狀態。

  • Testinfra能驗證什么?
    • 從用戶的角度來看,基礎架構已安裝并運行起來(比如,HTTPD或Nginx在回應請求,MariaDB或PostgreSQL在處理SQL查詢)。
    • OS服務已運行并啟用
    • 進程在偵聽特定的端口
    • 進程在回應請求
    • 配置文件用模板正確復制或生成
    • 你幾乎執行的任何操作,確保服務器狀態正確無誤
  • 這些自動化測試提供了哪些安全措施?
    • 執行復雜的變更或引入新功能而不破壞現有行為(比如,添加對基于Debian的系統的支持后,仍可以在基于RHEL的發行版中運行)。
    • 發布Ansible的新版本并引入新的***實踐時,重構/改進代碼庫。

到目前為止,我們對Vagrant、Ansible和Testinfra所做的工作很容易與四階段測試模式中描述的步驟對應起來――這種測試結構方法使測試目標清晰。它包括下列階段:安裝、演練、驗證和拆除:

  • 安裝:為測試執行準備環境(比如啟用新的虛擬機):
  1. vagrant up 
  • 演練:針對測試的系統有效地執行代碼(即Ansible playbook):
  1. vagrant provision 
  • 驗證:驗證上一步的輸出:
  1. py.test(針對Testinfra) 
  • 拆除:回到安裝前的狀態:
  1. vagrant destroy 

我們用于特定playbook的同一個想法可以運用于角色開發和測試,但每當開發新產品時是否需要執行所有這些步驟?如果你想使用容器或OpenStack而不是Vagrant,該怎么辦?如果你寧愿使用Goss而不是Testinfra,該怎么辦?如何針對你代碼中的每次變更持續運行此操作?有沒有一種更簡單快速的方法來使用自動化測試開發playbook和角色?

Molecule

Molecule使用測試幫助開發角色。該工具甚至可以用測試用例初始化新角色:molecule init role –role-name foo。

Molecule很靈活,足以讓你可以將不同的驅動程序用于基礎架構配置,包括Docker、Vagrant、OpenStack、GCE、EC2和Azure。它還允許使用不同的服務器驗證工具,包括Testinfra和Goss。

它的命令簡化了開發工作流程中常用任務的執行:

  • lint-執行yaml-lint、ansible-lint和flake8,如果有問題報告故障
  • syntax-驗證角色的語法錯誤
  • create-創建驅動程序已配置的實例
  • prepare-使用準備playbook來配置實例
  • converge-執行針對主機的playbook
  • idempotence-執行兩次playbook;萬一第二次運行出現變更,就失效(非冪等)
  • verify-執行服務器狀態驗證工具(testinfra或goss)
  • destroy-銷毀實例
  • test-執行前面的所有步驟

login命令可用于連接到已配置的服務器用于故障排查。

逐步操作

你如何從根本沒有測試到針對每次變更/提交執行一個體面的代碼庫?

1. virtualenv(可選)

virtualenv工具創建孤立的環境,而virtualenvwrapper是便于使用virtualenv的擴展件的集合。

這些工具可防止Molecule與計算機中其他Python包之間的依賴項和沖突。

  1. sudo pip install virtualenvwrapper  
  2. export WORKON_HOME=~/envs  
  3. source /usr/local/bin/virtualenvwrapper.sh  
  4. mkvirtualenv mocule 

2. Molecule

安裝帶Docker驅動程序的Molecule:

  1. pip install molecule ansible docker-py 

生成帶測試場景的新角色:

  1. molecule init role -r role_name 

或者針對現有角色:

  1. molecule init scenario -r my-role 

所有必要的配置都是使用你的角色生成,你只要使用Testinfra編寫測試用例:

  1. import os  
  2. import testinfra.utils.ansible_runner  
  3. testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(  
  4. os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all' 
  5. def test_jboss_running_and_enabled(host):  
  6. jboss = host.service('wildfly' 
  7. assert jboss.is_enabled  
  8. def test_jboss_listening_http(host):  
  9. socket = host.socket('tcp://0.0.0.0:8080' 
  10. assert socket.is_listening  
  11. def test_mgmt_user_authentication(host):  
  12. command = """curl --digest -L -D - http://localhost:9990/management \  
  13. -u ansible:ansible"" 
  14. cmd = host.run(command)  
  15. assert 'HTTP/1.1 200 OK' in cmd.stdout 

Wildfly角色的該示例測試用例驗證OS服務已啟用,進程在偵聽端口8080,身份驗證已正確配置。

為這些測試編寫代碼很簡單,你基本上需要考慮一種自動驗證方法。

你登錄到playbook針對的機器或者為監視/警報系統構建驗證時,你已經在編寫測試。 這有助于使用Testinfra API或使用系統命令來構建內容。

CI

持續執行Molecule測試很簡單。上述示例適用于帶Docker驅動程序的TravisCI,但它可能很容易改動,適合Molecule支持的任何CI服務器和任何基礎架構驅動程序。

  1. ---  
  2. sudo: required  
  3. language: python  
  4. services:  
  5. - docker  
  6. before_install:  
  7. - sudo apt-get -qq update  
  8. - pip install molecule  
  9. - pip install docker-py  
  10. script:  
  11. - molecule test 

訪問Travis CI以獲取示例輸出。

原文標題:Testing Ansible roles with Molecule,作者:Jairo da Silva Junior

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

責任編輯:龐桂玉 來源: 51CTO
相關推薦

2012-07-26 10:30:42

測試測試人員

2013-12-23 10:36:57

Nagios監控監測

2014-02-17 10:48:57

NagiosBGP會話

2024-11-27 08:14:43

2016-12-07 09:26:27

GlusterFS存儲池

2012-05-14 11:52:45

服務器角色

2011-07-26 10:27:07

分析器操作系統服務器

2011-11-30 09:29:18

BYODWindows服務器

2013-07-26 17:07:33

Foglight容量

2015-09-15 09:50:02

CIO ITaaSIT即服務

2024-05-10 08:33:17

AILLM大語言模型

2023-02-21 14:16:42

2021-09-15 10:27:25

物聯網人工智能IoT

2016-11-08 13:50:57

2015-08-19 09:38:29

云集群高性能計算云計算

2020-01-02 10:44:22

運維架構技術

2020-10-10 20:30:05

Ansible自動化工具系統運維

2010-11-16 10:32:06

職場

2016-02-16 09:36:37

CrossOverLinuxWindows

2013-11-18 11:41:37

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线视频91 | 久久99久久98精品免观看软件 | 日本精品网站 | 亚洲国产视频一区二区 | 久久久久国产精品午夜一区 | 国产99小视频 | 在线播放国产一区二区三区 | 日日干夜夜操天天操 | 久久9视频 | 国产精品久久久久久妇女6080 | 国产小u女发育末成年 | 日韩av一区二区在线观看 | 国产成人精品一区二区 | 国产69久久精品成人看动漫 | 亚洲人成在线播放 | 欧美精品在线视频 | 亚洲一区二区三区在线播放 | 国产精品久久久久久吹潮 | 人人做人人澡人人爽欧美 | 中文字幕高清 | 亚洲高清在线播放 | 欧美成人精品在线 | 国产 欧美 日韩 一区 | 日韩成人精品一区二区三区 | 欧美精品一区二区三区在线四季 | av片网站| 伊人网一区| 日韩在线中文字幕 | 国产精彩视频 | 国产区精品 | 中文字幕在线一区二区三区 | 精品一级 | av免费成人 | 午夜综合 | 精品毛片 | 国产精品久久久久av | 殴美黄色录像 | 日韩一级二级片 | 久久视频精品 | 中文字幕在线不卡播放 | 亚洲精品久久久久久久久久久 |