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

标签 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}}"
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}} 时才执行“记录包含 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 '<'

我如何“转换”rec.set.values到列表?

最佳答案

这里的问题是因为 valuesdict方法。因此它比访问 key 具有“优先级”。要解决此问题,必须明确调用 get :

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

关于jinja2 - 检查变量是否在 Ansible 字典中的列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31734199/

相关文章:

Python字典到html表

python - 使用 flask 查找jinja2模板中的数字总和

amazon-web-services - Ansible 循环遍历同一任务中的不同项目

ansible - 如何在ansible中的任务文件中写入变量

带有时间戳的 Ansible 模板

ssh - "Could not resolve hostname"Ansible

html - 如何在 Jinja2 中执行加法?

google-app-engine - jinja2 表单渲染不允许包含 "-"的属性

post - 如何使用 Ansible uri 模块将文件作为表单数据发布?

python - 无法登录 Django 管理面板