ansible进程yaml块(数组)行值

ansible进程yaml块(数组)行值,ansible,yaml,Ansible,Yaml,我有一个shell命令,其中的标准行是YAML数组,如下所示: success: 1 message: system: version: X.Y tier: STABLE data: destinations: 0: _id: 5f7de84eab8cee6deb0795a2 type: SSH name: backup1 engine_name: rating: rating: 6.32408421

我有一个shell命令,其中的标准行是YAML数组,如下所示:

success: 1
message:
system:
  version: X.Y
  tier: STABLE
data:
  destinations:
    0:
      _id: 5f7de84eab8cee6deb0795a2
      type: SSH
      name: backup1
      engine_name:
      rating:
        rating: 6.324084213116
        issues:
      jobs_count: 0
      owner: root
      ...
    1:
      _id: 5f7de850e4ef1d17520fee82
      type: SSH
      name: backup2
      engine_name:
      rating:
        rating: 6.3627132233357
        issues:
      jobs_count: 0
      owner: root
      ...
  total: 2
- name: list backup destinations
  command: 'mycommand'
  register: result

- name: process the result but I don't know how to do that
  set_fact:
    destinationX_name: ...
    destinationX_id: ...
(清除了许多不需要的行,但结构是相同的)我想处理
数据:目的地:数组编号:
\u id:
名称:
值中的数组,并将其存储在值中(使用set fact最好),但我根本不知道如何开始。剧本应该如下所示:

success: 1
message:
system:
  version: X.Y
  tier: STABLE
data:
  destinations:
    0:
      _id: 5f7de84eab8cee6deb0795a2
      type: SSH
      name: backup1
      engine_name:
      rating:
        rating: 6.324084213116
        issues:
      jobs_count: 0
      owner: root
      ...
    1:
      _id: 5f7de850e4ef1d17520fee82
      type: SSH
      name: backup2
      engine_name:
      rating:
        rating: 6.3627132233357
        issues:
      jobs_count: 0
      owner: root
      ...
  total: 2
- name: list backup destinations
  command: 'mycommand'
  register: result

- name: process the result but I don't know how to do that
  set_fact:
    destinationX_name: ...
    destinationX_id: ...
从上面的输出结果应该是这样的:

destination0_name: backup1
destination0_id: 5f7de84eab8cee6deb0795a2
destination1_name: backup2
destination1_id: 5f7de850e4ef1d17520fee82
等等。

下面的任务

-设置事实:
my_vars:“{{my_vars}默认值({})|
组合({my_key:my_val}}}”
使用嵌套的\u:
-“{data.destinations.keys()| list}”
-[[u id,name]
变量:
我的_键:“{{'destination'~item.0~'{'item.1}”
my_val:“{data.destinations[item.0][item.1]}”
-调试:
瓦尔:我的
给予

my_vars:
目的地0\uu id:5f7de84eab8cee6deb0795a2
目标0\u名称:备份1
目标id:5f7de850e4ef1d17520fee82
目标1_名称:备份2

好的,我想我已经明白了。正确而简单的方法是:

- name: list backup destinations
  command: 'mycommand'
  register: result

- name: process the result
  set_fact:
    destination0_name: "{{ (result.stdout | from_yaml).data.destinations.0.name }}"
    destination1_name: "{{ (result.stdout | from_yaml).data.destinations.1.name }}"
    destination0_id: "{{ (result.stdout | from_yaml).data.destinations.0._id }}"
    destination1_id: "{{ (result.stdout | from_yaml).data.destinations.1._id }}"

...

然后我可以处理事实中的变量。

在尝试了一些场景之后,它也不适用于我。最初的
命令:mycommand
register:my_vars
任务运行,但在此之后,我应用了您的答案,错误消息是:
失败!=>{“msg”:“该任务包含一个带有未定义变量的选项。错误是:'my_key'未定义
我应该在命令任务中定义它还是我正在做什么?”?