padding/ljust 使用 ansible 模板和 jinja
padding/ljust with ansible template and jinja
我正在寻找一种方法来使用这本字典在 ansible 中创建模板。
data= {
"_dictionary": {
"keyone": "abc",
"rtv 4": "data2",
"longtexthere": "1",
"keythree": "data3",
"keyfour": "data1234",
}
}
模板输出应具有以下格式:
keyone abc
keytwo data2
longtexthere 1
keythree data3
keyfour data1234
使用 python 我可以创建它:
w = max([len(x) for x in data['_dictionary'].keys()])
for k,v in data['_dictionary'].items():
print(' ', k.ljust(w), ' ', v)
但我无法在 ansible 的 jinja2 模板中创建它。我还没有找到 ljust 的替代品。
目前我的模板是这样的,但是我得到了一个没有格式的输出。
{% for key, value in data['_dictionary'].items() %}
{{ "%s\t%s" | format( key, value ) }}
{% endfor %}
有什么想法、建议吗?
例如
- debug:
msg: |
{% for k,v in data['_dictionary'].items() %}
{{ "{:<15} {}".format(k, v) }}
{% endfor %}
给予
msg: |-
keyone abc
rtv 4 data2
longtexthere 1
keythree data3
keyfour data1234
参见 format and Format String Syntax。
问:"动态创建格式。"
A:比如找字典中最长的key。在第一列的长度上再增加 1 space。同理,计算第二列的长度,在单独的变量中创建格式字符串
- debug:
msg: |
{% for k,v in data['_dictionary'].items() %}
{{ fmt.format(k, v) }} # comment
{% endfor %}
vars:
col1: "{{ data._dictionary.keys()|map('length')|max + 1 }}"
col2: "{{ data._dictionary.values()|map('length')|max + 1 }}"
fmt: "{:<{{ col1 }}} {:<{{ col2 }}}"
给予
msg: |-
keyone abc # comment
rtv 4 data2 # comment
longtexthere 1 # comment
keythree data3 # comment
keyfour data1234 # comment
正在运行,最后我的 j2 文件是:
{% set col1 = data._dictionary.keys()|map('length')|max %}
{% set fmt = "{:<" + col1|string + "} {}" %}
{% for key, value in data._dictionary.items() %}
{{ fmt.format(key, value) }}
{% endfor %}
谢谢。
我正在寻找一种方法来使用这本字典在 ansible 中创建模板。
data= {
"_dictionary": {
"keyone": "abc",
"rtv 4": "data2",
"longtexthere": "1",
"keythree": "data3",
"keyfour": "data1234",
}
}
模板输出应具有以下格式:
keyone abc
keytwo data2
longtexthere 1
keythree data3
keyfour data1234
使用 python 我可以创建它:
w = max([len(x) for x in data['_dictionary'].keys()])
for k,v in data['_dictionary'].items():
print(' ', k.ljust(w), ' ', v)
但我无法在 ansible 的 jinja2 模板中创建它。我还没有找到 ljust 的替代品。
目前我的模板是这样的,但是我得到了一个没有格式的输出。
{% for key, value in data['_dictionary'].items() %}
{{ "%s\t%s" | format( key, value ) }}
{% endfor %}
有什么想法、建议吗?
例如
- debug:
msg: |
{% for k,v in data['_dictionary'].items() %}
{{ "{:<15} {}".format(k, v) }}
{% endfor %}
给予
msg: |-
keyone abc
rtv 4 data2
longtexthere 1
keythree data3
keyfour data1234
参见 format and Format String Syntax。
问:"动态创建格式。"
A:比如找字典中最长的key。在第一列的长度上再增加 1 space。同理,计算第二列的长度,在单独的变量中创建格式字符串
- debug:
msg: |
{% for k,v in data['_dictionary'].items() %}
{{ fmt.format(k, v) }} # comment
{% endfor %}
vars:
col1: "{{ data._dictionary.keys()|map('length')|max + 1 }}"
col2: "{{ data._dictionary.values()|map('length')|max + 1 }}"
fmt: "{:<{{ col1 }}} {:<{{ col2 }}}"
给予
msg: |-
keyone abc # comment
rtv 4 data2 # comment
longtexthere 1 # comment
keythree data3 # comment
keyfour data1234 # comment
正在运行,最后我的 j2 文件是:
{% set col1 = data._dictionary.keys()|map('length')|max %}
{% set fmt = "{:<" + col1|string + "} {}" %}
{% for key, value in data._dictionary.items() %}
{{ fmt.format(key, value) }}
{% endfor %}
谢谢。