我正在尝试使用Ansible编写一些自动化,并且我遇到了一种情况,我需要在以后的任务中使用命令输出的多个部分。
我有一个任务要运行命令" lspci | grep以太网| grep千兆"
输出应该看起来像这样(应该是2行输出):
{{1}}
在这个输出中,我需要提取4个信息作为变量。
var1 - 我想要第一行的总线。应该是" 02"
var2 - 我想要第一行的功能。应该是" 0"
var3 - 我想要第二行的总线。应该是" 02"
var4 - 我想要第二行的功能。应该是" 1"
如何将输出中的信息提取到这4个变量中?不一定必须是一个获得所有4个变量的单一游戏。
感谢您的帮助。
答案 0 :(得分:2)
根据建议,您应该register
命令的输出。之后,您可以遍历结果并获取您感兴趣的部分。
工作示例:
- name: Fun with lspci output
hosts: localhost
connection: local
tasks:
- name: get Gigabit Ethernet adapters
shell: lspci | grep Ethernet | grep Gigabit | awk '{print $1}'
register: eth_adapters
- name: use extracted info
debug: msg="Adapter found, bus {{item.split(':')[0]}}, function {{item.split('.')[-1]}}"
with_items: "{{eth_adapters.stdout_lines}}"
请注意使用eth_adapters.stdout_lines
将命令输出作为项目列表获取,并awk '{print $1}'
仅获取设备的总线信息。
此示例生成以下输出:
PLAY [Fun with lspci output] ***************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [get Gigabit Ethernet adapters] *******************************************
changed: [localhost]
TASK [use extracted info] ******************************************************
ok: [localhost] => (item=00:00.0) => {
"item": "00:00.0",
"msg": "Adapter found, bus 00, function 0"
}
ok: [localhost] => (item=00:01.0) => {
"item": "00:01.0",
"msg": "Adapter found, bus 00, function 0"
}
ok: [localhost] => (item=00:01.1) => {
"item": "00:01.1",
"msg": "Adapter found, bus 00, function 1"
}
ok: [localhost] => (item=00:01.3) => {
"item": "00:01.3",
"msg": "Adapter found, bus 00, function 3"
}
PLAY RECAP *********************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0