Ansible - 如何捕获命令输出并保存为多个变量

JaR*_*Reg 3 ubuntu ansible

我正在尝试使用 Ansible 编写一些自动化,但我遇到了一种情况,我需要在剧本后面的任务中使用命令输出的多个部分。

我有一个任务要运行命令“lspci | grep Ethernet | grep Gigabit”

输出应该是这样的(应该是 2 行输出):

"02:00.0 Ethernet controller: Intel Corporation 82575EB Gigabit Network Connection (rev 02)"
"02:00.1 Ethernet controller: Intel Corporation 82575EB Gigabit Network Connection (rev 02)
Run Code Online (Sandbox Code Playgroud)

从这个输出中,我需要提取 4 条信息作为变量。

var1 - 我想要第一行的总线。应该是“02”

var2 - 我想要第一行的功能。应该是“0”

var3 - 我想要第二条线路的总线。应该是“02”

var4 - 我想要第二行的功能。应该是“1”

我如何将输出中的信息提取到这 4 个变量中?不一定非得是获得所有 4 个变量的单一游戏。

谢谢您的帮助。

mba*_*emy 7

按照建议,您应该查看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}}"
Run Code Online (Sandbox Code Playgroud)

请注意使用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 
Run Code Online (Sandbox Code Playgroud)