【问题标题】:Variables inside JSON Query - Ansible / Jinja filterJSON 查询中的变量 - Ansible / Jinja 过滤器
【发布时间】:2023-02-24 09:21:12
【问题描述】:

我正在尝试使用 JSON 查询来动态生成列表

变量的状态是:


fabric:
  vrfs:
    - name: VRF-A 
      description: Production-Network
      id: 10001
      vlan: 2002
      switches:
        - serial_number: 10.122.18.114
        - serial_number: 10.122.18.118
    - name: VRF-F
      description: Production-Network
      id: 10001
      vlan: 2022
      switches:
        - serial_number: 10.122.18.114
        - serial_number: 10.122.18.118

我想使用 JSON 查询获取 VRF-A 中的开关。当 JSON 查询被硬编码时,它就可以工作。

  - name: JSON Query
    set_fact:
      switches: "{{ fabric |json_query('vrfs[?(@.name==`VRF-A`)].switches') }}"

但是当我使用变量时,Ansible 返回一个空列表


  - name: JSON Query
    set_fact:
      switches: "{{ fabric |json_query('vrfs[?(@.name==`{{ the_vrf }}`)].switches') }}"

我错过了什么吗?有什么解决方法吗?

【问题讨论】:

    标签: ansible jinja2 json-query


    【解决方案1】:

    避免嵌套引用并将查询放入单独的变量中

      the_vrf: VRF-A
      switches: "{{ fabric.vrfs|json_query(switches_query) }}"
      switches_query: '[?name == `{{ the_vrf }}`].switches'
    

    给你想要的

      switches:
      - - serial_number: 10.122.18.114
        - serial_number: 10.122.18.118
    

    笔记:

    • 示例中的查询已简化
      switches: "{{ fabric.vrfs|json_query(swiches_query) }}"
      switches_query: '[?name == `VRF-A`].switches'
    
    • 完整的测试剧本示例
    - hosts: localhost
    
      vars:
    
        fabric:
          vrfs:
            - name: VRF-A 
              description: Production-Network
              id: 10001
              vlan: 2002
              switches:
                - serial_number: 10.122.18.114
                - serial_number: 10.122.18.118
            - name: VRF-F
              description: Production-Network
              id: 10001
              vlan: 2022
              switches:
                - serial_number: 10.122.18.114
                - serial_number: 10.122.18.118
    
        # switches: "{{ fabric.vrfs|json_query(swiches_query) }}"
        # switches_query: '[?name == `VRF-A`].switches'
    
        the_vrf: VRF-A
        switches: "{{ fabric.vrfs|json_query(switches_query) }}"
        switches_query: '[?name == `{{ the_vrf }}`].switches'
    
      tasks:
    
        - debug:
            var: switches
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多