删除 '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。
所有三个选项均显示预期结果。
我只是一个初学者,写了一些小剧本。
现在我得到了一些小错误。
- 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。
所有三个选项均显示预期结果。