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模板。