Ansible写结果命令到本地文件与循环

时间:2019-10-28 05:32:10

标签: 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

是否可以在一个任务中循环执行命令并执行结果?

请提出建议。

谢谢

2 个答案:

答案 0 :(得分:0)

在三个任务之上单独尝试一个任务。

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

答案 1 :(得分:0)

下面的剧本对我有用

- name: Writing output
  local_action:
    module: lineinfile
    dest: "{{ backup_dir }}/{{ inventory_hostname }}-{{ datetime }}.txt"
    line: "{{ inventory_hostname }}:# show {{ item.command }}\n{{ item.cmdoutput}}"
    create: yes
  changed_when: False
  with_items:
    - { command: "version", cmdoutput: "{{ cmd_result.stdout[0] }}" }
    - { command: "system information", cmdoutput: "{{ cmd_result.stdout[1] }}" }
    - { command: "port", cmdoutput: "{{ cmd_result.stdout[2] }}" }