我正在尝试生成一个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 %}
发布于 2017-07-07 07:29:52
您可以迭代一个字符串:
{% for letter in 'abcd' %}
{{ letter }}
{% endfor %}
如果您想在字母表的某个范围内进行迭代:
{% set letters='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' %}
{% for letter in letters[:6] %} {# first 6 chars #}
{{ letter }}
{% endfor %}
发布于 2017-07-07 09:22:22
您可以使用自定义的过滤器插件来做您想做的事情。
在filter_plugins/划痕_filter.py中:
def scratch_filter(n):
return chr(n)
class FilterModule(object):
''' Number to Character filter '''
def filters(self):
return {
'scratch_filter': scratch_filter
}
在划痕-模板中.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"
https://stackoverflow.com/questions/44974291
复制相似问题