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

时间:2018-08-10 18:28:05

标签: ansible

请原谅我的无知,我仍在学习Ansible>这是我正在尝试做的事情:

-连接到设备✔
-抓取数据✔(JSON格式)
-de serialize(获取返回的每个json项的行✔
-写入文件✔

对于上述所有情况,我都使用了副本和Jinja模板

现在,当我在多种设备上运行该复制模块时,复制模块将覆盖上一次运行的结果。什么模块可以让我添加行并使用下面的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)。结果是这样的
device1,eth0,1.1.1.2
device1,eth1,1.1.1.3

1 个答案:

答案 0 :(得分:1)

这不是Ansible真正设计的任务。

如果模板建议内容为多行,则您可以滥用lineinfile模块(多行内容永远不会与文件中的行匹配,因此它将内容不断添加到文件的末尾)文件):

- lineinfile:
    line: |-
      {% for item in results.response %}
      {% for value in item.values() %}{{ value }}{% if not loop.last %},{% endif %}{% endfor %}               
      {{'\n'}}
      {% if not loop.last %},{% endif %}
      {% endfor %}
    state: present
    dest: file.txt

或者您可以致电shell: echo {{ template }} >> file