Ansible 列出多个属性

Ansible 列出多个属性,ansible,Ansible,我试图从yumoutput打印多个属性,但这只是打印最后一个属性(repo)。如何使用map从yumoutput打印多个属性 - name: yum updates yum: list: updates register: yumoutput - debug: msg: "{{yumoutput.results |map(attribute='name') | map(attribute='repo') |list }}" yumoutput包含以下属性: {

我试图从
yumoutput
打印多个属性,但这只是打印最后一个属性(
repo
)。如何使用
map
yumoutput
打印多个属性

- name: yum updates
  yum:
    list: updates
  register: yumoutput
- debug: 
    msg: "{{yumoutput.results |map(attribute='name') | map(attribute='repo') |list }}"
yumoutput包含以下属性:

{
    "arch": "x86_64",
    "name": "libgcc",
    "release": "3.el6",
    "repo": "epel",
    "version": "4.4.7",
    "yumstate": "available"
}
如何使用
map
从yumoutput打印出多个属性

在这种情况下,不能使用
map

过滤器是按顺序工作的,因此在
map(attribute='name')
之后,您就有了一个列表(形式上是一个map generator对象),其中只包含
name
键的值,关于
repo
的信息对后续过滤器不可用


相反,您可以通过JMESPath查询获得所需的结果:

- debug:
    msg: "{{ yumoutput | json_query(my_query) }}"
  vars:
    my_query: "results[].{name: name, repo: repo}"
或者,如果您只需要值的嵌套列表:

    my_query: "results[].[name, repo]"

“这只是打印最后一个属性(
repo
)”ー 您发布的内容会导致错误,而不是打印“最后一个属性”。这会以json格式正确显示属性{“name”:“libgcc”,“repo”:“epel”}。如果我想将输出格式更改为:“name:libgcc repo:epel”,那么如何更改输出格式。这将创建一个带有过滤值的Python dictionary对象<代码>调试模块将对象打印为JSON(或者您的回调插件那样)。对于格式化输出,您有Jinja2模板。