list - 在ansible中是否有对列表内容求和的快捷方式?

标签 list ansible sum jinja2

我有一个列表 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 

请帮忙。

谢谢

最佳答案

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

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

fatal: [localhost]: FAILED! => msg: 'Unexpected templating type error occurred on ({{ sList|sum }}): unsupported operand type(s) for +: ''int'' and ''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'

关于list - 在ansible中是否有对列表内容求和的快捷方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64550196/

相关文章:

Bash 求和 5 位数字

python - 将两个元组的交替值添加到空列表 (python3)

java - 在这种特定情况下如何使用 Streams 获取列表列表?

loops - 在 Ansible 中任务失败的循环中获取项目值

mysql - 汇总值,即使它们不存在于第二个表中

c++ - 计算 Mat OpenCV 子集的总和

python - 如何在没有类型问题的情况下对 Python 列表进行子类化?

python - 使用 python 循环两个列表,使用一个作为列表列表的索引,另一个作为要 append 的值

ansible - 如何在 Ansible 中的多个任务之间共享参数

使用ansible的python-mysqldb模块错误