【问题标题】:How do I search within variables on Yaml files for my jinja 2如何在 Yaml 文件的变量中搜索我的 jinja 2
【发布时间】:2020-07-09 17:40:00
【问题描述】:

如何检查变量中的字符串,并返回该变量的另一部分?

我的 host_vars 中有以下内容

vrfs:
  - { vrf: vrf-sitea, enabled: y,}
  - { vrf: vrf-siteb, enabled: n,}
  - { vrf: vrf-sitec, enabled: y,}
  - { vrf: vrf-sited, enabled: y,}

我正在尝试弄清楚如何在其中搜索字符串,当匹配时,检查y 是否存在。

例如,如果vrf = vrf-siteb,那么看看enabled是不是y

我希望能够将vrf-siteb 设为变量,但不知道从哪里开始。

【问题讨论】:

    标签: ansible yaml jinja2


    【解决方案1】:

    您可以为此使用json_queryJMESPath query language

    - hosts: localhost
      gather_facts: no
      
      tasks:
        - debug: 
            msg: "{{ vrfs | json_query('[?enabled == `y`].vrf') }}"
          vars:
            vrfs:
              - { vrf: vrf-sitea, enabled: y,}
              - { vrf: vrf-siteb, enabled: n,}
              - { vrf: vrf-sitec, enabled: y,}
              - { vrf: vrf-sited, enabled: y,}
    

    给予:

    PLAY [localhost] ***************************************************************
    
    TASK [debug] *******************************************************************
    ok: [localhost] => {
        "msg": [
            "vrf-sitea",
            "vrf-sitec",
            "vrf-sited"
        ]
    }
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    

    【讨论】:

      【解决方案2】:

      您可以使用过滤器通过selectattr 获取正确的对象,然后通过map 获取enabled 值:

      {{ vrfs | selectattr('vrf', 'vrf-siteb') | map(attribute='enabled') }}
      

      【讨论】:

        【解决方案3】:

        创建字典。例如,使用items2dict

            - set_fact:
                vrfs_dict: "{{ vrfs|items2dict(key_name='vrf', value_name='enabled') }}"
            - debug:
                var: vrfs_dict
        

        给予

          vrfs_dict:
            vrf-sitea: y
            vrf-siteb: n
            vrf-sitec: y
            vrf-sited: y
        

        然后搜索是微不足道的。例如

            - debug:
                var: vrfs_dict['vrf-siteb']
        

        给予

          vrfs_dict['vrf-siteb']: n
        

        由于名称中的破折号“-”,键不是valid variables。结果就不能使用点分格式了

            - debug:
                var: vrfs_dict.vrf-siteb
        

        给予

          vrfs_dict.vrf-siteb: VARIABLE IS NOT DEFINED!
        

        【讨论】:

          猜你喜欢
          • 2021-11-16
          • 1970-01-01
          • 2022-01-10
          • 1970-01-01
          • 2022-11-29
          • 1970-01-01
          • 2017-06-20
          • 2018-12-14
          • 2019-01-06
          相关资源
          最近更新 更多