2017-09-30 39 views
1

我在项目上使用Vagrant + Ansible。我想让用户可选择提供一个名为“工作空间”的角色,该角色将包含在配置中。这允许用户设置自己的首选提示,编辑等是否可以忽略Ansible中的缺失角色?

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

错误!没有找到角色'工作区'...

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

回答

0

查看关于Conditionals的可靠文档,我不认为可以直接检查角色是否存在。

通过检查该角色的目录是否存在将变得有点棘手,因为有多个地方可以搜索角色,有些则基于当前平台,环境或配置。

这就是说,我尝试了一下看起来有点不同的方法:不要坚持预定义的角色名称,而是可以通过一个可变变量来请求角色名称。然后你可以像这样包含这个角色:

- name: Minimal playbook example 
    hosts: localhost 
    connection: local 
    vars: 
    role_name: "" 
    roles: 
    - role: "{{ role_name }}" 
     when: role_name != "" 

当用户没有提供它自己的角色名称时,这个角色不包括在内。还要注意,为了这个工作,你需要为角色名变量指定一个默认值,否则这个负责人会在未定义的变量上失败(添加is defined检查when子句不起作用)。

相关问题