gpt4 book ai didi

ansible - 如何通过 Test-Kitchen 运行 ansible 角色的幂等测试?

转载 作者:行者123 更新时间:2023-12-02 13:13:12 25 4
gpt4 key购买 nike

使用 Travis-CI 非常简单:

  # 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 系统上测试我的角色。我将 Test-Kitchen 与 ansible_playbook 配置程序一起使用。

例如:

我的.kitchen.yml

---
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)非常简单

---
- hosts: all
roles:
- preconf
vars:
#some vars here

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

只需一个电话,厨房就会给我返回一些已更改的项目:

   PLAY RECAP ******************************************************************** 
localhost : ok=12 changed=8 unreachable=0 failed=0

但是通过两次调用,它返回项目的总和,而不是两个单独的结果

   PLAY RECAP ******************************************************************** 
localhost : ok=24 changed=10 unreachable=0 failed=0

那么,我如何第二次运行剧本并检查幂等性测试的结果?

最佳答案

通过 BATS 测试为自己解决了问题:

#!/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 服务器规范变体:

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

关于ansible - 如何通过 Test-Kitchen 运行 ansible 角色的幂等测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32473572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com