检查变量是否在 Ansible 字典中的列表中

Check if variable is in a list within a dictionary in Ansible

我有以下任务:

- name: Retrieve records from Route53
  route53:
    command: get
    zone: "{{ stag_zone }}"
    record: "{{ stag_record }}"
    type: A
    aws_access_key: "{{ aws_access_key }}"
    aws_secret_key: "{{ aws_secret_key }}"
  register: rec

- name: Print records
  debug: var=rec

- name: Record contains IP
  debug: msg="{{rec}} contains {{stag_ip}}"
  when: "'{{stag_ip}}' in {{rec.set.values}}"

Print records 任务输出如下内容:

ok: [XXX.XXX.XXX.XXX] => {
    "var": {
        "rec": {
            "changed": false, 
            "invocation": {
                "module_args": "", 
                "module_name": "route53"
            }, 
            "set": {
                "alias": false, 
                "record": "YYY.XXX.ZZZ.", 
                "ttl": "300", 
                "type": "A", 
                "value": "AAA.AAA.AAA.AAA,BBB.BBB.BBB.BBB", 
                "values": [
                    "AAA.AAA.AAA.AAA",
                    "BBB.BBB.BBB.BBB"
                ], 
                "zone": "XXX.ZZZ."
            }
        }
    }
}

而且我只想在 {{stag_ip}} 处于 {{rec.set.values}} 时执行 "Record contains IP" 任务。但是我的 when 子句肯定坏了。它输出这个:

fatal: [XXX.XXX.XXX.XXX] => Failed to template {% if 'QQQ.QQQ.QQQ.QQQ' in <built-in method values of dict object at 0x7fb66f54e6e0> %} True {% else %} False {% endif %}: template error while templating string: unexpected '<'

我怎样才能 "cast" rec.set.values 到列表?

这里的问题是因为values是一个dict方法。所以它有 "precedence" 访问密钥。要解决此问题,必须显式调用 get:

when: stag_ip in rec.set.get('values')