ansible - Ansible 使用循环将结果命令写入本地文件
问题描述
我编写了 ansible-playbook 来收集来自许多网络设备的结果。下面的剧本工作正常。但是如果我必须用很多命令来收集结果。假设有 20 个命令,我必须创建许多任务来将结果写入我的剧本中的文件。
现在,我手动创建要写入日志文件的任务。下面是 3 个命令的示例。
- name: run multiple commands and evaluate the output
hosts: <<network-host>>
gather_facts: no
connection: local
vars:
datetime: "{{ lookup('pipe', 'date +%Y%m%d%H') }}"
backup_dir: "/backup/"
cli:
host: "{{ ansible_host }}"
username: <<username>>
password: <<password>>
tasks:
- sros_command:
commands:
- show version
- show system information
- show port
provider: "{{ cli }}"
register: result
- name: Writing output
local_action:
module: lineinfile
dest: "{{ backup_dir }}/{{ inventory_hostname }}-{{ datetime }}.txt"
line: "{{ inventory_hostname }}:# show version\n{{ result.stdout[0] }}"
create: yes
changed_when: False
- name: Writing output
local_action:
module: lineinfile
dest: "{{ backup_dir }}/{{ inventory_hostname }}-{{ datetime }}.txt"
line: "{{ inventory_hostname }}:# show system information\n{{ result.stdout[1] }}"
create: yes
changed_when: False
- name: Writing output
local_action:
module: lineinfile
dest: "{{ backup_dir }}/{{ inventory_hostname }}-{{ datetime }}.txt"
line: "{{ inventory_hostname }}:# show port\n{{ cmd_result.stdout[2] }}"
create: yes
changed_when: False
是否可以在一项任务中循环命令和结果?
请多多指教。
谢谢
解决方案
在以上三个任务中单独尝试这一项任务..
- name: Writing output
local_action:
module: lineinfile
dest: "{{ backup_dir }}/{{ inventory_hostname }}-{{ datetime }}.txt"
line: "{{ inventory_hostname }}:# show {{ item.command }}\n{{ cmd_result.stdout{{ item.outnum }} }}"
create: yes
changed_when: False
with_items:
- { command: version, outnum: [0] }
- { command: system information, outnum: [1] }
- { command: port, outnum: [2] }
推荐阅读
- elasticsearch - Elastichsearch 匹配查询在我的产品服务器上不起作用
- excel - 如何在 LibreOffice Calc 中使用下拉菜单或选择框显示和隐藏图表?
- sql - 使用实体框架订购混合字符串/数字列
- asp.net - ASP.NET Core 上的身份验证在 IIS 中不起作用
- java - 仅对按钮的颜色进行动画处理
- python - 使用最新版本创建新站点或使用旧站点
- java - 如何回滚 android sqlite 数据库中已删除的行?
- c++ - 如何修复“g++:致命错误:没有输入文件编译终止。” 错误
- macos - MacOs 的 Docker-desktop 无法在 Preferences/File-Sharing 中添加 /usr/local 文件夹
- c# - 在长时间运行的工作中防止更改