Ansible中的条件角色包含失败

时间:2017-01-10 08:28:40

标签: ansible ansible-playbook ansible-2.x ansible-role

我想有条件地运行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:“创建临时安装目录”是条件包含角色的第一个主要任务的名称。

1 个答案:

答案 0 :(得分:2)

任务在角色后执行,因此myapp_exists未定义 请改用pre_tasks

另请注意,when实际上不是条件角色,只是将此when语句附加到您角色中的每个任务。