我在项目中使用Vagrant + Ansible。我想让用户可选择提供一个名为“workspace”的角色,该角色将包含在配置中。这允许用户设置他自己的首选提示,编辑器等。
如果在剧本中指定了不存在的角色,整个事情就会崩溃
ERROR!找不到角色'工作区'......
我希望它完全忽略它并继续前进。我尝试添加failed_when: false
,但毫不奇怪它没有效果。可以制定when: ...
条件,以检查角色是否存在?或者还有另一种方法可以很好地解决这个问题吗?
答案 0 :(得分:0)
查看Conditionals的ansible文档,我不认为可以直接检查角色是否存在。
通过检查角色的目录是否存在来解决这个问题会有点棘手,因为有多个地方负责搜索角色,有些则基于当前的平台,环境或配置。
那就是说,我尝试了一些似乎有用的方法:不是坚持预定义的角色名称,而是可以通过ansible变量来请求角色名称。然后你可以这样包括这个角色:
- name: Minimal playbook example
hosts: localhost
connection: local
vars:
role_name: ""
roles:
- role: "{{ role_name }}"
when: role_name != ""
如果用户未提供自己的角色名称,则不包括此角色。另请注意,要使其工作,您需要为角色名称变量指定默认值,否则ansible将在未定义的变量上失败(将is defined
检查添加到when子句没有帮助的时候。)