簡體   English   中英

使用Ansible和zfill進行Jinja2模板化

[英]Jinja2 Templating with Ansible, and zfill

我使用一本有趣的劇本:

庫存:

[inventory]
ROUTER1 internet_bw=20

劇本:

  vars:
    my_bandwidth: "{{ internet_bw }}"

  - name: IOS | Apply the NHRP QoS Configuration
    ios_config:
      provider: "{{ provider }}"
      authorize: yes
      parents: interface Tunnel0
      lines:
        - ip nhrp group INTERNET_GRP_{{ my_bandwitdth }}

運行此命令時,它將執行以下操作:

interface Tunnel0
 ip nhrp group INTERNET_GRP_20

我希望它顯示為:

interface Tunnel0
 ip nhrp group INTERNET_GRP_020

我使用了一個單獨的可行方案來實現此目標,稱為internet_bw_pad,但是由於我的清單中包含50多個設備,因此我想應用類似於zfill的函數進行填充,這樣我可以保持精度,而不必設置兩個變量。

我希望找到一個實現這個目的的篩選器,但找不到一個-有人有什么想法嗎?

謝謝。

格式過濾器: {{ '%03d' | format(my_bandwitdth|int) }} {{ '%03d' | format(my_bandwitdth|int) }}

您可以編寫自己的過濾器:

 # -*- coding: utf-8 -*-
def zfill(value, width):
  """
  Zfill filter for ansible
  """
  return value.zfill(width)

class FilterModule(object):
  """Filter module"""

  def filters(self):
    return {
      'zfill': zfill
    }

只需將其放入./filter_plugins/zfill.py ,您可以像這樣在您的劇本中使用它:

---

- name: Zfill play
  hosts: all
  tasks:
    - debug:
        msg: "{{'20'|zfill(3)}}"

在您的情況下,只需將{{ my_bandwitdth }}更改為{{ my_bandwitdth|zfill(3) }}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM