我想有条件地运行Ansible角色,即仅当某些二进制文件不存在时(对我来说这意味着没有某些特定的应用程序安装)。
类似于使用的模式here。
在我的剧本中使用以下代码:
- hosts: my_host
tasks:
- name: check app existence
command: /opt/my_app/somebinary
register: myapp_exists
ignore_errors: yes
roles:
- { role: myconditional_role, when: myapp_exists|failed }
- another_role_to_be_included_either_way
这是输出:
PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [my_host ]
TASK [ myconditional_role : create temporary installation directory] ***********************
fatal: [my_host]: FAILED! => {"failed": true, "msg": "ERROR! The conditional check 'myapp_exists|failed' failed. The error was: ERROR! |failed expects a dictionary"}
为什么条件检查失败?
在ansible 2.0.0.2
上使用Ubuntu 16.04.01
btw:“创建临时安装目录”是条件包含角色的第一个主要任务的名称。
答案 0 :(得分:2)
任务在角色后执行,因此myapp_exists
未定义
请改用pre_tasks
。
另请注意,when
实际上不是条件角色,只是将此when
语句附加到您角色中的每个任务。