繁体   English   中英

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

[英]Ansible CSV lookup in Jinja2 template, how to handle missing key

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中。 现在,我可以将值注入任务中,但这会比较麻烦,并且我更喜欢这种模板方式。 谢谢

list index out of range –这是列数的问题。
列从零开始计数,因此对于col=5 –文件中必须有6列。
如果要在缺少键的情况下返回默认项目,请使用default=myvalue选项。

更新:让我们看一下代码

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中:

mykey,val_a,val_b.val_c

键(第0列)是mykey,第1列-val_a,第2列-val_b,第3列-val_c。

如果存在格式错误或您的参数不正确,则会触发异常-您无法对此做任何事情。 尝试在我的示例csv文件中使用col=4将导致list index out of range异常。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM