簡體   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