3分钟
04 用于测试的模块
某些 playbook 模块对于测试特别友好. 下面的例子保证端口处于打开状态:
tasks:
- wait_for: host={{ inventory_hostname }} port=22
delegate_to: localhost这是使用 URI 模块来确保 web service 有正确的返回:
tasks:
- action: uri url=http://www.example.com return_content=yes
register: webpage
- fail: msg='service is not happy'
when: "'AWESOME' not in webpage.content"可以很容易的将任意(语言)的脚本推送到远程主机上, 如果这个脚本有一个非零的返回码, 它将自动失效:
tasks:
- script: test_script1
- script: test_script2 --parameter value --parameter2 value如果使用 roles(你应该这样做, roles 是伟大的!), 脚本模块可以推送 role 下的 ‘files/’ 目录下的脚本
添加 assert 模块, 它可以很容易的验证各种真理:
tasks:
- shell: /usr/bin/some-command --parameter value
register: cmd_result
- assert:
that:
- "'not ready' not in cmd_result.stderr"
- "'gizmo enabled' in cmd_result.stdout"如果你觉得需要测试通过 Ansible 设置的文件是否存在, ‘stat’ 模块是一个不错的选择:
tasks:
- stat: path=/path/to/something
register: p
- assert:
that:
- p.stat.exists and p.stat.isdir如上所处, 哪些没必要检查的东西如命令的返回码. Ansible 自动检查它们. 如果检查用户存在, 考虑使用 user 模块使其存在.
Ansible 是一个 fail-fast 系统, 所以当创建用户失败, 它将停止 playbook 的运行. 你不必检查它背后的原因.
学员评价