1

我想有条件地运行 Ansible 角色,即仅当某些二进制文件不存在时(这对我来说意味着没有某些特定的应用程序安装)。

类似于这里使用的模式。

在我的剧本中使用以下代码:

  - 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

顺便说一句:“创建临时安装目录”是条件包含角色的第一个主要任务的名称。

4

1 回答 1

2

任务在角色之后myapp_exists执行,因此未定义。
改为使用pre_tasks

还要记住,这when实际上不是一个条件角色,它只是将此when语句附加到您角色中的每个任务。

于 2017-01-10T08:38:43.600 回答