输入文件
[centos@linux1 tmp]$ cat data.txt
a car has 4 wheels
a bike has 2 wheels
输出文件
[centos@linux1 tmp]$ cat final_list
vehicle: car blah blah
vehicle: bike blah blah
剧本
[centos@linux1 tmp]$ cat test.yml
---
- hosts: localhost
tasks:
- name: check vehicle types
shell: "cat /tmp/data.txt | grep 'car\\|bike' | awk '{print $2}'"
register: vehicle_list
- name : create a empty string variable
set_fact:
var1: ''
- name: concate strings
set_fact:
var1: "{{var1}}\nvehicle: {{item}} blah blah"
with_items: "{{vehicle_list.stdout_lines}}"
- name: output to file
shell: echo "{{var1}}" >> /tmp/final_list
我能够得到想要的结果,但我认为代码是不可读的,其他人很难调试
问题:在with\u items循环中,用于连接task- name: concate strings
中的变量的方法是否正确
或者
有更干净的方法吗?你知道吗
我希望使用here或here中提到的连接方法 但我没能让他们工作
编辑:如何在with items循环中实现字符串连接,使用其他答案中描述的常规方法?你知道吗
1)python字符串连接
var1=var1+"vehicle: {{item}} blah blah\n"
2)连接筛选器
var1: "{{vehicle: {{item}} blah blah | join('\n') }}"
3)连接方法
var1: "{{ '\n'.join((vehicle: {{item}} blah blah)) }}"
我认为你可以在这里做一些改进。首先,此命令不需要
cat
或grep
:你可以写:
接下来,您不需要第一个
set_fact
语句,因为您可以利用default
过滤器为var1
提供一个值(如果它尚未定义):注意,我还重新定位了
\n
,这样生成的文件就不会以空行开头。你知道吗最后,使用
shell
任务将数据附加到文件中。如果您实际上不需要追加,您可以使用Ansible的copy
模块来创建输出文件:如果确实需要附加数据,而不是覆盖文件,则可以使用当前的解决方案,尽管我可能会这样编写:
上述是一种“常用方法”,但你肯定有其他选择。如果要建立一个行列表,如下所示:
然后可以使用
join
过滤器生成输出:或者使用string
.join
方法执行相同的操作:相关问题 更多 >
编程相关推荐