Ansible CSV查找Jinja2模板,如何处理丢失的密钥

2024-09-29 19:27:46 发布

您现在位置:Python中文网/ 问答频道 /正文

j2模板,下面是一个片段:

{% set denyGroups %}
{{lookup('csvfile', '{{ ansible_hostname }} file={{ csvFile }} delimiter=, col=5')}}
{% endset %}
{%- if denyGroups |trim() -%}
simple_deny_groups = {{ denyGroups |replace(";", ",") }}
{%- endif -%}

我正在基于csv值将值注入到模板中。但是,如果在csv中找不到密钥(ansible_hostname),请获取以下错误:AnsibleError: csvfile: list index out of range

如何处理此错误?先检查它是否在csv中。现在我可以在任务中注入值,但这会比较麻烦,我更喜欢这种模板方式。谢谢


Tags: csvcsvfile模板错误colansiblelookuphostname
1条回答
网友
1楼 · 发布于 2024-09-29 19:27:46

list index out of range-列数有问题。
列从零开始计数,因此对于col=5-文件中必须有6列。
如果您想在键丢失时返回默认项,请使用default=myvalue选项。在

更新:让我们来看看the code

def read_csv(self, filename, key, delimiter, encoding='utf-8', dflt=None, col=1):

    try:
        f = open(filename, 'r')
        creader = CSVReader(f, delimiter=to_bytes(delimiter), encoding=encoding)

        for row in creader:
            if row[0] == key:
                return row[int(col)]
    except Exception as e:
        raise AnsibleError("csvfile: %s" % to_str(e))

    return dflt

所以在这样的csv中:

^{pr2}$

键(第0列)是mykey,列1-值a,列2-值b,列3-值c

如果存在格式错误或参数不正确,则会触发异常–您对此无能为力。尝试将col=4与我的示例csv文件一起使用将引发list index out of range异常。在

如果在文件中找不到密钥(row[0] == key每行都是false),则将返回默认值(使用default=选项指定的值)。在

相关问题 更多 >

    热门问题