我已经定义了部署堆栈的角色。它有这样的流程:
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"
角色首先执行时才为真。
答案 0 :(得分:0)
- { role: 'network-validation-B', when: '"CREATE_COMPLETE" in stack_list.stdout' }