如何在Ansible中基于循环索引格式化字符串生成指定JDBC连接串?
Ansible生成指定格式JDBC连接串解决方案
错误原因
你之前的写法报错是因为管道符优先级高于加法,my_idx + 1 | string会先把1转为字符串"1",导致整数my_idx和字符串"1"相加,触发类型不兼容错误。
解决方案
方案一:使用条件判断(推荐,直观易懂)
通过if-else直接根据索引值生成对应的后缀:
- name: Debug JDBC lines ansible.builtin.debug: msg: "jdbc_connection_string_np{{ '' if my_idx == 0 else my_idx + 1 }}=jdbc:mysql://{{ item }}:3306/np" with_items: "{{ groups['db'] }}" loop_control: index_var: my_idx
- 当索引
my_idx=0时,输出空字符串,最终得到jdbc_connection_string_np=... - 当索引
my_idx=1时,计算1+1=2,最终得到jdbc_connection_string_np2=...
方案二:修正表达式优先级+正则替换
如果坚持用正则思路,需要用括号确保加法先执行,再做字符串转换和替换:
- name: Debug JDBC lines ansible.builtin.debug: msg: "jdbc_connection_string_np{{ (my_idx + 1) | string | regex_replace('^1$', '') }}=jdbc:mysql://{{ item }}:3306/np" with_items: "{{ groups['db'] }}" loop_control: index_var: my_idx
- 括号
(my_idx + 1)确保先完成整数加法,避免类型错误 regex_replace('^1$', '')精准匹配字符串"1"并替换为空,对"2"则无变化
内容的提问来源于stack exchange,提问作者Red Cricket
相关产品推荐
相关产品推荐

