首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过测试-厨房对不可接受角色进行幂等测试?

如何通过测试-厨房对不可接受角色进行幂等测试?
EN

Stack Overflow用户
提问于 2015-09-09 07:36:44
回答 2查看 1.5K关注 0票数 4

特拉维斯-CI很容易做到:

代码语言:javascript
复制
  # Run the role/playbook again, checking to make sure it's idempotent.
  - >
    ansible-playbook -i tests/inventory tests/test.yml --connection=local --sudo --extra-vars "take_ownership_of_tmp=$OWN_TMP"
    | grep -q 'changed=0.*failed=0'
    && (echo 'Idempotence test: pass' && exit 0)
    || (echo 'Idempotence test: fail' && exit 1)

但是我不能使用Travis,因为我需要在Debian系统上测试我的角色。我使用测试-厨房与ansible_playbook供应器。

例如:

我的.kitchen.yml

代码语言:javascript
复制
---
driver:
  name: vagrant

provisioner:
  name: ansible_playbook
  hosts: test-kitchen
  ansible_verbosity: 2
  ansible_verbose: true
  require_ansible_repo: false
  require_chef_omnibus: false
  require_ansible_omnibus: true
  require_chef_for_busser: false
  ansible_omnibus_url: https://raw.githubusercontent.com/neillturner/omnibus-ansible/master/ansible_install.sh

platforms:
  - name: debian-6.0.10-64-nocm
    driver_config: 
      customize:
           memory: 1024
           cpus: 2
      box: puppetlabs/debian-6.0.10-64-nocm
      box_url: https://atlas.hashicorp.com/puppetlabs/boxes/debian-6.0.10-64-nocm/versions/1.0.2/providers/virtualbox.box


suites:
  - name: default

verifier:
  ruby_bindir: '/usr/bin'

测试剧本( test /integration/default/default.yml)非常简单

代码语言:javascript
复制
---
- hosts: all
  roles:
    - preconf
  vars:
    #some vars here

我可以在default.yml中添加preconf角色的第二个调用,但这没有帮助。

有了一次电话,厨房还给我一些更换的物品:

代码语言:javascript
复制
   PLAY RECAP ******************************************************************** 
   localhost                  : ok=12   changed=8    unreachable=0    failed=0  

但是,对于两个调用,它返回项和,而不是两个单独的结果。

代码语言:javascript
复制
   PLAY RECAP ******************************************************************** 
   localhost                  : ok=24   changed=10   unreachable=0    failed=0 

那么,我怎样才能第二次运行剧本,检查幂等测试的结果呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-10 03:20:55

我用BATS测试解决了:

代码语言:javascript
复制
#!/usr/bin/env bats
#

#
# Idempotence test
#

@test "Second run should change nothing" {
    run bash -c "ansible-playbook -i /tmp/kitchen/hosts /tmp/kitchen/default.yml -c local | grep -q 'changed=0.*failed=0' && exit 0 || exit 1"
    [ "$status" -eq 0 ]
}

UPD Serverspec变体:

代码语言:javascript
复制
describe command('ansible-playbook -i /tmp/kitchen/hosts /tmp/kitchen/default.yml -c local') do
  its(:stderr) { should match /changed=0.*failed=0/ }

  its(:exit_status) { should eq 0 }
end
票数 4
EN

Stack Overflow用户

发布于 2018-04-06 14:22:11

ansible_playbookansible_push厨房提供程序现在都支持idempotency_test参数,该参数实际上是第二次运行剧本,并检查failedchanged任务。

您可以简单地将idempotency_test: true添加到.kitchen.yml中,如下所示:

代码语言:javascript
复制
---
driver:
  name: vagrant

provisioner:
  name: ansible_playbook
  hosts: test-kitchen
  ansible_verbosity: 2
  ansible_verbose: true
  require_ansible_repo: false
  require_chef_omnibus: false
  require_ansible_omnibus: true
  require_chef_for_busser: false
  ansible_omnibus_url: https://raw.githubusercontent.com/neillturner/omnibus-ansible/master/ansible_install.sh
  idempotency_test: true

platforms:
  - name: debian-6.0.10-64-nocm
    driver_config: 
      customize:
           memory: 1024
           cpus: 2
      box: puppetlabs/debian-6.0.10-64-nocm
      box_url: https://atlas.hashicorp.com/puppetlabs/boxes/debian-6.0.10-64-nocm/versions/1.0.2/providers/virtualbox.box


suites:
  - name: default

verifier:
  ruby_bindir: '/usr/bin'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32473572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档