我在一个项目中使用 Vagrant+Ansible。我想让用户可以选择提供一个名为“工作区”的角色,该角色将包含在配置中。这允许用户设置自己喜欢的提示、编辑器等。
如果在剧本中指定了一个不存在的角色,整个事情就会崩溃
错误!找不到角色“工作区”...
我希望它简单地忽略它并继续前进。我尝试添加failed_when: false
,但不出所料,它没有效果。是否可以制定一个when: ...
可以检查角色是否存在的条件?还是有另一种方法可以很好地解决这个问题?
我在一个项目中使用 Vagrant+Ansible。我想让用户可以选择提供一个名为“工作区”的角色,该角色将包含在配置中。这允许用户设置自己喜欢的提示、编辑器等。
如果在剧本中指定了一个不存在的角色,整个事情就会崩溃
错误!找不到角色“工作区”...
我希望它简单地忽略它并继续前进。我尝试添加failed_when: false
,但不出所料,它没有效果。是否可以制定一个when: ...
可以检查角色是否存在的条件?还是有另一种方法可以很好地解决这个问题?
查看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 子句中添加检查无济于事)。