删除 'stdout_lines' 中的第一行

Remove first line in 'stdout_lines'

我只是一个初学者,写了一些小剧本。

现在我得到了一些小错误。

- name: Facts
  ios_command:
    commands: show interface status
  register: ios_comm_result

在这个剧本中,对于初学者我得到了接口列表,然后在下一个任务中我得到了第一个位置的列表,包括列名。

- name: get a list of ports to modify
  set_fact:
    newlist: "{{ (newlist | default([])) + [item.split()[0]] }}"
  with_items: "{{ ios_comm_result.stdout_lines }}"

输出:

'Port'
'fa0/1'
'gi0/2'
....
 etc

如何删除第一行?或者我在哪里可以读到这方面的信息?

根据您的要求和关于 Accessing list elements with Slice notation ([1:]) and Jinja Filters (| reject()) 的评论,我设置了一个简短的测试

---
- hosts: localhost
  become: false
  gather_facts: false

  vars:

    STDOUT_LINES: ['Port', 'fa0/1', 'gi0/2', 'etc/3']

  tasks:

  # Slice notation

  - name: Show 'stdout_lines' from the 2nd line to the end
    debug:
      msg: "{{ item }}"
    loop: "{{ STDOUT_LINES[1:] }}"

  # Jinja2 filter

  - name: Show 'stdout_lines' and drop any lines which match
    debug:
      msg: "{{ item }}"
    loop: "{{ STDOUT_LINES | reject('match', '^Port') | list }}"

  # Conditionals

  - name: Show 'stdout_lines' but not the first one
    debug:
      msg: "{{ item }}"
    when: ansible_loop.index != 1
    loop: "{{ STDOUT_LINES }}"
    loop_control:
      extended: true
      label: "{{ ansible_loop.index0 }}"

增加了一些价值 Extended loop variables and using conditionals in loops

所有三个选项均显示预期结果。