Jinja2 Templating with Ansible和zfill

时间:2017-10-25 17:30:49

标签: python ansible jinja2

我使用的是ansible playbook:

清单:

[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的函数来填充,这样我可以保持精度,而不必设置两个变量

我希望找到一个jinja过滤器来实现这一点,但我找不到 - 有没有人有任何想法?

感谢。

2 个答案:

答案 0 :(得分:1)

format过滤器:{{ '%03d' | format(my_bandwitdth|int) }}

答案 1 :(得分:0)

您可以编写自己的过滤器:

 # -*- 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) }}

即可