Ansible:如何控制依赖角色的执行

时间:2016-05-31 15:01:37

标签: ansible ansible-playbook

我已经定义了部署堆栈的角色。它有这样的流程:

1)验证最少需要的东西
2)启动堆栈
3)发布配置

我创建了另一个角色来在启动堆栈之前(步骤1之前)和启动堆栈之后(在步骤3之前)验证网络连接。

我不知道如何实现这一目标。

但是我已根据任务将network-validation角色分解为两个角色。在network-validation角色中,必须在步骤1(强制网络检查)之前执行某些任务(创建为角色A),并且将根据条件执行某些任务,这些任务处于角色B中。

我仍然无法弄清楚如何根据条件执行角色B.

目前我正在尝试根据条件执行角色,如下所示,但它会抛出错误。

/roles/deploy-stack/meta/main.yml文件如下所示:

dependencies:

  - { role: 'network-validation-B', when: ("CREATE_COMPLETE" in stack_list.stdout) }

stack.yml看起来像这样:

- hosts: controller
  roles:
    - { role: network-validation-B, when: ("CREATE_COMPLETE" in stack_list.stdout) }
    - deploy-stack

当我尝试执行剧本时,它会抛出以下错误,

root@ansible-dev:/etc/ansible# ansible-playbook stack.yml

PLAY [controller] ***********************************************************

GATHERING FACTS ***************************************************************
ok: [10.17.10.150]

TASK: [network-validation-B | Validating Network Connectivity] *********
fatal: [10.17.10.150 -> 10.17.10.85] => error while evaluating conditional: ("CREATE_COMPLETE" in stack_list.stdout)

FATAL: all hosts have already failed -- aborting

无法评估条件,因为"when: ("CREATE_COMPLETE" in stack_list.stdout)"条件仅在"deploy-stack"角色首先执行时才为真。

1 个答案:

答案 0 :(得分:0)

你能做出这样的改变吗?

- { role: 'network-validation-B', when: '"CREATE_COMPLETE" in stack_list.stdout' }