Ansible:如何将列表输出转为无括号引号的纯字符串?
解决Ansible中二维列表转空格分隔字符串的问题
看起来你踩了个小坑——你的sg_ids实际上是个二维嵌套列表(从输出[[u'12345', u'54321']]就能看出来,外层还包了一层列表),直接用join只会处理最外层的列表,自然达不到你想要的效果。
正确的实现方式
你需要先提取内层的目标列表,再进行join操作:
- debug: msg: "SG's are {{ sg_ids[0]|join(' ') }}"
这样就能直接输出SG's are 12345 54321,完全符合你的预期。
为什么之前的尝试无效?
- 第一次直接用
sg_ids|join(' '):因为sg_ids本身是外层列表,里面只有一个元素(就是内层的[u'12345', u'54321']),join处理外层列表时,会把这个内层列表当成单个元素输出,所以结果还是带括号的格式。 - 第二次加
to_yaml:只是把内层列表转换成了YAML格式的字符串,反而多了额外的引号和换行,偏离了需求。
更灵活的兼容方案
如果以后你的sg_ids可能变成多组嵌套的结构(比如[[u'12345'], [u'54321']]),可以用flatten过滤器先把二维列表转成一维,再join,这样不管嵌套几层都能正确合并:
- debug: msg: "SG's are {{ sg_ids|flatten|join(' ') }}"
内容的提问来源于stack exchange,提问作者user3299633
相关产品推荐
相关产品推荐

