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