2

我在一个项目中使用 Vagrant+Ansible。我想让用户可以选择提供一个名为“工作区”的角色,该角色将包含在配置中。这允许用户设置自己喜欢的提示、编辑器等。

如果在剧本中指定了一个不存在的角色,整个事情就会崩溃

错误!找不到角色“工作区”...

我希望它简单地忽略它并继续前进。我尝试添加failed_when: false,但不出所料,它没有效果。是否可以制定一个when: ...可以检查角色是否存在的条件?还是有另一种方法可以很好地解决这个问题?

4

1 回答 1

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 子句中添加检查无济于事)。

于 2017-09-30T10:25:32.497 回答