偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

如何借助Molecule測試Ansible角色

譯文
開發(fā) 測試
開發(fā)人員總是在測試,需要不斷的反饋來促進(jìn)開發(fā)。如果獲得變更方面的反饋很費(fèi)時(shí)間,表明你的步驟可能太龐大,難以發(fā)現(xiàn)錯(cuò)誤。小步驟和快速反饋是TDD(測試驅(qū)動(dòng)型開發(fā))的精髓。但是你如何將這個(gè)方法應(yīng)用于開發(fā)特定的playbook或角色呢?

[[252388]]

【51CTO.com快譯】測試技術(shù)在軟件開發(fā)中扮演著重要角色,我們談?wù)摶A(chǔ)設(shè)施即代碼(IaC)時(shí)也一樣。

開發(fā)人員總是在測試,需要不斷的反饋來促進(jìn)開發(fā)。如果獲得變更方面的反饋很費(fèi)時(shí)間,表明你的步驟可能太龐大,難以發(fā)現(xiàn)錯(cuò)誤。小步驟和快速反饋是TDD(測試驅(qū)動(dòng)型開發(fā))的精髓。但是你如何將這個(gè)方法應(yīng)用于開發(fā)特定的playbook或角色呢?

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

決定使用哪個(gè)虛擬機(jī)時(shí),應(yīng)兼顧反饋速度和與你的實(shí)際目標(biāo)環(huán)境的相似性。

Vagrant的最小起點(diǎn)是:

  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,以驗(yàn)證虛擬機(jī)狀態(tài)。

5. 重復(fù)步驟2至4。

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

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

如果測試未自動(dòng)化,你沒有自動(dòng)化基礎(chǔ)架構(gòu)時(shí)會(huì)面臨類似那樣的問題。

幸好,像Testinfra和Goss這樣的工具有助于自動(dòng)化這些驗(yàn)證。

我將著重介紹Testinfra,因?yàn)樗怯肞ython編寫的,是Molecule的默認(rèn)驗(yàn)證器。想法很簡單:使用Python自動(dòng)化你的驗(yàn)證。

  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 

在開發(fā)環(huán)境中,該腳本將使用SSH(就像Ansible)連接到目標(biāo)主機(jī)以執(zhí)行上述驗(yàn)證(包存在/版本和服務(wù)狀態(tài)):

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

簡而言之,在基礎(chǔ)架構(gòu)自動(dòng)化開發(fā)過程中,面臨的挑戰(zhàn)是配置新的基礎(chǔ)架構(gòu),針對它們執(zhí)行playbook,驗(yàn)證你的變更體現(xiàn)了你在playbooks中聲明的狀態(tài)。

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

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

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

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

Molecule

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

Molecule很靈活,足以讓你可以將不同的驅(qū)動(dòng)程序用于基礎(chǔ)架構(gòu)配置,包括Docker、Vagrant、OpenStack、GCE、EC2和Azure。它還允許使用不同的服務(wù)器驗(yàn)證工具,包括Testinfra和Goss。

它的命令簡化了開發(fā)工作流程中常用任務(wù)的執(zhí)行:

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

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

逐步操作

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

1. virtualenv(可選)

virtualenv工具創(chuàng)建孤立的環(huán)境,而virtualenvwrapper是便于使用virtualenv的擴(kuò)展件的集合。

這些工具可防止Molecule與計(jì)算機(jī)中其他Python包之間的依賴項(xiàng)和沖突。

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

2. Molecule

安裝帶Docker驅(qū)動(dòng)程序的Molecule:

  1. pip install molecule ansible docker-py 

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

  1. molecule init role -r role_name 

或者針對現(xiàn)有角色:

  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角色的該示例測試用例驗(yàn)證OS服務(wù)已啟用,進(jìn)程在偵聽端口8080,身份驗(yàn)證已正確配置。

為這些測試編寫代碼很簡單,你基本上需要考慮一種自動(dòng)驗(yàn)證方法。

你登錄到playbook針對的機(jī)器或者為監(jiān)視/警報(bào)系統(tǒng)構(gòu)建驗(yàn)證時(shí),你已經(jīng)在編寫測試。 這有助于使用Testinfra API或使用系統(tǒng)命令來構(gòu)建內(nèi)容。

CI

持續(xù)執(zhí)行Molecule測試很簡單。上述示例適用于帶Docker驅(qū)動(dòng)程序的TravisCI,但它可能很容易改動(dòng),適合Molecule支持的任何CI服務(wù)器和任何基礎(chǔ)架構(gòu)驅(qū)動(dòng)程序。

  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以獲取示例輸出。

原文標(biāo)題:Testing Ansible roles with Molecule,作者:Jairo da Silva Junior

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

責(zé)任編輯:龐桂玉 來源: 51CTO
相關(guān)推薦

2012-07-26 10:30:42

測試測試人員

2013-12-23 10:36:57

Nagios監(jiān)控監(jiān)測

2014-02-17 10:48:57

NagiosBGP會(huì)話

2024-11-27 08:14:43

2016-12-07 09:26:27

GlusterFS存儲(chǔ)池

2012-05-14 11:52:45

服務(wù)器角色

2011-07-26 10:27:07

分析器操作系統(tǒng)服務(wù)器

2011-11-30 09:29:18

BYODWindows服務(wù)器

2013-07-26 17:07:33

Foglight容量

2015-09-15 09:50:02

CIO ITaaSIT即服務(wù)

2024-05-10 08:33:17

AILLM大語言模型

2021-09-15 10:27:25

物聯(lián)網(wǎng)人工智能IoT

2016-11-08 13:50:57

2023-02-21 14:16:42

2015-08-19 09:38:29

云集群高性能計(jì)算云計(jì)算

2010-11-16 10:32:06

職場

2020-01-02 10:44:22

運(yùn)維架構(gòu)技術(shù)

2020-10-10 20:30:05

Ansible自動(dòng)化工具系統(tǒng)運(yùn)維

2016-02-16 09:36:37

CrossOverLinuxWindows

2013-11-18 11:41:37

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號