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

bor*_*ges 6 jinja2 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}}"
Run Code Online (Sandbox Code Playgroud)

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."
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想只执行"记录包含IP"任务时{{stag_ip}}{{rec.set.values}}.但我的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 '<'
Run Code Online (Sandbox Code Playgroud)

我如何"施放" rec.set.values到列表中?

bor*_*ges 5

这里的问题是因为values是一种dict方法.因此它比访问密钥"优先".要解决此问题,必须明确调用get:

when: stag_ip in rec.set.get('values')
Run Code Online (Sandbox Code Playgroud)