Ansible 剧本 lb-注销

问题描述 投票:0回答:1

我在取消注册 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,但是第一次总是失败。

ansible
1个回答
0
投票

即使错误消息带有

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')

© www.soinside.com 2019 - 2024. All rights reserved.