是否可以忽略Ansible中缺少的角色?

时间:2017-09-30 10:01:47

标签: vagrant ansible ansible-role

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

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

  

ERROR!找不到角色'工作区'......

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

1 个答案:

答案 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子句没有帮助的时候。)