首页 > 解决方案 > 是否有在ansible中汇总列表内容的快捷方式?

问题描述

我有一个清单sList

sList = ['12','8','10']

我需要所有元素的总和sList
我在 jinja2 中遇到了sum()函数,但它需要属性等,并且不知道如何将它与list.
我试过:

- set_fact:
    sList:
      - '12'
      - '8'
      - '10'

- set_fact:
    sumList: "{{ sum(sList) }}" 

- debug: var=sumList

预期结果:sumList = 30,但出现以下错误:

"msg": "The task includes an option with an undefined variable. The error was: 'sum' is undefined 

请帮忙。

谢谢

标签: listansiblesumjinja2

解决方案


过滤器sum "返回数字序列的总和"。变量sList是一个字符串列表。下面的任务将失败

    - set_fact:
        sList: ['12', '8', '10']
    - set_fact:
        sumList: "{{ sList|sum }}"

致命的:[本地主机]:失败!=> msg: '在 ({{ sList|sum }}) 上发生意外的模板类型错误:+ 的不支持的操作数类型:''int'' 和 ''AnsibleUnicode'''

要解决此问题,请使用数字列表。例如

    - set_fact:
        sList: [12, 8, 10]
    - set_fact:
        sumList: "{{ sList|sum }}"
    - debug:
        var: sumList

  sumList: '30'

下一个选项是将列表中的项目转换为数字。映射intfloat函数。例如

    - set_fact:
        sList: ['12', '8', '10']

    - set_fact:
        sumList: "{{ sList|map('int')|sum }}"
    - debug:
        var: sumList

    - set_fact:
        sumList: "{{ sList|map('float')|sum }}"
    - debug:
        var: sumList

  sumList: '30'

  sumList: '30.0'

推荐阅读