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

时间:2016-05-04 20:47:17

标签: ubuntu ansible

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

我有一个任务要运行命令" lspci | grep以太网| grep千兆"

输出应该看起来像这样(应该是2行输出):

{{1}}

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

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

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

var3 - 我想要第二行的总线。应该是" 02"

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

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

感谢您的帮助。

1 个答案:

答案 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