Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将行附加到Ansible controller上的文件(从远程设备收集数据)_Ansible - Fatal编程技术网

如何将行附加到Ansible controller上的文件(从远程设备收集数据)

如何将行附加到Ansible controller上的文件(从远程设备收集数据),ansible,Ansible,请原谅我的无知,我仍在学习Ansible>以下是我试图做的: -连接到设备✔ -抓取数据✔ (json格式) -反序列化(获取返回中每个json项的行✔ -写入文件✔ 对于以上所有内容,我使用的是副本和Jinja模板 {% for item in results.response %} {% for value in item.values() %}{{ value }}{% if not loop.last %},{% endif %}{% endfor %} {

请原谅我的无知,我仍在学习Ansible>以下是我试图做的:

-连接到设备✔
-抓取数据✔ (json格式)
-反序列化(获取返回中每个json项的行✔
-写入文件✔

对于以上所有内容,我使用的是副本和Jinja模板

{% for item in results.response %}
{% for value in item.values() %}{{ value }}{% if not loop.last %},{% endif %}{% endfor %}               
{{'\n'}}
{% if not loop.last %},{% endif %}
{% endfor %}
现在,当我在多台设备上运行时,复制模块会覆盖上一次运行的结果。哪个模块允许我附加行并使用下面的Jinja模板

{% for item in results.response %}
{% for value in item.values() %}{{ value }}{% if not loop.last %},{% endif %}{% endfor %}               
{{'\n'}}
{% if not loop.last %},{% endif %}
{% endfor %}
更新: 我没有启动或停止服务,也没有更改设备上的任何内容,只是收集数据(例如人脸和他们的IP)。结果是这样的
设备1,eth0,1.1.1.2

device1,eth1,1.1.1.3这不是Ansible真正设计的任务

如果内容如模板所示是多行的,您可以滥用
lineinfle
模块(多行内容永远不会与文件中的一行匹配,因此它会不断将内容添加到文件末尾):



或者你可以调用
shell:echo{{template}}>>文件

你想要声明的状态是什么?不是很明白你说的是什么状态?:-)(我为我天真的问题道歉)我只是想转储数据,以便稍后我可以导入它(csv是目标格式),只要你定义一个状态。例如“服务已启动”、“配置文件包含指定行”、“目录具有指定权限”。我不明白您要声明什么状态。不,我只是从网络设备收集数据(例如ARP表),所以这些是只读脚本“不”应该是什么意思?你想宣布哪个州?是的,我知道Ansible不是为这个设计的,但既然有可能,为什么不呢。在我学习如何处理SQL中的并发性和python中的多线程之前,这是一个代理解决方案(由于Ansible通过ntc命令对show命令和大量模板提供了良好的支持,因此它看起来更容易实现,也更具前景……非常感谢这一点。快速问题:这是如何处理对文件的并发访问的?我使用了-f 5,它很好地工作了……我将很快在10或20等更大的设备上测试它,看看它是否有效。)breaks@MiniMe我想您可以将“lineinfle:”模块包装在“serial:1”部分()。实际上,这取决于您如何构造您的剧本,我认为…我的剧本在收集信息后有一个任务要附加到文件中,这样就可以处理整个事情,因为附加是由任务序列化的