在ansible中将调试变量输出拆分为两个单独的变量

在ansible中将调试变量输出拆分为两个单独的变量,ansible,jinja2,ansible-template,Ansible,Jinja2,Ansible Template,我正在使用下面的代码段打印图像详细信息: -设置事实: 图像名称:{{load.results}映射(attribute='stdout_line')|列表} -调试: var:image\u名称 输出: TASK [set_fact] **********************************************************************************************************************************

我正在使用下面的代码段打印图像详细信息:

-设置事实:
图像名称:{{load.results}映射(attribute='stdout_line')|列表}
-调试:
var:image\u名称
输出:

TASK [set_fact] ***************************************************************************************************************************************************************************
ok: [xx.xx.xx.xx]

TASK [debug] ******************************************************************************************************************************************************************************
ok: [xx.xx.xx.xx] => {
  "image_name": [
    [
        "Loaded image(s): localhost/cim:v1.5"
    ],
    [
        "Loaded image(s): localhost/cim:v1.8"
    ]
  ]
}
是否有一种方法可以将图像名称和标记存储在
set\u fact
本身下的两个单独变量中,或以任何其他形式存储,以便我可以在下一个任务中重用这两个变量?

您可以使用过滤器来实现这一点

这里使用的正则表达式是
(\S*):(\S+)
。如果需要,可以找到更多的解释

根据剧本:

-主机:所有
收集事实:不
变量:
负载:
结果:
-标准输出线:
-“加载的映像:localhost/cim:v1.5”
-标准输出线:
-“加载的映像:localhost/cim:v1.8”
任务:
-设定事实:
图像:{{images}默认([])+项{regex_findall('(\\S*):(\\S+))}
循环:{load.results | map(attribute='stdout_lines')| flatte}
-调试:
msg:“此图像存储库是`{item.0}}`,其标记是`{item.1}}`”
循环:“{{images}}”
这就产生了重述:

PLAY [all] *********************************************************************************************************

TASK [set_fact] ****************************************************************************************************
ok: [localhost] => (item=Loaded image(s): localhost/cim:v1.5)
ok: [localhost] => (item=Loaded image(s): localhost/cim:v1.8)

TASK [debug] *******************************************************************************************************
ok: [localhost] => (item=['localhost/cim', 'v1.5']) => {
    "msg": "This image repository is `localhost/cim` and its tag is `v1.5`"
}
ok: [localhost] => (item=['localhost/cim', 'v1.8']) => {
    "msg": "This image repository is `localhost/cim` and its tag is `v1.8`"
}

PLAY RECAP *********************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

感谢您的快速支持..现在我可以获取相应的映像id任务[debug]************************确定:[xx.xx.xx.xx]=>{“msg”:{“changed”:true,“msg”:“所有项目已完成”,“结果”:[{“stdout”:“v1.5 124715a6d46f”,“stdout\u行”:[“v1.5 124715a6d46f”]},如何只获取与标记对应的图像id?我正在尝试此操作,但出现错误:-set_-fact:image_-id:“{results.stdout}regex_-findall(“(^v[0-9].([0-9a-z]*)}}”任务[set_-fact]******************致命:[10.10.6.83]:失败!=>{“msg”:“在({results.stdout|regex_findall('(^v[0-9].*)([0-9a-z]*)}})上发生意外的模板类型错误:预期的字符串或缓冲区“}”,很可能是因为您的
结果
来自循环,因此您将有一个
stdout
的列表,而不是一个简单的字符串。好的,现在我正在执行此操作:-set\u事实:image\u id:”{{image{u id}默认([])+item{S*[a-z0-9][[:space:]](\\S*))}“循环:{{imagestatus.results}map(attribute='stdout_line')| flatte}”-debug:msg:“图像标记是
{item.0}
“循环:{image{id}}”,但没有获取图像的标识和调试o/p任务[set]***[localhost]=>(item=v1.5 124715a6d46f)=>{“ansible_事实”:{“image_id”:[]},“ansible_循环变量”:“item”,“changed”:false,“item”:“v1.5 124715a6d46f”}