如何在Jinja2中使用列表索引在列表中插入值

时间:2019-06-03 11:54:34

标签: ansible jinja2

将Linux服务器与已安装的ansible 2.7.5版本配合使用。

我试图根据其索引在列表中插入值,但是无法这样做。

任何人都可以提出任何解决方案的建议。

谢谢。

到目前为止,我正在尝试使用以下代码。

状态变量中的字典值如下所示。

[{u'CACHE01': True}, {u'CACHE07': False}, {u'CACHE06': False}, {u'CACHE03': True}, {u'CACHE05': False}, {u'CACHE02': True}]

{% set T = 0 %}
{% set F = 1 %}
{% set b = [] %}
{% for i in status %}
{% for k,v in i.items() %}
{% if v == True %}
{{ b.insert(T,k) }}
{% set T = T+2 %}
{% else %}
{{ b.insert(F,k) }}
{% set F = F+2 %}
{% else %}
{% endif %}
{% endfor %}
{% endfor %}

结果,我得到的是:

[CACHE01,CACHE03,CACHE02,CACHE07,CACHE06,CACHE05]

我希望获得以下结果。

“ b”列表应包含类似以下的值。列表应包含True,False,True,False-等值。

[CACHE01,CACHE07,CACHE03,CACHE06,CACHE02,CACHE05]

1 个答案:

答案 0 :(得分:0)

变量状态是一个列表,必须进行迭代。下面的剧本

- hosts: localhost
  vars:
    status:
      - CACHE01: True
      - CACHE07: False
      - CACHE06: False
      - CACHE03: True
      - CACHE05: False
      - CACHE02: True
  tasks:
    - set_fact:
        my_keys: "{{ my_keys|default([]) + item.keys() }}"
      loop: "{{ status }}"
    - debug:
        var: my_keys

给予:

"my_keys": [
    "CACHE01", 
    "CACHE07", 
    "CACHE06", 
    "CACHE03", 
    "CACHE05", 
    "CACHE02"
]

获取值列表。将 item.keys()交换为 item.values()

  tasks:
    - set_fact:
        my_values: "{{ my_values|default([]) + item.values() }}"
      loop: "{{ status }}"
    - debug:
        var: my_values

奖金:

要选择积极状态,请使用过滤器bool_and

$ cat filter_plugins/bool_utils.py
def bool_and(h):
    return all(h)
def bool_or(h):
    return any(h)
class FilterModule(object):
    ''' utility filters for operating on list of Boolean '''
    def filters(self):
        return {
            'bool_and' : bool_and
            ,'bool_or' : bool_or
        }

下面的任务

- set_fact:
    my_keys1: "{{ my_keys1|default([]) + item.keys() }}"
  loop: "{{ status }}"
  when: item.values()|bool_and
- debug:
    var: my_keys1

给予:

"my_keys1": [
    "CACHE01", 
    "CACHE03", 
    "CACHE02"
]