我正在尝试创建一个角色,只有在注册的变量具有特定值时才会运行,在本例中为文件的md5sum .
角色/ main.yml如下所示:
----
- name: Has this already been done? Check for the script, & it's md5sum
command: md5sum /usr/sbin/sendmail.postfix
register: md5sum
ignore_errors: True
- name: What's the value of md5sum?
debug: var=md5sum
- include: dontrunthen.yml
when: md5sum.stdout == "e420fc39246a11c890b30b71dda4f976"
- include: dontrunthen.yml
when: md5sum.stdout == "ac0e57862902c2b11c7dfcdca5a79c30"
- include: runme_postfix.yml
when: md5sum.stdout != "e420fc39246a11c890b30b71dda4f976"
那md5sum完全是有问题的文件:
# md5sum /usr/sbin/sendmail.postfix
e420fc39246a11c890b30b71dda4f976 /usr/sbin/sendmail.postfix
然而,当我运行剧本时,它“跳过”应该使角色使用dontrunthen.yml剧本的步骤 . 然后它运行runme_postfix.yml中的任务 . dontrunthen.yml应该失败并结束游戏:
---
- name: We don't need to run if we've made it here...
fail: msg="Looks like this role has already been applied, try checking the file that should have been created
知道为什么会这样吗?这不是我期望的行为 . 我有其他工作角色,有条件地运行取决于操作系统等 .
另外,对于可以与when语句一起使用的术语,如varname.stdout,varname.stderr等,是否有一个很好的参考? Ansible文档中有许多不同的提及和用法,但我似乎无法找到记录这些内容的任何地方 .
2 回答
您可以使用此选项,它正在测试和验证 .
如果一切顺利,这将是输出 -
#ansible-playbook -i ansible_hosts site.yml -u root -v
我希望这符合你的要求 .
可能只是输出不匹配?对我而言,它看起来像是
md5
而你将它与字符串进行比较
输出似乎与系统有关 . 在我的系统上它看起来像这样:
如果这是问题,我会看到两个选项:
使
md5
仅显示校验和,它有一个-q
(相当)参数 .搜索
stdout
,例如when: "e420fc39246a11c890b30b71dda4f976" in md5sum.stdout