我在取消注册 LB 实例的步骤中的 playbook 中出现错误,它执行了该过程,但 playbook 失败了。
失败了! => {"msg": "条件检查 '(target_facts.instance_target_groups | map(attribute='targets') | flatten | map(attribute='target_health') |rejectattr('state', 'equalto', 'unhealthy' ) | list | length) == 0' 失败。错误是:没有名为 'equalto' 的测试”}
---
- name: de-register EC2 "{{ service_instance_id }}"
elb_target:
target_group_name: "{{ service_target_group_name }}"
target_id: "{{ instance_document.json.instanceId }}"
region: "{{ instance_document.json.region }}"
target_port: "{{ target_group_fact.instance_target_groups[0].targets[0].target_port | default(service_target_port, true) }}"
state: absent
register: instancederegister
until: instancederegister is not failed
retries: 60
delay: 10
- name: Waiting status unhealthy "{{ instance_document.json.instanceId }}"
elb_target_facts:
get_unused_target_groups: false
region: "{{ instance_document.json.region }}"
instance_id: "{{ instance_document.json.instanceId }}"
register: target_facts
until: (target_facts.instance_target_groups |
map(attribute='targets') |
flatten |
map(attribute='target_health') |
rejectattr('state', 'equalto', 'unhealthy') |
list |
length) == 0
retries: 100
delay: 20
我已经使用了 Ansible 文档,我被困在这部分,再次运行 playbook 它通过了该步骤,因为机器离开了 ELB,但是第一次总是失败。
即使错误消息带有
The error was: no test named 'equalto'
很清楚,还有其他类似的问答可用,似乎没有那么清楚的记录,很容易发现语法中的Jinja2内置过滤器
rejectattr()
rejectattr(key, operator, value)
<, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne
因此,正如已经评论过的
rejectattr('state', 'eq', 'unhealthy')
或rejectattr('state', '==', 'unhealthy')
。