我正在尝试生成一个Ansible模板,该模板按字母顺序而非数字递增字母。是否有类似于range(x)
的功能可以帮助我?
伪代码示例
{% for letter in range(a, d) %}
{{ letter }}
{% endfor %}
预期产出
a
b
c
d
或者有没有办法在Ansible中将数字转换为字母顺序?
{% for i in range(6) %}
{{ convert(i) }}
{% endfor %}
对于那些好奇的人,以下是我最终应用@ zigam解决方案的方法。目标是使用来自主机组的每个主机创建xml标记。
我的角色默认值为:
ids: "ABCDEFGHIGJKLMNPQRSTUVWXYZ"
在我的模板中:
{% for host in groups['some_group'] %}
<host-id="{{ ids[loop.index] }}" hostName="{{ host }}" port="8888" />
{% endfor %}
答案 0 :(得分:2)
您可以迭代字符串:
{% for letter in 'abcd' %}
{{ letter }}
{% endfor %}
如果你想迭代一个字母范围:
{% set letters='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' %}
{% for letter in letters[:6] %} {# first 6 chars #}
{{ letter }}
{% endfor %}
答案 1 :(得分:0)
您可以使用自定义过滤器插件来执行您想要的操作
在filter_plugins / scratch_filter.py中:
def scratch_filter(n):
return chr(n)
class FilterModule(object):
''' Number to Character filter '''
def filters(self):
return {
'scratch_filter': scratch_filter
}
在scratch-template.j2中:
{% for x in range(101, 113) %}
{{ x|scratch_filter }}
{% endfor %}
在scratch_playbook.yml
中---
- hosts: localhost
tasks:
- name: test loop
template:
src: "{{ playbook_dir }}/scratch-template.j2"
dest: "{{ playbook_dir }}/scratch-template-output.txt"