首页 > 解决方案 > 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

是否可以在一项任务中循环命令和结果?

请多多指教。

谢谢

标签: ansible

解决方案


在以上三个任务中单独尝试这一项任务..

- 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] }

推荐阅读