如何移除Jinja2模板中多空格分隔字符串的末尾空白
解决Ansible Jinja2模板生成nslcd.conf时uri行末尾空白问题
在使用Ansible结合Jinja2模板为nslcd.conf注入多个LDAP端点时,uri行末尾始终存在空白字符,导致部分节点的nslcd服务无法启动。尝试过多种循环写法,要么出现换行丢失导致base行与uri行合并,要么仍残留末尾空白。
原始模板代码如下:
uri = {% for host in ldap_hosts %}{{ ldap_protocol }}://{{ host }} {% endfor %} base {{ ldap_base_dn }} binddn {{ ldap_bind_dn }} bindpw {{ ldap_bind_password }} rootpwmoddn {{ ldap_bind_dn }}
问题核心:上述循环会在每个LDAP端点后追加空格,包括最后一个元素,导致uri行末尾多出空白,触发nslcd服务启动异常。
最终解决代码:
uri = {% for host in ldap_hosts %}{{ ldap_protocol }}://{{ host }}{% if not loop.last %} {% endif %}{% endfor %}
原理说明:利用Jinja2内置的loop.last变量判断当前循环是否为最后一项,仅在非最后一个LDAP端点后添加空格,既保证了多个端点之间的分隔,又避免了行尾出现多余空白,同时不会破坏后续配置行的换行结构。
内容的提问来源于stack exchange,提问作者phuxtick
相关产品推荐
相关产品推荐

