如何用Ansible的set_fact将服务器列表拼接为指定格式URI字符串
使用Ansible set_fact实现服务器清单格式转换
实现思路
- 先将服务器列表按每2个元素为一组拆分
- 对每组内的服务器名称进行格式转换,拼接成
https://<server>:8000的形式,再用;连接同组的两个结果 - 最后将所有分组结果用
],连接,得到目标字符串
完整Playbook示例
- name: Convert servers list to target format hosts: localhost vars: servers: - server01 - server02 - server03 - server04 tasks: - name: Generate target string with set_fact set_fact: target_string: >- {{ servers | batch(2) | map('map', 'regex_replace', '^(.*)$', 'https://\\1:8000') | map('join', ';') | join('],') }} - name: Verify the result debug: var: target_string
关键过滤器说明
batch(2):将原服务器列表拆分为每2个元素一组的子列表,输出为[['server01','server02'], ['server03','server04']]map('map', 'regex_replace', ...):嵌套map操作,先对每个子列表内的服务器名称做正则替换,转换成带协议和端口的URL格式map('join', ';'):将每个子列表内的两个URL用;连接,得到单个分组的字符串join('],'):将所有分组字符串用],连接,生成最终目标格式
执行该Playbook后,target_string的取值即为:https://server01:8000;https://server02:8000],https://server03:8000;https://server04:8000
内容的提问来源于stack exchange,提问作者ahmed
相关产品推荐
相关产品推荐

